enrollclassHelp

Help / Integrations

Webhooks

Get a signed message at your URL when things happen.

Owners & adminsDevelopers

  1. Open Team → Integrations → Webhooks.
  2. Paste the URL from Zapier, Make, n8n or your own server (https).
  3. Tick the events to send and click Add webhook.
  4. Click Send test to check it's reachable.

Events

order.paid, order.refunded, seat.cancelled, seat.transferred, seat.substituted, checkin.created, event.created, event.published, cohort.at_risk, cohort.cancelled, certificate.issued, waitlist.offered.

Message and signature

POST https://your-url
EnrollClass-Event: order.paid
EnrollClass-Signature: t=1792519272,v1=<hex>

{ "id": "whd_…", "type": "order.paid", "createdAt": "…", "organizationId": "org_…", "data": { "order": { … }, "event": { … }, "seats": [ … ] } }

To verify, compute HMAC-SHA256 of <t>.<raw body> with the webhook's signing secret (shown under Signing secret and recent deliveries) and compare with v1. Reject timestamps older than 5 minutes.

import crypto from "node:crypto";
const [t, v1] = header.split(",").map((p) => p.split("=")[1]);
const expected = crypto.createHmac("sha256", secret).update(`${t}.${rawBody}`).digest("hex");
const ok = crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(v1));

TIP Failed deliveries are retried after 10 seconds, 1 minute and 5 minutes. Recent deliveries and errors are listed under each webhook; Pause stops sending without deleting it.

Next: Zapier, Make and n8n recipes →