> ## Documentation Index
> Fetch the complete documentation index at: https://docs.serialized.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Candles (OHLCV): batch

> Batch twin - candles for up to 10 tokens in one call, across chains. Same options as the GET, shared for the lot; endTime, from and pools per token. Response in input order, one slot per token, per-item `{error}` slots.

`POST /v1/token/ohlcv` · **5 per item credits**

Batch twin of [Candles (OHLCV)](/endpoints/candles-ohlcv): the candles of up to 10 tokens in one call, chains mixable in the same lot. `interval`, `limit`, `quote` and `fill` are shared by the lot; `endTime`, `from` and `pools` are per token, so every series keeps its own pagination. The response is in input order: each slot is the body of the GET (`data` plus its own `count`, `oldestTime`, `newestTime`, `hasMore`, `nextEndTime`, `pools`), or `{ "error": { "code", "message" } }` for that token alone (unknown token, malformed address, `quote=usd` on a chain without USD history). A bad item never costs you the rest of the lot.

<Note>An unknown `interval` or a lot of more than 10 items is refused with `400` for the whole call (it is a shared option). Everything else is judged per item.</Note>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST 'https://api.serialized.xyz/v1/token/ohlcv' \
    -H 'Authorization: YOUR_API_KEY' -H 'Content-Type: application/json' \
    -d '{"items": [{"chain": "evm:8453", "address": "0x4ed4e862860bed51a9570b96d89af5e1b0efefed"}, {"chain": "solana", "address": "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263", "endTime": 1788976800}], "interval": "1h", "limit": 2}'
  ```
</RequestExample>

<ResponseExample>
  ```json Response theme={null}
  {
    "data": [
      {
        "data": [
          {
            "time": 1788976800,
            "open": 4.3436558420585994e-7,
            "high": 4.3436619167141e-7,
            "low": 4.343522033037e-7,
            "close": 4.343522033037e-7,
            "volume": 0.008163915862969941,
            "volumeToken": 18904.773668395424,
            "trades": 29
          },
          {
            "time": 1788980400,
            "open": 4.343522033037e-7,
            "high": 4.343527131872e-7,
            "low": 4.3434988550577997e-7,
            "close": 4.3434988550577997e-7,
            "volume": 0.001671651869433317,
            "volumeToken": 3867.580839897786,
            "trades": 25
          }
        ],
        "interval": "1h",
        "count": 2,
        "oldestTime": 1788976800,
        "newestTime": 1788980400,
        "hasMore": true,
        "pools": [
          "0x0ca6485b7e9cf814a3fd09d81672b07323535b64"
        ]
      },
      {
        "data": [
          {
            "time": 1788973200,
            "open": 2.893641066501079e-8,
            "high": 2.893641066501079e-8,
            "low": 2.8929839822972252e-8,
            "close": 2.8929839822972252e-8,
            "volume": 0.047121352000000005,
            "volumeToken": 1645080.7310600001,
            "trades": 43
          },
          {
            "time": 1788976800,
            "open": 2.8929839822972252e-8,
            "high": 2.8929839822972252e-8,
            "low": 2.8929839822972252e-8,
            "close": 2.8929839822972252e-8,
            "volume": 0,
            "volumeToken": 0,
            "trades": 0
          }
        ],
        "interval": "1h",
        "count": 2,
        "oldestTime": 1788973200,
        "newestTime": 1788976800,
        "hasMore": true,
        "nextEndTime": 1788973199,
        "pools": [
          "BqnpCdDLPV2pFdAaLnVidmn3G93RP2p5oRdGEY2sJGez"
        ]
      }
    ],
    "meta": {
      "asOf": 1788981137801,
      "interval": "1h",
      "quote": "native"
    }
  }
  ```
</ResponseExample>


## OpenAPI

````yaml openapi.json POST /v1/token/ohlcv
openapi: 3.1.0
info:
  title: Serialized Data API
  description: >-
    On-chain data for trading apps - tokens, candles, token filters. Built on
    our own indexers. 18 EVM chains + Solana, live.
  version: 0.1.0
servers:
  - url: https://demo.serialized.xyz
    description: 'Demo: no key needed, read endpoints, rate-limited per IP'
  - url: https://api.serialized.xyz
    description: 'Production: your API key in the Authorization header'
security:
  - apiKey: []
  - {}
paths:
  /v1/token/ohlcv:
    post:
      summary: 'Candles (OHLCV): batch'
      description: >-
        Batch twin: the candles of up to 10 tokens in one call, chains mixable
        in the same lot. `interval`, `limit`, `quote` and `fill` are shared by
        the lot; `endTime`, `from` and `pools` are per token, so every series
        keeps its own pagination. Response in input order: each slot is the body
        of the GET (`data` plus its own `interval`, `count`, `oldestTime`,
        `newestTime`, `hasMore`, `nextEndTime`, `pools`), or `{ error: { code,
        message } }` for that token alone (unknown token, malformed address,
        `quote=usd` on a chain without USD history). A bad item never costs you
        the rest of the lot. Billed per item.
      operationId: candles-ohlcv-batch
      requestBody:
        required: true
        content:
          application/json:
            schema:
              additionalProperties: false
              type: object
              required:
                - items
                - interval
              properties:
                items:
                  minItems: 1
                  maxItems: 10
                  type: array
                  items:
                    additionalProperties: false
                    type: object
                    required:
                      - chain
                      - address
                    properties:
                      chain:
                        type: string
                      address:
                        description: Token address
                        type: string
                      pools:
                        description: >-
                          CSV of pool addresses (≤50); default = the pool we
                          price the token from
                        type: string
                      endTime:
                        minimum: 0
                        description: >-
                          Unix seconds, inclusive upper bound (pagination: prev
                          oldestTime - 1); a millisecond value is accepted and
                          normalized. At most 1 day ahead.
                        type: integer
                      from:
                        minimum: 0
                        description: >-
                          Unix seconds, inclusive lower bound (scans stop
                          there); a millisecond value is accepted and
                          normalized.
                        type: integer
                  description: >-
                    1 to 10 of `{chain, address, pools?, endTime?, from?}`.
                    `pools`: optional CSV of up to 50 pool addresses to
                    aggregate (default: the pool we price the token from,
                    tracked across a bonding-curve migration). `endTime` /
                    `from`: unix seconds (a millisecond value is accepted and
                    normalized), per item, so each series paginates on its own
                    with the `oldestTime - 1` of its slot.
                  example:
                    - chain: evm:8453
                      address: 0x4ed4…
                    - chain: solana
                      address: DezXAZ…
                      endTime: 1788976800
                  x-default:
                    - chain: evm:8453
                      address: 0x4ed4…
                    - chain: solana
                      address: DezXAZ…
                      endTime: 1788976800
                interval:
                  default: 5m
                  description: >-
                    Shared by the lot:
                    1s|5s|15s|30s|1m|3m|5m|15m|30m|1h|2h|4h|6h|12h|1d|1w|1M
                    (default 5m). `7d` and `30d` are accepted as aliases of `1w`
                    and `1M`; `meta.interval` echoes the canonical key. An
                    unknown interval is refused with `400` for the whole call.
                  type: string
                  example: 1h
                  x-default: 1h
                limit:
                  minimum: 1
                  maximum: 2000
                  default: 200
                  type: integer
                  description: Candles per item, 1-2000 (default 200), shared by the lot.
                  example: 2
                  x-default: 2
                quote:
                  default: native
                  description: >-
                    `native` (default) or `usd` (Solana), shared by the lot but
                    judged per item: an item on a chain without USD history gets
                    its own `{ error }` slot, the others are served.
                  anyOf:
                    - type: string
                      enum:
                        - native
                    - type: string
                      enum:
                        - usd
                  example: native
                  x-default: native
                fill:
                  default: true
                  description: >-
                    Dense time axis (default true): a flat zero-volume candle
                    for every bucket without a trade. `false` returns traded
                    buckets only. Shared by the lot.
                  type: boolean
                  example: true
                  x-default: true
      responses:
        '200':
          description: Standard `{ data, meta }` envelope.
components:
  securitySchemes:
    apiKey:
      type: apiKey
      name: Authorization
      in: header
      description: Your raw API key (not needed on the demo server).

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.