attendance.absent
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.
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 rostered shift that ended with no clock-in.
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*"attendance.absent""attendance.absent"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
/attendance.absentattendance.voided Webhook
A punch stopped counting: a manager voided it in the Console, rejected it on review, or corrected its time. A correction is two events: `attendance.voided` for the wrong punch (with `voided.replaced_by`) and `attendance.clocked_in` or `attendance.clocked_out` for the `manual` punch with the right time (with `added.replaces`). Drop the voided punch from your records; the list operation no longer returns it. Agoo sends this as a signed `POST` to every enabled endpoint subscribed to `attendance.voided` (or `*`). Verify the signature, return any `2xx` within 15 seconds, and de-duplicate on `webhook-id`.
watchlist.matched Webhook
Someone checking in matches a watchlist entry. Agoo holds the check-in and alerts your security team silently at the same time; the visitor isn't told. Kiosks also screen while offline. A check-in a kiosk made offline is screened again when it syncs: if Agoo finds a match the kiosk's list didn't have, the visitor is already inside, and the event carries `entered_while_offline: true`. Agoo sends this as a signed `POST` to every enabled endpoint that lists `watchlist.matched` (`*` doesn't cover it). Verify the signature, return any `2xx` within 15 seconds, and de-duplicate on `webhook-id`.