Skip to content

Webhook Events

Every webhook payload wraps event data in a common envelope:

{
"id": "evt_xxx",
"event": "submission.created | session.expired",
"timestamp": "2026-06-23T10:30:00Z",
"data": { }
}
FieldTypeDescription
idstringUnique event ID
eventstringEvent type
timestampstringISO 8601 timestamp
dataobjectEvent-specific payload

Fired when a human submits a form (complete or partial).

{
"id": "evt_xxx",
"event": "submission.created",
"timestamp": "2026-06-23T10:30:00Z",
"data": {
"submission_id": "sub_def456",
"form_id": "form_abc123",
"form_slug": "support-intake",
"form_version": 1,
"session_id": "sess_xyz789",
"partial": false,
"answers": {
"email": "user@example.com",
"priority": "high",
"message": "My billing page is broken"
},
"metadata": {
"thread_id": "thread_42"
},
"submitted_at": "2026-06-23T10:30:00Z"
}
}
FieldTypeDescription
submission_idstringUnique submission ID
form_idstringThe form this submission belongs to
form_slugstringThe form slug for human-readable reference
form_versionnumberVersion of the form at submission time
session_idstringThe session this submission came through
partialbooleantrue if allowPartial is enabled and required fields are missing
answersobjectMap of field id → submitted value
metadataobjectSession metadata passed through from creation
submitted_atstringISO 8601 submission timestamp

Fired when a session reaches its expiry time without a submission.

{
"id": "evt_xxx",
"event": "session.expired",
"timestamp": "2026-06-23T11:00:00Z",
"data": {
"session_id": "sess_xyz789",
"form_id": "form_abc123",
"form_slug": "support-intake",
"created_at": "2026-06-23T10:00:00Z",
"expired_at": "2026-06-23T11:00:00Z",
"metadata": {
"thread_id": "thread_42"
}
}
}
FieldTypeDescription
session_idstringThe session that expired
form_idstringThe form the session was for
form_slugstringForm slug
created_atstringWhen the session was created
expired_atstringWhen the session expired
metadataobjectSession metadata