Pro · Developer API
Build on your own inventory.
The Reliqra API lets Pro workspaces read and update inventory, record sales, and read shipment records shared with the app, extension and Cloud. Base URL: https://api.reliqra.com/v1.
Authentication
Every request carries your key in a header. There's no OAuth flow to implement.
- Create keys in Cloud. Settings › Developer API, named and scoped. The full key is shown once, at creation.
- Pro only. A key from a non-Pro workspace gets
403 plan_requiredon every route. Re-upgrading restores the same key. - Scoped, not all-or-nothing. Each key carries only the scopes you grant it.
- Revoke anytime. Revoking works even on a downgraded workspace.

Reference
Routes.
POST /orders is reserved and returns 501 today, so clients can detect it.
| Route | Scope | Notes |
|---|---|---|
GET /inventory | inventory:read | Filters: status, updated_after. Paginated. |
GET /inventory/{reliqra_id} | inventory:read | 404 if not in your workspace. |
PATCH /inventory/{reliqra_id} | inventory:write | Update status, sold_price, cost, value or quantity. Send JSON null to clear a value; omit a key to leave it untouched. |
GET /items/{item_id}/image/{front|back} | inventory:read | Redirects to a short-lived signed photo URL. Never returns the URL in a JSON body. |
GET /sales | sales:read | Filter: since (ISO date). Paginated. |
POST /sales | sales:write | Record a sale. Idempotent on (marketplace, marketplace_external_id) when provided. |
GET /shipments | shipments:read | Includes nested shipment items. |
GET /events | events:read | Pull-based change feed: ?after=<cursor>. Poll with your stored cursor. |
POST /orders | orders:write | Reserved — returns 501 today. |
Scopes
Available scopes: inventory:read, inventory:write, sales:read, sales:write, shipments:read, events:read, and the reserved orders:write. A call missing the scope it needs gets 403 missing_scope.
Pagination & writes
?limit= (default 100, max 500) and an opaque ?cursor=. Every list response includes next_cursor, null when you're on the last page. Writes accept an Idempotency-Key header. Replay the same key and you get the original result back instead of a duplicate.
Errors & rate limits
Error Shape
{"error":{"code","message"}}. Common codes: invalid_key, revoked_key, missing_scope, plan_required, not_found, validation_error, rate_limited.
Rate Limit
120 requests/minute per key by default. A 429 carries Retry-After, a number of seconds.
5xx Is Retryable
internal_error, upstream_error and service_unavailable are infrastructure paths. Back off and retry.
Questions about a specific integration?
The events feed is built for polling-based sync (accounting tools, your own site). Tell us what you're building and we'll point you at the right routes.
Ask About the API →