Event types
Every webhook event Borga sends, when it fires and what its data field contains.
Events are delivered to your webhook endpoints as JSON with four fields:
The event object
idstring
Unique id, prefixed
evt_. Use it to deduplicate retried deliveries.typestring
One of the types below, such as
payment.succeeded.created_attimestamp
When the event was created.
dataobject
The object the event is about, or a summary for lifecycle events. Listed per type below.
Subscribe to specific types when you create an endpoint, or to * for everything. Unknown types may appear as Borga grows; ignore what you do not handle.
Examplejson
{
"id": "evt_5Rt8Uv1Wx3Yz5Ab7Cd9Ef1Gh",
"type": "payment.succeeded",
"created_at": "2026-09-07T12:04:31.512Z",
"data": {
"id": "pay_7Hs2Kq9LmW4xZc1Vb8Ny3Rt6",
"amount": 12900,
"currency": "ISK",
"status": "succeeded",
"customer": null,
"description": null,
"metadata": { "order_id": "5678" },
"collection_method": "card",
"refunded_amount": 0,
"external_reference": "order_5678",
"failure_reason": null,
"card_brand": "visa",
"card_last4": "4242",
"wallet_type": null,
"created_at": "2026-09-07T12:03:58.201Z",
"updated_at": "2026-09-07T12:04:31.498Z"
}
}Catalog
Payments
| Event | Sent when | data |
|---|---|---|
payment.succeeded | A card or wallet payment was authorised and captured, a bank invoice was paid, or a subscription invoice was charged. | The Payment object. For subscription charges: { id, amount, currency, subscription, invoice }. |
payment.failed | The payer's card was declined or authentication failed. | The Payment object with failure_reason set. |
payment.refunded | A refund settled at the card processor. | The Payment object with refunded_amount and, when fully refunded, status: "refunded". |
refund.created | A refund was accepted by the processor. It is still pending until payment.refunded. | The Refund object. |
Payment methods
| Event | Sent when | data |
|---|---|---|
payment_method.attached | A card was tokenised and saved to a customer (after a session with save_payment_method or subscription). | The PaymentMethod object. |
payment_method.detached | A saved card was detached. | The PaymentMethod object with status: "detached". |
Subscriptions
| Event | Sent when | data |
|---|---|---|
subscription.created | A subscription was created, via the API or by a subscription checkout completing. | The Subscription object. |
subscription.active | A subscription became active: created without a trial, trial ended, or recovered from past due. | The Subscription object, or { id } for trial and recovery transitions. |
subscription.updated | Items, discount or cancellation flags changed. | The Subscription object, or { id } for item changes. |
subscription.canceled | A subscription ended, immediately or when a period-end cancellation took effect. | The Subscription object. |
subscription.uncanceled | A pending period-end cancellation was reversed. | The Subscription object. |
subscription.paused | Billing was paused. | The Subscription object. |
subscription.resumed | Billing resumed. | The Subscription object. |
subscription.past_due | Payment retries were exhausted or an invoice went overdue. | { id } |
Invoices
| Event | Sent when | data |
|---|---|---|
invoice.created | An invoice was created: for a payment, a bank invoice (krafa), or a subscription cycle. | { id, payment, status }, for bank invoices also sent_to_bank, payment_reference, creditor_account; for subscriptions { id, subscription, total, status }. |
invoice.finalized | A subscription invoice was finalised in the accounting provider before collection. | { id, subscription, total, external_invoice_number } |
invoice.paid | The invoice was marked paid: card payment booked, bank claim observed paid, or subscription charge succeeded. | { id, payment, external_invoice_id, external_invoice_number, pdf_url } or { id, subscription, total }. |
invoice.payment_failed | A subscription charge attempt failed. Sent per attempt; the last one carries final: true. | { id, subscription, attempt, next_attempt_at, reason } |
invoice.overdue | A send_invoice subscription invoice passed its due date unpaid. | { id, due_at } |
invoice.voided | A bank invoice was voided in the accounting provider. | { id, payment } |
invoice.sync_failed | Mirroring the invoice to the accounting provider failed. Retry from the dashboard. | { id, payment | subscription, provider, error } |
credit_note.created | A refund was mirrored as a credit note in the accounting provider. | { id, invoice, amount } |
Usage
| Event | Sent when | data |
|---|---|---|
usage.high_watermark | A customer's metered usage crossed the included-units watermark for the period. | { customer, meter, consumed_units, included_units, balance, period_end } |
Objects referenced as "the Payment object", "the Subscription object" and so on have exactly the shape of the corresponding GET response. For summary payloads, fetch the object by its id when you need the full state.