API-Referenz
REST-Endpoints, Contracts und interaktive API-Dokumentation
Die vollständige, interaktive API-Dokumentation ist unter food.blessthun.ch/api/docs verfügbar. Dort können Requests direkt getestet und Schemas eingesehen werden.
Alle Pfade sind mit /v1 präfixiert. Authentifizierung erfolgt per Session-Cookie oder Bearer-Token.
Auth
- POST /v1/auth/otp-email: OTP-E-Mail anfordern (Backend sendet via Plunk).
Better Auth Endpunkte (/api/auth/...) werden von der Web App verwaltet (E-Mail OTP, Google OIDC, Sessions). Das Backend validiert Sessions direkt gegen die PostgreSQL-Datenbank.
Products
- GET /v1/products: Aktive Produkte auflisten.
- POST /v1/products: Produkt erstellen.
- GET /v1/products/:productId: Produkt abrufen.
- PATCH /v1/products/:productId: Produkt aktualisieren.
- DELETE /v1/products/:productId: Produkt löschen.
- POST /v1/products/:productId/image: Produktbild hochladen.
- DELETE /v1/products/:productId/image: Produktbild entfernen.
- GET /v1/products/:productId/inventory: Aktuellen Bestand abrufen.
- PATCH /v1/products/:productId/inventory: Bestand anpassen.
- GET /v1/products/:productId/inventory/history: Bestandshistorie abrufen.
Schemas: Product, ProductCreate, ProductUpdate, Inventory, InventoryAdjustment.
Categories
- GET /v1/categories: Kategorien auflisten.
- POST /v1/categories: Kategorie erstellen.
- GET /v1/categories/:categoryId: Kategorie abrufen.
- PATCH /v1/categories/:categoryId: Kategorie aktualisieren.
- DELETE /v1/categories/:categoryId: Kategorie löschen.
Schemas: Category, CategoryCreate, CategoryUpdate.
Menus
- GET /v1/menus: Menus auflisten.
- POST /v1/menus: Menu erstellen.
- GET /v1/menus/:menuId: Menu abrufen.
- PATCH /v1/menus/:menuId: Menu aktualisieren.
- DELETE /v1/menus/:menuId: Menu löschen.
Slots:
- POST /v1/menus/:menuId/slots: Slot erstellen.
- PATCH /v1/menus/:menuId/slots/reorder: Slots sortieren.
- PATCH /v1/menus/:menuId/slots/:slotId: Slot umbenennen.
- DELETE /v1/menus/:menuId/slots/:slotId: Slot löschen.
- POST /v1/menus/:menuId/slots/:slotId/options: Produkt-Option hinzufügen.
- DELETE /v1/menus/:menuId/slots/:slotId/options/:optionProductId: Produkt-Option entfernen.
Schemas: Menu, MenuCreate, MenuSlot, MenuSlotCreate.
Orders
- GET /v1/orders: Bestellungen auflisten.
- POST /v1/orders: Bestellung erstellen.
- GET /v1/orders/:orderId: Bestellung abrufen.
- PATCH /v1/orders/:orderId: Bestellstatus aktualisieren.
Schemas: Order, OrderCreate, OrderStatus, OrderLine.
Payments
- POST /v1/orders/:orderId/payment: Zahlung erstellen (Payrexx Gateway).
- GET /v1/orders/:orderId/payment: Zahlungsstatus einer Bestellung abrufen.
- GET /v1/payments/:paymentId: Zahlung nach ID abrufen.
- POST /v1/payments/webhooks/payrexx: Payrexx Webhook empfangen.
Schemas: Payment, PaymentCreate, PaymentMethod, PaymentStatus.
Users
- GET /v1/users: Benutzer auflisten.
- GET /v1/users/:userId: Benutzer abrufen.
- PATCH /v1/users/:userId: Benutzer aktualisieren.
- DELETE /v1/users/:userId: Benutzer löschen.
Schemas: User, UserUpdate, UserRole.
Invites
- GET /v1/invites: Einladungen auflisten.
- POST /v1/invites: Einladung erstellen.
- GET /v1/invites/:inviteId: Einladung abrufen (public).
- DELETE /v1/invites/:inviteId: Einladung widerrufen.
- POST /v1/invites/verify: Einladungs-Token verifizieren.
- POST /v1/invites/accept: Einladung annehmen.
Schemas: Invite, InviteCreate, InviteStatus.
Stations
- GET /v1/stations: Stationen auflisten.
- GET /v1/stations/me: Eigene Station abrufen (Device-Auth).
- GET /v1/stations/:stationId: Station abrufen.
- DELETE /v1/stations/:stationId: Station widerrufen.
- GET /v1/stations/:stationId/products: Station-Produkte auflisten.
- PUT /v1/stations/:stationId/products: Station-Produkte setzen.
- DELETE /v1/stations/:stationId/products/:productId: Produkt von Station entfernen.
- POST /v1/stations/redeem: Bestellposition an Station einlösen.
Schemas: Station, StationProduct, RedemptionCreate.
POS
- GET /v1/pos/me: POS-Gerätestatus abrufen (Device-Auth).
- GET /v1/pos/settings: POS-Einstellungen abrufen.
- PATCH /v1/pos/settings: POS-Einstellungen aktualisieren.
- GET /v1/pos/devices: POS-Geräte auflisten.
Schemas: POSSettings, POSSettingsUpdate, PosFulfillmentMode.
Devices
- GET /v1/devices: Geräte-Bindungen auflisten.
- GET /v1/devices/:deviceId: Gerät abrufen.
- DELETE /v1/devices/:deviceId: Gerät widerrufen.
- POST /v1/devices/pairings: Pairing-Code generieren.
- GET /v1/devices/pairings/:code: Pairing-Status abfragen.
- POST /v1/devices/pairings/:code: Pairing abschliessen (Admin).
Schemas: Device, DevicePairing, DeviceType, DeviceStatus.
Jetons
- GET /v1/jetons: Jetons auflisten.
- POST /v1/jetons: Jeton erstellen.
- PATCH /v1/jetons/:jetonId: Jeton aktualisieren.
- DELETE /v1/jetons/:jetonId: Jeton löschen.
Schemas: Jeton, JetonCreate, JetonUpdate.
Error Model
Alle Fehler folgen dem Error-Schema. Admin-Mutationen erfordern ein CSRF Cookie/Header (X-CSRF).
Integration Setup
- Payrexx:
PAYREXX_INSTANCE,PAYREXX_API_SECRET,PAYREXX_WEBHOOK_SECRETsetzen. Siehe Zahlungen. - Better Auth:
BETTER_AUTH_SECRET,DATABASE_URL, Google OAuth Client ID/Secret in Web App konfigurieren. - SumUp (Android): Affiliate Key in CI; App Login via SDK.
- E-Mail (Plunk): API Key plus From/Reply-Konfiguration.