Authentication
Authenticate every request with a bearer token: an organization API key or a session JWT.
Every authenticated request to the CloudRaker API carries a single header:
The gateway accepts two kinds of token under that header and tells them apart automatically:
- Organization API keys — a machine credential scoped to one organization. This is the developer path.
- Session JWTs — the token the web app uses for a signed-in human. They carry that person’s role and per-resource grants.
Both resolve to the same tenant-scoped identity, so both can call the same routes. One exception is covered under Capability differences below.
Organization API keys
An org API key is a long-lived credential that belongs to your organization, not to a person. Its actions are recorded under the key’s name. Use it for server-to-server automation.
Create a key
Create keys in the app under Admin → API keys (admin-only). The API keys guide has the full UI walkthrough. The plaintext value is shown once at creation. You cannot retrieve it again.
You can also manage keys over the API (admin-gated):
POST /api-keys returns the plaintext key value once, in the 201 response body. Store it immediately. List and get calls never return it again.
Use a key
Send it as the bearer token on any request:
Each gateway instance caches validated key identity for about 60 seconds. A revoked key can keep working for up to one minute before the cache clears. Include this delay in your rotation plan.
Tenant scoping
One organization is one tenant. After authentication, the gateway derives your tenant from the token’s org and scopes every call to it. You never send a tenant id, org id, or slug. A token whose identity has no organization gets 404 {"error":"org not found"}.
API keys vs. session JWTs
Both token kinds resolve to the same tenant, but they differ on one class of route:
The gateway treats an org key as an org-level machine credential. The key passes admin and API-key gates, but it has no user membership. Routes gated on a specific human’s fine-grained resource permission reject a key. Org admins bypass per-resource space checks in all cases.
Session JWTs
The web app’s auth flow mints session JWTs for a signed-in user. They are three-segment JWTs. The platform verifies them against its signing keys. They carry the user’s role, permission claims, and membership id. Do not mint these for server-to-server work. Use an API key instead. This section exists so you recognize them when the web app or an SDK forwards one.
Failure codes
A 503 auth_unavailable is deliberately distinct from 401. During an auth-service outage, a valid key must not look revoked. Treat it as transient and retry with backoff.