Skip to main content
Each handler:
  1. verifies the signature with the open-source svix library, which also rejects timestamps more than five minutes off;
  2. parses the raw body itself, because verify returns nothing;
  3. skips a webhook-id it has already handled;
  4. handles the event, or queues it, and only then records the id;
  5. answers 204, or 500 if handling failed so the event is retried.
Set FASTCAC_WEBHOOK_SECRET to your endpoint’s whsec_… secret.

Express

Mount it with express.raw so the body stays unparsed. npm install express svix
server.js

Laravel

Add the route in routes/api.php (run php artisan install:api first on Laravel 11+), which skips CSRF checks. composer require svix/svix
app/Http/Controllers/FastcacWebhookController.php
routes/api.php

Django

A plain view, exempt from CSRF. pip install svix
webhooks/views.py
urls.py
Send a test event to check your handler end to end.