Skip to main content
This page lists the events OrsunPay delivers today. All examples are synthetic. Money values are decimal strings. See Webhooks for signature verification and delivery semantics.

Envelope

Source: services/brain/src/outbox/merchant-webhook.delivery.ts.
  • id (always): Event id, a TypeID evt_ + 26 characters. Deduplication key, identical on every retry and re-drive.
  • livemode (always): Boolean. Taken from data.transaction.livemode, true when that is absent.
  • type (always): Event type, for example transaction.updated.
  • api_version (always): Payload version, for example 2026-10-31. Fixed per event by its created_at, so retries and re-drives never change it.
  • created_at (always): ISO 8601 UTC time the event was recorded, stable across retries.
  • created (some events): Alias of created_at, present only on refund.succeeded and refund.failed.
  • data (always): Event-specific object.
Event IDs are TypeIDs with the evt_ prefix. Deduplicate by the signed body’s id; the OrsunPay-Event-Id header is an unsigned convenience copy.

Versioning

Every event carries api_version. It is fixed per event (by created_at), so a retry or a re-drive sends exactly the same body. New fields and new event types can appear without a new version; ignore what you do not know. Removing or changing a field always gets a new version, announced in this changelog first. Before the first version, events were delivered with a UUID id and no api_version. A re-drive of such an older event now sends the evt_ form of the same id and 2026-10-31. Wallet receipts and the cabinet journal accept both id forms.

transaction.updated

A sale or payout changed state. Source: services/brain/src/transaction/transaction.events.ts. data contents:
  • transaction: the serialized transaction; money fields are decimal strings.
  • paymentData: provider-specific object, {} when there is none. May contain additional fields.

test.ping

A synthetic delivery the merchant triggers to test its receiver. It is not redeliverable and is excluded from endpoint-health failure counts. Source: services/brain/src/outbox/outbox.service.ts. data contents:
  • merchantId: the merchant UUID the ping was sent for.
  • test: always true.

refund.succeeded

A refund completed successfully. Source: services/brain/src/outbox/refund-webhook.delivery.ts. Payload source: services/brain/src/outbox/refund-webhook.snapshot.ts. data contents:
  • refund: id, transactionId, amount, currency, status, reason, provider, providerRefundId, errorCode.
  • transaction: id, livemode, orderId, amount, refundedAmount, refundState (none, partial or full).

refund.failed

A refund failed. Source: services/brain/src/outbox/refund-webhook.delivery.ts. Payload source: services/brain/src/outbox/refund-webhook.snapshot.ts. data contents:
  • Same shape as refund.succeeded; refund.errorCode describes the failure.

cashier.wallet.effect_requested

Cashier only: the operator wallet must apply a credit or capture for a cashier operation. Apply it idempotently by walletEffect.effectId and confirm with a wallet receipt that echoes this event id (both the evt_ id and a pre-H4 UUID are accepted). Source: services/brain/src/cashier/wallet/effects.repository.ts. data contents:
  • transaction: livemode, and id once the cashier operation has a payment transaction.
  • walletEffect: protocol (1), effectId (= financialKey), kind (credit, capture or release), operationRevision, operation (scope, player, operation, order and optional transaction ids, amount, currency, direction, simulation), optional reservation and settlement.