Get started
- In Kaptr, open Settings → API and create a key. Name it after the tool that will use it.
- Copy the key: it is shown only once.
- Call the API at
https://kaptr.me/api/v1with the key in theAuthorizationheader.
curl https://kaptr.me/api/v1/me \
-H "Authorization: Bearer kaptr_…"
Every answer is JSON. Lists are paginated: pass limit (1–100) and the nextCursor of the previous page as cursor.
Keys and access
A key belongs to your account and acts as it: it sees your dashboards, your team's dashboards and the ones shared with you, with the same rights as in the app (a team viewer only reads, only a dashboard's owner shares it). Keep it like a password, and revoke it in Settings → API if it leaks: the next request made with it is refused.
| Key | What it can do |
|---|---|
| Read only | Reads your dashboards, snapshots, their history, your team and your jobs. Changes nothing and spends no credits. |
| Read and write | Also creates, renames, shares and deletes dashboards and snapshots, manages your team, and runs Kaptr AI (it spends your AI credits, or your team's). |
An account can hold up to 10 keys. They work while the account has Business.
Limits
Each key may send, per minute, 60 reads, 30 changes and 5 AI actions; each account 50,000 requests per month, and up to 3 AI jobs at a time. Every answer says where you stand:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57
X-RateLimit-Reset: 1791380460
Past a limit the API answers 429 with a Retry-After header (in seconds). AI actions also use AI credits, exactly as in the app: Kaptr Fast, Vision and Agent cost their published price per generation, a cloud refresh 1 credit, Ask AI its usual price. Your plan's limits apply too (dashboards per account, snapshots per dashboard).
Errors
{
"error": {
"code": "scope_required",
"message": "This key is read-only. Create a read and write key in Kaptr → Settings → API.",
"requestId": "req_3f2a9c1d…"
}
}
| Status | Codes |
|---|---|
| 400 | invalid_request |
| 401 | unauthenticated, invalid_api_key |
| 402 | insufficient_credits |
| 403 | plan_required, scope_required, forbidden |
| 404 | not_found (also what you get for something that isn't yours) |
| 409 | conflict, limit_reached |
| 429 | rate_limited, quota_exceeded |
| 5xx | internal, unavailable: try again, and quote the requestId to support. |
Retries without duplicates. Creations accept an Idempotency-Key header (8–100 characters): the same request sent again with the same key returns the first result instead of doing it twice.
Dashboards
| Request | What it does |
|---|---|
GET/dashboards | Your dashboards: your own, your team's, and those shared with your (verified) address. |
POST/dashboards | Creates one: title, and team: true to create it in your team. |
GET/dashboards/{id} | One dashboard, with its number of snapshots and its link. |
PATCH/dashboards/{id} | title, favorite, archived; team (owner) moves it into or out of your team. |
DELETE/dashboards/{id} | Deletes it and everything on it (owner, or the team's owner and admins). |
PUT/dashboards/{id}/sharing | Owner: visibility (public or private) and sharedWith (the whole list of addresses). |
POST/dashboards/{id}/invitations | Owner: e-mails a link to the dashboard to emails. |
curl -X POST https://kaptr.me/api/v1/dashboards \
-H "Authorization: Bearer kaptr_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: weekly-report-2026-41" \
-d '{"title": "Weekly market report"}'
Snapshots
| Request | What it does |
|---|---|
GET/dashboards/{id}/snapshots | The snapshots of a dashboard: image, source page, crop, place on the board, text read on it, refresh state. |
GET/snapshots/{id} | One snapshot. |
PATCH/snapshots/{id} | title; frame (x, y, width, height) to move or resize it on the board; dashboardId to move it to another dashboard of the same account. |
DELETE/snapshots/{id} | Deletes it and its history. |
GET/snapshots/{id}/history | Its earlier versions, most recent first (as many as your plan keeps). |
Kaptr AI
AI actions run as jobs: the request answers at once with the job (202), and you follow it with GET /jobs/{id} until its status is completed or failed. Add ?wait=30 to either request to let the API wait for the end (up to 50 seconds).
| Request | What it does |
|---|---|
POST/dashboards/{id}/generations | Adds snapshots found by Kaptr AI: model (fast, vision or agent), prompt, count (1–4), sourceUrls (Fast and Vision: up to 8 pages to capture from). |
POST/snapshots/{id}/refresh | Refreshes an AI snapshot in the cloud. The answer says whether the page changed. |
POST/dashboards/{id}/ask | Ask AI: question, and optionally model, thinking, snapshotIds. The answer cites the snapshots it used. |
GET/jobs/{id} | A job: its status, Kaptr Agent's progress, and its result (the new snapshots, the refreshed snapshot, or the answer). |
curl -X POST "https://kaptr.me/api/v1/dashboards/DASHBOARD_ID/generations?wait=45" \
-H "Authorization: Bearer kaptr_…" \
-H "Content-Type: application/json" \
-d '{"model": "vision", "prompt": "Current S&P 500 heatmap"}'
Credits are reserved when the job starts and charged only for a usable result. A generation that ends while its dashboard is full waits in needs_space: free some room, then read the job again to add its snapshots.
Team
| Request | What it does |
|---|---|
GET/team | Your team, its members, and (owner and admins) its pending invitations and seats. |
GET/team/usage | Owner and admins: AI credits each member spent this month, and their limit. |
POST/team/invitations | Owner and admins: invites emails as admin, editor or viewer. Each new member adds a Business seat. |
DELETE/team/invitations/{id} | Cancels an invitation. |
PATCH/team/members/{id} | Changes a member's role or monthlyCreditLimit (null for none). |
DELETE/team/members/{id} | Removes a member: nothing they made is deleted. |
OpenAPI
The full description of every request and answer is at https://kaptr.me/api/v1/openapi.json (OpenAPI 3.1): import it in Postman, Insomnia or your code generator. A question, or an endpoint you are missing? Tell us.