Event catalogue
Every webhook event Hannu emits today, grouped by resource, with one example payload — plus a note on the richer events still to come.
Every webhook is one of the events below. They're grouped by the resource they describe. Each delivery is a { id, type, data } body where data is the full resource snapshot at the time of the event — see Webhooks overview for the delivery shape and guarantees.
Task events
The lifecycle of a single task, from creation through settlement. See Task lifecycle.
task.submitted— a task was created and entered safety screening. Payload:{ org_id, type, zone_ref }. Despite the name, this fires at creation, not on proof — there is no pilot webhook for Operator proof submission.task.review_required— safety screening routed a newly created task to ops review. Payload:{ category }. This is screening review, not proof-verification review.task.live— the task cleared screening and is open for matching.task.matched— an eligible Operator has been matched to it.task.approved— proof accepted, escrow released, task approved.task.rejected— proof rejected; escrow freezes and a dispute opens.task.cancelled— the task was cancelled before acceptance and escrow refunded.task.expired— the task went unmatched or unfulfilled within its window.task.blocked— the task was refused in the write path (for example, credential-class work) or blocked by safety screening.
Wallet events
wallet.funded— a deposit settled and the wallet balance increased.wallet.low_balance— the balance crossed its low-balance threshold.
Workflow events
workflow.ordered— a workflow product was ordered and its escrow locked.
Dispute events
dispute.opened— a rejection opened a dispute; escrow is frozen.dispute.resolved— the dispute reached an outcome; escrow released or refunded.
Worker events
Signals about Operator onboarding and availability. These never carry Operator contact details — see policy.
worker.invited— an Operator was invited to the platform.worker.waitlisted— an Operator was placed on the waitlist.worker.activated— an Operator completed KYC and became eligible for work.
Assignment events
assignment.accepted— an Operator accepted a task offer.
Example payload
Every delivery has the same envelope. Here's a task.approved:
{
"id": "evt_3b9",
"type": "task.approved",
"data": {
"id": "task_8f21",
"type": "field_verification",
"state": "approved"
}
}Dedupe on id, and read everything you need from data — you never have to fetch the resource to find out what changed.
The events above are what Hannu emits today. More granular events — finer-grained proof, verification, and payout signals — are planned for Phase 1.5 and are not live yet. Build against the list above; don't code against event names that aren't in it.