Endpoint
The API is REST over HTTPS. Plain HTTP isn’t accepted.Authentication
Send your API key as a Bearer token on every request:API key
Create an API key
1
Go to your workspace
Open Profile > API Keys in your workspace.
2
Create the key
Click Create and pick the scopes this key should carry.
3
Use it
Send the key as a Bearer token on every request:
Scopes
A key carries scopes that limit what it can do. Pick the narrowest set that lets the integration work. A leaked write-everything key is much worse than a leaked read-only one.Errors
Every error response is JSON with the same shape.error is human-readable. requestId correlates with the X-Lora-Request-Id response header; quote it when filing a support ticket. traceId shows up when the request hit a Sentry trace. code is optional, and when present it’s a machine-readable handle you can branch on.
Minimum shape:
What a 401 means
The 401 body is identical whether the header is missing, malformed, the key is unknown, expired, or disabled. The API deliberately doesn’t tell you which one. Distinguishing them on the wire would let an attacker probe key validity:code field on the generic 401. Treat any 401 as “your request wasn’t authenticated” and check the key you sent.
If the key is valid but lacks the scope an endpoint needs, you get 403 with code: "insufficient_scope" and a required_scope field naming what was missing.
Error codes
Every machine-readablecode the public /v1/* routes emit. Codes are stable. A value won’t be repurposed. New codes may be added.
Idempotency
GET and DELETE are idempotent by definition. For POST and PATCH, send an Idempotency-Key header with a unique string so retries don’t double-write: