POST /generate is authenticated with an API key, sent as a bearer token.
tipar_live_aB3dE... — the tipar_live_ prefix followed by 32 random characters. There is no separate API secret or signature; the key alone authenticates the request.
Creating a key
API keys are managed from the dashboard, not from the API:Sign in
app.tipar.dev signs you in with a passwordless magic link sent to your email.
Create a key
Under API keys, give the key a name (something that says where it’s used —
prod-billing-worker, staging) and create it.The name and a four-character suffix (e.g.
…aB3d) are kept so you can recognise a key in the dashboard. The suffix is not enough to use the key — only the value you copied at creation is.Using a key
Send it as a bearer token on every request:When authentication fails
A missing, malformed, or revoked key returns401 Unauthorized with a WWW-Authenticate: Bearer header. The body is a Problem Details document. The request never reaches the renderer, so no quota or rate limit is consumed.
| Situation | Result |
|---|---|
No Authorization header | 401 Unauthorized |
Header isn’t Bearer <key> | 401 Unauthorized |
| Key doesn’t exist or was revoked | 401 Unauthorized |
| Valid key, but monthly quota reached | 402 Payment Required — see quotas |
Revoking and rotating
Revoke a key from the dashboard at any time. Revocation takes effect within seconds across the service; the next request with that key gets401.
To rotate without downtime:
Good practice
Keep keys server-side
Use a key only from a backend you control. Never embed it in a browser, a mobile app, or anything a user can inspect.
Store in env / secrets
Inject the key through environment variables or a secrets manager. Keep it out of source control and CI logs.
One key per use
Separate keys for prod, staging, and each service. Revoking one then never affects the others.
Rotate on exposure
If a key might have leaked, revoke it immediately and mint a replacement. There’s no limit on how many keys you can hold.