Skip to main content

Errors

Errors are application/problem+json (RFC 9457). Branch on code; detail is for humans and may be reworded.

{
"type": "https://data.cyberun.cloud/docs/errors#invalid_argument",
"title": "Bad Request",
"status": 400,
"code": "invalid_argument",
"detail": "symbols is 1 to 100 comma-separated symbols",
"param": "symbols"
}

retry_after is present when the server can estimate a wait. pending and ready are present on data_pending.

Codes​

CodeHTTPMeaningWhat to do
unauthenticated401Missing, malformed, expired or revoked keyFix the key; do not retry unchanged
forbidden403The key lacks a kind, permission, book depth or scopeAsk the administrator for the missing piece
not_found404No such route, instrument, export or fileCheck the path or symbol; for an expired export, submit a new job
invalid_argument400A parameter is missing, malformed or out of rangeFix the request; param names the field
ambiguous_symbol409A spelling names more than one instrument on that dayUse the full symbol or instrument_id
unsupported_resolution400The requested bars are finer than the data, the dataset does not support the request, or the instrument has no historyUse a coarser interval or another dataset
version_unavailable410An old catalog_version or resume_token is no longer keptRepeat without the pinned version, or resubscribe
resource_exhausted413 or 429The request or answer is too large, or a stream limit was hitNarrow the request; for 429, retry after retry_after
quota_exceeded429A per-key request, output, job or stream limit is used upWait retry_after, then retry; ask the administrator for a larger policy
data_pending503The trading days, export files or the previous day are still being preparedRetry with the same request after retry_after
resync_required503A stream client fell behind and its queue overflowedReconnect with the last resume_token
unavailable503A dependency or the calendar is temporarily unavailableRetry with backoff
internal500An unexpected server errorRetry once, then report it with the request id or time

JSON body limits and oversized MCP answers report 413; a stream subscription over its subscription or symbol limit reports 429. The numbers are in Limits. The same code can therefore appear with two statuses; branch on the code and use status only for display.

Retrying​

  • data_pending: retry the same request. Do not start a new job; the missing instrument-days are already queued.
  • unavailable, internal: retry with exponential backoff and jitter.
  • resource_exhausted with 429: wait for retry_after, then retry.
  • quota_exceeded: wait for retry_after; repeated hits mean the policy is too small for the workload.
  • version_unavailable: do not retry the pinned version; drop the pin or resubscribe.
  • Everything else: fix the request or the key first.

The Python SDK retries busy answers and network failures; PendingTimeout means it waited pending_timeout and the data was still being prepared.

Authentication and permissions​

Every /v2 route except GET /v2/openapi.json needs Authorization: Bearer vmk_.... The catalog needs any valid key. Data needs the dataset kind, history, and a book depth for snapshots. Live needs live; exports need export in addition to the data permissions.

A 403 names the missing capability. See API keys and Administration.