Webhooks
Receive signed HTTP callbacks when pages are published, updated, or deleted.
Last updated August 25, 2026
Register HTTPS endpoints in Settings to receive lifecycle events from HTMLDrop.
Events
| Event | When |
|---|---|
page.published | New page created via API or editor |
page.updated | Page content updated |
page.deleted | Page removed |
Payload
{
"version": "1",
"id": "delivery-uuid",
"event": "page.published",
"createdAt": "2026-08-25T12:00:00.000Z",
"data": {
"slug": "demo",
"url": "https://htmldrop.in/p/demo",
"format": "html",
"title": "Demo"
}
}
Signature verification
Each request includes:
X-HTMLDrop-Event— event nameX-HTMLDrop-Signature— HMAC-SHA256 hex digest of the raw JSON body
Verify with your endpoint signing secret:
import { createHmac, timingSafeEqual } from "crypto";
function verifySignature(secret, body, signature) {
const expected = createHmac("sha256", secret).update(body).digest("hex");
return timingSafeEqual(Buffer.from(expected), Buffer.from(signature));
}
Retries
Failed deliveries retry up to 5 times with exponential backoff:
| Attempt | Delay before next try |
|---|---|
| 1 | 1 minute |
| 2 | 5 minutes |
| 3 | 30 minutes |
| 4 | 2 hours |
| 5 | 12 hours |
After the fifth failed attempt, the delivery is marked failed (dead-letter). A daily background sweeper processes due retries (included in /api/cron/cleanup). On Vercel Pro you can add a separate /api/cron/webhook-sweep cron every 10 minutes for faster recovery. Check delivery status in Settings.