Authentication and API keys
Available onProResearch
Every call to the REST API carries an API key. A key belongs to your account, has the scopes you gave it, and counts against your plan's limits. This page shows how to create one and use it. The scope list and the limits per plan are on Keys, scopes and limits.
Before you start
- A Pro or Research plan. Free accounts can create MCP keys only, which work at the MCP server and not at the REST API. See Connect an MCP client.
Create a key
- Open Settings and choose API and MCP.
- Under API keys, press Create key.
- Type a Key name that tells you where the key is used, for example
nightly-sync. - Tick the Scopes the key needs and nothing more. Write scopes let the key change your library, so give them only to scripts you trust.
- Press Create.
- Copy the key now. It starts with
pk_, and Readsira shows it only once. After that the list shows a short form such aspk_1a2b...9z8y.
The key list shows when each key was last used. A key that was never used says Never used. The first time a key is used, Readsira adds a notice in the app that names the key, so an unexpected use is visible.
Send the key with a request
Send the key in the Authorization header as a bearer token:
curl https://api.readsira.com/rest/v2/usage \
-H "Authorization: Bearer $READSIRA_KEY"
The X-API-Key header works too:
curl https://api.readsira.com/rest/v2/usage \
-H "X-API-Key: $READSIRA_KEY"
A key in the address (?api_key=pk_...) is refused with 401 and the code API_KEY_IN_QUERY,
because addresses end up in logs and browser history.
Keep the key in an environment variable or a secret store. Do not put it in code that is committed, in a web page, or in an app you ship to other people.
Check that it works
GET /rest/v2/usage answers for any scope. It shows your plan, today's request count and the
limits of this key.
{
"success": true,
"data": {
"plan": "pro",
"requestsToday": 12,
"requestsPerDay": 10000,
"mcpCallsToday": 0,
"mcpCallsPerDay": 10000,
"requestsPerHour": 600,
"askAnswersPerMonth": 300,
"aiBudget": [{ "group": "chat", "percentUsed": 3 }]
},
"meta": {
"timestamp": "2026-11-04T09:00:00.000Z",
"path": "/rest/v2/usage",
"method": "GET",
"statusCode": 200
}
}
The numbers above are an example; yours are your plan's limits. If the call answers 401, the key
is wrong, revoked or expired. If it answers 402 PLAN_REQUIRED, the account is on Free. See
Rate limits and errors.
Which scope a route needs
A route refuses a key without its scope with 403 SCOPE_REQUIRED. The reference names the scope
under every route. The most used ones:
| Scope | Lets the key |
|---|---|
read:library | Search, read documents, chunks and transcripts |
ask:library | Ask questions answered with citations (uses your AI budget) |
read:projects | List projects and read their context |
write:projects | Add sources and notes to projects |
write:uploads | Upload audio, video and PDF files |
read:bookmarks, write:bookmarks | Read and write bookmarks on the /api/v1/bookmarks routes |
read:collections | Read collections on the /api/v1/collections routes |
Creating a key with a scope your plan does not include answers 400 SCOPE_NOT_ALLOWED.
Replace or remove a key
On the key's row, open the actions menu.
- Regenerate gives the key a new secret. The key keeps its name, scopes and history, and the old secret stops working at once. Use it when a key may have leaked, then update your scripts.
- Revoke deletes the key. Scripts that use it stop working.
The Activity list on the same page shows each call a key made: the time, the route, the status and the number of results. It does not store your search text or document content.
Tips
- Use one key per script, so you can revoke one without breaking the others.
- Give a read-only job only read scopes.
- Treat text returned from saved pages as data, never as instructions to a model.