Developers · Webhooks

Hear about it the moment it happens.

Approvals, sealed records, claimed offers, settlements, delivered to your endpoint, signed, with honest retries and full replay.

Event types

EventFires whenPayload carries
proposal.createdA proposal is created for a customer you serve.proposal id, kind, record ref
proposal.approvedThe customer explicitly approves, the only execution trigger.approval id, record ref
record.sealedA record finishes its chain: reason → verify → action → outcome.record ref, chain digest
offer.claimedA customer claims one of your offers.offer id, claim id
settlement.postedA commission period settles to your account.period, statement ref
protection.freezeA customer freezes activity, pause your flows for them.customer ref (pseudonymous)

Verify every delivery

Signatures are HMAC-SHA256 over the raw body with your endpoint secret.

verify · TS

import { verifyWebhook } from "@qoyla/sdk";

app.post("/qoyla/webhooks", (req, res) => {
  const event = verifyWebhook(req.body, req.headers["qoyla-signature"], SECRET);
  // throws on bad signature, never process unverified payloads
  handle(event);
  res.sendStatus(200);
});

Retries & replay

Retries with backoffFailed deliveries retry at 1m, 5m, 30m, 2h, 12h, then we alert you and pause.5 attempts
At-least-once deliveryDe-duplicate on the event id; the SDK handler does this for you.event.id
30-day replayRe-send any event window from the developer console, useful after an outage on your side.

Wire your first endpoint

The sandbox sends synthetic events on demand so you can test the full path.