Skip to main content

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:
With a machine-readable code:

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:
There’s no 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-readable code 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: