# Get Cobalt market prices

Retrieve prices for the Cobalt market with dynamic filtering.
**Available filters for Cobalt:**
- products, priceCategories, priceTypes (base filters)
- incoterms, countries, regions, purities, grades (market-specific)
- codes (exclusive filter - when used, only dateFrom/dateTo allowed)

Endpoint: POST /cobalt
Version: 1.0.0
Security: api_key

## Security:

  - `api_key` (unknown)
    apiKey in header x-api-key scopes: prices:cobalt

## Request fields (application/json):

  - `filters` (object)

  - `filters.codes` (array)
    Exclusive filter - when provided, only dateFrom and dateTo are allowed.
Filter by specific price codes.
    Example: ["BMILC004","BMILC005"]

  - `filters.dateFrom` (string)
    Start date for price series (YYYY-MM-DD)
    Example: 2024-01-01

  - `filters.dateTo` (string)
    End date for price series (YYYY-MM-DD)
    Example: 2024-12-31

  - `filters.products` (array)
    Filter by product names
    Example: ["Lithium Carbonate"]

  - `filters.priceCategories` (array)
    Filter by price categories.
`Forward Price` is not part of this resource: requesting it returns an empty data array.
Use POST /v3/prices/{marketSlug}/forwards instead.
    Example: ["BMI Price"]

  - `filters.priceTypes` (array)
    Filter by price types
    Example: ["Payable","Price"]

  - `filters.purities` (array)

  - `filters.incoterms` (array)

  - `filters.countries` (array)

  - `filters.regions` (array)

  - `options` (object)

  - `options.includeSeries` (boolean)
    Include price series data

  - `options.includeSummary` (boolean)
    Include summary statistics

  - `options.currency` (string)
    ISO 4217 currency code for conversion. Restricted to the supported set:
USD, CNY, KRW, JPY, AUD, EUR, GBP. Must be sent in uppercase. RMB is
accepted as an alias and normalized to CNY.
    Enum: "USD", "CNY", "KRW", "JPY", "AUD", "EUR", "GBP"

  - `options.unitOfMeasure` (string)
    Unit of measure for conversion (mass family).
Valid values: `t` (tonne), `kg`, `lb`.
Runtime also accepts aliases `tonne`, `Tonne`, `mt` — all normalised to `t`.
Conversion requires `includeSeries: true` or `includeSummary: true`.
    Enum: "t", "kg", "lb"

## Request examples:

  - `Basic request with date range` (unknown)

  - `Request combining the filters available for this market` (unknown)

  - `Request by specific assessment codes` (unknown)

  - `List available price definitions without time series to discover filter values` (unknown)

## Response 200:

  - `200` (unknown)
    Successful response with Cobalt prices

## Response 200 fields (application/json):

  - `$metadata` (object)

  - `$metadata.market` (string)
    Market name

  - `data` (array)

  - `data.code` (string)
    Unique price code

  - `data.name` (string)
    Full price name

  - `data.shortName` (string)
    Short name

  - `data.specification` (array)
    Price specification items with structured data

  - `data.specification.name` (string)
    Specification attribute name
    Example: Purity

  - `data.specification.value` (string)
    Specification attribute value
    Example: 99.5%

  - `data.specification.order` (integer)
    Display order for the specification
    Example: 1

  - `data.assessmentLaunchedAt` (string)
    Date when assessment was launched

  - `data.lastAssessedAt` (string)
    Date of last assessment

  - `data.latestPublishedAt` (string | null)
    Timestamp of the most recent publish event that touched this grade (ISO 8601 datetime). Distinct from summary.latestPublication, which is the most recent price value. Null if this grade has never been published.

  - `data.product` (object)

  - `data.product.id` (string)

  - `data.product.name` (string)

  - `data.product.alias` (string)

  - `data.product.chemicalCode` (string | null)

  - `data.product.isSustainable` (boolean)

  - `data.priceCategory` (object)

  - `data.priceCategory.id` (string)

  - `data.priceCategory.name` (string)

  - `data.frequency` (object)

  - `data.frequency.id` (string)

  - `data.frequency.name` (string)

  - `data.frequency.shortName` (string)

  - `data.grade` (string)

  - `data.subProduct` (object)

  - `data.subProduct.id` (string)

  - `data.subProduct.name` (string)

  - `data.subProduct.chemicalCode` (string)

  - `data.unitOfMeasure` (object)

  - `data.unitOfMeasure.id` (string)

  - `data.unitOfMeasure.name` (string)

  - `data.unitOfMeasure.symbol` (string)

  - `data.currency` (object)

  - `data.currency.id` (string)

  - `data.currency.name` (string)

  - `data.currency.iso` (string)

  - `data.currency.symbol` (string)

  - `data.isIoscoAssured` (boolean)
    Indicates if the grade is IOSCO assured

  - `data.nettedPrice` (object)
    The base price definition linked to this differential.
Only present on Differentials with a linked nettedPriceDefinition.

  - `data.nettedPrice.code` (string)
    Internal code of the base price definition
    Example: LI-0001

  - `data.nettedPrice.name` (string)
    Full name of the base price definition
    Example: Lithium; BMI Price; Lithium Carbonate; Min 99.2%; CIF; Asia; Spot; Price; USD; Tonne

  - `data.nettedPrice.shortName` (string)
    Short name of the base price definition
    Example: Lithium Carbonate; Min 99.2%; CIF Asia (spot); Price; USD; Tonne

  - `data.summary` (object)

  - `data.summary.latestPublication` (object)

  - `data.summary.latestPublication.date` (string)

  - `data.summary.latestPublication.valueHigh` (number | null)

  - `data.summary.latestPublication.valueLow` (number | null)

  - `data.summary.latestPublication.valueMid` (number)

  - `data.summary.latestPublication.nettedValue` (object)
    Computed netted value for the latest publication.
Present only on differentials with a linked nettedPriceDefinition.
Null when no base price history matches the publication date.

  - `data.summary.latestPublication.nettedValue.high` (number | null)
    Sum of differential.valueHigh and base.valueHigh

  - `data.summary.latestPublication.nettedValue.low` (number | null)
    Sum of differential.valueLow and base.valueLow

  - `data.summary.latestPublication.nettedValue.mid` (number | null)
    Sum of differential.valueMid and base.valueMid

  - `data.summary.latestPublication.nettedValue.matchedDate` (string)
    Date (yyyy-mm-dd) of the base price row used in the sum.
    Example: 2024-12-15

  - `data.summary.previousPublication` (object)

  - `data.summary.previousPublication.date` (string)

  - `data.summary.previousPublication.valueHigh` (number | null)

  - `data.summary.previousPublication.valueLow` (number | null)

  - `data.summary.previousPublication.valueMid` (number)

  - `data.summary.previousPublication.nettedValue` (object)
    Computed netted value for the previous publication.
Present only on differentials with a linked nettedPriceDefinition.
Null when no base price history matches the publication date.

  - `data.summary.changes` (object)

  - `data.summary.changes.unit` (string)

  - `data.summary.changes.latest` (number)

  - `data.summary.changes.daily` (number)

  - `data.summary.changes.weekly` (number)

  - `data.summary.changes.biWeekly` (number)

  - `data.summary.changes.monthly` (number)

  - `data.summary.changes.quarterly` (number)

  - `data.summary.changes.sixMonths` (number)

  - `data.summary.changes.yearToDate` (number)

  - `data.summary.changes.yearOnYear` (number)

  - `data.summary.nettedChanges` (object)
    Period-over-period changes computed on the netted mid value (differential + base).
Only present on Differentials with a linked nettedPriceDefinition.
Absent (not present, not null) for BMI Price, Global Indicator, and Forward Price definitions.
An individual period is null when the netted mid value cannot be resolved for that period's comparison date.

  - `data.summary.nettedChanges.unit` (string)

  - `data.summary.nettedChanges.latest` (number | null)

  - `data.summary.nettedChanges.daily` (number | null)

  - `data.summary.nettedChanges.weekly` (number | null)

  - `data.summary.nettedChanges.biWeekly` (number | null)

  - `data.summary.nettedChanges.monthly` (number | null)

  - `data.summary.nettedChanges.quarterly` (number | null)

  - `data.summary.nettedChanges.sixMonths` (number | null)

  - `data.summary.nettedChanges.yearToDate` (number | null)

  - `data.summary.nettedChanges.yearOnYear` (number | null)

  - `data.series` (array)

  - `data.series.date` (string)

  - `data.series.valueHigh` (number)

  - `data.series.valueLow` (number)

  - `data.series.valueMid` (number)

  - `data.series.nettedValue` (object)
    Computed netted value for a differential series item.
Present only on differentials with a linked nettedPriceDefinition.
Null when no base price history matches the series date.

## Response 400:

  - `400` (unknown)
    Bad Request - Non-convertible unit of measure (PA-0084)

## Response 400 fields (application/json):

  - `code` (string)
    Example: PA-0084

  - `message` (string)
    Example: The provided unit of measure is not convertible. Please use one of the accepted values.

  - `data` (object)

  - `data.field` (string)
    Example: options.unitOfMeasure

  - `data.reason` (string)
    Example: unitOfMeasure

  - `data.allowedValues` (array)
    Example: ["t","kg","lb","kwh","mwh","gwh"]

  - `error` (string)
    Example: The provided unit of measure is not convertible. Please use one of the accepted values.

## Response 401:

  - `401` (unknown)
    Unauthorized - Missing or invalid authentication

## Response 401 fields (application/json):

  - `code` (string)
    Example: AUTH-0001

  - `message` (string)
    Example: Token expired

## Response 403:

  - `403` (unknown)
    Forbidden - Insufficient permissions

## Response 403 fields (application/json):

  - `code` (string)
    Example: AUTH-0010

  - `message` (string)
    Example: Forbidden

## Response 200 examples:

  - `Response with price series` (unknown)

  - `Response including a Differential with nettedPrice and nettedValue` (unknown)

## Response 400 examples:

  - `Non-convertible unit requested (e.g. pound, kilogram)` (unknown)

  - `Non-convertible unit in array form — first-failure reported` (unknown)

  - `Valid symbol but incompatible with the requested market data (per-market applicability check). allowedValues reflects the families actually present in the market.` (unknown)

