--- title: "How do I load FX spot rates into the Quote Store?" slug: "how-do-i-load-fx-spot-rates-into-the-quote-store" updated: 2026-05-07T11:33:16Z published: 2026-05-07T11:33:16Z canonical: "support.lusid.com/how-do-i-load-fx-spot-rates-into-the-quote-store" --- > ## 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 load FX spot rates into the Quote Store? You can load a quote representing a FX spot rate between two currencies on a given day, for example 1.3592 for GBPUSD on 6 May 2026. Note the following: - FX spot rates are required items of market data when valuing certain instruments, and may be required for any instrument held in a portfolio with a different base currency. - Choices you make when uploading market data impact the composition of the [recipe](/v1/docs/what-is-a-recipe) you must create in order to use that data. **See also**: [Market prices](/v1/docs/how-do-i-upload-a-market-price-or-fx-spot-rate-to-the-quote-store) | [Inflation fixings](/v1/docs/how-do-i-upload-an-inflation-fixing-to-the-lusid-quote-store) | [Interest rate fixings](/v1/docs/how-do-i-load-an-interest-rate-fixing-into-the-lusid-quote-store) ## Methods LUSID web appLUSID APILuminesce Call the [UpsertQuotes](https://www.lusid.com/docs/api#operation/UpsertQuotes) API to load up to 2000 quotes in a single request. You must: - Encapsulate all the quotes in a single `scope` (namespace) in the URL. - For each quote, specify an ephemeral ID (to track errors in the response). ```json curl -X POST "https://.lusid.com/api/api/quotes/MyAPPLPrices"  -H "Authorization: Bearer "  -H "Content-Type: application/json-patch+json"  -d '{  "Quote-0001": {    "quoteId": {      "quoteSeriesId": {        "provider": "LSEG",        "instrumentIdType": "CurrencyPair",        "instrumentId": "GBP/USD",        "quoteType": "Rate",        "field": "MID_PRICE"      },      "effectiveAt": "2026-05-06T00:00:00Z"    },    "metricValue": {      "value": 1.3592, "unit": "GBP/USD"    }  },  "Quote-0002": {    "quoteId": {      "quoteSeriesId": {        "provider": "LSEG",        "instrumentIdType": "CurrencyPair",        "instrumentId": "GBP/USD",        "quoteType": "Rate",        "field": "MID_PRICE"      },      "effectiveAt": "2026-05-05T00:00:00Z"    },    "metricValue": {      "value": 1.3568, "unit": "GBP/USD"    }  } }' ``` Navigate to **Data Management > Quotes** and click the **Create quote** button: ![](https://cdn.document360.io/d575ad81-c0ed-4980-bbd1-d59ac5c3de82/Images/Documentation/image-E82JYJRK.png?sv=2026-02-06&spr=https&st=2026-11-09T06%3A00%3A26Z&se=2026-11-09T07%3A00%3A26Z&sr=c&sp=r&sig=k%2BKvJ2rCp4XT94BEuUSCxxulrTWKWhT5N732bZDLRS0%3D) Write a Luminesce SQL query using the [Lusid.Instrument.Quote.Writer](/v1/docs/lusidinstrumentquotewriter) provider and execute it using a tool such as the LUSID web app: ![](https://cdn.document360.io/d575ad81-c0ed-4980-bbd1-d59ac5c3de82/Images/Documentation/image-PBTBB9JQ.png?sv=2026-02-06&spr=https&st=2026-11-09T06%3A00%3A26Z&se=2026-11-09T07%3A00%3A26Z&sr=c&sp=r&sig=k%2BKvJ2rCp4XT94BEuUSCxxulrTWKWhT5N732bZDLRS0%3D) ## Data fields This section supplements the [API documentation](https://www.lusid.com/docs/api/lusid/endpoints/quotes/UpsertQuotes/) and on-screen help text in the LUSID web app. | Mandatory field or parameter | Allowed values | Must be matched in recipe? | | --- | --- | --- | | `scope` | Any, for example `MyGBPUSDRates` | ✅ [dataScope field](/v1/docs/recipes-locating-market-data#summary-of-fields-in-a-market-data-rule) | | `provider` | [Any valid](/v1/docs/understanding-valid-market-data-provider-and-field-combinations) | ✅ [supplier field](/v1/docs/recipes-locating-market-data#summary-of-fields-in-a-market-data-rule) | | `field` | [Any valid for provider](/v1/docs/understanding-valid-market-data-provider-and-field-combinations) | ✅ [field field](/v1/docs/recipes-locating-market-data#summary-of-fields-in-a-market-data-rule) | | `instrumentIdType` | `CurrencyPair` | ✅ [key field](/v1/docs/recipes-locating-market-data#more-information-on-the-key-field), for example `Fx.GBP.USD` or `Fx.*.*` | | `instrumentId` | Must match the syntax `<DomCcy>/<FgnCcy>`, for example `GBP/USD` (note forward slash) | | `quoteType` | `Rate` | ✅ [quoteType field](/v1/docs/recipes-locating-market-data#summary-of-fields-in-a-market-data-rule) | | `effectiveAt` | A UTC datetime, or date and [cut label](/v1/docs/what-is-a-cut-label) | ❌ [but must be within quoteInterval](/v1/docs/recipes-locating-market-data#more-information-on-the-quoteinterval-field) | | `metricValue.value` | The quoted rate, for example `1.36206` | ❌ | | `metricValue.unit` | Same as `instrumentId`, for example `GBP/USD` | ❌ | The following fields are optional: - A `priceSource` indicating a sub-supplier to the `provider`, for example Tradeweb or RRPS for Refinitiv DataScope. [**Match this using the priceSource field in a recipe**](/v1/docs/recipes-locating-market-data#summary-of-fields-in-a-market-data-rule). Note that if omitted, your recipe must also omit its `priceSource` field. - A `lineage` providing additional information. - We recommend *not* setting a `scaleFactor` for a FX spot rate. ## Subsequent updates You can change the `metricValue` of an existing quote. Any other update constitutes a new quote in the time series.