snake_case.
Subscription response fields
GET /webhooks and GET /webhooks/{id} return this shape. POST /webhooks returns the same shape with secret populated.
The three job filters are objects, not bare arrays, on responses. Requests take the bare array form (see below) and the server wraps them for retrieval.
Create request fields
POST /webhooks accepts one of two request shapes, chosen by type.
Job subscription
Filters combine with AND: an event is delivered only if it satisfies every filter you set. Omitting all three receives every job event for your company.
Example request:
App subscription
Job events are never delivered to an app subscription.
Example request:
Delivery payload
This is the request Narrative POSTs to yoururl. Verify the X-Narrative-Secret header against the subscription’s secret before processing the body.
Every delivery has the same four-field envelope; type tells you what data contains.
type values
Job events use job.<state>:
job.pendingjob.scheduledjob.runningjob.completedjob.pending_cancellationjob.cancelledjob.failed
<app_name>.<event_type>. The app name is lowercased with a leading “the” dropped, punctuation removed, and spaces replaced with underscores. An app named “My Test App” reporting s3_delivery.completed produces my_test_app.s3_delivery.completed.
Job event data fields
For type starting with job., data is a snapshot of the job at the moment it entered the state, plus a few resolved names.
request_source fields:
Example job event:
Verifying deliveries
Every delivery carries anX-Narrative-Secret header. Compare it against the secret you stored when you created the subscription and reject anything that does not match.
Return any 2xx to acknowledge the event. Anything else — including a connection failure — is treated as a failed attempt and retried with exponential backoff until the event’s attempt budget runs out. Make your handler idempotent on the envelope’s id.
Job types
Thejob_types filter is an open string, not a closed enum. New job types are added as the platform grows, so no fixed list is authoritative. Common values include:
datasets_deliver_datadatasets_sampledatasets_calculate_column_statsdatasets_delete_tablematerialize-viewmodel_training_runmodel_inference_runnql-forecast
Job states
Thestates filter accepts these values.
For state transitions, see Tracking Job Status.
Subscription status values
API endpoints
Related content
Webhooks
How webhooks work and when to use them
Subscribing to Notifications
Step-by-step guide to creating and managing subscriptions
Job Types
Detailed descriptions of common job types
Webhooks API
Full REST API documentation for webhook endpoints

