REST API · JSON · X-Site-Token

API Documentatie

Stuur bestellingen vanuit je webshop rechtstreeks naar het KassaPay kassasysteem.

POST /api/site/orders

X-Site-Token

Elke request naar /api/site/orders vereist een geldig token via de siteAuthentication middleware. Voeg de volgende header toe aan elke request:

🔐

X-Site-Token header vereist
Voeg dit toe aan je HTTP request:
X-Site-Token: <jouw-token>
Content-Type: application/json


Alle velden

Stuur een JSON body mee met de volgende velden. Verplichte velden moeten altijd aanwezig zijn, anders krijg je een 400 terug.

Veld Type Verplicht Beschrijving
id UUID string Ja Unieke order ID (UUID v4). Duplicate ID geeft een 409 conflict terug.
fname string Ja Voornaam van de klant.
lname string Ja Achternaam van de klant.
email string Ja E-mailadres van de klant.
phone string Nee Telefoonnummer. Wordt null als weggelaten.
pickup boolean Ja true = afhalen  ·  false = levering aan huis.
pickup_time string Nee Gewenste afhaaltijd, bijv. "18:30".
delivery_type string Nee Wordt automatisch afgeleid van pickup als weggelaten. Waarden: "afhalen" / "levering".
street string Nee* Straat + huisnummer. Vereist bij levering.
zip string Nee* Postcode. Vereist bij levering.
city string Nee* Stad. Vereist bij levering.
remarks string Nee Opmerkingen van de klant, bijv. allergieën of wensen.
subtotal float Ja Subtotaal zonder belasting. Afgerond op 2 decimalen.
tax float Ja Belastingbedrag. Afgerond op 2 decimalen.
total float Ja Totaalbedrag inclusief belasting.
status enum Ja Status van de bestelling. Gebruik "pending" voor nieuwe bestellingen. Opties: pending · preparing · completed · cancelled.
created_at ISO 8601 Ja Tijdstip van bestelling, bijv. "2025-05-15T18:30:00.000Z".
source string Ja Herkomst van de bestelling. Gebruik altijd "site" voor webbestellingen.
items array Ja Lijst van bestelde producten. Minimaal 1 item vereist. Zie items[].
betaling object Nee Betalingsgegevens. Zie betaling{}.

* Conditioneel verplicht: street, zip en city zijn vereist wanneer pickup = false.


Geneste objecten

De velden items en betaling hebben elk hun eigen structuur.

items[] Per product in de bestelling
Veld Type Verplicht
product_id UUID string Ja
quantity integer Ja
betaling{} Betalingsgegevens
Veld Type Verplicht
payment_method string Nee
checkout_id string Nee

Voor payment_method gebruik je "card" of "cash". Standaard is "card".


Response codes

De API geeft standaard HTTP statuscodes terug.

201
Created

Bestelling succesvol aangemaakt. Geeft het volledige order object terug als JSON.

400
Bad Request

Verplichte velden ontbreken, geen items, of product ID niet gevonden in de database.

401
Unauthorized

Ongeldige of ontbrekende Bearer token.

409
Conflict

Een order met dit id bestaat al in de database.

500
Server Error

Interne fout. Response bevat error en sql velden voor debugging.


Volledige request

Een compleet voorbeeld van een leveringsbestelling met twee producten.

JSON — Request Body
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "fname": "Jan",
  "lname": "Janssen",
  "email": "jan@email.com",
  "phone": "0478123456",
  "pickup": false,
  "pickup_time": null,
  "delivery_type": "levering",
  "street": "Kerkstraat 12",
  "zip": "2000",
  "city": "Antwerpen",
  "remarks": "Geen uien aub",
  "subtotal": 84.50,
  "tax": 10.14,
  "total": 94.64,
  "status": "pending",
  "created_at": "2025-05-15T18:30:00.000Z",
  "source": "site",
  "items": [
    { "product_id": "abc123-...", "quantity": 2 },
    { "product_id": "def456-...", "quantity": 1 }
  ],
  "betaling": {
    "payment_method": "card",
    "checkout_id": "ch_abc123xyz"
  }
}