> ## 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.

# Market Candles: batch

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

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

Batch twin of [Market Candles](/endpoints/market-candles): the candles of up to 10 markets in one call, chains mixable. `interval`, `limit`, `quote` and `fill` are shared by the lot; `endTime` and `from` are per market. Each slot is the body of the GET (`data` plus `count`, `oldestTime`, `newestTime`, `hasMore`, `nextEndTime`, `pools`), or `{ "error": { "code", "message" } }` for that market alone (`NOT_FOUND` for an unknown pool, `INVALID_PARAM` for a malformed address or `quote=usd` outside Solana). A slot is byte-identical to the GET of the same market with the same options.

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

<ResponseExample>
  ```json Response theme={null}
  {
    "data": [
      {
        "data": [
          {
            "time": 1788981000,
            "open": 4.3435079990816994e-7,
            "high": 4.3435079990816994e-7,
            "low": 4.3434988550577997e-7,
            "close": 4.3434988550577997e-7,
            "volume": 0.000321765249300794,
            "volumeToken": 748.2793758345972,
            "trades": 20
          }
        ],
        "interval": "5m",
        "count": 1,
        "oldestTime": 1788981000,
        "newestTime": 1788981000,
        "hasMore": true,
        "pools": [
          "0x0ca6485b7e9cf814a3fd09d81672b07323535b64"
        ]
      },
      {
        "data": [
          {
            "time": 1788981000,
            "open": 2.8982146498792194e-8,
            "high": 2.8982146498792194e-8,
            "low": 2.8981462294184192e-8,
            "close": 2.8981462294184192e-8,
            "volume": 0.05044522800000001,
            "volumeToken": 1741453.5287600001,
            "trades": 43
          }
        ],
        "interval": "5m",
        "count": 1,
        "oldestTime": 1788981000,
        "newestTime": 1788981000,
        "hasMore": true,
        "pools": [
          "5zpyutJu9ee6jFymDGoK7F6S5Kczqtc9FomP3ueKuyA9"
        ]
      }
    ],
    "meta": {
      "asOf": 1788981138405,
      "interval": "5m",
      "quote": "native"
    }
  }
  ```
</ResponseExample>


## OpenAPI

````yaml openapi.json POST /v1/pool/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/pool/ohlcv:
    post:
      summary: 'Market Candles: batch'
      description: >-
        Batch twin: the candles of up to 10 markets (pools) in one call, chains
        mixable. `interval`, `limit`, `quote` and `fill` are shared by the lot;
        `endTime` and `from` are per market. Response in input order: each slot
        is the body of the GET (`data` plus `interval`, `count`, `oldestTime`,
        `newestTime`, `hasMore`, `nextEndTime`, `pools`), or `{ error: { code,
        message } }` for that market alone (`NOT_FOUND` for an unknown pool,
        `INVALID_PARAM` for a malformed address or `quote=usd` outside Solana).
        A slot is identical to the GET of the same market with the same options.
        Billed per item.
      operationId: market-candles-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: Pool / market address
                        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, endTime?, from?}`: `address` is
                    the pool / pair address (Uniswap V4 poolIds supported);
                    `endTime` / `from` are unix seconds (a millisecond value is
                    accepted and normalized), per item, so each series paginates
                    on its own.
                  example:
                    - chain: evm:8453
                      address: 0x0ca6…
                    - chain: solana
                      address: 5zpyut…
                  x-default:
                    - chain: evm:8453
                      address: 0x0ca6…
                    - chain: solana
                      address: 5zpyut…
                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.