Events
This is the catalog of webhook events. Subscribe a webhook to an event by
adding the event's type to its events list. Every event is delivered as an
HTTP POST with a Content-Type: application/json header, and the body is a
JSON object whose type field identifies the event, plus the common eventId
and requestId fields described in the Overview.
| Event | Description |
|---|---|
application.status.changed.v1 |
Sent when an application's status changes. |
contact.created.v1 |
Sent when a contact is created. |
contact.updated.v1 |
Sent when a contact changes. |
org.status.changed.v1 |
Sent when an organization's status changes. |
payment.refund.status.changed.v1 |
Sent when a refund's status changes. |
payment.status.changed.v1 |
Sent when a payment's status changes. |
application.status.changed.v1
Sent when an application's status changes.
| Field | Type | Description |
|---|---|---|
eventId |
string | Stable id of this delivery; identical across retries (use it to deduplicate). |
requestId |
string | Id of the individual delivery attempt; changes on every retry. |
type |
string | Always "application.status.changed.v1". |
applicationId |
string | The id of the application whose status changed. |
orgId |
string | null | The id of the linked organization, or null until the application is approved. |
status |
string | The new status (see below). |
previousStatus |
string | null | The status before the change, or null for the application's first status. |
occurredAt |
string | ISO-8601 timestamp of when the change occurred. |
status and previousStatus are one of:
| Status | Meaning |
|---|---|
draft |
The application was opened and is being filled out. |
submitted |
The application was submitted by the merchant and is ready for review. |
approved |
The application was reviewed and approved by underwriting. |
declined |
The application was reviewed and declined by underwriting. |
Example payload:
{
"eventId": "WebhookRequest#2cVQF8s0u9c2bq5b3pTn1mY7kde",
"requestId": "2dWRg9t1v0d3cr6c4qUo2nZ8lef",
"type": "application.status.changed.v1",
"applicationId": "2cVQF8s0u9c2bq5b3pTn1mY7kde",
"orgId": null,
"status": "submitted",
"previousStatus": "draft",
"occurredAt": "2026-06-25T17:42:03.118Z"
}contact.created.v1
Sent when a contact is created on an organization. The payload carries identifiers only — fetch the contact through the API for its details.
Like payment.status.changed.v1, this event is delivered to the webhooks of
both the contact's organization and the organization's agency, so the same
payload reaches subscribers on either side.
| Field | Type | Description |
|---|---|---|
eventId |
string | Stable id of this delivery; identical across retries (use it to deduplicate). |
requestId |
string | Id of the individual delivery attempt; changes on every retry. |
type |
string | Always "contact.created.v1". |
contactId |
string | The id of the contact that was created. |
orgId |
string | The id of the organization the contact belongs to. |
occurredAt |
string | ISO-8601 timestamp of when the contact was created. |
Example payload:
{
"eventId": "WebhookRequest#2cVQF8s0u9c2bq5b3pTn1mY7kde",
"requestId": "2dWRg9t1v0d3cr6c4qUo2nZ8lef",
"type": "contact.created.v1",
"contactId": "2cVQF8s0u9c2bq5b3pTn1mY7kde",
"orgId": "2eXSh0u2w1e4ds7d5rVp3oA9mfg",
"occurredAt": "2026-07-26T17:42:03.118Z"
}contact.updated.v1
Sent when an existing contact changes. Deleting a contact is a soft delete — the record is retained so existing references still resolve — so a deletion arrives as an update rather than a separate event. Fetch the contact through the API to see its current state, including whether it is deleted.
Like contact.created.v1, this event is delivered to the webhooks of both
the contact's organization and the organization's agency.
| Field | Type | Description |
|---|---|---|
eventId |
string | Stable id of this delivery; identical across retries (use it to deduplicate). |
requestId |
string | Id of the individual delivery attempt; changes on every retry. |
type |
string | Always "contact.updated.v1". |
contactId |
string | The id of the contact that changed. |
orgId |
string | The id of the organization the contact belongs to. |
occurredAt |
string | ISO-8601 timestamp of when the change occurred. |
Example payload:
{
"eventId": "WebhookRequest#2cVQF8s0u9c2bq5b3pTn1mY7kde",
"requestId": "2dWRg9t1v0d3cr6c4qUo2nZ8lef",
"type": "contact.updated.v1",
"contactId": "2cVQF8s0u9c2bq5b3pTn1mY7kde",
"orgId": "2eXSh0u2w1e4ds7d5rVp3oA9mfg",
"occurredAt": "2026-07-26T17:42:03.118Z"
}org.status.changed.v1
Sent when an organization's status changes.
| Field | Type | Description |
|---|---|---|
eventId |
string | Stable id of this delivery; identical across retries (use it to deduplicate). |
requestId |
string | Id of the individual delivery attempt; changes on every retry. |
type |
string | Always "org.status.changed.v1". |
orgId |
string | The id of the organization whose status changed. |
status |
string | The new status (see below). |
previousStatus |
string | null | The status before the change, or null for the org's first status. |
occurredAt |
string | ISO-8601 timestamp of when the change occurred. |
status and previousStatus are one of:
| Status | Meaning |
|---|---|
Onboarding |
The organization is being onboarded and is not yet fully active. |
Healthy |
The organization is active and in good standing. |
Unhealthy |
The organization is active but in a degraded or at-risk state. |
Suspended |
The organization has been suspended and cannot transact. |
Closed |
The organization has been permanently closed. |
Example payload:
{
"eventId": "WebhookRequest#2cVQF8s0u9c2bq5b3pTn1mY7kde",
"requestId": "2dWRg9t1v0d3cr6c4qUo2nZ8lef",
"type": "org.status.changed.v1",
"orgId": "2cVQF8s0u9c2bq5b3pTn1mY7kde",
"status": "Healthy",
"previousStatus": "Onboarding",
"occurredAt": "2026-06-25T17:42:03.118Z"
}payment.refund.status.changed.v1
Sent when a refund's status changes. A payment can be refunded more than once,
in full or in part, so each refund is reported on its own: the payment's status
does not change when it is refunded, and payment.status.changed.v1 is not
sent. Fetch the payment through the API for its refunded total.
refundId is the id of the refund the paymentRefund mutation returns, and
paymentId, provider, amount, currency, reference,
processorReference and status carry the same values as that refund, so
refundId and reference tie each event to the request that created it.
orgId, previousStatus and occurredAt are on the event only.
Like payment.status.changed.v1, this event is delivered to the webhooks of
both the payment's organization and the organization's agency — but only to
webhooks that list it in their events.
Sent today for refunds of CLP payments. Refunds of NMI payments complete in the
paymentRefund response itself and do not send this event yet.
| Field | Type | Description |
|---|---|---|
eventId |
string | Stable id of this delivery; identical across retries (use it to deduplicate). |
requestId |
string | Id of the individual delivery attempt; changes on every retry. |
type |
string | Always "payment.refund.status.changed.v1". |
refundId |
string | The id of the refund, as returned by paymentRefund. |
paymentId |
string | The id of the payment the refund was issued against. |
orgId |
string | The id of the payment's organization. |
provider |
string | The provider refunding the payment: CLP. |
amount |
string | Amount refunded, as a decimal string (e.g. "160.00"). |
currency |
string | Currency of the refund; always the currency of the payment. |
reference |
string | null | The reference supplied when the refund was requested, or null. |
processorReference |
string | null | The provider's own reference for the refund, or null until it gives one. |
status |
string | The new status (see below). |
previousStatus |
string | null | The status before the change, or null for a refund first recorded in its reported status. |
occurredAt |
string | ISO-8601 timestamp of when the change occurred. |
status and previousStatus are one of:
| Status | Meaning |
|---|---|
REQUESTED |
The provider's answer is not known; the refund may or may not have gone through. Only ever seen as a previousStatus. |
RECEIVED |
The provider accepted the refund. The money has not moved yet. |
COMPLETED |
The refund is complete. |
FAILED |
The provider rejected the refund. |
REVERSED |
A completed refund was pulled back by the provider. |
Today a refund is reported when the provider accepts it (RECEIVED, with
previousStatus REQUESTED) or rejects it (FAILED). COMPLETED and
REVERSED are part of the contract so your handler can accept them, but are not
sent yet.
Example payload:
{
"eventId": "WebhookRequest#2cVQF8s0u9c2bq5b3pTn1mY7kde",
"requestId": "2dWRg9t1v0d3cr6c4qUo2nZ8lef",
"type": "payment.refund.status.changed.v1",
"refundId": "2fYTi1v3x2f5et8e6sWq4pB0ngh",
"paymentId": "2cVQF8s0u9c2bq5b3pTn1mY7kde",
"orgId": "2eXSh0u2w1e4ds7d5rVp3oA9mfg",
"provider": "CLP",
"amount": "160.00",
"currency": "USD",
"reference": "Refund for order 1001",
"processorReference": "8815234867291034",
"status": "RECEIVED",
"previousStatus": "REQUESTED",
"occurredAt": "2026-10-09T17:42:03.118Z"
}payment.status.changed.v1
Sent when a payment's status changes. Unlike the application and organization events — which fan out only to the owning agency — this event is delivered to the webhooks of both the owning agency and the payment's organization, so the same payload reaches subscribers on either side.
| Field | Type | Description |
|---|---|---|
eventId |
string | Stable id of this delivery; identical across retries (use it to deduplicate). |
requestId |
string | Id of the individual delivery attempt; changes on every retry. |
type |
string | Always "payment.status.changed.v1". |
paymentId |
string | The id of the payment whose status changed. |
orgId |
string | null | The id of the payment's organization, or null when the payment is not yet linked to an org. |
status |
string | The new status (see below). |
previousStatus |
string | null | The status before the change, or null for the payment's first status. |
occurredAt |
string | ISO-8601 timestamp of when the change occurred. |
status and previousStatus are one of:
| Status | Meaning |
|---|---|
Pending |
The payment has been created but not yet completed. |
Completed |
The payment has been successfully completed. |
Finalized |
The payment has settled and is finalized. |
Canceled |
The payment was canceled. |
Example payload:
{
"eventId": "WebhookRequest#2cVQF8s0u9c2bq5b3pTn1mY7kde",
"requestId": "2dWRg9t1v0d3cr6c4qUo2nZ8lef",
"type": "payment.status.changed.v1",
"paymentId": "2cVQF8s0u9c2bq5b3pTn1mY7kde",
"orgId": "2eXSh0u2w1e4ds7d5rVp3oA9mfg",
"status": "Completed",
"previousStatus": "Pending",
"occurredAt": "2026-06-25T17:42:03.118Z"
}