Headers: webhook-id, webhook-timestamp, webhook-signature. Secret format: whsec_ + base64 (shown once at create or rotate).
JAVASCRIPT
import { Webhook } from "standardwebhooks";
const wh = new Webhook(process.env.EDISON_WEBHOOK_SECRET);
export async function POST(req) {
const body = await req.text();
wh.verify(body, {
"webhook-id": req.headers.get("webhook-id"),
"webhook-timestamp": req.headers.get("webhook-timestamp"),
"webhook-signature": req.headers.get("webhook-signature"),
});
const event = JSON.parse(body);
// handle event.type / event.data
return new Response("ok", { status: 200 });
}
Retries
Failed deliveries (non-2xx or timeout) retry with backoff: 1 min, 5 min, 30 min, 2 h, 6 h, 12 h, 24 h (seven attempts). Edison records status on each delivery row.
Auto-disable
If an endpoint fails continuously for 3 days, Edison disables it and sends email to the shop owner. You receive webhook_endpoint.disabled. Fix your URL, then re-enable via PATCH /v1/webhook-endpoints/{id} with { "enabled": true } or in Settings.
Replay
Use POST /v1/events/{id}/redeliver to queue another delivery for an existing event. List events with GET /v1/events when debugging.
Test delivery
POST /v1/webhook-endpoints/{id}/test queues a synthetic event to your receiver.