The Kaptr API

Read and organize your dashboards and snapshots, manage your team and run Kaptr AI from your own scripts, back office or no-code tools. Included with Business.

Get started

  1. In Kaptr, open Settings → API and create a key. Name it after the tool that will use it.
  2. Copy the key: it is shown only once.
  3. Call the API at https://kaptr.me/api/v1 with the key in the Authorization header.
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.

KeyWhat it can do
Read onlyReads your dashboards, snapshots, their history, your team and your jobs. Changes nothing and spends no credits.
Read and writeAlso 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…"
  }
}
StatusCodes
400invalid_request
401unauthenticated, invalid_api_key
402insufficient_credits
403plan_required, scope_required, forbidden
404not_found (also what you get for something that isn't yours)
409conflict, limit_reached
429rate_limited, quota_exceeded
5xxinternal, 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

RequestWhat it does
GET/dashboardsYour dashboards: your own, your team's, and those shared with your (verified) address.
POST/dashboardsCreates 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}/sharingOwner: visibility (public or private) and sharedWith (the whole list of addresses).
POST/dashboards/{id}/invitationsOwner: 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

RequestWhat it does
GET/dashboards/{id}/snapshotsThe 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}/historyIts 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).

RequestWhat it does
POST/dashboards/{id}/generationsAdds 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}/refreshRefreshes an AI snapshot in the cloud. The answer says whether the page changed.
POST/dashboards/{id}/askAsk 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

RequestWhat it does
GET/teamYour team, its members, and (owner and admins) its pending invitations and seats.
GET/team/usageOwner and admins: AI credits each member spent this month, and their limit.
POST/team/invitationsOwner 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.

Included with Business

Plug your dashboards into your own tools.

Create a key in Settings → API and send your first request in a minute.