Webhooks

Ta emot realtidshändelser från TableApp direkt till din server.

Webhooks

Webhooks låter TableApp skicka HTTP-anrop till din server när saker händer – t.ex. när en order stängs, en betalning genomförs eller en produkt uppdateras. Slipp polling.

Registrera en webhook

POST /v1/webhooks
Content-Type: application/json

{
  "url": "https://yourapp.com/webhooks/tableapp",
  "events": ["order.completed", "payment.succeeded"],
  "secret": "ditt-egna-hemliga-värde"
}

Svar 201 Created

{
  "id": "wh_01HXK8N2P3Q4",
  "url": "https://yourapp.com/webhooks/tableapp",
  "events": ["order.completed", "payment.succeeded"],
  "created_at": "2025-06-01T10:00:00Z",
  "status": "active"
}

Händelsetyper

Ordrar

HändelseBeskrivning
order.createdEn ny order öppnades
order.updatedOrderns rader ändrades
order.completedOrdern stängdes (betald)
order.cancelledOrdern avbeställdes

Betalningar

HändelseBeskrivning
payment.succeededBetalning genomförd
payment.failedBetalning misslyckades
payment.refundedÅterbetalning genomförd

Meny

HändelseBeskrivning
product.createdNy produkt skapad
product.updatedProdukt uppdaterad (pris, namn etc.)
product.deletedProdukt borttagen

Event & Biljetter

HändelseBeskrivning
ticket.soldBiljett köpt
ticket.refundedBiljett återbetald
checkin.completedGäst checkad in

Payload-format

Alla webhooks levereras som POST med Content-Type: application/json:

{
  "id": "evt_01HXK8N2P3Q4R5S6",
  "type": "order.completed",
  "created_at": "2025-06-01T18:45:22Z",
  "data": {
    "id": "ord_01HXK8N2P3Q4R5S6T7U8V9W0X",
    "status": "completed",
    "total": 29800,
    "completed_at": "2025-06-01T18:45:20Z"
  }
}

Verifiera signaturen

Varje anrop inkluderar headern Tableapp-Signature som du alltid ska verifiera innan du behandlar payload:

Tableapp-Signature: t=1717263922,v1=a3f9c2d1e4b5...

Formatet är t=<unix-timestamp>,v1=<HMAC-SHA256>.

Exempel i Node.js

import crypto from 'crypto';

function verifySignature(
  payload: string,
  header: string,
  secret: string,
): boolean {
  const parts = Object.fromEntries(header.split(',').map(p => p.split('=')));
  const timestamp = parts['t'];
  const signature = parts['v1'];

  const signed = `${timestamp}.${payload}`;
  const expected = crypto
    .createHmac('sha256', secret)
    .update(signed)
    .digest('hex');

  return crypto.timingSafeEqual(
    Buffer.from(signature, 'hex'),
    Buffer.from(expected, 'hex'),
  );
}

Avvisa gamla händelser

Kontrollera att t inte är äldre än 5 minuter för att skydda mot replay-attacker.

Retry-logik

Om din server svarar med annat än 2xx försöker TableApp igen:

FörsökVäntetid
1Omedelbart
21 minut
310 minuter
41 timme
56 timmar

Efter 5 misslyckade försök markeras webhook-händelsen som failed. Du kan se och manuellt skicka om misslyckade händelser under Inställningar API Webhooks Händelselogg.

Testa webhooks lokalt

Använd Cloudflare Tunnel eller ngrok för att exponera din lokala server:

cloudflared tunnel --url http://localhost:3000

Använd den genererade URL:en som webhook-endpoint i sandbox-miljön.

På den här sidan