Base URL
Authentication
ORCA uses two authentication methods depending on the context:- JWT tokens (dashboard)
- API keys (integrations)
Dashboard and frontend requests use JWT bearer tokens:Get a token by logging in:Response:If 2FA is enabled, the login response includes
requires_2fa: true and a temp_token. Complete authentication with:Response format
All endpoints return a consistent envelope:Error codes
| HTTP status | Code | Description |
|---|---|---|
| 400 | bad_request | Invalid or missing request parameters |
| 401 | unauthorized | Missing or invalid token / API key |
| 403 | insufficient_scope | API key lacks the required scope |
| 404 | not_found | Resource doesn’t exist or belongs to another org |
| 429 | rate_limited | Too many requests, retry after cooldown |
| 500 | internal_error | Unexpected server error |
Rate limits
| Endpoint category | Limit |
|---|---|
| Authentication | Strict per-IP (prevents brute-force) |
| File uploads / prescan | 30/min per-user |
| Job creation / start | 20/hour |
| Billing (add credits) | 10/hour |
| Chat queries | Per-user limiting |
| General API | Standard per-user limiting |
| WebSocket | 30 connections/min per IP, 10-min timeout |
Every response includes rate limit headers:When rate-limited, you’ll receive a
429 response. Wait and retry with exponential backoff.Pagination
List endpoints support pagination via query parameters:| Parameter | Default | Max | Description |
|---|---|---|---|
limit | 20 | 200 | Number of items to return |
offset | 0 | - | Number of items to skip |
Organisation scoping
All data is scoped to your organisation. Theorg_id is derived from your JWT token — you cannot access resources belonging to other organisations. This is enforced at the database query level on every endpoint.