transaction
is a single attempt to satisfy a receivable.
A receivable can have many transactions: if an attempt fails (for example
insufficient funds or a rejected charge), a new transaction is created for the next
attempt against the same receivable. It is not
a receivable under a different name.
Draft:
There are no REST endpoints for transaction. Webhook events
(transaction.created
and transaction.updated)
are the integration surface that is active today.
type TransactionID = `trn_${string}`;
type TransactionPaymentMethod =
| "swish"
| "autogiro"
| "card"
| "apple_pay"
| "google_pay";
type Transaction = {
id: TransactionID;
amount: string;
status:
| "paid"
| "rejected"
| "insufficient_funds"
| "retry"
| "pending";
type: "onetime" | "recurring";
payment_method: TransactionPaymentMethod | null;
transaction_date: string;
reference: string | null;
reference_title: string | null;
external_id: string | null;
psp: "stripe" | "adyen" | "swish" | "bankgirot" | null;
currency: string | null;
metadata: Record<string, string>;
payer_id: PayerID;
receivable_id: ReceivableID;
subscription_id: SubscriptionID | null;
payer: Payer | null;
inserted_at: string;
updated_at: string;
};
Every field above is always present in the payload; absent values are sent as
null
(not omitted). amount
is serialised as a string to preserve precision and
transaction_date
is an ISO date. inserted_at
and updated_at
are naive timestamps without timezone (for example "2026-05-12T13:46:10").
external_id
is the id assigned by the external payment provider (for example a Stripe charge
or a Swish payment) when the attempt reaches one.
psp
names the payment provider that processed the attempt. It is
null
for invoice payments and for older transactions whose provider is unknown.
reference_title
is the readable name of reference,
taken from the transaction's receivable, and
null
when the receivable has none.
receivable_id
links the transaction to the receivable it is attempting to satisfy.
subscription_id
is that receivable's subscription, or
null
when it has none. A one-time gift can carry one too, so
type
is the field that tells a monthly charge from a one-time payment.
For an Adyen payment,
external_id
is Adyen's pspReference
(for example "8836183819713204"),
so an organisation reading Adyen's own notifications can match them to this
transaction on that value.
receivable.created
and receivable.updated
carry the receivable (the claim being collected).
transaction.created
and transaction.updated
carry the transaction described here. See the Receivable
page for the entity this transaction settles.