Subscribe a URL to platform events and ABM.dev will POST a signed payload to it whenever the event fires. Useful for piping enrichment results into a CRM, kicking off downstream automations, or driving notifications without polling.
How delivery works
X-Webhook-Signature, X-Webhook-Event, and X-Webhook-Id headers.Don’t want to host an endpoint? Poll GET /v1/webhooks/events instead — same payloads, your timing.
CRUD over your webhook subscriptions
Pull events directly when running an HTTP receiver isn’t an option (Zapier polling triggers, ad-hoc backfills, recovery from a downtime window).
Always verify before trusting a payload — it’s how you tell an authentic ABM.dev delivery from a forged one.
import crypto from "node:crypto";
export function verify(rawBody, signatureHeader, secret) {
// signatureHeader looks like "sha256=abc123..."
const [algo, theirs] = signatureHeader.split("=");
if (algo !== "sha256") return false;
const ours = crypto
.createHmac("sha256", secret)
.update(rawBody)
.digest("hex");
return crypto.timingSafeEqual(
Buffer.from(theirs, "hex"),
Buffer.from(ours, "hex"),
);
}See also: Zapier integration (uses these endpoints under the hood), Enrichment (the producer of enrichment.completed).