Event Payloads
All webhook events share a common structure with resource-specific data.
Event Envelope
{
"event": "application.created",
"event_id": "evt_abc123",
"created_at": "2025-01-15T10:30:00Z",
"account_id": 12345,
"data": {
// Resource-specific payload
}
}
| Field | Description |
|---|---|
event | Event type (e.g., application.created) |
event_id | Unique identifier for this delivery |
created_at | ISO 8601 timestamp |
account_id | Your Kula account ID |
data | Resource-specific payload |
Event Types
Candidate Events
| Event | Description |
|---|---|
candidate.created | New candidate added |
candidate.updated | Candidate profile updated |
Application Events
| Event | Description |
|---|---|
application.created | New application submitted |
application.updated | Application updated |
application.stage_changed | Application moved to new stage |
application.rejected | Application rejected |
application.hired | Candidate hired |
application.screened | AI screening completed for an application |
Job Events
| Event | Description |
|---|---|
job.created | New job created |
job.updated | Job updated |
job_posting.published | Job posting went live |
job_posting.updated | Job posting updated |
Requisition Events
| Event | Description |
|---|---|
requisition.created | New requisition created |
requisition.updated | Requisition updated |
requisition.opened | Requisition opened |
requisition.filled | Requisition filled |
requisition.closed | Requisition closed |
Offer Events
| Event | Description |
|---|---|
offer.created | New offer created |
offer.updated | Offer updated |
offer.approved | Offer approved |
offer.deleted | Offer removed |
offer.accepted | Candidate accepted offer |
offer.declined | Candidate declined offer |
Interview Events
| Event | Description |
|---|---|
interview.availability.computed | Async interviewer-availability search completed (alternative to polling GET /v1/interviews/interviewers_availability/{poll_id}) |
interview.event.created | Calendar event for an interview was created — fires after async provisioning completes, conference URL is populated |
interview.event.updated | Calendar event was updated (reschedule, location/host change, interviewer change, AI flag toggle) |
interview.event.cancelled | Calendar event was cancelled — covers both API/UI cancel and organizer-deletes-from-calendar |
interview.attendee.responded | Interview attendee's RSVP changed (accepted, declined, tentative). Bulk system resets are suppressed |
Common Data Objects
IdNameObject
{
"id": 123,
"name": "Engineering"
}
UserObject
{
"id": 456,
"name": "Jane Smith",
"email": "jane@example.com"
}
LocationObject
{
"city": { "id": 1, "name": "San Francisco" },
"state": { "id": 2, "name": "California" },
"country": { "id": 3, "name": "United States" }
}
Example Payloads
See the Webhooks API reference for complete payload examples for each event type.