Transaction

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.

Payload

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;
external_id: string | null;
currency: string | null;
metadata: Record<string, string>;
payer_id: PayerID;
receivable_id: ReceivableID;
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. receivable_id links the transaction to the receivable it is attempting to satisfy.

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.