# Laevitas Spot Candle-History Discovery

> Laevitas Spot Candle-History Discovery is a paid API for AI agents from apiv2.laevitas.ch, paid per call via x402, $0.1/call, status unknown (last checked 2026-10-31).

Discovers available spot trading pairs and their candle history coverage bounds for a given exchange and resolution.

## Facts

- Endpoint: POST https://apiv2.laevitas.ch/api/v1/spot/candle-history/discovery?utm_source=zero.xyz
- Price: $0.1/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-31
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/laevitas-spot-candle-history-discovery-ba6bd9fa
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_ucb-5FxwybO3XadMnvyzI

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability laevitas-spot-candle-history-discovery-ba6bd9fa -d '<json body>'
```

Example prompt: Using Laevitas, list all spot trading pairs available on Binance at 1-hour resolution for 2024-03-15, and tell me the candle history coverage bounds for BTC-USDT at that resolution.

## When to prefer this

Use this endpoint to enumerate available spot pairs or verify candle history existence before fetching actual OHLCV data. It is the canonical discovery layer for Laevitas spot candle history — prefer it over guessing instrument names or date ranges. Use instruments mode to enumerate all pairs on a given day; use coverage mode to get precise date bounds for a single known pair. Not suitable for fetching actual candle OHLCV values.

## Known failure modes

- Missing required fields (mode, exchange, resolution) returns validation error
- instrument_name required for coverage mode but omitted causes error
- date required for instruments mode but missing causes error
- cursor pagination breaks if exchange/resolution/date/limit change between pages
- Exchange selector accepted but no candle history exists for that venue — returns empty data array
- Exact pair spelling mismatch in coverage mode returns no results
- Resolution requested not available for the specified exchange or instrument — empty result

## How this service works

Professional market data API for crypto derivatives, spot markets, prediction markets, Hyperliquid HyperCore data, proprietary volatility surfaces, and analytics.

## Authentication

Use an API key for authenticated REST requests:

```http
X-API-Key: your-api-key-here
```

Data and history endpoints also accept x402 without an API key: 1, 5 or 10 credits ($0.001 each) for data up to 1 year, 1–3 years or older.

**Subscriptions with USDC:** Premium and Enterprise can be purchased on Base or Solana for a month, a quarter, six months or a year. Access is prepaid, with no automatic renewal. [Buy a subscription](https://v3.laevitas.ch/profile/subscription/wallet) or read the [USDC subscription guide](/x402#subscriptions).

The subscription belongs to your signed-in Laevitas account; wallet sign-in does not require an email. Enterprise users generate an API key in V3 after activation. Plan and billing-period limits still apply. Subscription purchases are separate from API credit bundles.

For Claude MCP, add `https://apiv2.laevitas.ch/api/v1/mcp`, select **Sign in now → Register automatically**
with no custom headers, and authorize with your API key on the Laevitas page.
Do not enter a client ID or secret manually. All OAuth clients require PKCE S256.
Connection guide: [MCP setup](/mcp). CIMD / published client identity is not supported.

| Resource | Path |
| --- | --- |
| OpenAPI JSON | `GET /openapi.json` |
| x402 discovery | `GET /.well-known/x402` |
| Changelog | `GET /api/v1/changelog` |
| WebSocket docs | `GET /websocket` |

## REST Surfaces

| Surface | Examples |
| --- | --- |
| Instruments | Cross-market contract reference data |
| Futures | OHLCVT, trades, tickers, orderbook, liquidations, carry |
| Perpetuals | OHLCVT, trades, funding, open interest, orderbook, liquidations |
| Options | OHLCVT, trades, Greeks, volatility, flow, dealer GEX |
| Options Backtests | Strategy templates, asynchronous submission, status, combined results, cancellation |
| Vol Surface | Proprietary surface snapshots, slices, strikes, term structure, risk |
| Spot | OHLCVT, ticker, trades, volume, L2 orderbook, snapshots |
| Predictions | Polymarket instruments, categories, trades, ticker history |
| Hyperliquid - HyperCore | Node-derived fills, liquidations, positions, funding, TWAPs, resting orders, L2 books |
| Analytics | Realized volatility and derived metrics |

## Pagination

Backtests are asynchronous jobs, not paginated market-data queries. Start with
`GET /api/v1/options/backtests/strategies`, submit with `POST /api/v1/options/backtests`,
then poll `/{id}` and retrieve `/{id}/result`. These responses have no data/meta wrapper.

Paginated endpoints return the cursor at `meta.next_cursor`. Pass that value back as the `cursor` query parameter to fetch the next page.

## WebSocket Streaming

Real-time streams are documented at `/websocket`.

| Data | Channel pattern |
| --- | --- |
| Trades | `trades.{market}.{exchange}.{instrument}` |
| OHLC ticker | `ohlc.ticker.{market}.{exchange}.{instrument}.{timeframe}` |
| OHLCVT | `ohlc.vt.{market}.{exchange}.{instrument}.{timeframe}` |

Variables: `market` is one of `perpetuals`, `futures`, `options`, or `spot`; `timeframe` is one of `1m`, `5m`, `15m`, `1h`, `4h`, or `1d`.

## Quick Start

```bash
curl "https://apiv2.laevitas.ch/api/v1/futures/ohlcvt?exchange=deribit&instrument_name=BTC-PERPETUAL" \
  -H "X-API-Key: your-api-key-here"
```

## Output

Returns a paginated list of spot instrument names with their candle history bounds (first_observed_at, last_observed_at) at the requested resolution, plus a retrieval object with pre-filled parameters for directly fetching candle data from /api/v1/spot/candle-history. In coverage mode, returns bounds for a single exact pair. Includes meta with pagination cursor for continuation.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "required": [
  "mode",
  "exchange",
  "resolution"
 ],
 "properties": {
  "date": {
   "type": "string",
   "description": "Required only for instruments: YYYY-MM-DD UTC day. Not a listing or trading-status date."
  },
  "mode": {
   "enum": [
    "instruments",
    "coverage"
   ],
   "type": "string",
   "description": "instruments finds spot pair names on a UTC day. coverage reports dated candle bounds for one exact pair. Both modes require resolution."
  },
  "limit": {
   "type": "integer",
   "description": "instruments page size, default 100, maximum 500. Not accepted for coverage."
  },
  "cursor": {
   "type": "string",
   "description": "instruments continuation from meta.next_cursor; keep exchange, resolution, date and limit unchanged."
  },
  "exchange": {
   "type": "string",
   "description": "Lowercase venue selector for spot/candle-history. Selector acceptance does not establish that history exists."
  },
  "resolution": {
   "enum": [
    "1m",
    "5m",
    "15m",
    "30m",
    "1h",
    "1d"
   ],
   "type": "string",
   "description": "Required candle period. Availability differs by period; early daily candles do not establish minute history."
  },
  "instrument_name": {
   "type": "string",
   "description": "Required only for coverage. Exact historical pair spelling; letters are lowercased, but separators and aliases are not changed. Copy a name returned by instruments."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "object",
 "required": [
  "data",
  "meta"
 ],
 "properties": {
  "data": {
   "type": "array",
   "items": {
    "type": "object",
    "required": [
     "instrument_name",
     "first_observed_at",
     "last_observed_at",
     "has_zero_timestamp",
     "retrieval"
    ],
    "properties": {
     "retrieval": {
      "type": "object",
      "nullable": true,
      "required": [
       "path",
       "parameters"
      ],
      "properties": {
       "path": {
        "enum": [
         "/api/v1/spot/candle-history"
        ],
        "type": "string"
       },
       "parameters": {
        "type": "object",
        "required": [
         "exchange",
         "instrument_name",
         "start",
         "end",
         "resolution",
         "page",
         "limit"
        ],
        "properties": {
         "end": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
         },
         "page": {
          "enum": [
           1
          ],
          "type": "number"
         },
         "limit": {
          "enum": [
           100
          ],
          "type": "number"
         },
         "start": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
         },
         "exchange": {
          "type": "string"
         },
         "resolution": {
          "enum": [
           "1m",
           "5m",
           "15m",
           "30m",
           "1h",
           "1d"
          ],
          "type": "string"
         },
         "instrument_name": {
          "type": "string"
         }
        },
        "additionalProperties": false
       }
      },
      "additionalProperties": false
     },
     "instrument_name": {
      "type": "string"
     },
     "last_observed_at": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|
… (truncated)
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/laevitas-spot-candle-history-discovery-ba6bd9fa/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from apiv2.laevitas.ch](https://www.zero.xyz/host/apiv2.laevitas.ch/llms.txt)
