This article lists every event a webhook can receive, family by family, with what triggers it and the fields of its data. It is for administrators choosing subscriptions and for developers writing the receiver.
Before you start #
- Events are chosen when creating or editing a webhook, under Settings › Manage Illizeo › Webhooks (see Creating and managing a webhook).
- The Scheduling, Annualised working time, Budget & payroll costs, BDESE, Swiss payroll and Flex Office families only exist if the module is enabled in your space: otherwise they are neither offered nor emitted.
- Every message has the same envelope (
id,event,occurred_at,tenant,data), described in Receiving and verifying a webhook.
Subscribing to a family #
In the webhook window, each family has its own box, with its code (for example absence.*). Ticking it subscribes the webhook to all the family’s events, including those added to it later; the event boxes are then greyed out. Otherwise, tick events one by one.

The events #
Employees (employee.*) #
| Code | Label | Triggered when |
|---|---|---|
employee.created |
Employee created | An employee is created, through the screen, an import, the API or a connector. A hire still in draft emits nothing: the event goes out when it is finalised. |
employee.updated |
Employee updated | A field of the employee record changes. changed gives the names of the fields changed, never their values. |
employee.contract_ended |
Contract ended | A contract receives an end date (departure, or end of a parallel job); ended_at may be in the future. |
Fields: employee_id, and depending on the event contract_id, changed, ended_at.
Absences (absence.*) #
| Code | Label |
|---|---|
absence.requested |
Absence requested |
absence.approved |
Absence approved |
absence.rejected |
Absence rejected |
absence.cancelled |
Absence cancelled |
Fields: absence_id, employee_id, absence_type_id, from, to, status.
Time and attendance (attendance.*) #
attendance.day_closed, “Attendance day closed”: sent every night for the previous day, once per employee who clocked that day. A later correction to that day is not sent again: read the period back through the API if needed. Fields: employee_id, date, worked_minutes, status.
Scheduling (scheduling.*) #
| Code | Label |
|---|---|
shift.published |
Shift published |
shift.updated |
Published shift updated |
shift.deleted |
Published shift deleted |
shift.unpublished |
Shift unpublished |
shift.confirmed |
Shift confirmed by the employee |
shift.rejected |
Shift declined by the employee |
open_shift.claimed |
Open shift claimed |
shift.replacement_completed |
Shift replacement completed (new assignee) |
shift.checked_in |
Shift checked in |
shift.completed |
Shift completed |
Drafts emit nothing. Common fields: shift_id, employee_id, employment_id, date, start_time, end_time, all_day, office_id, status, is_open, open_shift_id; depending on the event, publication_id, changed, responded_at, application_id and source, the replacement fields (replacement_id, replacement_type, previous_employee_id, previous_employment_id), or checked_in_at / completed_at, outside_zone and mode are added.
Annualised working time (annualisation.*) #
| Code | Label |
|---|---|
annualisation.period.ended |
Annualisation period ended (review established) |
annualisation.review.closed |
Annualisation review closed |
annualisation.review.reopened |
Annualisation review reopened |
Fields: bilan_id, employee_id, employment_id, regime_id, debut, fin, unite, statut, and the review quantities in hours or days (objectif, realise, absences, heures_sup_hebdo, heures_fin_de_periode, deficit, then on closing excedent, traitement_du_deficit, cloture_le); reouvertures for a reopening.
Documents and signatures (document.*, signature.*) #
| Code | Label | Fields |
|---|---|---|
document.uploaded |
Document uploaded | document_id, employee_id, category_id |
document.generated |
Document generated | document_id, employee_id |
signature.completed |
Signature completed | signature_id, employee_id, provider |
signature.declined |
Signature declined | same |
signature.cancelled |
Signature cancelled | same |
Scheduled exports (export.*) #
export.ready, “Export file ready”: the file of a report scheduled on the “Pickup via API” channel has just been produced; the receiver can download it straight away through the API. Fields: export_id, report_id, schedule_id, file_name, format, size_bytes, expires_at.
Budget & payroll costs (budget.*) #
| Code | Label |
|---|---|
budget.overrun |
Projected budget overrun of a unit |
budget.equality.recorded |
Pay equity analysis recorded |
budget.review_phase |
Salary review: new phase |
budget.proposal.submitted |
Salary review: proposal submitted |
budget.proposal.validated |
Salary review: proposal approved |
budget.proposal.sent_back |
Salary review: proposal sent back |
budget.review_decided |
Salary review: validation file decided |
budget.campaign.closed |
Salary review closed |
Fields follow the object: the unit and the gap for an overrun, the analysis and its result for pay equity, the campaign and its phase, or the proposal (employee, contract, status, raise percentage, grade, step, effective date) for the salary review.
BDESE (bdese.*) #
| Code | Label |
|---|---|
bdese.published |
BDESE fiscal year version published |
bdese.equality_index.published |
Gender equality index published |
bdese.consultation.opened |
Works council consultation opened |
bdese.consultation.opinion_recorded |
Works council opinion recorded |
bdese.consultation.deemed_negative |
Works council opinion deemed negative at the deadline |
Fields: base_id and annee, then version and publie_le, note, or consultation_id, type, echeance and avis.
Swiss payroll (swiss_payroll.*) #
| Code | Label |
|---|---|
swiss_payroll.payroll.closing_pending |
Payroll closing awaiting approval |
swiss_payroll.payroll.closed |
Payroll closed |
swiss_payroll.payslips.ready |
Payslips ready |
swiss_payroll.declaration.pending_approval |
Declaration awaiting approval |
swiss_payroll.declaration.sent |
Declaration sent to Swissdec |
swiss_payroll.declaration.completed |
Declaration completed |
swiss_payroll.declaration.failed |
Declaration failed |
swiss_payroll.declaration.refused |
Declaration refused |
swiss_payroll.recipient.maintenance |
Recipient under maintenance |
swiss_payroll.case.closed |
Case closed by a recipient |
Fields: the payroll (payroll_id, perimeter, year, month, with contracts, payslips or approval_id), the declaration (declaration_id, nature, test, status, recipients) or the recipient (recipient_id, domain, institution, case_state).
Flex Office (office.*) #
| Codes | Subject |
|---|---|
office.booking.created, .updated, .approved, .rejected, .cancelled, .released |
Desk booking created, updated, approved, rejected, cancelled, or desk released (no check-in) |
office.visit.created, .updated, .approved, .rejected, .cancelled |
Visit created, updated, approved, rejected, cancelled |
office.visitor.arrived, .departed |
Visitor arrived, departed |
office.room_booking.created, .updated, .cancelled |
Meeting room booked, meeting room booking updated, cancelled |
office.check_in.created |
On-site check-in recorded |
These events go out whatever the origin of the change: screen, API or the effect of another action (a site closure, an absence, an archived desk). They only carry identifiers, dates and states. Parking and catering emit none.

Good to know #
- The Webhook events card of the API documentation repeats this list, with the fields of each event.
- Each event goes out once to each webhook listening to it: two webhooks subscribed to the same event each receive their own message, with the same event identifier.
