Skip to main content
Webhooks fire on every Payment Intent state transition. See the webhooks guide for setup instructions and signature verification.

Event payload

{
  "eventId": "evt_abc123",
  "type": "intent.confirmed",
  "createdAt": "2026-04-06T12:00:00Z",
  "livemode": true,
  "data": {
    "intent": {
      "id": "pi_abc123def456",
      "state": "confirmed",
      "chain": "solana:5eykt4UsFv8P8NJdTREpY1vzqKq2Kvdp",
      "token": "USDC",
      "amount": "10.50",
      "requestor": "7xKXtg2...",
      "fulfiller": "9mNKPt3..."
    }
  }
}

Event types

TypeTrigger
intent.createdIntent created
intent.pendingTransaction broadcast to chain
intent.confirmedSufficient on-chain confirmations
intent.finalizedChain-level finality
intent.failedOn-chain failure (revert, program error)
intent.expiredTTL elapsed without fulfillment
intent.cancelledExplicitly cancelled
intent.retry_requiredTransaction dropped, fulfiller must re-sign
intent.detectedFulfiller acknowledged audio receipt

Delivery contract

  • Signature: HMAC-SHA256 in X-PF-Signature header
  • Retries: Exponential backoff, ~10 attempts over up to 72 hours
  • Ordering: Best-effort — always confirm state via GET /v1/intents/:id before acting
  • Deduplication: Events have a stable eventId — the same event may be delivered more than once