leave.requested
Someone asked for leave (in Agoo Workspace, or the request was made for them) and it waits for a decision by your organisation's approval steps. A private type of leave (sick and maternity by default) comes back as kind: away, without its type, reason
or note.
Agoo sends this as a signed POST to every enabled endpoint subscribed to leave.requested (or *). Verify the
signature, return any 2xx within 15 seconds, and de-duplicate on webhook-id.
webhook-id*stringThe event's ID. It is the same on every attempt and redelivery, so use it to de-duplicate.
^evt_[0-7][0-9a-hjkmnp-tv-z]{25}$"evt_01m4ww0ezgf2bryg9gxb2gbewx"webhook-timestamp*stringWhen this attempt was signed, in Unix seconds. Reject the request if it is more than 5 minutes from your clock.
^[0-9]+$webhook-signature*stringOne or more space-separated signatures, each v1,<base64>: the base64 HMAC-SHA256 of
{webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded part of your whsec_ secret.
During a secret rotation there are two. Accept the request if any one matches.
application/json- body
An event about a leave request.
id*EventIdThe event's ID. Webhook deliveries send it as webhook-id.
^evt_[0-7][0-9a-hjkmnp-tv-z]{25}$"evt_01m4ww0ezgf2bryg9gxb2gbewx"created_at*stringWhen the event happened.
date-timeorganisation_id*OrganisationIdAn organisation ID (TypeID with the org prefix).
^org_[0-7][0-9a-hjkmnp-tv-z]{25}$"org_01kjpsrza0etzb0a4vf72x8ang"livemode*booleanfalse for events in test mode.
type*string"leave.requested""leave.approved""leave.declined""leave.cancelled"data*Return any 2xx status within 15 seconds to acknowledge the event. Agoo ignores the response body, so
acknowledge first and do slow work afterwards.
Example Requests
/leave.requestedattendance.absent Webhook
Someone's rostered shift has ended and they didn't clock in, weren't on approved leave, and it isn't a public holiday your organisation observes. Agoo never says someone is absent before their shift ends: until then they're "not in yet" (the summary counts them as `not_in_yet`). It fires once per person and day, within a few minutes of the shift's end. A clock-in a manager adds afterwards turns the day back into a worked one; the event isn't withdrawn, so check the summary or the person's punches before acting on an old one. Agoo sends this as a signed `POST` to every enabled endpoint subscribed to `attendance.absent` (or `*`). Verify the signature, return any `2xx` within 15 seconds, and de-duplicate on `webhook-id`.
leave.approved Webhook
Leave was approved: by its last approval step, recorded by HR or through the API, or approved at once (a type recorded without approval, such as sick leave by default, or an organisation that approves none). Its days come off the balance. A private type of leave (sick and maternity by default) comes back as `kind: away`, without its type, reason or note. Agoo sends this as a signed `POST` to every enabled endpoint subscribed to `leave.approved` (or `*`). Verify the signature, return any `2xx` within 15 seconds, and de-duplicate on `webhook-id`.