Everything you need to call the API from your own scripts and tools. The API is read only: it can look at your projects, but it cannot change anything. For the basics, see API access. For error codes and request limits, see API errors and limits.
Download the description
- OpenAPI 3.1:
https://app.klientbrain.ai/api/v1/openapi.json. Open it in any API tool to try every address, or generate a client library from it. - Postman collection:
https://app.klientbrain.ai/api/v1/postman.json. Import it into Postman, then set theapiKeyandprojectIdvariables.
Neither file needs a key.
API keys
Open Settings, then API keys, and choose Generate API key. Only a workspace Admin can see this tab.
- Access: choose Whole workspace to read every project, or pick one project. A key tied to one project can read that project and nothing else. Anything else answers 404, as if the project did not exist. Tie a key to one project when you hand it to a single tool or a single client.
- Expiration: Never, 30 days, 60 days or 90 days. An expired key answers 401
key_expired. Generate a new one and swap it in. - Read only: a key is read only unless you choose Read and write under Permissions when you make it. That choice appears only where your workspace has it switched on; see Change projects through the API.
- Last used: the key table shows when each key last made a request.
- Shown once: copy the key straight away. It is not shown again. If you lose it, revoke it and generate a new one.
- Revoke: revoking a key stops it working at once. It stays in the list, marked Revoked.
Send the key as Authorization: Bearer YOUR_KEY. Nothing else is read: not a query string, not another header.
Addresses
All addresses start with /api/v1 and are GET. Start with /api/v1/projects for the project ids.
| Address | What it returns |
|---|---|
/projects | Your projects |
/projects/{id} | One project |
/projects/{id}/overview | Visibility, share of voice, citation rate, position and sentiment, with ranges, and results by engine |
/projects/{id}/competitors | Every tracked brand's figures |
/projects/{id}/prompts | Each tracked prompt with its latest result on every engine |
/projects/{id}/answers | What AI says about the brand: sentiment, themes and open inaccuracies |
/projects/{id}/sources | The websites AI answers cite |
/projects/{id}/fixes | The fix list, best first |
/projects/{id}/reports/{metric} | One metric over time, for all engines and each engine. Metrics: visibility, share-of-voice, citation-rate, sentiment, position |
/projects/{id}/responses | The stored AI answers, newest first, with the full text, the brands named, the citations and the searches the engine ran. Add question_id for one prompt |
/projects/{id}/responses/{responseId} | One stored AI answer |
/projects/{id}/sources/urls | Every page AI answers cite, most cited first |
/projects/{id}/traffic/bots | Visits by AI crawlers, from the server log counts uploaded for the project. Add days (7, 30 or 90) |
The figures are the ones the app shows. Rates are percentages from 0 to 100, and position 1 means named first.
Add from and to (as 2026-10-01) and engines (a comma separated list of engine ids) to narrow most of them.
Paging
Long lists take limit and cursor. Each page answers nextCursor, which is a string to pass back as cursor for the next page, or null on the last page, and hasMore. A Link header with rel="next" points at the next page too. Treat a cursor as opaque. A cursor the API did not give you answers 400 bad_cursor.
Request limits
Every answer carries RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset (seconds until the window ends) and RateLimit-Policy, as well as the X-RateLimit-* headers. Past a limit the API answers 429 with Retry-After. Every answer also carries X-Request-Id; quote it if you contact support.
What is not in the API
Visits from Google Analytics are not in the API. They are shown in the app only.