Tokens and scopes
Create scoped credentials for scripts and understand the sensitive actions they can never perform.
On this page
A personal access token gives a script or program controlled access to your budget. Depending on the scope you choose, it can read the items, forecast, and exports or also change budget data without using your password.
Making one
Account → API access → New token. A name, at least one scope, and an expiry — 30 days, 90, a year, or never.
The token is shown once, at creation. Only a hash of it is stored, so it
cannot be shown again; if you lose it, revoke it and make another. It begins
with ebbe_pat_, making it easier for secret scanners to recognise an
accidentally committed token.
Send it as an ordinary bearer token:
Authorization: Bearer ebbe_pat_...
Up to 50 per account, expired ones included. Revoke takes effect at once.
The “last used” figure is coarse — written at most once an hour — so it is useful for “is this token still in use at all” and not for tracing individual calls.
The two scopes
Two scopes are available:
budget:read— read the budget, the categories, the items, the balance readings, the tag settings, the forecast, and both exports.budget:write— create, change and delete those things. It implies read: a token with write can read, and you do not need both.
Choose read access for reporting and write access only when the program needs to maintain the budget.
What a token cannot do
Anything about your identity — changing your password or address, deleting the account, issuing another token. A credential that could mint its own replacement or destroy the account it belongs to is not a limited credential at all.
Bulk changes — importing, emptying the budget, loading demo data, or pruning. These remain in the interface, where you can review and confirm them.
Administration. No token scope can manage accounts or change the service configuration.
Rate limits
| What | Allowance |
|---|---|
Anything under /api |
300 per 5 minutes |
| Forecast and occurrence endpoints | 120 per 5 minutes |
| The JSON exports | 10 per 5 minutes |
Limits are counted separately for each token. For backups, fetch an export on a schedule rather than in a loop.
The full reference
Open /api/docs for the current endpoint list. Ebbe generates this reference
from the routes available to tokens, so it stays in step with the server. Its
Authorize button lets you paste in a token and try a call directly on the
page.
/api/openapi.json is the same thing as a machine-readable document.
When something is refused
A refusal names a code rather than a sentence, so a program can branch on it
and a person can look it up. 401 means the token is unknown, expired or
revoked; 403 means it is valid but lacks the scope; 409 means a ceiling was
reached, and the response names which one. See
limits.