Webhook Payloads
Complete payload schema for Zapier webhook deliveries, including enrichment fields and per-event differences.
Every Zapier trigger delivers an enriched leave request payload as a JSON object. The payload includes the core leave request data plus resolved names and emails for the employee, leave type, and approver.
Sample payload
This is a typical payload for a LEAVE_REQUEST_APPROVED event:
{
"id": "leaveRequest-a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"companyId": "company-1234-5678-abcd",
"userId": "user-abcd-1234-5678",
"leaveTypeId": "leaveType-c3d4e5f6-a7b8-9012-cdef-123456789012",
"startDate": "2026-03-20",
"endDate": "2026-03-20",
"isPartDay": false,
"status": "APPROVED",
"workingDays": 1,
"calendarDays": 1,
"daysList": [
{
"day": "2026-03-20",
"leaveHours": 8,
"workingHoursInDay": 8
}
],
"totalThisYear": 1,
"totalNextYear": 0,
"created": "2026-03-20T12:00:00.000Z",
"teamId": "team-d4e5f6a7-b8c9-0123-defa-234567890123",
"locationId": "location-e5f6a7b8-c9d0-1234-efab-345678901234",
"leavePolicyId": "location-e5f6a7b8-c9d0-1234-efab-345678901234#leaveType-c3d4e5f6-a7b8-9012-cdef-123456789012",
"wasApprovedBeforeAction": false,
"autoApproved": false,
"approverId": "email-f6a7b8c9-d0e1-2345-fabc-456789012345",
"approverName": "John Manager",
"approverEmail": "john.manager@example.com",
"userName": "Jane Doe",
"userEmail": "jane.doe@example.com",
"leaveTypeName": "Paid Time Off"
}Core fields
These fields are always present in the payload:
| Field | Type | Description |
|---|---|---|
id | string | Unique leave request ID |
companyId | string | Company ID |
userId | string | ID of the employee who owns the leave request |
leaveTypeId | string | ID of the leave type |
startDate | string | Start date in YYYY-MM-DD format |
endDate | string | End date in YYYY-MM-DD format |
isPartDay | boolean | Whether this is a partial day leave |
status | string | Current status: OPEN, APPROVED, DENIED, CANCELLED, or DELETED |
workingDays | number | Number of working days consumed |
calendarDays | number | Total calendar days of the leave |
daysList | array | Breakdown of each day with day, leaveHours, and workingHoursInDay |
totalThisYear | number | Days consumed in the current year |
totalNextYear | number | Days consumed in the next year (for cross-year leaves) |
created | string | ISO 8601 timestamp when the request was created |
teamId | string | ID of the employee's team/department |
locationId | string | ID of the employee's location |
leavePolicyId | string | Compound ID of the leave policy (locationId#leaveTypeId) |
Enrichment fields
These fields are added by looking up related entities. If a lookup fails, the field is omitted rather than causing the webhook to fail.
| Field | Type | Description |
|---|---|---|
userName | string | Full name of the employee |
userEmail | string | Email address of the employee |
userEmployeeId | string | Employee ID (if set) |
leaveTypeName | string | Name of the leave type (e.g., "Paid Time Off") |
approverName | string | Full name of the approver (when applicable) |
approverEmail | string | Email address of the approver (when applicable) |
approverEmployeeId | string | Employee ID of the approver (when applicable) |
wasApprovedBeforeAction | boolean | Whether the request was in an approved state before this event occurred |
wasApprovedBeforeAction logic
This field helps you determine the prior state of a leave request:
For cancelled requests (LEAVE_REQUEST_CANCELLED):
true— the request was approved before it was cancelledfalse— the request was still pending when it was cancelled
For all other events:
true— the request was approved before this action (e.g., an approved request was edited)false— the request was not previously approved
| Event | Typical value |
|---|---|
LEAVE_REQUEST_CREATED | false |
LEAVE_REQUEST_ADDED | false |
LEAVE_REQUEST_APPROVED | false |
LEAVE_REQUEST_DENIED | false |
LEAVE_REQUEST_UPDATED | true |
LEAVE_REQUEST_CANCELLED | true |
LEAVE_REQUEST_DELETED | false |
Per-event field differences
Not all fields are present in every event. The key differences:
LEAVE_REQUEST_CREATED
Does not include approver fields (approverId, approverName, approverEmail) or autoApproved, because the request has not entered the approval workflow yet.
LEAVE_REQUEST_ADDED
Does not include approver fields. Includes autoApproved: true.
LEAVE_REQUEST_DELETED
Does not include approver fields.
All other events
Include the full set of fields, including approver information.
Stripped fields
The following fields from the internal leave request are never included in webhook payloads, for privacy and relevance:
| Field | Reason |
|---|---|
reason | May contain sensitive information (e.g., medical details) |
statusReason | Internal manager note |
cancelledBeforeReview | Internal flag (consumed to compute wasApprovedBeforeAction) |
originalVersion | Internal previous-state snapshot |
errors | Internal error tracking |
isResent | Internal resend flag |
resentLeaveRequestId | Internal reference |
hasWorkingHoursSchedule | Internal scheduling flag |
leaveDaysList | Deprecated (superseded by daysList) |
partDayStartHour | Internal hour value |
partDayEndHour | Internal hour value |
isEdited | Internal edit tracking flag |