Docs

leave.approved

Preview· P9

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.

Header Parameters

webhook-id*string

The event's ID. It is the same on every attempt and redelivery, so use it to de-duplicate.

Match^evt_[0-7][0-9a-hjkmnp-tv-z]{25}$
Example"evt_01m4ww0ezgf2bryg9gxb2gbewx"
webhook-timestamp*string

When this attempt was signed, in Unix seconds. Reject the request if it is more than 5 minutes from your clock.

Match^[0-9]+$
webhook-signature*string

One 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.

Request Body

application/json
  1. body

An event about a leave request.

id*EventId

The event's ID. Webhook deliveries send it as webhook-id.

Match^evt_[0-7][0-9a-hjkmnp-tv-z]{25}$
Example"evt_01m4ww0ezgf2bryg9gxb2gbewx"
created_at*string

When the event happened.

Formatdate-time
organisation_id*OrganisationId

An organisation ID (TypeID with the org prefix).

Match^org_[0-7][0-9a-hjkmnp-tv-z]{25}$
Example"org_01kjpsrza0etzb0a4vf72x8ang"
livemode*boolean

false for events in test mode.

type*string
Value in"leave.requested""leave.approved""leave.declined""leave.cancelled"
data*

Response Body

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

POST/leave.approved