Dla programistów

Od klucza API do zamówienia ze sklepu: menu, konfiguracja, terminy, checkout, wynik i status. Plus ścieżka klucza sekretnego.

Partner API v1 łączy witrynę albo kasę z Delietą. Klucz wskazuje firmę: żądanie nigdy nie podaje companyId ani tenantSlug. Kwoty podajesz w całkowitych groszach, jedyną walutą jest PLN. Są dwa warianty: sklep (klucz publikowalny, po stronie serwera sklepu) i własny system (klucz sekretny).

Wystaw klucz

W panelu: Ustawienia → Dla programistów. Tekst klucza widać raz. Format: dlt_live_… albo dlt_test_…. Wysyłasz go jako Authorization: Bearer … albo x-delieta-api-key: ….

  • Klucz publikowalny to dokładnie catalog:read + checkout:create. Trzyma go sklep po stronie serwera, nie w przeglądarce.
  • Klucz sekretny dostaje dodatkowo orders:write, eta:quote, reservations:write albo catering:write. Zostaje na serwerze, nigdy jako NEXT_PUBLIC_.
  • Klucz testowy czyta te same produkty co live i liczy wycenę, ale każda próba zapisu kończy się odmową test_key_readonly. Do tworzenia zamówień potrzebujesz dlt_live_….

Sklep: od menu do statusu

Przepływ sklepu to sześć odczytów i zapisów, wszystkie kluczem publikowalnym:

  1. GET /api/v1/menu — produkty firmy, do której należy klucz.
  2. GET /api/v1/shop-config — marka, godziny, moduły, zasady zamówień.
  3. GET /api/v1/checkout/slots — kiedy sklep przyjmie zamówienie.
  4. POST /api/v1/checkout — koszyk { itemId, quantity, options? }; ceny liczy Delieta. Wymaga Idempotency-Key.
  5. GET /api/v1/checkout/result — wynik płatności online dla strony potwierdzenia.
  6. GET /api/v1/orders/{id}/status — gdzie jest zamówienie, dla strony śledzenia.

Klient wysyła co, nigdy ile. Płatność online odpowiada adresem url, gotówka od razu trackingUrl; ten adres przekazujesz gościowi. Stan sklepu (modules, ordering, hours, closures) czytaj z shop-config, nie zgaduj. Rezerwacje, zapytania i catering to osobne operacje opisane w Partner API.

Własny system: wycena i zamówienie

Kasa albo kanał partnera używa klucza sekretnego i wywołuje:

  1. POST /api/v1/quotes — okno minut do adresu (eta:quote). Zawsze zakres, nigdy gwarancja.
  2. POST /api/v1/orders — zamówienie z cenami podanymi przez Ciebie (orders:write). Idempotency-Key jest obowiązkowy.
  3. GET /api/v1/orders/{id} — odczyt przebiegu zamówienia (orders:write), liczony do limitu odczytów.

Odpowiedź 201 zawiera order.trackingUrl: link, który przekazujesz klientowi (strona /o/…). Nie twórz drugiego adresu śledzenia. Gdy firma wymaga akceptacji, zamówienie zaczyna od stanu pending_acceptance; stan zmienia ktoś w kuchni albo upływ limitu czasu, a nie Twój backend.

Kontrakt witryny i webhooki

Backend sklepu to pakiet @delieta/shop-runtime, a nie pliki w repozytorium sklepu: to opisuje kontrakt witryny. Jedyne, co Delieta wysyła do sklepu, to podpisany sygnał odświeżenia, opisany w Webhookach. Webhooków statusu zamówienia nie ma — status odczytujesz przez GET.

Pełny opis, zgodny z GET /api/v1/openapi: Partner API.