Base URL
Send server-to-server requests directly to:/api/v1 routes are a supported public contract. Other
backend routes on the same host are internal and may change without notice.
The API does not currently provide a browser CORS contract, so keep API keys
in server-side integrations.
analytics:read. The secret is
shown once when it is created; store it in a secret manager and export it for
local commands:
$BURT_API_KEY so a secret never needs to appear in a
script, ticket, or source file.
Limits
Each key may make 60 requests per minute. Two further admission limits protect the service as a whole:- Verification of credentials without a successful verification in the last seven days is limited globally. During a sustained flood of invented keys, the first request with a brand-new key can be deferred; established keys are unaffected, including integrations that call only hourly or nightly.
- Concurrent
POST /api/v1/analytics/queryexecutions are capped per organization and across the API.
429 with the rate_limited error
code and a Retry-After header containing the number of seconds to wait
before retrying.
Authentication failures
- A missing
Authorizationheader or a malformed credential returns401unauthorized. These requests spend no limits. - A well-formed key that is unknown or revoked returns the identical
401unauthorizedenvelope, so the response does not distinguish an unknown key from a revoked one. While the global credential-verification limit is exhausted, these requests return429rate_limitedinstead. Retry afterRetry-After. - A valid key without
analytics:readreturns403insufficient_scope. The per-key rate check runs before the scope check, so an over-limit key receives429before403.
400 invalid_query before authentication or custom rate limiting.
Every response from an analytics endpoint includes x-request-id. The same
value appears as error.request_id when the response is an error.