For developers
From an API key to a shop order: menu, config, slots, checkout, result and status. Plus the secret-key path.
Partner API v1 connects a shop or a till to Delieta. The key identifies the company: a request never names companyId or tenantSlug. You give amounts in whole grosze, and the only currency is PLN. There are two variants: a shop (publishable key, on the shop's server side) and your own system (secret key).
Issue a key
In the panel: Settings → For developers. The key text is shown once. Format: dlt_live_… or dlt_test_…. You send it as Authorization: Bearer … or x-delieta-api-key: ….
- A publishable key is exactly
catalog:read+checkout:create. The shop holds it on the server side, not in the browser. - A secret key additionally gets
orders:write,eta:quote,reservations:writeorcatering:write. It stays on a server, never asNEXT_PUBLIC_. - A test key reads the same products as live and computes quotes, but every write is refused with
test_key_readonly. To create orders you needdlt_live_….
Shop: from menu to status
The shop loop is six reads and writes, all with the publishable key:
GET /api/v1/menu— the products of the company the key belongs to.GET /api/v1/shop-config— brand, hours, modules, ordering rules.GET /api/v1/checkout/slots— when the shop will take an order.POST /api/v1/checkout— a cart{ itemId, quantity, options? }; Delieta computes prices. NeedsIdempotency-Key.GET /api/v1/checkout/result— the online payment outcome for the confirmation page.GET /api/v1/orders/{id}/status— where the order is, for the tracking page.
The client sends what, never how much. An online payment answers with a url, cash answers at once with a trackingUrl; you hand that address to the guest. Read the shop's state (modules, ordering, hours, closures) from shop-config, do not guess. Reservations, inquiries and catering are separate operations described in Partner API.
Your own system: quote and order
A till or partner channel uses a secret key and calls:
POST /api/v1/quotes— a window of minutes to an address (eta:quote). Always a range, never a guarantee.POST /api/v1/orders— an order with the prices you provide (orders:write).Idempotency-Keyis required.GET /api/v1/orders/{id}— reads the order's progress (orders:write), counted against the read limit.
The 201 response includes order.trackingUrl: the link you pass to the customer (the /o/… page). Do not create a second tracking address. When the company requires acceptance, the order starts in the pending_acceptance state; someone in the kitchen or the time limit changes the state, not your backend.
Shop contract and webhooks
The shop's backend is the @delieta/shop-runtime package, not files in the shop's repository: that is what the shop contract describes. The only thing Delieta sends to the shop is a signed refresh signal, described in Webhooks. There are no order-status webhooks — you read the status with a GET.
The full description, in line with GET /api/v1/openapi: Partner API.

