Receive webhooks locally
Tunnel your local server and test Blooio webhook deliveries
Overview
Run a local server, expose it with a tunnel (e.g., ngrok), and point Blooio to the public URL.
Start a local server
const app = express();
app.use(express.json());
app.post("/webhooks/blooio", (req, res) => {
console.log("[Blooio]", req.headers["x-blooio-event"], req.body);
res.sendStatus(200);
});
app.listen(3001, () => console.log("Listening on http://localhost:3001"));Expose the server
ngrok http http://localhost:3001Copy the HTTPS URL from ngrok, e.g., https://abcd1234.ngrok.io.
Configure your webhook URL
Create a new webhook using the API:
curl -X POST 'https://api.blooio.com/v4/webhooks' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"url": "https://abcd1234.ngrok.io/webhooks/blooio"
}'Try itThe response is 201 with the subscription wrapped in a data envelope. It carries the signing_secret once, at creation:
{
"data": {
"id": "wh_abc123",
"url": "https://abcd1234.ngrok.io/webhooks/blooio",
"event_types": ["*"],
"status": "active",
"channel_id": null,
"channel_type": null,
"created_at": 1735324800000,
"signing_secret": "whsec_a1b2c3d4e5f6789012345678901234567890abcdef"
}
}Note
The URL must be
https://. A subscription receives every event type — switch on thetypefield in your handler to pick out the ones you care about.
Verify deliveries
You should see incoming events in your terminal. See event schemas in Webhook events.
Managing webhooks
List all webhooks
curl -X GET 'https://api.blooio.com/v4/webhooks' \
-H 'Authorization: Bearer YOUR_API_KEY'Try itUpdate a webhook
Updatable fields are url and status (active or disabled):
curl -X PATCH 'https://api.blooio.com/v4/webhooks/{webhookId}' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"status": "disabled"
}'Try itDelete a webhook
curl -X DELETE 'https://api.blooio.com/v4/webhooks/{webhookId}' \
-H 'Authorization: Bearer YOUR_API_KEY'Try itRotate webhook secret
If you need a new signing secret:
curl -X POST 'https://api.blooio.com/v4/webhooks/{webhookId}/secret/rotate' \
-H 'Authorization: Bearer YOUR_API_KEY'Try itInspect deliveries
curl -X GET 'https://api.blooio.com/v4/webhooks/{webhookId}/deliveries' \
-H 'Authorization: Bearer YOUR_API_KEY'Try it