Webhooks
AuraPOS webhooks laten u realtime op de hoogte brengen van events die zich in uw handel voordoen (nieuw ticket, klantwijziging, enz.) zonder de API te moeten pollen.
Beschikbaarheid
Toegankelijk via AuraPOS-webbackend:
- Inbegrepen in Group en Restaurant Group edities
- Optioneel €24/maand voor Express / Boutique / Studio / Restaurant
Hoe het werkt
- Webhook aanmaken in Instellingen → Webhooks (alleen Owner)
- Publieke HTTPS-URL geven waar AuraPOS notificaties zal versturen
- Events selecteren om te beluisteren (multi-select)
- AuraPOS genereert een unieke HMAC-secret (één keer getoond, kopieer hem)
- Bij elk event verstuurt AuraPOS een HMAC-SHA256 ondertekende POST
- U verwerkt de notificatie serverzijdig (Slack, ERP, enz.)
De 7 beschikbare events
| Event | Geactiveerd wanneer |
|---|---|
ticket.created | Nieuw niet-geannuleerd ticket gevalideerd |
ticket.cancelled | Bestaand ticket geannuleerd |
client.created | Nieuwe klant aangemaakt |
client.updated | Bestaande klant gewijzigd |
produit.updated | Product aangemaakt of gewijzigd |
promotion.created | Nieuwe promotie aangemaakt |
promotion.updated | Bestaande promotie gewijzigd |
Payload-formaat
Bij elk event verstuurt AuraPOS een POST JSON:
{
"event": "ticket.created",
"delivery_id": "uuid-van-deze-levering",
"created_at": "2026-05-17T14:32:08.123Z",
"payload": {
"numero": 1234,
"total_tvac": 55.39,
"mode_paiement": "Bancontact",
"lignes": [...]
}
}
Verzonden HTTP headers
POST /uw-endpoint HTTP/1.1
Content-Type: application/json
User-Agent: AuraPOS-Webhooks/1.0
X-AuraPOS-Event: ticket.created
X-AuraPOS-Delivery: uuid-van-deze-levering
X-AuraPOS-Signature: sha256=<hex hmac van body>
Handtekeningverificatie (veiligheid)
⚠️ Altijd HMAC-handtekening verifiëren om er zeker van te zijn dat het verzoek van AuraPOS komt.
Node.js
import crypto from "node:crypto";
function verifySignature(req, secret) {
const signature = req.headers["x-aurapos-signature"];
if (!signature) return false;
const [algo, hash] = signature.split("=");
if (algo !== "sha256") return false;
const expected = crypto.createHmac("sha256", secret)
.update(req.rawBody).digest("hex");
return crypto.timingSafeEqual(
Buffer.from(hash, "hex"),
Buffer.from(expected, "hex"),
);
}
PHP
function verifySignature($rawBody, $signature, $secret) {
$expected = 'sha256=' . hash_hmac('sha256', $rawBody, $secret);
return hash_equals($expected, $signature);
}
Betrouwbaarheid: automatische exponentiële retry
- HTTP 2xx → delivered
- Andere status of timeout na 10s → failed, retry gepland
Exponentiële backoff: 1 min, 5 min, 30 min, 2u, 12u (max 5 pogingen). Na 5 mislukkingen: status abandoned.
Leveringsgeschiedenis
In webhook-bewerkingspagina ziet u 50 laatste leveringen: datum + event, status, HTTP-code, aantal pogingen, eerste 500 chars van response body.
"Test versturen" knop
Voor productie: testknop Test versturen (event ping) enqueue een speciale event geleverd bij volgende worker tick (max 1 min).
Latentie
Worker tick draait elke minuut. Max latentie tussen event en webhook-notificatie ~ 1 minuut.
Voor desktop-tickets: voeg ~15 min toe (BackendSync push), dus 16 min max tussen kassa-verkoop en webhook-ontvangst.
Typische gebruikssituaties
- Team-notificatie: Webhook → Slack incoming webhook → bericht in #verkoop-kanaal
- CRM-sync:
client.created→ Mailchimp / Brevo API → toevoegen aan nieuwsbrieflijst - Make / Zapier workflow: keten 5 acties
- E-commerce push catalogus:
produit.updated→ script die/api/v1/produits/{id}pulled → POST naar e-commerce platform - Realtime BI dashboard
Endpoint dat uitvalt
Als uw endpoint enkele uren down is: eerste pogingen mislukken, retry-schema loopt door. Als u terugkomt vóór 5e poging → delivered. Anders na 12u abandoned → handmatig events recupereren via /api/v1/tickets?debut=....
Voor kritische integraties (boekhouding): plan een wekelijkse job die tickets re-pullt om eventuele abandoned te overbruggen.
Secret hergeneren
Als HMAC-secret lekt: vanaf webhook-edit → Secret hergeneren (oude ongeldig). Update onmiddellijk consumerzijdig.
Verwijdering
Verwijderen-knop in gevarenzone. Verwijdering is definitief en stopt onmiddellijk leveringen.