🔍

Error responses use a consistent JSON shape:

Error Response Shape
{ "error": "Human-readable message describing the problem." }

Status codes

Success. The response body contains the requested data.

Example — single indicator
{ "value": [62.34], "timestamp": [1708300800] }

Calculation queued. The API has received your request but the result is not ready yet — typically because candle data is being fetched for the first time for this symbol/timeframe combination. Retry the same request after a short delay (1–2 seconds).

202 Response Body
{
  "pending": true,
  "key": "ta:binance:BTCUSDT:1h:rsi:abc123:rmax"
}

The key field is an internal cache key — you do not need to send it in your retry; just repeat the original request.

Invalid request. A required parameter is missing, has the wrong type, or has an unsupported value. The error message identifies the problem.

Examples
{ "error": "Missing required: exchange, symbol, timeframe" }
{ "error": "Unknown indicator: fakeindicator" }
{ "error": "Invalid timeframe: 2h" }

Authentication failed. The Authorization header is missing or the API key is invalid.

Example
{ "error": "Invalid or missing API key." }

Make sure the header is exactly Authorization: Bearer YOUR_API_KEY.

Resource not found. Returned by GET /exchanges/{exchange}/symbols when the exchange identifier is not recognised.

Example
{ "error": "Exchange not found: unknownexchange" }

Rate limit exceeded. You have sent more requests than your plan allows in the current 15-second window. Wait for the window to reset and retry.

Example
{ "error": "Rate limit exceeded. Your plan allows 30 requests per 15 seconds." }

See Rate Limits & Credits for per-plan limits and retry guidance.

Bulk error handling

For POST /bulk requests, a failure in one construct does not fail the whole request. Instead, the failed construct returns an _error key and its indicators return null:

Partial failure in bulk response
{
  "btc_1h": {
    "_error": "Failed to fetch candles: 404 Not Found — check exchange, symbol and timeframe",
    "rsi_14": null
  },
  "eth_1h": {
    "rsi_14": { "value": [55.1], "timestamp": [1708300800] }
  }
}