API Documentatie

PlateDesk REST API. Base URL: https://app.platedesk.nl/api/v1

Authenticatie

Alle authenticated endpoints vereisen een cookie-sessie (ck_token) die je krijgt via POST /auth/login. De sessie is 15 minuten sliding met een absolute limiet van 8 uur.

POST/auth/login Medewerker login met PIN. Body: { slug, pin }. Returnt cookie.
POST/auth/admin-login Admin login met wachtwoord. Body: { slug, email, password }.
GET/auth/me Huidige sessie info (tenant, user, role). 401 als niet ingelogd.
POST/auth/logout Sessie beeindigen.

Bestellingen

GET/orders Lijst orders admin. Query: status, source, limit, offset.
GET/orders/live Actieve orders (new, accepted, preparing, ready, delivering) auth.
POST/orders Nieuwe bestelling auth. Ondersteunt idempotency_key.
PATCH/orders/:id Status updaten admin. Body: { status }.

Voorraad

GET/stock Voorraad per product met per-locatie breakdown.
POST/stock Mutatie: { productId, locationId, type, quantity, note }. Types: ADDITION, REMOVAL, TRANSFER_OUT, TRANSFER_IN, ADJUSTMENT, INTAKE.
GET/purchase-list Open inkooplijst.
GET/purchase-list/suggest Voorspellende inkoop-suggesties obv verbruik. Query: lookback, lead_days.

Loyalty

GET/loyalty/customers Lijst klanten. Query: search, limit.
GET/loyalty/customer/:phone Klant op telefoon met transactiehistorie.
POST/loyalty/customer Klant aanmaken of bijwerken. Body: { phone, name, email }.
POST/loyalty/redeem Punten inwisselen. Body: { customer_id, points }.

HACCP

POST/haccp/temperature Temperatuur-log. Body: { unit_name, unit_type, temperature, target_max }. Auto-status: ok/waarschuwing/kritiek.
GET/haccp/checklists Actieve checklists.
POST/haccp/checklists/:id/run Checklist uitvoering vastleggen. Body: { completed_items, notes }.
GET/haccp/export?days=30 NVWA-export JSON.

Analytics

GET/analytics/menu-engineering Kasavana-Smith matrix classificatie (star/plowhorse/puzzle/dog).
GET/analytics/top-products Top verkopers over N dagen.

Tafels en plattegrond

GET/floorplan Zones en tafels met realtime status (vrij/bezet/gereserveerd).
PATCH/floorplan/tables/positions Bulk posities-update na drag in editor.

Publieke endpoints (geen auth)

GET/public/menu/:slug Publiek menu van een restaurant.
POST/public/order/:slug Bestelling plaatsen (klant-facing).
GET/public/tafel/:slug/:tafel Open rekening pay-at-table.
POST/public/tafel/:slug/:tafel/pay Mollie betaling starten voor tafel.
GET/public/reservations/:slug Beschikbaarheid per datum voor publieke reservering.
POST/public/reservations/:slug Publieke reservering plaatsen.

Errors

Alle error responses hebben format:

{
  "error": "Bericht in het Nederlands",
  "code": "VALIDATION" | "NOT_FOUND" | "UNAUTHORIZED" | "FORBIDDEN" | "CONFLICT" | "RATE_LIMITED" | "INTERNAL"
}

Rate limiting

Mutatie-requests (POST/PUT/PATCH/DELETE) zijn beperkt tot 60/min per IP. Bij overschrijding: HTTP 429.

Webhooks (inkomend, vanuit Mollie etc)

POST/payments/webhook Mollie reguliere order-betaling webhook.
POST/public/tafel-webhook Mollie pay-at-table batch-webhook.

Externe API (voor 3rd-party integraties)

Authenticatie via Authorization: Bearer pd_<hex> header. Genereer API-keys via admin. Scopes: read, write, admin.

GET/external/orders Orders ophalen read. Query: status, limit.
GET/external/menu Menu items read.
GET/external/stock Voorraad per product read.
GET/external/reservations?date= Reserveringen read.
GET/external/loyalty/:phone Klant-saldo read.
POST/external/orders/:id/status Order-status bijwerken write. Triggert order.status_changed webhook.

Outgoing Webhooks

Registreer een URL + events en wij POSTen naar je endpoint wanneer ze plaatsvinden. Requests zijn gesigneerd met HMAC-SHA256:

X-PlateDesk-Signature: sha256=<hex>
X-PlateDesk-Delivery: <uuid>

Verifieer door HMAC-SHA256 van body met je webhook-secret te berekenen. Retry: 3 pogingen (1s, 4s, 16s) bij non-2xx.

Events: order.created, order.paid, order.status_changed, reservation.created, haccp.incident, loyalty.customer_created.

Voorspellingen & analytics

GET/forecast/orders?days=14 Voorspelt orders per dag op basis van historische data. Methode: dow-gemiddelde met trend-multiplier.
POST/shifts/suggest-week Auto-rooster suggestie (medewerkers per dag) obv demand-forecast.
GET/shifts/export-payroll?from=&to= CSV-export met uren en bruto loon per medewerker.

Food waste

POST/waste Waste-log registreren (product, hoeveelheid, reden, optionele foto).
GET/waste/stats Waste-stats over N dagen (totale kosten, per reden, top producten).