Event types
Every event Ownrecord emits when something changes, as delivered to your webhook endpoints.
When something changes, Ownrecord records an event in the same transaction as the change and delivers it to your webhook endpoints. Every delivery has this envelope:
{
"id": "evt_01jz3k2m4n5p6q7r8s9t0v1w2x",
"type": "customer.created",
"created": 1791892800,
"livemode": false,
"data": {
"object": {}
},
"previous_attributes": {}
}
created is when the event happened, in Unix seconds (the event feed, GET /api/v1/events, returns the same envelope). data.object is the object as it is after the change. previous_attributes holds the changed fields' old values, on update events only. Events can arrive out of order: use created, and fetch the object again when you need its latest state.
API key
api_key.created
An API key was created. The secret is never part of the event.
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | key_… ID | |
object | "api_key" | |
kind | one of org, entity, brand | |
livemode | boolean | |
name | string | |
prefix | string | |
scopes | array of one of 98 values, e.g. org:read, org:write, org:admin (all in the OpenAPI document) | |
status | one of active, expired, revoked | |
orgId | org_… ID | |
entityId | ent_… ID or null | |
brandId | brd_… ID or null | |
createdBy | string | |
createdAt | date-time | |
updatedAt | date-time | |
expiresAt | date-time or null | |
lastUsedAt | date-time or null | |
revokedAt | date-time or null |
api_key.revoked
An API key was revoked. It stops working immediately.
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | key_… ID | |
object | "api_key" | |
kind | one of org, entity, brand | |
livemode | boolean | |
name | string | |
prefix | string | |
scopes | array of one of 98 values, e.g. org:read, org:write, org:admin (all in the OpenAPI document) | |
status | one of active, expired, revoked | |
orgId | org_… ID | |
entityId | ent_… ID or null | |
brandId | brd_… ID or null | |
createdBy | string | |
createdAt | date-time | |
updatedAt | date-time | |
expiresAt | date-time or null | |
lastUsedAt | date-time or null | |
revokedAt | date-time or null |
api_key.updated
An API key was renamed. previous_attributes has the old name.
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | key_… ID | |
object | "api_key" | |
kind | one of org, entity, brand | |
livemode | boolean | |
name | string | |
prefix | string | |
scopes | array of one of 98 values, e.g. org:read, org:write, org:admin (all in the OpenAPI document) | |
status | one of active, expired, revoked | |
orgId | org_… ID | |
entityId | ent_… ID or null | |
brandId | brd_… ID or null | |
createdBy | string | |
createdAt | date-time | |
updatedAt | date-time | |
expiresAt | date-time or null | |
lastUsedAt | date-time or null | |
revokedAt | date-time or null |
App
app.listing_approved
Ownrecord approved an app's listing: it is listed for every organization, with a verified publisher, for the scopes approved.
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "app_listing" | |
ownerOrgId | string | |
name | string | |
status | one of not_submitted, pending, changes_requested, approved, rejected | |
listed | boolean | |
reason | string or null |
app.listing_changes_requested
Ownrecord asked for changes to an app's listing application. reason says what to change; edit and submit it again.
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "app_listing" | |
ownerOrgId | string | |
name | string | |
status | one of not_submitted, pending, changes_requested, approved, rejected | |
listed | boolean | |
reason | string or null |
app.listing_rejected
Ownrecord rejected an app's listing: other organizations can no longer install it. reason says why.
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "app_listing" | |
ownerOrgId | string | |
name | string | |
status | one of not_submitted, pending, changes_requested, approved, rejected | |
listed | boolean | |
reason | string or null |
app.reinstated
Ownrecord lifted an app's suspension. Its installations stay paused until each organization resumes its own.
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
object | "app_suspension" | |
app | object | |
app.id | string | |
app.name | string | |
app.publisher | string | |
ownerOrgId | string | |
ownsApp | boolean | |
installationId | string or null | |
status | one of suspended, reinstated | |
reason | string | |
suspendedAt | string | |
reinstatedAt | string or null | |
reinstateReason | string or null |
app.suspended
Ownrecord suspended an app everywhere: its tokens are revoked, its installations paused and the agents it owns stopped. reason says why.
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
object | "app_suspension" | |
app | object | |
app.id | string | |
app.name | string | |
app.publisher | string | |
ownerOrgId | string | |
ownsApp | boolean | |
installationId | string or null | |
status | one of suspended, reinstated | |
reason | string | |
suspendedAt | string | |
reinstatedAt | string or null | |
reinstateReason | string or null |
Approval
approval.requested
A call needed a person's approval, so an approval request was created instead of running it. Nothing ran yet.
Scope: Organization · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | apr_… ID | |
object | "approval_request" | |
status | one of pending, approved, rejected, expired, executed, stale | |
operationId | string | |
summary | string | |
orgId | org_… ID | |
entityId | ent_… ID or null | |
brandId | brd_… ID or null | |
livemode | boolean | |
requestedBy | object | |
requestedBy.type | one of user, api_key, agent, app, system, public, customer | |
requestedBy.id | string | |
requestedBy.via | one of console, api, mcp, assistant, portal, job or null | |
requestedBy.clientId | string or null | |
requestedBy.onBehalfOfUserId | string or null | |
requestedBy.appInstallationId | string or null | |
amount | money or null | |
input | any | |
dryRun | object | |
dryRun.output | any | |
dryRun.events | array of string | |
diff | object or null | |
requiredApprovals | integer (1 to 2) | |
approvals | array of object | |
approvals[].userId | usr_… ID | |
approvals[].at | date-time | |
approvals[].comment | string or null | |
rejection | object or null | |
failure | object or null | |
resultRef | string or null | |
approveUrl | string | |
expiresAt | date-time | |
executedAt | date-time or null | |
createdAt | date-time | |
updatedAt | date-time |
approval.resolved
An approval request reached its outcome: executed (approved and run as requested), rejected, stale (approved, but it could no longer run as requested) or expired (nobody decided within 72 hours). status says which.
Scope: Organization · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | apr_… ID | |
object | "approval_request" | |
status | one of pending, approved, rejected, expired, executed, stale | |
operationId | string | |
summary | string | |
orgId | org_… ID | |
entityId | ent_… ID or null | |
brandId | brd_… ID or null | |
livemode | boolean | |
requestedBy | object | |
requestedBy.type | one of user, api_key, agent, app, system, public, customer | |
requestedBy.id | string | |
requestedBy.via | one of console, api, mcp, assistant, portal, job or null | |
requestedBy.clientId | string or null | |
requestedBy.onBehalfOfUserId | string or null | |
requestedBy.appInstallationId | string or null | |
amount | money or null | |
input | any | |
dryRun | object | |
dryRun.output | any | |
dryRun.events | array of string | |
diff | object or null | |
requiredApprovals | integer (1 to 2) | |
approvals | array of object | |
approvals[].userId | usr_… ID | |
approvals[].at | date-time | |
approvals[].comment | string or null | |
rejection | object or null | |
failure | object or null | |
resultRef | string or null | |
approveUrl | string | |
expiresAt | date-time | |
executedAt | date-time or null | |
createdAt | date-time | |
updatedAt | date-time |
Brand
brand.created
A brand was created under a legal entity. New brands start in test mode only (test_only).
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "brand" | |
orgId | string | |
entityId | string | |
slug | string | |
name | string | |
status | string |
brand.updated
A brand's settings changed. previous_attributes has the old values.
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "brand" | |
orgId | string | |
entityId | string | |
slug | string | |
name | string | |
status | string |
Checkout
checkout.session.blocked
The customer's details gave a tax quote Ownrecord can't charge with confidence (for example, the seller isn't registered where a zero threshold applies), so the sale is paused and the hosted page offers the waitlist. data.blockedReason is the reason code.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "checkout.session" | |
livemode | boolean | |
brandId | string | |
entityId | string | |
mode | string | |
status | one of open, processing, complete, expired, blocked | |
currency | string | |
customerId | string or null | |
metadata | object |
checkout.session.completed
A checkout was paid and fulfilled: the payment is recorded, the sale posted, the invoice issued and credit packs granted, all in one transaction triggered by the processor's webhook. data is the session with paymentId and invoiceId.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "checkout.session" | |
livemode | boolean | |
brandId | string | |
entityId | string | |
mode | string | |
status | one of open, processing, complete, expired, blocked | |
currency | string | |
customerId | string or null | |
metadata | object |
checkout.session.expired
A checkout session expired without a payment: its time ran out (24 hours by default) or it was expired through the API.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "checkout.session" | |
livemode | boolean | |
brandId | string | |
entityId | string | |
mode | string | |
status | one of open, processing, complete, expired, blocked | |
currency | string | |
customerId | string or null | |
metadata | object |
Coupon
coupon.created
A coupon (percent or amount off, with a duration) was created in the brand's catalog.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "coupon" | |
brandId | string | |
livemode | boolean | |
name | string | |
duration | one of once, repeating, forever | |
active | boolean |
coupon.updated
A coupon changed: its name, metadata or active (archived or reactivated), or, while unused, its terms. previous_attributes has the old values.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "coupon" | |
brandId | string | |
livemode | boolean | |
name | string | |
duration | one of once, repeating, forever | |
active | boolean |
Credit note
credit_note.issued
A credit note was issued for a refund: numbered without gaps in the brand's credit note series, it reverses the original invoice's lines at their original tax rates and jurisdictions. data is the credit note (credit_notes.get); its PDF is rendered and emailed to the customer right after (pdf.status turns ready).
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "credit_note" | |
number | string | |
livemode | boolean | |
brandId | string | |
entityId | string | |
originalInvoiceId | string | |
originalInvoiceNumber | string | |
refundId | string | |
currency | string | |
issueDate | string | |
totals | object | |
totals.net | object | |
totals.net.amount | string | |
totals.net.currency | string | |
totals.tax | object | |
totals.tax.amount | string | |
totals.tax.currency | string | |
totals.gross | object | |
totals.gross.amount | string | |
totals.gross.currency | string |
Customer
customer.created
A customer was created: through the API or the console, or by checkout for a new buyer. Tax IDs given at creation are already checked (taxIds[].verification).
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "customer" | |
livemode | boolean | |
email | string | |
type | one of individual, business, unknown | |
taxIds | array of object | |
taxIds[].id | string | |
taxIds[].type | string | |
taxIds[].country | string | |
deletedAt | string or null |
customer.credit_balance.updated
A customer's credit balance changed in one currency: an operator adjusted it (with a reason), an invoice used it at finalization, a voided invoice gave it back, a subscription change credited unused time (proration), or a refund gave back the part of an invoice the balance paid (refund, M8). data.balance is the new balance and data.change the signed change, both in integer micros; data.reason says why (adjustment, invoice_applied, invoice_voided, proration, refund).
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
object | "credit_balance_change" | |
customerId | string | |
currency | string | |
balance | object | |
balance.amount | string | |
balance.currency | string | |
change | object | |
change.amount | string | |
change.currency | string | |
reason | one of adjustment, invoice_applied, invoice_voided, proration, refund | |
invoiceId | string or null | |
ledgerTransactionId | string |
customer.entitlements.updated
A customer's entitlements changed: a subscription, lifetime purchase or override changed, the brand changed a feature or a product's entitlements, or an override expired or a past-due grace period ended. changes lists each feature whose value changed; previous_attributes.values has the previous set.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
object | "customer_entitlements" | |
customerId | string | |
brandId | string | |
livemode | boolean | |
values | object | |
sources | array of object | |
sources[].type | one of override, subscription, purchase, default | |
sources[].ref | string | |
sources[].featureKey | string | |
sources[].value | boolean or number or string | |
computedAt | string | |
changes | array of object | |
changes[].featureKey | string | |
changes[].before | boolean or number or string or null | |
changes[].after | boolean or number or string or null |
customer.updated
A customer changed: profile fields, tax IDs added or removed, the locked tax country set at the first payment or moved by a top-up, or the customer was deleted (deletedAt). previous_attributes has the old values of the fields that changed.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "customer" | |
livemode | boolean | |
email | string | |
type | one of individual, business, unknown | |
taxIds | array of object | |
taxIds[].id | string | |
taxIds[].type | string | |
taxIds[].country | string | |
deletedAt | string or null |
Data export
data_export.failed
An accounting export couldn't be built; failure says why. Request it again.
Scope: Legal entity · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "data_export" | |
entityId | string | |
livemode | boolean | |
kind | "accounting" | |
status | one of queued, running, ready, expired, failed | |
from | string | |
to | string |
data_export.ready
An accounting export's files (journal, invoice register, credit-note register) are ready to download for 30 days.
Scope: Legal entity · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "data_export" | |
entityId | string | |
livemode | boolean | |
kind | "accounting" | |
status | one of queued, running, ready, expired, failed | |
from | string | |
to | string |
data_export.requested
An accounting export was requested (internal); the data_export job builds its files.
Scope: Legal entity · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "data_export" | |
entityId | string | |
livemode | boolean | |
kind | "accounting" | |
status | one of queued, running, ready, expired, failed | |
from | string | |
to | string |
Discount
discount.created
A coupon was applied to a customer or a subscription (directly or through a promotion code), with the dates it covers.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "discount" | |
brandId | string | |
livemode | boolean | |
couponId | string | |
customerId | string | |
subscriptionId | string or null | |
start | string | |
end | string or null |
discount.deleted
A discount was ended before its time: it no longer applies to invoices from end on. previous_attributes.end has the old end (null for forever).
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "discount" | |
brandId | string | |
livemode | boolean | |
couponId | string | |
customerId | string | |
subscriptionId | string or null | |
start | string | |
end | string or null |
Dispute
dispute.closed
The processor closed a dispute. status is won (the withdrawn amount came back, the fee stays; an inquiry closes as won with nothing booked) or lost (the money stays withdrawn and the customer's risk becomes elevated).
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | dp_… ID | |
object | "dispute" | |
livemode | boolean | |
entityId | ent_… ID | |
brandId | brd_… ID | |
paymentId | pay_… ID | |
customerId | cus_… ID | |
processor | one of stripe, mollie, fake | |
processorConnectionId | pcon_… ID | |
processorRef | string | |
reason | string or null | |
processorStatus | string or null | |
status | one of needs_response, under_review, won, lost | |
inquiry | boolean | |
fundsWithdrawnAt | date-time or null | |
amount | money | |
fee | money or null | |
evidenceDueBy | date-time or null | |
openedAt | date-time | |
closedAt | date-time or null | |
ledgerTxnIds | array of txn_… ID | |
walletFreeze | object or null | |
walletReversal | object or null | |
evidence | object or null | |
notes | string or null | |
assignee | object or null | |
history | array of object | |
history[].at | date-time | |
history[].event | one of 10 values, e.g. opened, wallet_frozen, funds_withdrawn (all in the OpenAPI document) | |
history[].by | string | |
history[].note | string or null | |
createdAt | date-time | |
updatedAt | date-time | |
version | integer (at least 1) |
dispute.created
A customer disputed a payment with their bank. For a chargeback the disputed amount and the dispute fee are booked as withdrawn; an inquiry (inquiry: true) takes no money and books nothing until the bank escalates it. The customer's wallets are frozen unless the brand turned that off.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | dp_… ID | |
object | "dispute" | |
livemode | boolean | |
entityId | ent_… ID | |
brandId | brd_… ID | |
paymentId | pay_… ID | |
customerId | cus_… ID | |
processor | one of stripe, mollie, fake | |
processorConnectionId | pcon_… ID | |
processorRef | string | |
reason | string or null | |
processorStatus | string or null | |
status | one of needs_response, under_review, won, lost | |
inquiry | boolean | |
fundsWithdrawnAt | date-time or null | |
amount | money | |
fee | money or null | |
evidenceDueBy | date-time or null | |
openedAt | date-time | |
closedAt | date-time or null | |
ledgerTxnIds | array of txn_… ID | |
walletFreeze | object or null | |
walletReversal | object or null | |
evidence | object or null | |
notes | string or null | |
assignee | object or null | |
history | array of object | |
history[].at | date-time | |
history[].event | one of 10 values, e.g. opened, wallet_frozen, funds_withdrawn (all in the OpenAPI document) | |
history[].by | string | |
history[].note | string or null | |
createdAt | date-time | |
updatedAt | date-time | |
version | integer (at least 1) |
dispute.updated
The processor withdrew the funds of an inquiry (it became a chargeback: inquiry: false, fundsWithdrawnAt, the chargeback posted), or the evidence pack was built or submitted, or the notes or assignee changed. previous_attributes has the old values.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | dp_… ID | |
object | "dispute" | |
livemode | boolean | |
entityId | ent_… ID | |
brandId | brd_… ID | |
paymentId | pay_… ID | |
customerId | cus_… ID | |
processor | one of stripe, mollie, fake | |
processorConnectionId | pcon_… ID | |
processorRef | string | |
reason | string or null | |
processorStatus | string or null | |
status | one of needs_response, under_review, won, lost | |
inquiry | boolean | |
fundsWithdrawnAt | date-time or null | |
amount | money | |
fee | money or null | |
evidenceDueBy | date-time or null | |
openedAt | date-time | |
closedAt | date-time or null | |
ledgerTxnIds | array of txn_… ID | |
walletFreeze | object or null | |
walletReversal | object or null | |
evidence | object or null | |
notes | string or null | |
assignee | object or null | |
history | array of object | |
history[].at | date-time | |
history[].event | one of 10 values, e.g. opened, wallet_frozen, funds_withdrawn (all in the OpenAPI document) | |
history[].by | string | |
history[].note | string or null | |
createdAt | date-time | |
updatedAt | date-time | |
version | integer (at least 1) |
Einvoice
einvoice.accepted
The receiver accepted the e-invoice.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "einvoice" | |
livemode | boolean | |
brandId | string | |
entityId | string | |
documentKind | one of invoice, credit_note | |
documentId | string | |
documentNumber | string | |
provider | string | |
format | string | |
status | string | |
externalId | string or null |
einvoice.delivered
The e-invoicing provider delivered the e-invoice to the buyer's access point or platform.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "einvoice" | |
livemode | boolean | |
brandId | string | |
entityId | string | |
documentKind | one of invoice, credit_note | |
documentId | string | |
documentNumber | string | |
provider | string | |
format | string | |
status | string | |
externalId | string or null |
einvoice.failed
The e-invoice couldn't be generated or sent, for a reason retrying alone won't fix (error.code, error.message): for example a buyer without an electronic address. Retry it with einvoices.retry once the cause is fixed.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "einvoice" | |
livemode | boolean | |
brandId | string | |
entityId | string | |
documentKind | one of invoice, credit_note | |
documentId | string | |
documentNumber | string | |
provider | string | |
format | string | |
status | string | |
externalId | string or null |
einvoice.rejected
The receiver rejected the e-invoice; error.message gives its reason. The invoice itself stands: correct it with a credit note or fix the buyer's details and retry the e-invoice.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "einvoice" | |
livemode | boolean | |
brandId | string | |
entityId | string | |
documentKind | one of invoice, credit_note | |
documentId | string | |
documentNumber | string | |
provider | string | |
format | string | |
status | string | |
externalId | string or null |
einvoice.sent
An issued invoice's or credit note's e-invoice was generated (EN 16931 UBL, Peppol BIS Billing 3.0) and the entity's e-invoicing provider took it for delivery. status is queued and externalId is the provider's ID.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "einvoice" | |
livemode | boolean | |
brandId | string | |
entityId | string | |
documentKind | one of invoice, credit_note | |
documentId | string | |
documentNumber | string | |
provider | string | |
format | string | |
status | string | |
externalId | string or null |
Feature
feature.created
A feature (an entitlement definition such as seats.max) was created for the brand.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "feature" | |
brandId | string | |
livemode | boolean | |
key | string | |
type | one of boolean, limit, enum |
feature.updated
A feature's name, combine rule, default value or enum values changed. previous_attributes has the old values.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "feature" | |
brandId | string | |
livemode | boolean | |
key | string | |
type | one of boolean, limit, enum |
Filing period
filing_period.created
A filing period was created for a regime the entity is registered in (or in a grace period for), from the regime's filing rules: its dates and due date.
Scope: Legal entity · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "filing_period" | |
entityId | string | |
livemode | boolean | |
regimeId | string | |
periodKey | string | |
periodStart | string | |
periodEnd | string | |
dueDate | string | |
dueAt | string | |
status | one of open, locked, prepared, submitted, paid | |
reportKind | one of eu_oss, eu_domestic, uk_vat, ch_mwst, generic, us_state |
filing_period.due_soon
A return is due in 14, 7 or 2 days and isn't filed yet (reminder is the alert code, daysBefore the days left).
Scope: Legal entity · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "filing_period" | |
entityId | string | |
livemode | boolean | |
regimeId | string | |
periodKey | string | |
periodStart | string | |
periodEnd | string | |
dueDate | string | |
dueAt | string | |
status | one of open, locked, prepared, submitted, paid | |
reportKind | one of eu_oss, eu_domestic, uk_vat, ch_mwst, generic, us_state | |
reminder | one of FILING_DUE_14, FILING_DUE_7, FILING_DUE_2 | |
daysBefore | integer |
filing_period.locked
A filing period that is over was locked, ready for its report.
Scope: Legal entity · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "filing_period" | |
entityId | string | |
livemode | boolean | |
regimeId | string | |
periodKey | string | |
periodStart | string | |
periodEnd | string | |
dueDate | string | |
dueAt | string | |
status | one of open, locked, prepared, submitted, paid | |
reportKind | one of eu_oss, eu_domestic, uk_vat, ch_mwst, generic, us_state |
filing_period.paid
The tax of the period was paid: the payment reference is recorded and the ledger moved the tax payable to the bank.
Scope: Legal entity · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "filing_period" | |
entityId | string | |
livemode | boolean | |
regimeId | string | |
periodKey | string | |
periodStart | string | |
periodEnd | string | |
dueDate | string | |
dueAt | string | |
status | one of open, locked, prepared, submitted, paid | |
reportKind | one of eu_oss, eu_domestic, uk_vat, ch_mwst, generic, us_state |
filing_period.prepared
The period's report was generated (again) and it reconciles with the ledger: the report files and totals are on the period.
Scope: Legal entity · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "filing_period" | |
entityId | string | |
livemode | boolean | |
regimeId | string | |
periodKey | string | |
periodStart | string | |
periodEnd | string | |
dueDate | string | |
dueAt | string | |
status | one of open, locked, prepared, submitted, paid | |
reportKind | one of eu_oss, eu_domestic, uk_vat, ch_mwst, generic, us_state |
filing_period.ready
A filing period is over and its return isn't filed yet: it can now be locked and its report prepared. Once per period, when its lock date (lockableAt) has passed.
Scope: Legal entity · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "filing_period" | |
entityId | string | |
livemode | boolean | |
regimeId | string | |
periodKey | string | |
periodStart | string | |
periodEnd | string | |
dueDate | string | |
dueAt | string | |
status | one of open, locked, prepared, submitted, paid | |
reportKind | one of eu_oss, eu_domestic, uk_vat, ch_mwst, generic, us_state |
filing_period.submitted
The return was filed with the tax authority; the period has its reference.
Scope: Legal entity · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "filing_period" | |
entityId | string | |
livemode | boolean | |
regimeId | string | |
periodKey | string | |
periodStart | string | |
periodEnd | string | |
dueDate | string | |
dueAt | string | |
status | one of open, locked, prepared, submitted, paid | |
reportKind | one of eu_oss, eu_domestic, uk_vat, ch_mwst, generic, us_state |
Invitation
invitation.created
Someone was invited to the organization. The invitation email is a separate effect; the event never contains the invitation token.
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "invitation" | |
orgId | string | |
email | string | |
role | one of org_owner, org_admin, billing_admin, finance, tax_manager, support, developer, viewer | |
scope | object | |
expiresAt | string | |
invitedBy | string |
invitation.revoked
A pending invitation was revoked. Its link stops working immediately.
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "invitation" | |
orgId | string | |
email | string | |
role | one of org_owner, org_admin, billing_admin, finance, tax_manager, support, developer, viewer | |
scope | object | |
expiresAt | string | |
invitedBy | string |
Invoice
invoice.finalized
A draft invoice was finalized: it got its number and a fresh tax quote, and the customer's credit balance was applied. status is open (amount due in amountDue), or paid when the credit balance covered it. invoice.issued is emitted with it.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "invoice" | |
number | string | |
kind | one of invoice, receipt | |
status | string | |
livemode | boolean | |
brandId | string | |
entityId | string | |
quoteId | string | |
currency | string | |
issueDate | string | |
totals | object | |
totals.net | object | |
totals.net.amount | string | |
totals.net.currency | string | |
totals.tax | object | |
totals.tax.amount | string | |
totals.tax.currency | string | |
totals.gross | object | |
totals.gross.amount | string | |
totals.gross.currency | string |
invoice.issued
An invoice or receipt was issued: numbered without gaps in the brand's series and its content fixed (a paid checkout, or a finalized draft). data is the invoice (invoices.get); its PDF is rendered right after (pdf.status turns ready). A pending_registration invoice was charged before a registration number existed: the receipt goes out now, the formal invoice once the number exists.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "invoice" | |
number | string | |
kind | one of invoice, receipt | |
status | string | |
livemode | boolean | |
brandId | string | |
entityId | string | |
quoteId | string | |
currency | string | |
issueDate | string | |
totals | object | |
totals.net | object | |
totals.net.amount | string | |
totals.net.currency | string | |
totals.tax | object | |
totals.tax.amount | string | |
totals.tax.currency | string | |
totals.gross | object | |
totals.gross.amount | string | |
totals.gross.currency | string |
invoice.overdue
An open send_invoice invoice is overdue: its due date plus the brand's grace days have passed. A subscription invoice also puts the subscription in past_due.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "invoice" | |
number | string | |
status | string | |
livemode | boolean | |
brandId | string | |
entityId | string | |
currency | string | |
collectionMethod | string | |
totals | object | |
totals.gross | object | |
totals.gross.amount | string | |
totals.gross.currency | string |
invoice.paid
An invoice was paid in full: marked paid with the bank transfer's date and reference, paid by card, or covered by the customer's credit balance at finalization. payment says how.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "invoice" | |
number | string | |
kind | one of invoice, receipt | |
status | string | |
livemode | boolean | |
brandId | string | |
entityId | string | |
quoteId | string | |
currency | string | |
issueDate | string | |
totals | object | |
totals.net | object | |
totals.net.amount | string | |
totals.net.currency | string | |
totals.tax | object | |
totals.tax.amount | string | |
totals.tax.currency | string | |
totals.gross | object | |
totals.gross.amount | string | |
totals.gross.currency | string |
invoice.payment_failed
A charge of an open invoice was declined: the first charge, a dunning retry, or the retry after a payment-method update. The invoice stays open; payment.failed has the declined payment.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "invoice" | |
number | string | |
status | string | |
livemode | boolean | |
brandId | string | |
entityId | string | |
currency | string | |
collectionMethod | string | |
totals | object | |
totals.gross | object | |
totals.gross.amount | string | |
totals.gross.currency | string |
invoice.upcoming
A subscription renews in 7 days: data is the invoice the renewal will issue as known now (licensed items in advance, metered usage so far, pending items, discounts, tax at today's rates), without a number. Add invoice items or warn the customer now.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "invoice" | |
number | null | |
status | string | |
livemode | boolean | |
brandId | string | |
subscriptionId | string or null | |
currency | string | |
totals | object or null |
invoice.voided
A draft or an open invoice was voided. A voided open invoice keeps its number (numbers are never reused) and its ledger posting is reversed, including credit balance it used; a voided draft never had a number.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "invoice" | |
number | string or null | |
status | "void" | |
livemode | boolean | |
brandId | string | |
entityId | string | |
currency | string |
Lease
lease.expired
A lease reached its TTL without a closing settle and its expiry policy was applied: release returned the remaining funds to the wallet, capture charged them, and hold_for_late_settle keeps them reserved until data.lateSettleUntil (status expired_pending). Sent once per lease.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "lease" | |
walletId | string | |
status | one of expired, expired_pending | |
expiryPolicy | one of release, capture, hold_for_late_settle | |
amount | object | |
amount.amount | string | |
amount.currency | string | |
captured | object | |
captured.amount | string | |
captured.currency | string | |
expiresAt | string | |
lateSettleUntil | string or null |
Legal entity
legal_entity.created
A legal entity (seller of record) was added to the organization. It starts unverified and onboarding.
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "legal_entity" | |
orgId | string | |
slug | string | |
legalName | string |
legal_entity.updated
A legal entity's details changed. previous_attributes has the old values.
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "legal_entity" | |
orgId | string | |
slug | string | |
legalName | string |
Membership
membership.removed
A member was removed from the organization (or from one entity or brand).
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "membership" | |
orgId | string | |
userId | string | |
role | one of org_owner, org_admin, billing_admin, finance, tax_manager, support, developer, viewer | |
scope | object | |
livemodeAccess | boolean |
membership.updated
A member's role, scope or live-mode access changed. previous_attributes has the old values.
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "membership" | |
orgId | string | |
userId | string | |
role | one of org_owner, org_admin, billing_admin, finance, tax_manager, support, developer, viewer | |
scope | object | |
livemodeAccess | boolean |
Organization
organization.closed
The organization is closed: read-only and still exportable. Personal data not needed for financial records was pseudonymised.
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
object | "organization_closure" | |
orgId | string | |
status | one of closing, closed | |
subscriptions | one of period_end, immediate |
organization.closing
An owner started closing the organization: live checkouts stop and its subscriptions are being cancelled. It closes once open invoices, refunds and the final filing periods are done.
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
object | "organization_closure" | |
orgId | string | |
status | one of closing, closed | |
subscriptions | one of period_end, immediate |
organization.created
An organization was created. Ownrecord then creates its billing account on the platform brand, starts it on the free sandbox plan, and emails the person who created it the welcome with the next steps.
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "organization" | |
slug | string | |
status | one of active, restricted, suspended, closing, closed | |
platformCustomerId | string or null | |
plan | object | |
plan.status | one of trialing, active, past_due, unpaid, canceled, none | |
plan.subscriptionId | string or null | |
plan.productId | string or null | |
plan.entitlements | object |
organization.export_failed
The organization export couldn't be built; failure says why. Request it again.
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "organization_export" | |
status | string |
organization.export_ready
The organization export (a ZIP of JSON files and PDFs) is ready to download for 7 days.
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "organization_export" | |
status | string |
organization.export_requested
An export of the whole organization was requested (internal); the organization_export job builds it.
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "organization_export" | |
status | string |
organization.onboarding_updated
Someone skipped, resumed or confirmed an onboarding step. data is the checklist with every step's state.
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
object | "onboarding_checklist" | |
orgId | string | |
complete | boolean |
organization.ownership_offer_cancelled
An open offer of ownership was cancelled before it was accepted.
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
object | "ownership_transfer" | |
orgId | string | |
fromUserId | string | |
toUserId | string | |
expiresAt | string |
organization.ownership_offered
An owner offered ownership of the organization to another member, who has 7 days to accept. They were emailed.
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
object | "ownership_transfer" | |
orgId | string | |
fromUserId | string | |
toUserId | string | |
expiresAt | string |
organization.plan_updated
The organization's Ownrecord plan changed: its subscription, status, period end or entitlements (spec §37.4). previous_attributes.plan has the old values.
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "organization" | |
slug | string | |
status | one of active, restricted, suspended, closing, closed | |
platformCustomerId | string or null | |
plan | object | |
plan.status | one of trialing, active, past_due, unpaid, canceled, none | |
plan.subscriptionId | string or null | |
plan.productId | string or null | |
plan.entitlements | object |
organization.reactivated
A restricted or suspended organization is active again: its open Ownrecord invoices were paid, a platform admin held the escalation, or a platform admin lifted a suspension for abuse of an organization that is paid up.
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "organization" | |
slug | string | |
status | one of active, restricted, suspended, closing, closed | |
platformCustomerId | string or null | |
plan | object | |
plan.status | one of trialing, active, past_due, unpaid, canceled, none | |
plan.subscriptionId | string or null | |
plan.productId | string or null | |
plan.entitlements | object |
organization.reinstated
A platform admin lifted the organization's suspension for abuse. Its status is what its Ownrecord subscription says: active when paid, otherwise the stage that is due for how long it has been unpaid. previous_attributes.status is suspended.
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "organization" | |
slug | string | |
status | one of active, restricted, suspended, closing, closed | |
platformCustomerId | string or null | |
plan | object | |
plan.status | one of trialing, active, past_due, unpaid, canceled, none | |
plan.subscriptionId | string or null | |
plan.productId | string or null | |
plan.entitlements | object |
organization.restricted
The organization's Ownrecord subscription has been unpaid for 14 days (by default): nothing new can be created in live mode until it is paid. Existing checkouts, renewals and webhooks keep running.
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "organization" | |
slug | string | |
status | one of active, restricted, suspended, closing, closed | |
platformCustomerId | string or null | |
plan | object | |
plan.status | one of trialing, active, past_due, unpaid, canceled, none | |
plan.subscriptionId | string or null | |
plan.productId | string or null | |
plan.entitlements | object |
organization.suspended
The organization's Ownrecord subscription has been unpaid for 30 days (by default): new live checkouts are refused. Renewals, refunds, the customer portal and filings continue.
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "organization" | |
slug | string | |
status | one of active, restricted, suspended, closing, closed | |
platformCustomerId | string or null | |
plan | object | |
plan.status | one of trialing, active, past_due, unpaid, canceled, none | |
plan.subscriptionId | string or null | |
plan.productId | string or null | |
plan.entitlements | object |
organization.updated
The organization's name or slug changed. previous_attributes has the old values. A slug change moves the console URLs.
Scope: Organization · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "organization" | |
slug | string | |
name | string |
Payment
payment.failed
A payment attempt failed at the processor (for example, the card was declined). The checkout stays open, so the customer can try another payment method. data is the failed attempt.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "payment" | |
livemode | boolean | |
brandId | string | |
status | string | |
amount | object | |
amount.amount | string | |
amount.currency | string | |
checkoutSessionId | string or null |
payment.succeeded
A payment succeeded and was recorded with its checkout session, ledger transactions and invoice. data is the payment.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "payment" | |
livemode | boolean | |
brandId | string | |
status | string | |
amount | object | |
amount.amount | string | |
amount.currency | string | |
checkoutSessionId | string or null |
Payment method
payment_method.attached
A payment method was saved for a customer (a subscription checkout or a setup checkout), for off-session charges.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "payment_method" | |
brandId | string | |
livemode | boolean | |
customerId | string | |
type | string | |
isDefault | boolean |
payment_method.detached
A payment method was removed from a customer; it is no longer charged.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "payment_method" | |
brandId | string | |
livemode | boolean | |
customerId | string | |
type | string | |
isDefault | boolean |
payment_method.updated
A payment method became (or stopped being) the customer's default. previous_attributes.isDefault has the old value.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "payment_method" | |
brandId | string | |
livemode | boolean | |
customerId | string | |
type | string | |
isDefault | boolean |
Payout
payout.failed
A processor payout came back to the processor balance: the payout posting was reversed.
Scope: Legal entity · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
object | "payout" | |
itemId | string | |
processorConnectionId | string | |
payoutRef | string | |
status | one of in_transit, paid, failed | |
amount | object | |
amount.amount | string | |
amount.currency | string |
payout.paid
A processor payout reached the legal entity's bank: Dr bank / Cr processor clearing is in the ledger.
Scope: Legal entity · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
object | "payout" | |
itemId | string | |
processorConnectionId | string | |
payoutRef | string | |
status | one of in_transit, paid, failed | |
amount | object | |
amount.amount | string | |
amount.currency | string |
Price
price.created
A price was created for one of the brand's products.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "price" | |
brandId | string | |
livemode | boolean | |
productId | string | |
type | one of one_time, recurring, credit_pack | |
currency | string | |
lookupKey | string or null | |
active | boolean |
price.updated
A price changed: its nickname, lookup key (set, removed or moved to another price), metadata, active, or, while unused, its amounts. previous_attributes has the old values.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "price" | |
brandId | string | |
livemode | boolean | |
productId | string | |
type | one of one_time, recurring, credit_pack | |
currency | string | |
lookupKey | string or null | |
active | boolean |
Processor connection
processor_connection.created
A processor was connected to a legal entity: the key was tested and stored encrypted, and the webhook endpoint was set up.
Scope: Legal entity · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "processor_connection" | |
entityId | string | |
livemode | boolean | |
processor | one of stripe, mollie, fake | |
label | string | |
status | one of active, degraded, disconnected | |
keyHint | string |
processor_connection.disconnected
A processor connection was disconnected: its API key was destroyed and it can't be used for payments any more.
Scope: Legal entity · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "processor_connection" | |
entityId | string | |
livemode | boolean | |
processor | one of stripe, mollie, fake | |
label | string | |
status | one of active, degraded, disconnected | |
keyHint | string |
processor_connection.updated
A processor connection changed: its key was rotated, its label changed, or it was marked degraded or active. previous_attributes has the old status, label or key hint.
Scope: Legal entity · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "processor_connection" | |
entityId | string | |
livemode | boolean | |
processor | one of stripe, mollie, fake | |
label | string | |
status | one of active, degraded, disconnected | |
keyHint | string |
Product
product.created
A product was created in the brand's catalog.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "product" | |
brandId | string | |
livemode | boolean | |
name | string | |
kind | one of standard, plan | |
taxCategoryId | string | |
active | boolean |
product.updated
A product changed: its name, description, tax category, kind, entitlements, images, metadata or active (archived or reactivated). previous_attributes has the old values.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "product" | |
brandId | string | |
livemode | boolean | |
name | string | |
kind | one of standard, plan | |
taxCategoryId | string | |
active | boolean |
Promotion code
promotion_code.created
A customer-facing promotion code was created for one of the brand's coupons.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "promotion_code" | |
brandId | string | |
livemode | boolean | |
couponId | string | |
code | string | |
active | boolean |
promotion_code.updated
A promotion code's metadata or active changed (archived or reactivated). previous_attributes has the old values.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "promotion_code" | |
brandId | string | |
livemode | boolean | |
couponId | string | |
code | string | |
active | boolean |
Rate
rate.changed
A tax rate the entity charges changed: a knowledge base update added, changed or retired a rate this mode uses, in a jurisdiction where one of the entity's registrations is registered or in grace. changes lists them with the regimes concerned; a future validFrom takes effect on that date.
Scope: Legal entity · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
object | "rate_change" | |
entityId | string | |
livemode | boolean | |
knowledgeCommit | string | The tax knowledge version that made the change. |
previousCommit | string or null | The version loaded before. |
changes | array of object | The changed rates, at most 100. |
changes[].change | one of added, changed, retired | |
changes[].jurisdictionId | string | The jurisdiction, e.g. FI or US-TX. |
changes[].taxCategoryId | string | The tax category, or * for the jurisdiction's default rate. |
changes[].kind | string | The rate kind, e.g. standard or reduced. |
changes[].subdivision | string or null | |
changes[].rate | object or null | The rate as this mode uses it now (null when retired). |
changes[].previous | object or null | The rate this mode used before (null when added). |
changes[].regimeIds | array of string | The entity's registrations (regimes) that charge this jurisdiction's tax. |
changeCount | integer (at least 1) | How many rates changed. |
truncated | boolean | True when changes doesn't list them all. |
Reconciliation
reconciliation.item.ignored
A person took an open reconciliation item out of the queue, with a note; nothing was posted.
Scope: Legal entity · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "reconciliation_item" | |
entityId | string | |
livemode | boolean | |
source | one of processor, bank | |
kind | string | |
status | one of open, matched, ignored | |
amount | object | |
amount.amount | string | |
amount.currency | string |
reconciliation.item.resolved
A person resolved an open reconciliation item, with a note (and for a bank line, the payout it confirms).
Scope: Legal entity · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "reconciliation_item" | |
entityId | string | |
livemode | boolean | |
source | one of processor, bank | |
kind | string | |
status | one of open, matched, ignored | |
amount | object | |
amount.amount | string | |
amount.currency | string |
reconciliation.run.completed
A reconciliation run of a processor connection finished: the balance transactions it read, matched and queued, and the fees and payouts it posted.
Scope: Legal entity · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
object | "reconciliation_run" | |
processorConnectionId | string | |
entityId | string | |
livemode | boolean | |
trigger | one of schedule, manual |
reconciliation.run.requested
A person or agent asked for a reconciliation run of one processor connection now (internal).
Scope: Legal entity · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
object | "reconciliation_run" | |
processorConnectionId | string | |
entityId | string | |
livemode | boolean | |
trigger | one of schedule, manual |
Refund
refund.failed
The processor refused or failed a refund. The credit note stands and the amount stays owed to the customer (refunds_payable) until an operator resolves it; the REFUND_FAILED alert says so. data.failure has the processor's code.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "refund" | |
type | string | |
status | one of pending, succeeded, failed | |
livemode | boolean | |
brandId | string | |
entityId | string | |
paymentId | string | |
invoiceId | string | |
creditNoteId | string | |
amount | object | |
amount.amount | string | |
amount.currency | string |
refund.succeeded
The processor confirmed a refund: the money is on its way back to the customer. data is the refund (refunds.get) with processorRefundRef.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "refund" | |
type | string | |
status | one of pending, succeeded, failed | |
livemode | boolean | |
brandId | string | |
entityId | string | |
paymentId | string | |
invoiceId | string | |
creditNoteId | string | |
amount | object | |
amount.amount | string | |
amount.currency | string |
Registration
registration.deadline_escalated
The grace deadline came closer and an escalation alert was raised: half or 80% of the time to register has passed, or a daily reminder in the last three days before new consumer sales stop automatically. previous_attributes.escalationLevel is the level before.
Scope: Legal entity · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "registration" | |
entityId | string | |
livemode | boolean | |
regimeId | string | |
jurisdictionIds | array of string | |
state | one of not_applicable, monitored, pre_registration, grace, registered, blocked_b2c, deregistered | |
stateReason | string | |
armed | boolean | |
deadlineAt | string or null | |
escalationLevel | integer (0 to 3) | |
prerequisitesDone | boolean |
registration.state_changed
A registration's state, its reason or armed changed: an operator armed it, marked the application submitted, marked it registered or deregistered it; a sale crossed a threshold (grace or blocked); the deadline passed (automatic block); or the counters reached the pre-registration level. previous_attributes has the old state, stateReason and armed.
Scope: Legal entity · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "registration" | |
entityId | string | |
livemode | boolean | |
regimeId | string | |
jurisdictionIds | array of string | |
state | one of not_applicable, monitored, pre_registration, grace, registered, blocked_b2c, deregistered | |
stateReason | string | |
armed | boolean | |
deadlineAt | string or null | |
escalationLevel | integer (0 to 3) | |
prerequisitesDone | boolean |
registration.updated
A registration changed without a state change, e.g. a prerequisite's status, notes, owner or attachments.
Scope: Legal entity · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "registration" | |
entityId | string | |
livemode | boolean | |
regimeId | string | |
jurisdictionIds | array of string | |
state | one of not_applicable, monitored, pre_registration, grace, registered, blocked_b2c, deregistered | |
stateReason | string | |
armed | boolean | |
deadlineAt | string or null | |
escalationLevel | integer (0 to 3) | |
prerequisitesDone | boolean |
Reservation
reservation.expired
A single reservation reached its expiresAt without being captured or released: the reservation_expiry job released its funds back to the wallet. data is the reservation as reservations.get returns it.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "reservation" | |
walletId | string | |
status | "expired" | |
amount | object | |
amount.amount | string | |
amount.currency | string | |
captured | object | |
captured.amount | string | |
captured.currency | string |
Risk
risk.review.approved
Someone approved a held payment: the wallets the hold froze are unfrozen (unless another review or a dispute holds them) and the customer's risk goes back to what it was.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | rsk_… ID | |
object | "risk_evaluation" | |
livemode | boolean | |
brandId | brd_… ID | |
subject | object | |
subject.type | one of checkout_session, auto_reload | |
subject.checkoutSessionId | cs_… ID or null | |
subject.walletId | wal_… ID or null | |
customerId | cus_… ID or null | |
paymentId | pay_… ID or null | |
stage | one of intent, payment_method, confirm, off_session | |
decision | one of allow, require_3ds, review, block | |
score | integer | |
reasons | array of object | |
reasons[].code | one of 21 values, e.g. customer_blocked, customer_elevated, blocklist_email (all in the OpenAPI document) | |
reasons[].action | one of block, review, require_3ds, score | |
reasons[].points | integer or null | |
reasons[].detail | string | |
signals | object | |
signals.emailDomain | string or null | |
signals.ipNetwork | string or null | |
signals.ipCountry | string or null | |
signals.billingCountry | string or null | |
signals.cardCountry | string or null | |
signals.cardFingerprint | string or null | |
signals.amount | money or null | |
signals.topup | boolean | |
signals.newCustomer | boolean | |
signals.firstPayment | boolean | |
signals.disposableEmail | boolean | |
history | array of object | |
history[].at | date-time | |
history[].stage | one of intent, payment_method, confirm, off_session | |
history[].decision | one of allow, require_3ds, review, block | |
history[].score | integer | |
review | object or null | |
createdAt | date-time | |
updatedAt | date-time |
risk.review.opened
A payment the brand's risk rules held went through: it is recorded and invoiced as usual, and waits in the review queue. The customer's wallet that took its credits is frozen until the review is decided. Hold the delivery of your own goods until risk.review.approved.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | rsk_… ID | |
object | "risk_evaluation" | |
livemode | boolean | |
brandId | brd_… ID | |
subject | object | |
subject.type | one of checkout_session, auto_reload | |
subject.checkoutSessionId | cs_… ID or null | |
subject.walletId | wal_… ID or null | |
customerId | cus_… ID or null | |
paymentId | pay_… ID or null | |
stage | one of intent, payment_method, confirm, off_session | |
decision | one of allow, require_3ds, review, block | |
score | integer | |
reasons | array of object | |
reasons[].code | one of 21 values, e.g. customer_blocked, customer_elevated, blocklist_email (all in the OpenAPI document) | |
reasons[].action | one of block, review, require_3ds, score | |
reasons[].points | integer or null | |
reasons[].detail | string | |
signals | object | |
signals.emailDomain | string or null | |
signals.ipNetwork | string or null | |
signals.ipCountry | string or null | |
signals.billingCountry | string or null | |
signals.cardCountry | string or null | |
signals.cardFingerprint | string or null | |
signals.amount | money or null | |
signals.topup | boolean | |
signals.newCustomer | boolean | |
signals.firstPayment | boolean | |
signals.disposableEmail | boolean | |
history | array of object | |
history[].at | date-time | |
history[].stage | one of intent, payment_method, confirm, off_session | |
history[].decision | one of allow, require_3ds, review, block | |
history[].score | integer | |
review | object or null | |
createdAt | date-time | |
updatedAt | date-time |
risk.review.rejected
Someone rejected a held payment: it is refunded (a credit note is issued and refund.succeeded follows when the processor confirms), the customer's email and card are on the brand's blocklist and the customer's risk is blocked. Wallets stay frozen.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | rsk_… ID | |
object | "risk_evaluation" | |
livemode | boolean | |
brandId | brd_… ID | |
subject | object | |
subject.type | one of checkout_session, auto_reload | |
subject.checkoutSessionId | cs_… ID or null | |
subject.walletId | wal_… ID or null | |
customerId | cus_… ID or null | |
paymentId | pay_… ID or null | |
stage | one of intent, payment_method, confirm, off_session | |
decision | one of allow, require_3ds, review, block | |
score | integer | |
reasons | array of object | |
reasons[].code | one of 21 values, e.g. customer_blocked, customer_elevated, blocklist_email (all in the OpenAPI document) | |
reasons[].action | one of block, review, require_3ds, score | |
reasons[].points | integer or null | |
reasons[].detail | string | |
signals | object | |
signals.emailDomain | string or null | |
signals.ipNetwork | string or null | |
signals.ipCountry | string or null | |
signals.billingCountry | string or null | |
signals.cardCountry | string or null | |
signals.cardFingerprint | string or null | |
signals.amount | money or null | |
signals.topup | boolean | |
signals.newCustomer | boolean | |
signals.firstPayment | boolean | |
signals.disposableEmail | boolean | |
history | array of object | |
history[].at | date-time | |
history[].stage | one of intent, payment_method, confirm, off_session | |
history[].decision | one of allow, require_3ds, review, block | |
history[].score | integer | |
review | object or null | |
createdAt | date-time | |
updatedAt | date-time |
Subscription
subscription.cancel_scheduled
A subscription will end at the end of its current period (cancelAtPeriodEnd); it can be reactivated until then.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "subscription" | |
brandId | string | |
livemode | boolean | |
customerId | string | |
status | one of incomplete, incomplete_expired, trialing, active, past_due, unpaid, paused, canceled | |
items | array of object | |
items[].id | string | |
items[].priceId | string | |
items[].quantity | number |
subscription.canceled
A subscription ended: canceled now, at the end of its period, after its trial, or after unsuccessful dunning.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "subscription" | |
brandId | string | |
livemode | boolean | |
customerId | string | |
status | one of incomplete, incomplete_expired, trialing, active, past_due, unpaid, paused, canceled | |
items | array of object | |
items[].id | string | |
items[].priceId | string | |
items[].quantity | number |
subscription.created
A subscription was created (API, console or checkout), trialing, active or incomplete until its first payment.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "subscription" | |
brandId | string | |
livemode | boolean | |
customerId | string | |
status | one of incomplete, incomplete_expired, trialing, active, past_due, unpaid, paused, canceled | |
items | array of object | |
items[].id | string | |
items[].priceId | string | |
items[].quantity | number |
subscription.past_due
A renewal payment failed (or a send_invoice invoice is overdue): the subscription is past due and dunning runs.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "subscription" | |
brandId | string | |
livemode | boolean | |
customerId | string | |
status | one of incomplete, incomplete_expired, trialing, active, past_due, unpaid, paused, canceled | |
items | array of object | |
items[].id | string | |
items[].priceId | string | |
items[].quantity | number |
subscription.paused
A subscription was paused: collection stops (pause.behavior) until it resumes, at pause.resumesAt or on request.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "subscription" | |
brandId | string | |
livemode | boolean | |
customerId | string | |
status | one of incomplete, incomplete_expired, trialing, active, past_due, unpaid, paused, canceled | |
items | array of object | |
items[].id | string | |
items[].priceId | string | |
items[].quantity | number |
subscription.recovered
A past-due or unpaid subscription's open invoice was paid: it is active again.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "subscription" | |
brandId | string | |
livemode | boolean | |
customerId | string | |
status | one of incomplete, incomplete_expired, trialing, active, past_due, unpaid, paused, canceled | |
items | array of object | |
items[].id | string | |
items[].priceId | string | |
items[].quantity | number |
subscription.renewed
A subscription moved into its next billing period and its renewal invoice was issued.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "subscription" | |
brandId | string | |
livemode | boolean | |
customerId | string | |
status | one of incomplete, incomplete_expired, trialing, active, past_due, unpaid, paused, canceled | |
items | array of object | |
items[].id | string | |
items[].priceId | string | |
items[].quantity | number |
subscription.resumed
A paused subscription is active again.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "subscription" | |
brandId | string | |
livemode | boolean | |
customerId | string | |
status | one of incomplete, incomplete_expired, trialing, active, past_due, unpaid, paused, canceled | |
items | array of object | |
items[].id | string | |
items[].priceId | string | |
items[].quantity | number |
subscription.trial_will_end
A subscription's trial ends in 3 days (or sooner, for a shorter trial): remind the customer before the first charge.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "subscription" | |
brandId | string | |
livemode | boolean | |
customerId | string | |
status | one of incomplete, incomplete_expired, trialing, active, past_due, unpaid, paused, canceled | |
items | array of object | |
items[].id | string | |
items[].priceId | string | |
items[].quantity | number |
subscription.updated
A subscription changed: items or quantities, a scheduled change, a discount, the payment method, metadata, or its status (activated after the first payment, expired unpaid, a cancellation withdrawn). previous_attributes has the old values.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "subscription" | |
brandId | string | |
livemode | boolean | |
customerId | string | |
status | one of incomplete, incomplete_expired, trialing, active, past_due, unpaid, paused, canceled | |
items | array of object | |
items[].id | string | |
items[].priceId | string | |
items[].quantity | number |
Task
task.claimed
A person, an agent or an app claimed a task with a lease (assignee, claimedUntil): nobody else can change it until the lease ends.
Scope: Legal entity · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | task_… ID | |
object | "task" | |
type | one of 12 values, e.g. registration.prerequisites, registration.prepare, registration.submit (all in the OpenAPI document) | |
entityId | ent_… ID | |
livemode | boolean | |
regimeId | string or null | |
registrationId | regn_… ID or null | |
filingPeriodId | fp_… ID or null | |
prerequisiteCode | string or null | |
title | string | |
description | string or null | |
priority | one of low, normal, high, urgent | |
status | one of open, claimed, in_progress, awaiting_approval, done, failed, cancelled | |
reason | one of 11 values, e.g. auto_blocked, existing_customer_sale, prerequisite_open (all in the OpenAPI document) or null | |
dueAt | date-time or null | |
overdue | boolean | |
assignee | object or null | |
claimedUntil | date-time or null | |
leaseActive | boolean | |
completeWith | one of tasks.complete, tasks.submit | |
needsAuthorization | boolean | |
inputs | array of object | |
inputs[].kind | string | |
inputs[].fileId | file_… ID or null | |
inputs[].data | object or null | |
outputs | object or null | |
authorizationId | atz_… ID or null | |
approvalRequestId | apr_… ID or null | |
failure | object or null | |
checklist | array of object | |
checklist[].text | string | |
checklist[].done | boolean | |
createdAt | date-time | |
updatedAt | date-time | |
completedAt | date-time or null | |
completedBy | string or null | |
version | integer (at least 1) |
task.completed
A task was completed or submitted, with its outputs (reference numbers, submission time, receipt files, notes), or finished by the registration or filing period it belongs to.
Scope: Legal entity · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | task_… ID | |
object | "task" | |
type | one of 12 values, e.g. registration.prerequisites, registration.prepare, registration.submit (all in the OpenAPI document) | |
entityId | ent_… ID | |
livemode | boolean | |
regimeId | string or null | |
registrationId | regn_… ID or null | |
filingPeriodId | fp_… ID or null | |
prerequisiteCode | string or null | |
title | string | |
description | string or null | |
priority | one of low, normal, high, urgent | |
status | one of open, claimed, in_progress, awaiting_approval, done, failed, cancelled | |
reason | one of 11 values, e.g. auto_blocked, existing_customer_sale, prerequisite_open (all in the OpenAPI document) or null | |
dueAt | date-time or null | |
overdue | boolean | |
assignee | object or null | |
claimedUntil | date-time or null | |
leaseActive | boolean | |
completeWith | one of tasks.complete, tasks.submit | |
needsAuthorization | boolean | |
inputs | array of object | |
inputs[].kind | string | |
inputs[].fileId | file_… ID or null | |
inputs[].data | object or null | |
outputs | object or null | |
authorizationId | atz_… ID or null | |
approvalRequestId | apr_… ID or null | |
failure | object or null | |
checklist | array of object | |
checklist[].text | string | |
checklist[].done | boolean | |
createdAt | date-time | |
updatedAt | date-time | |
completedAt | date-time or null | |
completedBy | string or null | |
version | integer (at least 1) |
task.created
Ownrecord raised a compliance task for a legal entity, e.g. submitting a registration, a registration prerequisite, or preparing, filing and paying a return.
Scope: Legal entity · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | task_… ID | |
object | "task" | |
type | one of 12 values, e.g. registration.prerequisites, registration.prepare, registration.submit (all in the OpenAPI document) | |
entityId | ent_… ID | |
livemode | boolean | |
regimeId | string or null | |
registrationId | regn_… ID or null | |
filingPeriodId | fp_… ID or null | |
prerequisiteCode | string or null | |
title | string | |
description | string or null | |
priority | one of low, normal, high, urgent | |
status | one of open, claimed, in_progress, awaiting_approval, done, failed, cancelled | |
reason | one of 11 values, e.g. auto_blocked, existing_customer_sale, prerequisite_open (all in the OpenAPI document) or null | |
dueAt | date-time or null | |
overdue | boolean | |
assignee | object or null | |
claimedUntil | date-time or null | |
leaseActive | boolean | |
completeWith | one of tasks.complete, tasks.submit | |
needsAuthorization | boolean | |
inputs | array of object | |
inputs[].kind | string | |
inputs[].fileId | file_… ID or null | |
inputs[].data | object or null | |
outputs | object or null | |
authorizationId | atz_… ID or null | |
approvalRequestId | apr_… ID or null | |
failure | object or null | |
checklist | array of object | |
checklist[].text | string | |
checklist[].done | boolean | |
createdAt | date-time | |
updatedAt | date-time | |
completedAt | date-time or null | |
completedBy | string or null | |
version | integer (at least 1) |
task.due_soon
An unfinished task is due within 72 hours.
Scope: Legal entity · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | task_… ID | |
object | "task" | |
type | one of 12 values, e.g. registration.prerequisites, registration.prepare, registration.submit (all in the OpenAPI document) | |
entityId | ent_… ID | |
livemode | boolean | |
regimeId | string or null | |
registrationId | regn_… ID or null | |
filingPeriodId | fp_… ID or null | |
prerequisiteCode | string or null | |
title | string | |
description | string or null | |
priority | one of low, normal, high, urgent | |
status | one of open, claimed, in_progress, awaiting_approval, done, failed, cancelled | |
reason | one of 11 values, e.g. auto_blocked, existing_customer_sale, prerequisite_open (all in the OpenAPI document) or null | |
dueAt | date-time or null | |
overdue | boolean | |
assignee | object or null | |
claimedUntil | date-time or null | |
leaseActive | boolean | |
completeWith | one of tasks.complete, tasks.submit | |
needsAuthorization | boolean | |
inputs | array of object | |
inputs[].kind | string | |
inputs[].fileId | file_… ID or null | |
inputs[].data | object or null | |
outputs | object or null | |
authorizationId | atz_… ID or null | |
approvalRequestId | apr_… ID or null | |
failure | object or null | |
checklist | array of object | |
checklist[].text | string | |
checklist[].done | boolean | |
createdAt | date-time | |
updatedAt | date-time | |
completedAt | date-time or null | |
completedBy | string or null | |
version | integer (at least 1) |
task.failed
Whoever worked on a task couldn't do it: failure.reason says why, and failure.retryAt when it opens again (if set).
Scope: Legal entity · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | task_… ID | |
object | "task" | |
type | one of 12 values, e.g. registration.prerequisites, registration.prepare, registration.submit (all in the OpenAPI document) | |
entityId | ent_… ID | |
livemode | boolean | |
regimeId | string or null | |
registrationId | regn_… ID or null | |
filingPeriodId | fp_… ID or null | |
prerequisiteCode | string or null | |
title | string | |
description | string or null | |
priority | one of low, normal, high, urgent | |
status | one of open, claimed, in_progress, awaiting_approval, done, failed, cancelled | |
reason | one of 11 values, e.g. auto_blocked, existing_customer_sale, prerequisite_open (all in the OpenAPI document) or null | |
dueAt | date-time or null | |
overdue | boolean | |
assignee | object or null | |
claimedUntil | date-time or null | |
leaseActive | boolean | |
completeWith | one of tasks.complete, tasks.submit | |
needsAuthorization | boolean | |
inputs | array of object | |
inputs[].kind | string | |
inputs[].fileId | file_… ID or null | |
inputs[].data | object or null | |
outputs | object or null | |
authorizationId | atz_… ID or null | |
approvalRequestId | apr_… ID or null | |
failure | object or null | |
checklist | array of object | |
checklist[].text | string | |
checklist[].done | boolean | |
createdAt | date-time | |
updatedAt | date-time | |
completedAt | date-time or null | |
completedBy | string or null | |
version | integer (at least 1) |
task.overdue
An unfinished task passed its due date.
Scope: Legal entity · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | task_… ID | |
object | "task" | |
type | one of 12 values, e.g. registration.prerequisites, registration.prepare, registration.submit (all in the OpenAPI document) | |
entityId | ent_… ID | |
livemode | boolean | |
regimeId | string or null | |
registrationId | regn_… ID or null | |
filingPeriodId | fp_… ID or null | |
prerequisiteCode | string or null | |
title | string | |
description | string or null | |
priority | one of low, normal, high, urgent | |
status | one of open, claimed, in_progress, awaiting_approval, done, failed, cancelled | |
reason | one of 11 values, e.g. auto_blocked, existing_customer_sale, prerequisite_open (all in the OpenAPI document) or null | |
dueAt | date-time or null | |
overdue | boolean | |
assignee | object or null | |
claimedUntil | date-time or null | |
leaseActive | boolean | |
completeWith | one of tasks.complete, tasks.submit | |
needsAuthorization | boolean | |
inputs | array of object | |
inputs[].kind | string | |
inputs[].fileId | file_… ID or null | |
inputs[].data | object or null | |
outputs | object or null | |
authorizationId | atz_… ID or null | |
approvalRequestId | apr_… ID or null | |
failure | object or null | |
checklist | array of object | |
checklist[].text | string | |
checklist[].done | boolean | |
createdAt | date-time | |
updatedAt | date-time | |
completedAt | date-time or null | |
completedBy | string or null | |
version | integer (at least 1) |
task.updated
A task's assignee, due date, priority, checklist or status changed (released, lease expired, waiting for approval, reopened, cancelled). previous_attributes has the old values.
Scope: Legal entity · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | task_… ID | |
object | "task" | |
type | one of 12 values, e.g. registration.prerequisites, registration.prepare, registration.submit (all in the OpenAPI document) | |
entityId | ent_… ID | |
livemode | boolean | |
regimeId | string or null | |
registrationId | regn_… ID or null | |
filingPeriodId | fp_… ID or null | |
prerequisiteCode | string or null | |
title | string | |
description | string or null | |
priority | one of low, normal, high, urgent | |
status | one of open, claimed, in_progress, awaiting_approval, done, failed, cancelled | |
reason | one of 11 values, e.g. auto_blocked, existing_customer_sale, prerequisite_open (all in the OpenAPI document) or null | |
dueAt | date-time or null | |
overdue | boolean | |
assignee | object or null | |
claimedUntil | date-time or null | |
leaseActive | boolean | |
completeWith | one of tasks.complete, tasks.submit | |
needsAuthorization | boolean | |
inputs | array of object | |
inputs[].kind | string | |
inputs[].fileId | file_… ID or null | |
inputs[].data | object or null | |
outputs | object or null | |
authorizationId | atz_… ID or null | |
approvalRequestId | apr_… ID or null | |
failure | object or null | |
checklist | array of object | |
checklist[].text | string | |
checklist[].done | boolean | |
createdAt | date-time | |
updatedAt | date-time | |
completedAt | date-time or null | |
completedBy | string or null | |
version | integer (at least 1) |
Test clock
test_clock.advancing
A test clock started advancing: its subscriptions' due steps (trial ends, renewals, cancellations, notices) run in time order at their own times.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "test_clock" | |
livemode | false | |
brandId | string | |
name | string | |
frozenTime | string | |
status | one of ready, advancing, internal_failure |
test_clock.created
A test clock was created (test mode).
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "test_clock" | |
livemode | false | |
brandId | string | |
name | string | |
frozenTime | string | |
status | one of ready, advancing, internal_failure |
test_clock.deleted
A test clock was deleted, with its customers (deleted) and their subscriptions (canceled).
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "test_clock" | |
livemode | false | |
brandId | string | |
name | string | |
frozenTime | string | |
status | one of ready, advancing, internal_failure |
test_clock.internal_failure
A test clock's advance stopped on an error (advance.error): the clock stayed at the time of the last step that ran. Fix the cause and advance again.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "test_clock" | |
livemode | false | |
brandId | string | |
name | string | |
frozenTime | string | |
status | one of ready, advancing, internal_failure |
test_clock.ready
A test clock finished advancing: frozenTime is the new time and its subscriptions are up to date.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "test_clock" | |
livemode | false | |
brandId | string | |
name | string | |
frozenTime | string | |
status | one of ready, advancing, internal_failure |
Threshold
threshold.crossed
A sale took the entity's sales over a regime's registration threshold (all brands of the entity count together). The registration moved to grace or was blocked: see the registration.state_changed event of the same sale.
Scope: Legal entity · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
object | "threshold" | |
entityId | string | |
livemode | boolean | |
regimeId | string | |
registrationId | string | |
window | string | |
threshold | object or null | |
transactionThreshold | integer or null | |
counted | object or null | |
transactionCount | integer or null | |
crossedAt | string | |
ref | string or null |
Wallet
wallet.auto_reload_due
Internal: a wallet with auto-reload enabled fell below its reload threshold (autoReload.below). The auto_reload job charges the saved payment method off-session and credits the wallet. One at a time per wallet (autoReload.pendingSince).
Scope: Brand · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "wallet" | |
customerId | string | |
currency | string | |
status | one of active, frozen, closed | |
available | object | |
available.amount | string | |
available.currency | string | |
promo | object | |
promo.amount | string | |
promo.currency | string | |
reserved | object | |
reserved.amount | string | |
reserved.currency | string | |
balance | object | |
balance.amount | string | |
balance.currency | string | |
lowBalanceThreshold | object or null |
wallet.credited
Credits were added to a wallet: a top-up or credit pack (with its bonus credits), a subscription's included credits, or an operator's promo or adjustment grant. data.credit lists the new grants (grants[].id, source, amount, expiresAt) and their total; the balances are the new ones.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "wallet" | |
customerId | string | |
currency | string | |
status | one of active, frozen, closed | |
available | object | |
available.amount | string | |
available.currency | string | |
promo | object | |
promo.amount | string | |
promo.currency | string | |
reserved | object | |
reserved.amount | string | |
reserved.currency | string | |
balance | object | |
balance.amount | string | |
balance.currency | string | |
lowBalanceThreshold | object or null | |
credit | object | |
credit.amount | object | |
credit.amount.amount | string | |
credit.amount.currency | string | |
credit.grants | array of object | |
credit.grants[].id | string | |
credit.grants[].source | string | |
credit.grants[].amount | object | |
credit.grants[].amount.amount | string | |
credit.grants[].amount.currency | string |
wallet.depleted
A wallet's last credits were spent or expired: its balance is zero. Sent once until credits arrive again.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "wallet" | |
customerId | string | |
currency | string | |
status | one of active, frozen, closed | |
available | object | |
available.amount | string | |
available.currency | string | |
promo | object | |
promo.amount | string | |
promo.currency | string | |
reserved | object | |
reserved.amount | string | |
reserved.currency | string | |
balance | object | |
balance.amount | string | |
balance.currency | string | |
lowBalanceThreshold | object or null |
wallet.frozen
A wallet was frozen (wallets.update with status: frozen): it takes no new reservations or leases until it is unfrozen. data.statusReason says why.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "wallet" | |
customerId | string | |
currency | string | |
status | one of active, frozen, closed | |
available | object | |
available.amount | string | |
available.currency | string | |
promo | object | |
promo.amount | string | |
promo.currency | string | |
reserved | object | |
reserved.amount | string | |
reserved.currency | string | |
balance | object | |
balance.amount | string | |
balance.currency | string | |
lowBalanceThreshold | object or null |
wallet.low_balance
A wallet's balance fell below its lowBalanceThreshold. Sent once per dip: not again until the balance has risen back to the threshold (a credit, or a lower threshold) and falls below it again.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | string | |
object | "wallet" | |
customerId | string | |
currency | string | |
status | one of active, frozen, closed | |
available | object | |
available.amount | string | |
available.currency | string | |
promo | object | |
promo.amount | string | |
promo.currency | string | |
reserved | object | |
reserved.amount | string | |
reserved.currency | string | |
balance | object | |
balance.amount | string | |
balance.currency | string | |
lowBalanceThreshold | object or null |
Webhook endpoint
webhook_endpoint.created
A webhook endpoint was created. The signing secret is never part of the event.
Scope: Brand · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | we_… ID | |
object | "webhook_endpoint" | |
brandId | brd_… ID | |
livemode | boolean | |
url | string | |
description | string or null | |
events | array of string | |
enabled | boolean | |
disabledReason | one of manual, failing or null | |
disabledAt | date-time or null | |
failingSince | date-time or null | |
secretRotatedAt | date-time or null | |
previousSecretExpiresAt | date-time or null | |
metadata | object | |
createdAt | date-time | |
updatedAt | date-time |
webhook_endpoint.deleted
A webhook endpoint was deleted, together with its signing secret.
Scope: Brand · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | we_… ID | |
object | "webhook_endpoint" | |
brandId | brd_… ID | |
livemode | boolean | |
url | string | |
description | string or null | |
events | array of string | |
enabled | boolean | |
disabledReason | one of manual, failing or null | |
disabledAt | date-time or null | |
failingSince | date-time or null | |
secretRotatedAt | date-time or null | |
previousSecretExpiresAt | date-time or null | |
metadata | object | |
createdAt | date-time | |
updatedAt | date-time |
webhook_endpoint.test
A test delivery sent with POST /webhook_endpoints/{id}/test, to that endpoint only. Signed like every delivery; not in the event feed, and endpoints can't subscribe to it.
Scope: Brand · Webhooks: delivered
data.object:
| Field | Type | Description |
|---|---|---|
id | we_… ID | |
object | "webhook_endpoint" | |
url | string | |
message | string |
webhook_endpoint.updated
A webhook endpoint's URL, event types, description, metadata or enabled state changed, or its signing secret was rotated. previous_attributes has the old values.
Scope: Brand · Webhooks: not delivered (internal)
data.object:
| Field | Type | Description |
|---|---|---|
id | we_… ID | |
object | "webhook_endpoint" | |
brandId | brd_… ID | |
livemode | boolean | |
url | string | |
description | string or null | |
events | array of string | |
enabled | boolean | |
disabledReason | one of manual, failing or null | |
disabledAt | date-time or null | |
failingSince | date-time or null | |
secretRotatedAt | date-time or null | |
previousSecretExpiresAt | date-time or null | |
metadata | object | |
createdAt | date-time | |
updatedAt | date-time |