Making requests
The request format, rate limits, versioning, and how lists behave.
The base URL is https://api.kitegraph.com, and every path is under /v1. Requests carry a bearer key; responses are JSON unless a file is returned (an export).
Request bodies
Write endpoints take a JSON body with Content-Type: application/json. The one exception is PUT /v1/charts/{id}/data, which takes a raw CSV body (Content-Type: text/csv).
Rate limits
Requests are limited per account, per minute. Minting more keys does not raise the ceiling; the budget is shared across the account's keys.
| Plan | Requests per minute |
|---|---|
| Free | 60 |
| Starter | 120 |
| Professional | 300 |
| Business | 600 |
Over the limit returns 429 rate_limited with a Retry-After header in seconds. Back off for that long, then continue. The limit is checked before the key's scope, so a rate-limited request with a wrong-scope key returns 429, not 403.
Exports have a separate limit: at most two render at once. A busy renderer returns 503 export_busy with Retry-After: 5. For higher limits or an SLA, reach out.
Lists
- GET /v1/statistics returns up to 25 results; GET /v1/sources/{source}/dimensions/{dim} returns up to 30. These caps are fixed; there is no limit parameter. Narrow with search.
- GET /v1/charts and GET /v1/folders return the full set in your workspace. They are not capped and not paginated.
Versioning
The version is in the path (/v1). Within v1, response fields may be added, but existing ones are not renamed or removed, so parse defensively and ignore unknown fields.