--- title: "How do I create or generate a recipe?" slug: "how-do-i-create-or-generate-a-recipe" description: "Create a recipe in LUSID" tags: ["recipe", "create a recipe", "valuation recipe"] updated: 2026-10-26T09:53:43Z published: 2026-10-26T09:53:43Z canonical: "support.lusid.com/how-do-i-create-or-generate-a-recipe" --- > ## Documentation Index > Fetch the complete documentation index at: https://support.lusid.com/llms.txt > Use this file to discover all available pages before exploring further. # How do I create or generate a recipe? **Required reading**: [What is a recipe?](/v1/docs/what-is-a-recipe) ## Creating or editing a recipe by hand **LUSID web app** 1. Navigate to **Data Management > Recipes**. 2. Select **Create** to create a new recipe, or **Edit** on the row of an existing recipe. Note you can't edit your default recipe; first choose a different default under **System Settings > Default Settings > Recipes**. ![](https://cdn.document360.io/d575ad81-c0ed-4980-bbd1-d59ac5c3de82/Images/Documentation/image-A9N6UAZZ.png?sv=2026-02-06&spr=https&st=2026-11-09T05%3A50%3A05Z&se=2026-11-09T06%3A50%3A05Z&sr=c&sp=r&sig=89f%2BvjvpmZ8iBUBDep49eQcuoD6zZQxxuio0YV7sGaw%3D) A recipe is a complex JSON document with scores of settings, most of which default to sensible values: | Tab | Explanation | | --- | --- | | **Basic data** | **Scope** and **Code** are mandatory. The code must be unique within the scope. | | **Market rules** | You must specify at least one market data rule. [See how to do this](/v1/docs/recipes-locating-market-data). | | **Pricing rules** | We strongly recommend changing the default pricing models for most instrument types. [See how to do this](/v1/docs/recipes-changing-the-default-pricing-models-for-instrument-types). | | **Market options** | Start with [Changing recipe settings](/v1/docs/recipes-changing-default-recipe-options). | | **Pricing options** | | **Holding options** | | **Advanced options** | | **JSON** | Some recipe settings are not available on the tabs above. To specify settings marked *JSON only* in the first column of [these tables](/v1/docs/recipes-changing-default-recipe-options), open the **JSON** tab, select **Edit as JSON**, add the field name to the correct section, and save. Settings you specify in this way are retained when you later save changes from other tabs. | **LUSID API** Call the [UpsertConfigurationRecipe](https://www.lusid.com/docs/api#operation/UpsertConfigurationRecipe) API, specifying at a minimum: - A `scope` and `code` that together uniquely identify the recipe. - At least one [market data rule](/v1/docs/recipes-locating-market-data) in the `marketRules` array of the `market` section that enables LUSID to retrieve market data suitable to value the instruments held. We also strongly recommend [changing the default pricing models](/v1/docs/recipes-changing-the-default-pricing-models-for-instrument-types) for most instrument types. For more information on all the other settings in a recipe, start with [Changing recipe settings](/v1/docs/recipes-changing-default-recipe-options). ```json curl -X POST "https://.lusid.com/api/api/recipes"  -H "Content-Type: application/json-patch+json"  -H "Authorization: Bearer "  -d '{  "configurationRecipe": {    "scope": "MyRecipes",    "code": "ValuationRecipe",    "description": "Simple recipe to value equities using price * units"    "market": {      "marketRules": [        {          "key": "Quote.Figi.*",          "supplier": "Edi",          "dataScope": "MyQuoteScope",          "quoteType": "Price",          "field": "mid",          "quoteInterval": "2D.0D"        }      ]    }  } }' ``` **Luminesce** *Coming soon* ## Asking LUSID to generate a recipe for you You can specify a portfolio to value and characteristics of appropriate market prices in the LUSID Quote Store and ask LUSID to generate a recipe that calculates the value of each position by multiplying the price of the underlying instrument by the number of units held. > **Note**: Alternatively, you can supply a simple recipe and ask LUSID to create a more sophisticated recipe for you. To do this, call the [GenerateConfigurationRecipe](https://www.lusid.com/docs/api#operation/GenerateConfigurationRecipe) API, specifying: - The `scope` and `code` of a transaction portfolio to value. - One or more quote `scopes` encapsulating prices for the underlying instruments loaded into the LUSID Quote Store. For example, to value a portfolio with a `scope` of `Growth` and `code` of `UKEquities` using prices encapsulated in a quote `scope` of `MyQuoteScope`: ```json curl -X POST "https://.lusid.com/api/api/aggregation/Growth/UKEquities/$generateconfigurationrecipe"   -H "Content-Type: application/json-patch+json"   -H "Authorization: Bearer "  -d '{  "recipeCreationMarketDataScopes": [    "MyQuoteScope"  ],  "effectiveAt": "2022-11-01" }' ``` LUSID might generate a recipe like the one below (note most recipe settings default to sensible values): ```json {  "scope": "Growth",  "code": "LUSID_generated_recipe",  "description": "- recipe has been supplemented with additional market data rules",  "market": {    "marketRules": [      {        "key": "Quote.Figi.*",        "supplier": "Lusid",        "dataScope": "MyQuoteScope",        "quoteType": "Price",        "field": "mid",        "priceSource": "",        "sourceSystem": "Lusid"      },      {        "key": "Fx.*.*",        "supplier": "Lusid",        "dataScope": "default",        "quoteType": "Price",        "field": "mid",        "priceSource": "",        "sourceSystem": "Lusid"      }    ],    "suppliers": {},    "options": {      "defaultSupplier": "Lusid",      "defaultInstrumentCodeType": "LusidInstrumentId",      "defaultScope": "ScenarioTutorial",      "attemptToInferMissingFx": true,      "attemptToInferMissingFxOnFixings": false,      "calendarScope": "CoppClarkHolidayCalendars",      "conventionScope": "Conventions",      "pricingBasis": "Mid"    },    "specificRules": [],    "groupedMarketRules": []  },  "pricing": {    "modelRules": [],    "modelChoice": {},    "options": {      "modelSelection": {        "library": "Lusid",        "model": "SimpleStatic"      },      "useInstrumentTypeToDeterminePricer": false,      "allowAnyInstrumentsWithSecUidToPriceOffLookup": false,      "allowPartiallySuccessfulEvaluation": true,      "riskEngine": "Bump",      "findOrCalculate": "Off",      "produceSeparateResultForLinearOtcLegs": false,      "fxForwardContractsAsUnitsInBothLegs": false,      "enableUseOfCachedUnitResults": false,      "windowValuationOnInstrumentStartEnd": false,      "removeContingentCashflowsInPaymentDiary": false,      "useChildSubHoldingKeysForPortfolioExpansion": false,      "validateDomesticAndQuoteCurrenciesAreConsistent": false,      "mbsValuationUsingHoldingCurrentFace": false,      "fixedIncomeValuationsUsingCurrentFace": false,      "convertSrsCashFlowsToPortfolioCurrency": false,      "conservedQuantityForLookthroughExpansion": "PV",      "returnZeroPv": {        "instrumentMatured": false      },      "enableLegLevelInferenceForCustomSrsColumns": false,      "useInstrumentScaleFactorAsDefault": false,      "scaleInstrumentAccruedOverrideByContractSize": false,      "defaultPoolFactorsToUnity": false,      "findOrCalculateWriteThrough": false,      "allowFallbackOnModelDecline": false,      "suppressAutomaticLoanPrincipalRepayment": false    },    "resultDataRules": [],    "holdingPricingInfo": {      "fallbackField": "None",      "overrideField": "None",      "specificFallbacks": [],      "specificOverrides": []    }  },  "aggregation": {    "options": {      "useAnsiLikeSyntax": false,      "allowPartialEntitlementSuccess": false,      "applyIso4217Rounding": false    }  },  "holding": {    "taxLotLevelHoldings": true  } } ```