Related resources:




Providing you have suitable access control permissions, you can upload a ‘quote’ representing a single value at a single point in time to the LUSID Quote Store, for example an Apple stock price or a USD/GBP spot rate.

Note: Choices you make when uploading market data impact the composition of the recipe you must create in order to use this data in a valuation.

Using the LUSID API

You can load up to 2000 quotes in a single request:

  1. Obtain an API access token.
  2. Call the UpsertQuotes API, encapsulating all the quotes in the request in a single scope (namespace). See how to match this in a recipe.
  3. For each quote in the request, specify:
    • An ephemeral ID (to track errors in the response).
    • A provider representing a financial data vendor. Valid providers are currently Bloomberg, DataScope (for Refinitiv), SIX, FactSet, TraderMade, Edi, RimesLusid and Client; if your data vendor isn't listed, represent it using Client. See how to match this in a recipe.
    • Optionally, a priceSource indicating a sub-supplier to the financial data vendor (above), for example Tradeweb or RRPS for Refinitiv DataScope. If specified, see how to match this in a recipe.
    • An instrumentIdType and instrumentId that together constitute an instrument identifier linking the quote to an instrument mastered in LUSID. See how to match this in a recipe.
      Market data categoryinstrumentIdType fieldinstrumentId field syntax and example value
      Market priceYour choice of LusidInstrumentId, Figi, RIC, QuotePermId, Isin, Sedol, Cusip, ClientInternalThere is no syntax; the value must be appropriate for the identifier type, for example LUID_00003D58 for LusidInstrumentId.
      FX spot rateCurrencyPairSyntax: <DomCcy>/<FgnCcy>

      Example: USD/GBP
    • A quoteType, for example Price or Rate. See how to match this in a recipe.
    • A field appropriate for the provider. See how to match this in a recipe.
      provider fieldfield values
      LusidAny string
      Bloombergbid, mid, ask, open, close, last
      SIXbid, mid, ask, open, close, lastreferencePrice, highPrice, lowPrice, maxRedemptionPrice, maxSubscriptionPrice, openPrice, bestBidPrice, lastBidPrice, bestAskPrice, lastAskPrice
      DataScopebid, mid, ask
      ClientAny string
      Edibid, mid, ask, open, close, last
      TraderMadebid, mid, ask, open, close, high, low
      FactSetbid, mid, ask, open, close
      Rimesbid, mid, ask, open, close, last
    • An effectiveAt date from which the quote is valid. This could be a full date and time (in UTC), or a date and cut label.
    • A metricValue constituting the actual price or rate, with a value and a unit that is either a currency (price) or a currency pair (rate).

Consider the following example of a market price and a FX spot rate uploaded together to a Growth quote scope (highlighted in red in the URL):

curl -X POST "https://<your-domain>"
  -H "Authorization: Bearer <your-API-access-token>"
  -H "Content-Type: application/json-patch+json"
  -d '{
    "Quote-0001": {
      "quoteId": {
        "quoteSeriesId": {
          "provider": "Lusid",
          "instrumentIdType": "LusidInstrumentId",
          "instrumentId": "LUID_00003D58",
          "quoteType": "Price",
          "field": "mid"
        "effectiveAt": "2023-02-07T00:00:00Z"
      "metricValue": {
        "value": 100, "unit": "USD"
    "Quote-0002": {
      "quoteId": {
        "quoteSeriesId": {
          "provider": "Lusid",
          "instrumentIdType": "CurrencyPair",
          "instrumentId": "USD/GBP",
          "quoteType": "Rate",
          "field": "mid"
        "effectiveAt": "2023-02-07T00:00:00Z"
      "metricValue": {
        "value": 0.8, "unit": "USD/GBP"

Using the LUSID web app

Coming soon.