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": "1142",
    "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 it also carries the subscription and invoice ids the payment settled.
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, when a period-end cancellation took effect, or because payment retries ran out and the merchant's setting is to cancel.The Subscription object. When retries ran out: { id, cancellation_reason: "payment_failed" }.
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, subscription charge succeeded, or you marked it paid outside Borga.{ id, payment, external_invoice_id, external_invoice_number, pdf_url } or { id, subscription, total }. paid_out_of_band: true when you marked it paid.
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.voidedAn open invoice was voided, through the API or the dashboard, or its bank claim was cancelled in the accounting provider.{ id, payment, subscription }
invoice.sentBorga emailed the invoice to the payer.{ id, email }
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.