All pages
Reference
Authentication
Every request carries your key as a bearer token against https://omniscape.io. There is no other scheme, no cookie, and no unauthenticated endpoint.
Authorization: Bearer sk_live_…Keep the key server-side. It is shown once when it is minted and cannot be retrieved afterwards; if it leaks, revoke it in Settings → API and mint another. A revoked key is 401 api_key_revoked immediately, not at the end of some cache window.
Scopes
Keys are default-deny: a call is permitted only when its exact scope is on the key. There are no wildcards and nothing is implied. Mint a key with the least it needs — a key that can only read renders cannot start one, and so cannot spend.
| Scope | Grants |
|---|---|
media:read | GET /api/v1/media, GET /api/v1/media/{id}/preview |
media:write | POST /api/v1/media — upload a photo to your library |
renders:create | POST /api/v1/renders — the only scope that can spend |
renders:read | GET /api/v1/renders/{id}, GET /api/v1/renders/{id}/download, GET /api/v1/usage |
Scopes are fixed when the key is minted. Adding one means minting a new key, which is deliberate — it makes a widening of privilege a visible event rather than an edit.
Request ids
Every response — success or failure — carries an X-Request-Id header, and error bodies repeat it as request_id:
X-Request-Id: 0f1c8f6a-3b21-4d0e-9a77-2c1f5e8b44d9Log it. It is the one thing that lets us trace a specific call for you — the detail of what actually went wrong stays on our side, and that id is how we find it.
What a failed auth looks like
Deliberately uninformative. An unknown key and a wrong secret return the same 401 invalid_api_key, so the API cannot be used to test whether a key exists. For the same reason a render or a photo that is not yours is 404, never 403: a 403 would confirm the object is real.
The full list is on Error handling.