Step 1: Expose a Receiver
Your receiver must acceptPOST requests over public HTTPS. For local development, run it on port 3000 and expose it with ngrok:
https://example.ngrok-free.app/webhooks/narrative. Preserve the exact request body bytes; you will verify them in Step 4.
Step 2: Register the Endpoint
Open Webhooks, select Add endpoint, and choose the events to receive. Only organization owners and admins can view or manage endpoints. Copy both values after creating it:- Endpoint ID — pass this as
webhook_idwhen creating a task. - Signing secret — store it in a secret manager. It is shown once.
Step 3: Create a Task
Events
One immutable event is created per logical change, not per video orientation or render. Delivery may occur more than once.
Step 4: Verify the Signature
Every delivery includes:
The signed input is the event ID, timestamp, and exact raw request body, separated by periods:
Delivery Semantics
Delivery is at least once. Narrative retries timeouts and non-2xx responses, so return2xx only after you have accepted the event. Retries keep the same Narrative-Event-Id; store that ID and ignore duplicates. Do not rely on delivery order.
Narrative attempts delivery up to eight times over roughly two minutes. Exhausted deliveries enter dead-letter storage and can be replayed operationally with the same event ID.
