For developers
From an API key to an order with trackingUrl — first Partner API v1 integration.
A developer wires a shop or a till to Delieta through Partner API v1. The tenant comes from the key. The request never sends companyId or tenantSlug. Money is whole grosz; the only v1 currency is PLN.
Issue a key
In the panel: Settings → Integrations. The plaintext key is shown once. Format: dlt_live_… or dlt_test_….
- A secret key (
orders:write,eta:quote) lives on the server. Never in the browser, never asNEXT_PUBLIC_. - A publishable key has only
catalog:read. It may go into a static shop because it cannot read anything private.
A test key reads the same catalog as live, but will not create an order (test_key_readonly). POST /api/v1/orders needs dlt_live_….
Read the menu, then a quote, then an order
Three calls, in this order, close the shop loop:
GET /api/v1/menu— catalog of the key’s company. Scopecatalog:read.POST /api/v1/quotes— a minute window to an address. Scopeeta:quote. Always a range, never a guarantee.POST /api/v1/orders— a ticket to the kitchen. Scopeorders:write. TheIdempotency-Keyheader is required.
The 201 response carries order.trackingUrl. That is the link you give the customer — the /o/… page. Do not invent a second tracking URL.
Read whether the kitchen accepted
If the company requires acceptance, a new ticket starts in pending_acceptance. State is changed by a person or a time limit — not your backend. That is why GET /api/v1/orders/{id} exists: it spends the read budget, not the create budget.
Storefront contract, not a webhook
A static shop (Next export) bakes the menu at build and keeps a cart of { itemId, quantity }. That is the storefront contract. Delieta does not host that shop.
There are no order-status webhooks. Poll GET.
Full reference, matching GET /api/v1/openapi: Partner API.

