---
title: "How do I load market prices into the Quote Store?"
slug: "how-do-i-upload-a-market-price-or-fx-spot-rate-to-the-quote-store"
updated: 2026-05-07T11:06:43Z
published: 2026-05-07T11:06:43Z
canonical: "support.lusid.com/how-do-i-upload-a-market-price-or-fx-spot-rate-to-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 market prices into the Quote Store?

You can load a quote representing a stock market price for a particular instrument on a given day, for example $287.46 for APPL on 6 May 2026.

Note the following:

- Market prices are required items of market data when [valuing](/v1/docs/valuations) most supported instruments.
- 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**: [FX spot rates](/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://<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": "Bloomberg",
        "instrumentIdType": "LusidInstrumentId",
        "instrumentId": "LUID_00003D58",
        "quoteType": "Price",
        "field": "mid"
      },
      "effectiveAt": "2026-05-06T00:00:00Z"
    },
    "metricValue": {
      "value": 287.46, "unit": "USD"
    }
  },
  "Quote-0002": {
    "quoteId": {
      "quoteSeriesId": {
        "provider": "Bloomberg",
        "instrumentIdType": "LusidInstrumentId",
        "instrumentId": "LUID_00003D58",
        "quoteType": "Price",
        "field": "mid"
      },
      "effectiveAt": "2026-05-05T00:00:00Z"
    },
    "metricValue": {
      "value": 276.93, "unit": "USD"
    }
  }
}'
```

Navigate to **Data Management > Quotes** and click the **Create quote** button:

![](https://cdn.document360.io/d575ad81-c0ed-4980-bbd1-d59ac5c3de82/Images/Documentation/image-4BQ6G0Z1.png)

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-EGYCIH4Q.png)

## 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 `MyAPPLPrices` | ✅ [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` | Your choice of `LusidInstrumentId`, `Figi`, `RIC`, `QuotePermId`, `Isin`, `Sedol`, `Cusip`, `ClientInternal` | ✅ [key field](/v1/docs/recipes-locating-market-data#more-information-on-the-key-field), for example `Quote.LusidInstrumentId.LUID_00003D58` or `Quote.RIC.*` |
| `instrumentId` | Must match a value suitable for the chosen [instrument identifier](/v1/docs/understanding-instrument-identifiers), for example `LUID_00003D58` for `LusidInstrumentId` |
| `quoteType` | `Price` for a clean price, or `DirtyPrice` | ✅ [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 price, for example `287.46` | ❌ |
| `metricValue.unit` | The quoted currency, for example `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.
- A `scaleFactor` to scale down the price, for example a bond price that is expressed as a percentage of par. Note it may be more efficient to scale down at the instrument level instead. [More information](/v1/docs/scaling-a-market-price).

## Subsequent updates

You can change the `metricValue` of an existing quote. Any other update constitutes a new quote in the time series.
