How do I load FX spot rates into the Quote Store?

Prev Next

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 you must create in order to use that data.

See also: Market prices | Inflation fixings | Interest rate fixings

Methods

Call the 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).

curl -X POST "https://<your-domain>.lusid.com/api/api/quotes/MyAPPLPrices"
  -H "Authorization: Bearer <your-API-access-token>"
  -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:

Write a Luminesce SQL query using the Lusid.Instrument.Quote.Writer provider and execute it using a tool such as the LUSID web app:

Data fields

This section supplements the API documentation 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

provider

Any valid

✅ supplier field

field

Any valid for provider

✅ field field

instrumentIdType

CurrencyPair

✅ 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

effectiveAt

A UTC datetime, or date and cut label

❌ but must be within quoteInterval

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. 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.