API reference
Events
Every change to your intents and payments, as thin, immutable events. The same events your webhooks receive.
GET/api/v1/events
Events from the last 30 days. Filter with type, intent, or payment. order=created (default) lists by recording time, newest first, which suits polling; order=occurred lists by when things happened.
curl "https://indeficient.com/api/v1/events?type=payment.released&limit=50" \
-H "Authorization: Bearer $PP_API_KEY"GET/api/v1/events/{id}
One event, within the 30-day window.
Response
{
"id": "evt_m4qz7rk2v6hc3xna5tjw2pde",
"object": "event",
"apiVersion": "2026-10-01",
"type": "payment.protected",
"environment": "test",
"occurredAt": "2026-10-10T14:05:37.000Z",
"createdAt": "2026-10-10T14:05:41.000Z",
"data": {
"intent": "pi_test_k3v7q2mz5hxa4wde6rtn2bpy",
"payment": "6VoCXSvs49gnzC6ULszzsfuZdjxRv9wu8LvdmFLcY2Ac",
"paymentRole": "primary"
}
}The event object
occurredAtis when it happened;createdAtis when Protected Pay recorded it. Order byoccurredAt.dataholds ids and the one changed fact only:intent,payment,paymentRole, and, onpayment.disputed,dispute.opened,payment.released,payment.refunded, anddispute.resolved,state: the payment’s state when the event was recorded. Fetch the resource for anything else.- Events never carry metadata, your merchant reference, wallets, statements, evidence, or reasons.
Event types
| Type | Meaning | occurredAt |
|---|---|---|
payment_intent.created | An intent was created. | When you called the API |
payment_intent.canceled | An unpaid intent was canceled. | When you called the API |
payment.created | A buyer’s payment was bound to the intent. | When the payment was created |
payment.protected | Its funds are held for the protection period. | When the payment was created |
payment.duplicate | A second buyer paid an intent that was already paid. | When the payment was created |
payment.disputed | The buyer opened a dispute. | When the dispute was opened |
dispute.opened | A dispute exists for the payment. | When the dispute was opened |
dispute.response_submitted | The recipient submitted their response. | When the response was submitted |
dispute.review_started | The arbiter started reviewing the case. | When review began |
payment.released | The payment settled to the recipient. | When the payment settled |
payment.refunded | The payment was refunded to the buyer. | When the payment settled |
dispute.resolved | A disputed payment settled, either way. | When the payment settled |
A duplicate payment produces payment.duplicate alone, without payment.created or payment.protected.