Skip to main content
Webhooks fire on every state transition, delivering real-time updates to your server. Configure your webhook URL in the dashboard.

Event format

Every webhook delivery has the same envelope:

Event types

Verifying signatures

Every delivery includes an X-PF-Signature header signed with your webhook secret using HMAC-SHA256 (same pattern as Stripe):
Your webhook secret is available in the dashboard.

Delivery guarantees

  • Retry policy: Exponential backoff, ~10 attempts over up to 72 hours
  • Ordering: Best-effort. Events may arrive out of order — always confirm current state via GET /v1/intents/:id before acting
  • Deduplication: Each event has a stable eventId. The same event may be delivered more than once — deduplicate on eventId

Managing deliveries

List recent deliveries and retry failed ones via the API: