---
title: "List capabilities"
method: GET
path: "/v1/capabilities"
tags: ["System"]
---

# List capabilities

`GET /v1/capabilities`

## Request

- Base URL: `https://api.0xarchive.io`
- URL: `https://api.0xarchive.io/v1/capabilities`
- Auth: none required

What each venue serves: one row per venue and datatype, with its REST routes, WebSocket channels, whether it streams live and replays history, the first served instant, cadence, page limit and accepted intervals. It is the source for coverage tables and channel lists; `/v1/symbols` gives per-symbol coverage. Public: no API key and no credits. Cached for five minutes. L4 and full-depth WebSocket replay is bulk (speed is ignored) and single-channel only; the `notes` of those rows say so.

## Response `200`

One row per venue and datatype

- ApiResponseCapabilityArray
  - `success` boolean, required
  - `data` Capability[], required
    - `venue` 'hyperliquid' | 'hip3' | 'hip4' | 'spot' | 'lighter' | 'rh-lighter', required: Venue, as `meta.venue` names it.
    - `datatype` string, required: Datatype identifier, stable across venues (for example `l2_orderbook`, `l2_full_depth`, `l4_diffs`, `l4_orders`, `trades`, `candles`, `funding`, `oi`, `liquidations`, `order_flow`, `positions`). New datatypes can be added; treat unknown values as opaque.
    - `rest_routes` string[], required: REST route templates that serve the datatype on this venue.
    - `ws_channels` string[], required: WebSocket channels for this venue and datatype. Empty when the datatype is REST only.
    - `live` boolean, required: A WebSocket subscription streams it live.
    - `replay` boolean, required: A WebSocket replay serves its history.
    - `available_from` string, date-time, nullable, required: First served instant, RFC 3339 UTC with milliseconds. Null where the datatype has no venue-wide floor; `/v1/symbols` gives per-symbol coverage.
    - `cadence` 'event' | 'snapshot' | 'sample' | 'interval' | 'reference', required: `event`: one row per exchange event. `snapshot`: periodic state. `sample`: periodic metric readings. `interval`: buckets of the `interval` parameter. `reference`: catalog data.
    - `page_limit` integer, nullable, required: Largest `limit` one page accepts. Null when the route is not paged.
    - `intervals` string[], required: Values `interval` accepts. Empty when the datatype has no `interval` parameter.
    - `notes` string, nullable, required: Venue-specific notes, for example replay behaviour or a policy floor.
  - `meta` ResponseMeta, required: Response metadata. Every 2xx JSON response carries `meta.request_id`; list payloads add `count`; cursor-paged routes add `has_more` and, when another page follows, `next_cursor`; per-symbol routes add `symbol` and `venue`. Fields that do not apply to a route are omitted.
    - `count` integer: Number of records returned
    - `has_more` boolean: Cursor-paged routes: whether another page follows. `next_cursor` is present exactly when this is `true`. A final page can be empty when the previous page was exactly full; `has_more` is `false` on it.
    - `next_cursor` string: Opaque cursor for the next page, present exactly when `has_more` is `true`. Pass it back unchanged as `cursor` with the same filters. Do not parse or construct it.
    - `request_id` string, uuid, required: Unique request ID for support
    - `symbol` string: Per-symbol routes: the canonical public symbol the response describes (for example `BTC`, `xyz:TSLA`, `HYPE-USDC`, `#0`).
    - `venue` 'hyperliquid' | 'hip3' | 'hip4' | 'spot' | 'lighter' | 'rh-lighter': Per-symbol routes: the venue the response describes.
    - `coverage_from` string, date-time: Earliest coverage for the requested symbol and data type. Present only when the requested window ends before coverage begins.
    - `notice` string: Human-readable advisory about the response. Used when the requested window ends before coverage begins for the symbol, and on CVD responses that are one page of several; may carry other advisories in future.
    - `finalized_through` string, date-time: Two-tier datasets (Lighter trades): data at or before this instant is final; later data is preliminary.
    - `requested_end` string, date-time, nullable: The `end` the request asked for, echoed when it was clamped to `finalized_through`.
    - `clamped_to` string, date-time, nullable: The boundary the request's `end` was clamped to, when clamping occurred.
    - `preliminary_row_count` integer, nullable: Number of preliminary rows in this response, on routes that intentionally serve preliminary data (Lighter `/recent`).

## Other responses

- `429`: Rate limit, concurrency limit or monthly credits exceeded. See `error_code`.
- `default`: Any other error. The body is an `ErrorResponse`; branch on `error_code`. A 503 (`upstream_unavailable`) carries `Retry-After`.

---

[API](https://skmtc.dev/0xarchive/apis/0xarchive-api-2.md) · [All operations](https://skmtc.dev/0xarchive/apis/0xarchive-api-2/llms.txt) · [OpenAPI document](https://skmtc.dev/0xarchive/apis/0xarchive-api-2/revisions/27076f55595f?raw)
