API Reference
The Reliefs Management API — server-to-server, for trusted backends.
Auto-generated from the unified OpenAPI spec (reliefs-api.json). Endpoints are
grouped by tag in the sidebar.
Building a browser or mobile integration instead? You don't need this API — use the
SDK, which handles authentication for you with a public
pk_ key.
API keys
Every endpoint here requires a mk_ (management) key — used by trusted backends
only. Scoped to a specific restaurant within the org, with full CRUD over
products/menus/restaurants. Never expose it in a browser or mobile binary.
Generated from your Reliefs dashboard under Organization → SDK & API keys.
Authentication
Every endpoint takes the key in an X-Api-Key header:
X-Api-Key: mk_live_your_keyThe key must be valid, not revoked, and (for mk_) the requesting IP must not be on the
block list.
Errors
Errors share a consistent shape:
{
"success": false,
"code": "FORBIDDEN",
"message": "Forbidden",
"error": "Forbidden"
}Common codes: INVALID_API_KEY, FORBIDDEN, RESTAURANT_NOT_FOUND,
PRODUCT_NOT_FOUND, DRAFT_NOT_FOUND, LANGUAGE_NOT_AVAILABLE.
Rate limits
Each key is rate-limited. Check X-RateLimit-Remaining and X-RateLimit-Reset on every
response. Over the limit, the API returns 429 Too Many Requests with a Retry-After
header.
Flutter
Embed the Reliefs 3D product viewer in a Flutter app.
Create a product draft
Creates a new product **draft** in a restaurant. The product is not publicly visible until the draft is published via `POST /{restaurantId}/products/{productId}/draft/publish`. Name and description are provided as translation maps (e.g. `{ "FR": "Burger", "EN": "Burger" }`). Requires a management API key (`mk_`).