Authentication
Authenticate Constaia API calls with ck_live_ and ck_test_ Bearer keys, where to create and revoke them, and why they never go in the browser.
Every call to https://api.constaia.com/v1 (except the public document type catalogue and the signed export downloads) is authenticated with a secret key in the Authorization header:
curl https://api.constaia.com/v1/balance \
-H "Authorization: Bearer $CONSTAIA_API_KEY"Key format
| Prefix | Mode | What it does |
|---|---|---|
ck_test_… | Test | Simulated provider with deterministic responses based on the file name. Free, livemode: false. See Test mode. |
ck_live_… | Live | Analyses documents for real and spends credits. livemode: true. |
The prefix is followed by 24 to 64 alphanumeric characters. The key decides the mode, not a request parameter: the same code runs in test and live by changing only the environment variable.
Creating and revoking keys
Keys are managed in the dashboard, under API keys:
- A test key is created when you sign up so you can start without any setup.
- To create a live key you must have confirmed your email. Otherwise the dashboard answers with the
email_not_verifiederror. If you signed up with Google or GitHub, your email is already verified. - Each key is shown only once, when it is created. Copy it to your secret manager at that moment.
- Constaia stores only a SHA-256 hash of the key: we cannot recover it or show it again. If you lose it, create a new one and revoke the old one.
- A revoked key stops working immediately and returns
401 invalid_api_key.
To rotate keys without downtime (create the new one, deploy, revoke the old one) follow the steps in Security.
Authentication errors
| HTTP | code | When |
|---|---|---|
| 401 | missing_api_key | The Authorization: Bearer … header is missing or malformed. |
| 401 | invalid_api_key | The key does not match the ck_live_/ck_test_ format, does not exist or has been revoked. |
{
"error": {
"type": "authentication",
"code": "missing_api_key",
"message": "Falta la cabecera Authorization: Bearer <api_key>.",
"request_id": "req_01M3PD48ARCDHXGT0XECMARCPD"
}
}Every error follows this shape. See Errors.
The key lives on your server
Never in the browser or a mobile app
A ck_live_ or ck_test_ key gives access to your account and your credits. Do not put it in frontend code, a mobile app, a repository or NEXT_PUBLIC_*/VITE_* variables. Your frontend or app sends the file to your backend, and your backend calls Constaia.
The API has open CORS on /v1, but that does not change the rule: the JavaScript SDK throws secret_key_in_browser if it detects a key in a browser, and the widget rejects any attribute that looks like a key. Publishable browser keys do not exist yet.
Coming soon
Publishable (browser) keys with limited permissions.
CONSTAIA_API_KEY environment variable
Store the key in CONSTAIA_API_KEY. The JavaScript, PHP and Python SDKs and the MCP server read it automatically when you do not pass a key.
CONSTAIA_API_KEY=ck_test_...Minimal examples
They all call GET /v1/balance, which spends no credits.
curl https://api.constaia.com/v1/balance \
-H "Authorization: Bearer $CONSTAIA_API_KEY"Every response carries an X-Request-Id: req_… header. Keep it in your logs and include it if you contact us about a problem.
Next steps
LangChain and LlamaIndex
Wrap Constaia as a LangChain (JS and Python) and LlamaIndex tool so your agents validate documents and get a clear valid, invalid or review verdict.
POST /v1/analyze
Full reference for POST /v1/analyze: request formats, every option and check, the analysis object field by field, status codes and examples.