Skip to main content

Envelope

Every webhook body is a JSON envelope:
  • id — the event’s unique id. Dedupe on this.
  • type — the event type (below). Subscribe to specific types, or * for all.
  • occurredAt — ISO-8601 UTC timestamp.
  • aggregate — the entity the event is about.
  • data — event-specific fields.
The same objects are also queryable at GET /v1/events (poll by since=) — the webhook is just the push version of that timeline.

Event catalog

TypeWhen
payroll.run.hr_approvedA run was approved by HR.
payroll.run.disbursement_startedDisbursement began.
payroll.run.disbursedEvery line settled.
payroll.run.partially_disbursedSome lines failed.
payroll.line.settledAn employee was paid.
payroll.line.failedA line failed to disburse.
payroll.funding.requested / .approved / .rejectedFunding-approval flow.
TypeWhen
employee.createdAn employee was added.
employee.updatedAn employee’s record changed.
employee.offboarded / employee.reinstatedEmployment status changed.
salary_structure.setA salary structure was set/updated.
TypeWhen
company.wallet.fundedThe company wallet was funded.
company.va.assignedA funding virtual account was issued.
employee.wallet.fundedNet pay landed in an employee wallet.
employee.withdrawal.settled / .failedA worker withdrawal resolved.
salary_advance.requested / .approved / .rejectedAdvance lifecycle.
TypeWhen
workspace.activation.approved / .rejectedKYB review decision.
deduction.remittance.submitted / .confirmed / .failedDeduction remittance.
leave_request.submitted / .approved / .rejectedLeave lifecycle.
New event types are added over time. Handle unknown type values gracefully — ignore what you don’t recognise rather than erroring.