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"
}