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

EventSent whendata
payment.succeededA 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.failedThe payer's card was declined or authentication failed.The Payment object with failure_reason set.
payment.refundedA refund settled at the card processor.The Payment object with refunded_amount and, when fully refunded, status: "refunded".
refund.createdA refund was accepted by the processor. It is still pending until payment.refunded.The Refund object.

Payment methods

EventSent whendata
payment_method.attachedA card was tokenised and saved to a customer (after a session with save_payment_method or subscription).The PaymentMethod object.
payment_method.detachedA saved card was detached.The PaymentMethod object with status: "detached".

Subscriptions

EventSent whendata
subscription.createdA subscription was created, via the API or by a subscription checkout completing.The Subscription object.
subscription.activeA 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.updatedItems, discount or cancellation flags changed.The Subscription object, or { id } for item changes.
subscription.canceledA subscription ended, immediately or when a period-end cancellation took effect.The Subscription object.
subscription.uncanceledA pending period-end cancellation was reversed.The Subscription object.
subscription.pausedBilling was paused.The Subscription object.
subscription.resumedBilling resumed.The Subscription object.
subscription.past_duePayment retries were exhausted or an invoice went overdue.{ id }

Invoices

EventSent whendata
invoice.createdAn 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.finalizedA subscription invoice was finalised in the accounting provider before collection.{ id, subscription, total, external_invoice_number }
invoice.paidThe 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_failedA subscription charge attempt failed. Sent per attempt; the last one carries final: true.{ id, subscription, attempt, next_attempt_at, reason }
invoice.overdueA send_invoice subscription invoice passed its due date unpaid.{ id, due_at }
invoice.voidedA bank invoice was voided in the accounting provider.{ id, payment }
invoice.sync_failedMirroring the invoice to the accounting provider failed. Retry from the dashboard.{ id, payment | subscription, provider, error }
credit_note.createdA refund was mirrored as a credit note in the accounting provider.{ id, invoice, amount }

Usage

EventSent whendata
usage.high_watermarkA 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.