Skip to content

Keys and plans

Every /v2 endpoint that returns a measurement needs a key:

Authorization: Bearer dbk_…

A key is issued at studio.debyko.com/account. The Free plan is issued without a card; Mini, Standard and Pro start with a free trial, and Pro Plus is charged at checkout. One key covers Studio and the API — whatever a plan includes in Studio, it includes here. Agent evaluates under its own allowance, shown in its row.

Never in a URL. A key in a query string is written into server logs, proxy logs and browser history. A request that carries one is refused with KEY_IN_URL and the key should be replaced from your account.

A plan limits history and request rates; every plan sees every venue and instrument:

  • venues and instruments: every plan sees every venue and instrument in the registry. DQL_UNKNOWN_VENUE is for a code that is no venue at all;
  • history: asking further back than a plan reaches is refused with PLAN_LIMIT, naming the date the plan reaches and what it would take to go further — never a shortened answer that looks whole. The error carries next (one sentence with the earliest instant the plan reads for this request) and, for POST /v2/candles, earliest_from and retry_with: the same request with from moved to that instant. The first such refusal of a Free account that has never had a trial is not shown: Standard answers the request, the answer carries trial (plan, until), and Standard stays open for 4 days (plan.trial_until of GET /v2/account). The first refusal of Free’s number of Agent rules, DQL screening requests a minute or requests a day opens it the same way (trial.cap, trial.limit); the per-second burst does not. One trial per account, ever; at until the account is Free again. Free, Mini and Standard read every candle timeframe, as deep as the timeframe allows: Free 1m 48 hours, 5m and 15m 7 days, 1h 30 days, 4h and 1d 90 days; Mini 7, 30, 90 and 180 days; Standard, Pro and Pro Plus the whole database window. Everything else (snapshots, history, trades, liquidations, funding settlements, screen) reaches the plan’s history_days (Free 7, Mini 30; Standard, Pro and Pro Plus the database window). How long each layer is held in the database is a number per layer and candle timeframe, read from the retention classes in force: history of GET /v2/account (and of every plan in GET /v2/plans) gives hot_days (the shortest of any listing), reads_days (what this plan reads of it), archive_since (the first day with a verified file) and archive.files_per_month. A request (history, trades or candles) that lies wholly before the hot window of everything it asks for is refused PLAN_LIMIT with the layer, the window in days and the earliest hot instant, and then one of: the exact GET /v2/archive/{listing}/{layer}/{day} when that day has a file; no data before <date> when the venue has none that early; or that the archive has no file for the day. A request that reaches into the window is answered, and what is older is not_retained, with the archive pointer where a file exists. No Parquet is served through the other endpoints; per file, x402 pays when there is no key. funding_settlement and liquidation are not swept (history.not_swept). GET /v2/plans lists the depth of every plan (history_days, and candle_history_days for each timeframe);
  • rate: requests per second and per day, and the number of live streams, are counted per key. The per-second limit is a token bucket: the plan’s sustained rate refills it and its burst (4 times the rate, at least 10: Free is 2 a second, burst 10) is what a key may send at once. Exceeding a limit is a 429 with Retry-After and, in limit, the name of the limit that stopped you.

Usage is counted per key, per hour and per endpoint class, and is visible in your account. No per-request log of what you asked is kept.

On in production since 2026-10-02. Six requests are payable without a key: POST /v2/snapshots, POST /v2/snapshots/history, POST /v2/screen, POST /v2/candles, GET /v2/agent/state (per rule named) and GET /v2/archive/{listing}/{layer}/{day} (per file). Called with no Authorization header they are answered 402 with a price in USDC on Base (x402), and the same request with a signed payment in PAYMENT-SIGNATURE is answered as Pro answers it, for that one request. A request that carries both a key and a payment is the key’s: the payment is not read. The prices, the order, and what is charged when something goes wrong are in the limits and at docs.debyko.com/api/x402.

The same 402 also offers a plan (Mini, Standard, Pro, Pro Plus, at the price of checkout) for 30 days with no renewal: pay its amount and the answer is a key of that plan, shown once, with no account (Agent rules need a free account the key is linked to). From three days before such a key expires every response carries X-Debyko-Key-Expires. GET /v2/agent/state is payable per rule named, and a file of the archive per file (0.10 core, 0.05 top-100). Pay with USDC has the whole of it.