kitegraph
API access is included on the Professional and Business plans

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).

# a JSON write curl -X POST "https://api.kitegraph.com/v1/charts" \ -H "Authorization: Bearer kg_live_…" \ -H "Content-Type: application/json" \ -d '{ "kind": "line", "series": [{ "statistic": 4821 }] }'

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.

PlanRequests per minute
Free60
Starter120
Professional300
Business600

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.

Making requests — Kitegraph docs