---
title: "Get Price-to-Beat (PTB) values for crypto up/down contracts"
method: GET
path: "/markets/crypto/ptb"
tags: ["Markets"]
---

# Get Price-to-Beat (PTB) values for crypto up/down contracts

`GET /markets/crypto/ptb`

## Request

- Base URL: `https://data.kairos.trade`
- URL: `https://data.kairos.trade/markets/crypto/ptb`
- Auth: API key in header `X-Client-Id` and API key in header `X-Api-Key` and API key in header `X-Api-Secret`

Returns the oracle price captured at the start of each requested window
("the price to beat"), nested `{window: {symbol: {...}}}`. `windows` is
comma-separated; each must be one of `1m, 5m, 15m, 1h, 4h, 1d`. Window
starts align to clean ET boundaries. Only **window** PTB sources are
accepted: `binance`, `kalshi_cfbenchmarks`, `polymarket_twap30`,
`polymarket_twap60`. Contract-tick series (`polymarket_chainlink`,
`hyperliquid_mark`) are not window benchmarks and are rejected. When
`source` is omitted, the server picks Binance or a legacy TWAP series
from the `oracle_twap_feed` flag. Binance may fall back to an external
market-data source for missing symbols; venue series do not. Symbols
with no resolvable price for a window are **omitted** (not `null`).

## Query parameters

- `windows` string
- `source` 'binance' | 'kalshi_cfbenchmarks' | 'polymarket_twap30' | 'polymarket_twap60'

## Response `200`

PTB values nested by window then symbol.

- MarketsPtbResponse: Keyed by window (1m/5m/15m/1h/4h/1d), each value keyed by symbol.

## Other responses

- `400`: No windows given, or an invalid window value.
- `401`: No valid credential presented — missing/invalid API-key headers, or an invalid/expired session token.
- `403`: Authenticated but not permitted. Three distinct causes: the session user is not invited (`Invite required`), the API key lacks the operation's scope, or API-key access to the requested venue is switched off (`API access is disabled for <provider>`). Admin and API-key callers bypass the invite check; session and admin callers bypass scope and venue checks.
- `422`: Request failed FastAPI parameter validation.
- `429`: Rate limit exceeded for this route's sliding window, keyed on the session `sub` when authenticated and on the trusted client IP otherwise. Honor `Retry-After`. A per-API-key data ceiling (set per credential) rejects with `{"detail": "API key data rate limit exceeded"}` instead of the `error` envelope below.
- `500`: Oracle store/source lookup failed for one or more windows.

---

[API](https://skmtc.dev/kairos/apis/kairos-data-api.md) - [All operations](https://skmtc.dev/kairos/apis/kairos-data-api/llms.txt) - [OpenAPI document](https://skmtc.dev/kairos/apis/kairos-data-api/revisions/cf6b76079e38?raw)
