---
title: "How do I upload an object to the Complex Market Data Store?"
slug: "how-do-i-upload-an-object-to-the-complex-market-data-store"
updated: 2024-10-15T09:06:46Z
published: 2024-10-15T09:06:46Z
canonical: "support.lusid.com/how-do-i-upload-an-object-to-the-complex-market-data-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 upload an object to the Complex Market Data Store?

Providing you have suitable [access control permissions](/v1/docs/identity-management-and-access-control-iam), you can upload an object to the LUSID Complex Market Data Store, for example a discount factor curve encapsulating the idea that money today is not worth the same as money in the future. [See the different categories of complex market data](/v1/docs/categories-of-complex-market-data).

> **Note**: 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 this data in a valuation.

- Method 1: [Using the LUSID API](/v1/docs/how-do-i-upload-an-object-to-the-complex-market-data-store#using-the-lusid-api)
- Method 2: Using the LUSID web app (coming soon)
- Method 3: Using Luminesce (coming soon)

## Using the LUSID API

You can upload up to 2000 complex market data objects in a single request:

1. [Obtain an API access token](/v1/docs/how-do-i-obtain-and-use-a-short-lived-api-access-token-from-okta).
2. Call the [UpsertComplexMarketData](https://www.lusid.com/docs/api#operation/UpsertComplexMarketData) API, encapsulating all the objects in the request in a single `scope` (namespace). [**Match this using the dataScope field in a recipe**](/v1/docs/recipes-locating-market-data#summary-of-fields-in-a-market-data-rule).
3. For each object in the request, specify:
  - An ephemeral ID, to track errors in the response.
  - A market data ID, comprising:
    - A `provider` representing a [financial data vendor](https://en.wikipedia.org/wiki/Financial_data_vendor). Valid providers are currently `Bloomberg`, `DataScope` (for Refinitiv), `SIX`, `FactSet`, `TraderMade`, `Edi`, `Rimes`, `Lusid` and `Client`; if your data vendor isn't listed, you can represent it using `Lusid`. [**Match this using the supplier field in a recipe**](/v1/docs/recipes-locating-market-data#summary-of-fields-in-a-market-data-rule).
    - Optionally, a `priceSource` indicating a sub-supplier to the financial data vendor (above), for example Tradeweb or RRPS for Refinitiv DataScope. If specified, [**match this using the priceSource field in a recipe**](/v1/docs/recipes-locating-market-data#summary-of-fields-in-a-market-data-rule).
    - An `effectiveAt` date from which the object is valid.
    - A `marketAsset` constituting a name. Note each category of complex market data [has a particular naming syntax](/v1/docs/categories-of-complex-market-data), for example `&lt;Ccy&gt;/&lt;Ccy&gt;OIS` for a discount factor curve. [**Match this using the key field in a recipe**](/v1/docs/recipes-locating-market-data#more-information-on-the-key-field).
  - A market data type defining the object and its behavior, for example `DiscountFactorCurveData` for a discount factor curve. Each type has different fields; [examine the API reference](https://www.lusid.com/docs/api#operation/UpsertComplexMarketData) and select the appropriate option from the dropdown to see what these are. For information on specifying tenors for objects that require them, see [this article](/v1/docs/specifying-tenors-in-lusid). ![](https://cdn.document360.io/d575ad81-c0ed-4980-bbd1-d59ac5c3de82/Images/Documentation/image(188).png)

Consider the following example, of a discount factor curve and a FX forward pips curve uploaded together to a `Growth` quote scope (in the URL below):

```json
curl -X POST "https://<your-domain>.lusid.com/api/api/complexmarketdata/Growth"
 -H "Authorization: Bearer <your-API-access-token>"
 -H "Content-Type: application/json-patch+json"
 -d '{
  "ephemeral-id-1": {
    "marketDataId": {
      "provider": "Lusid",
      "effectiveAt": "2021-01-20T00:00:00.0000000+00:00",
      "marketAsset": "GBP/GBPOIS"
    },
    "marketData": {
      "marketDataType": "DiscountFactorCurveData",
      "baseDate": "2021-01-20T00:00:00.0000000+00:00",
      "dates": [
        "2021-02-19T00:00:00.0000000+00:00",
        "2021-03-21T00:00:00.0000000+00:00",
        "2021-04-20T00:00:00.0000000+00:00",
        "2021-07-19T00:00:00.0000000+00:00",
        "2022-01-20T00:00:00.0000000+00:00",
        "2022-07-21T00:00:00.0000000+00:00",
        "2023-01-20T00:00:00.0000000+00:00",
        "2024-01-20T00:00:00.0000000+00:00",
        "2025-01-19T00:00:00.0000000+00:00",
        "2026-01-19T00:00:00.0000000+00:00"
      ],
      "discountFactors": [
        0.9998,
        0.9994,
        0.9987,
        0.9953,
        0.9871,
        0.9778,
        0.9705,
        0.958,
        0.9467,
        0.9366
      ]
    }
  },
  "ephemeral-id-2": {
    "marketDataId": {
      "provider": "Lusid",
      "effectiveAt": "2021-01-20T00:00:00.0000000+00:00",
      "marketAsset": "EUR/USD/FxFwdCurve"
    },
    "marketData": {
      "marketDataType": "FxForwardTenorPipsCurveData",
      "baseDate": "2021-01-20T00:00:00.0000000+00:00",
      "domCcy": "EUR",
      "fgnCcy": "USD",
      "tenors": [
        "1D",
        "1W",
        "2W",
        "3W",
        "1M",
        "2M",
        "3M",
        "4M",
        "5M",
        "6M",
        "9M",
        "1Y",
        "15M",
        "18M",
        "2Y",
        "3Y"
      ],
      "pipRates": [
        0.6375,
        1.4975,
        3.0275,
        4.5625,
        6.7525,
        19.5125,
        27.3225,
        34.0625,
        41.5175,
        49.2025,
        74.8125,
        104.9125,
        141.1925,
        176.8375,
        260.1475,
        453.2625
      ]
    }
  }
}'
```
