# Laevitas Options Instrument History Discovery

> Laevitas Options Instrument 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 crypto options contracts observed on a specific date or checks which dates a specific contract has coverage for, across major derivatives exchanges.

## Facts

- Endpoint: POST https://apiv2.laevitas.ch/api/v1/options/instrument-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-options-instrument-history-discovery-aac96d06
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_TS7RfOuZGNPZ42pfsEHy_

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-options-instrument-history-discovery-aac96d06 -d '<json body>'
```

Example prompt: Can you find all BTC options contracts that were active on Deribit on 2024-03-15? Use instruments mode with the BTC currency prefix and return up to 200 results.

## When to prefer this

Use this endpoint when you need to discover what options contract names existed on a specific exchange and date before fetching their historical data — it acts as a catalog/index step. Prefer it over guessing instrument names, as crypto options naming conventions vary by exchange. It is also the correct tool to check which date ranges Laevitas has retained data for a specific known contract.

## Known failure modes

- Missing required fields: exchange is always required; currency is required for instruments mode; instrument_name is required for coverage mode — omitting these returns a validation error
- Invalid exchange: only deribit, okx, binance, bybit, paradex are accepted
- Invalid currency prefix: currency must be the exact prefix before the first hyphen (e.g. BTC, not Bitcoin)
- No results for date: if no contracts were observed on the given UTC date, data array will be empty
- Invalid cursor: reusing a cursor with changed exchange/currency/date/limit parameters will fail or return incorrect results
- Payment failure: x402 payment rejected if insufficient credits or malformed payment header

## 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 array of options instruments, each with instrument_name, first_observed_at timestamp, last_observed_at timestamp, and a retrieval object containing the exact path and parameters to use when fetching full historical data for that contract. Also includes pagination metadata with a next_cursor for fetching additional pages.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "required": [
  "mode",
  "exchange"
 ],
 "properties": {
  "date": {
   "type": "string",
   "description": "Required only for instruments: YYYY-MM-DD, the UTC day to search. Not an expiry date or proof of tradability."
  },
  "mode": {
   "enum": [
    "instruments",
    "coverage"
   ],
   "type": "string",
   "description": "instruments finds contracts observed on a UTC day, including contracts now expired. coverage inspects all retained dates for one exact contract."
  },
  "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 the same exchange, currency, date and limit."
  },
  "currency": {
   "type": "string",
   "description": "Required only for instruments. Exact contract-family prefix before the first hyphen, for example BTC, BTC_USDC or BTC_USD. Distinct prefixes are not combined."
  },
  "exchange": {
   "enum": [
    "deribit",
    "okx",
    "binance",
    "bybit",
    "paradex"
   ],
   "type": "string",
   "description": "Venue supported by options/instrument-history. This lookup does not describe ticker-history or trade candles."
  },
  "instrument_name": {
   "type": "string",
   "description": "Required only for coverage. Exact contract name, case-insensitive. Copy it from the instruments result."
  }
 }
}
```

## 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",
     "retrieval"
    ],
    "properties": {
     "retrieval": {
      "type": "object",
      "required": [
       "path",
       "parameters"
      ],
      "properties": {
       "path": {
        "enum": [
         "/api/v1/options/instrument-history"
        ],
        "type": "string"
       },
       "parameters": {
        "type": "object",
        "required": [
         "exchange",
         "instrument_name",
         "start",
         "end",
         "resolution",
         "projection",
         "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": {
          "enum": [
           "deribit",
           "okx",
           "binance",
           "bybit",
           "paradex"
          ],
          "type": "string"
         },
         "projection": {
          "enum": [
           "full"
          ],
          "type": "string"
         },
         "resolution": {
          "enum": [
           "native"
          ],
          "type": "string"
         },
         "instrument_name": {
          "type": "string"
         }
        },
        "additionalProperties": false
       }
      },
      "additionalProperties": false
     },
     "instrument_name": {
      "type": "string"
     },
     "last_observed_at": {
      "type": "
… (truncated)
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/laevitas-options-instrument-history-discovery-aac96d06/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)
