A wallet is a prepaid credit balance associated with a customer. Wallets allow customers to pre-fund their account, receive credits (promotional or otherwise), and have charges automatically deducted from their balance before falling back to a payment method.
Each customer has a primary wallet created automatically, and can have additional wallets in different currencies.
Key operations:
- Credit - add funds to the wallet (from a payment, promotion, or manual adjustment)
- Debit - remove funds (applied automatically during invoicing, or manually)
- Hold - reserve an amount for a pending charge (released or captured later)
- Transfer - move funds between wallets (e.g., currency conversion)
- Adjust - correct the balance without a formal credit/debit (e.g., migration adjustment)
List wallets
Returns wallets for the org, newest first, cursor-paginated. All filters AND together; multi-value currency is OR within itself. Pass customer_id to scope to one customer; omit to browse org-wide.
query Parameters
limitPage size (default 25, max 100)
cursorPagination cursor
customer_idFilter by customer UUID
currencyFilter by ISO 4217 currency code (repeatable or comma-separated)
is_primarytrue=only primary wallets, false=only secondary; omit for both
auto_topup_enabledFilter by auto-topup state
created_afterFilter by created_at >= timestamp (RFC3339)
created_beforeFilter by created_at < timestamp (RFC3339)
List wallets › Responses
Paginated list with data and pagination envelope
auto_topup_enabledcreated_atcurrencycustomer_ididis_primarymodeorganization_idpromotional_balance_expires_atupdated_atCreate a wallet
Creates a secondary wallet for the specified customer
path Parameters
idCustomer UUID
Create a wallet › Request Body
auto_topup_amountauto_topup_enabledcredit_limitcurrencycustomer_idlow_balance_thresholdmax_balancemax_single_creditCreate a wallet › Responses
Wrapped in data envelope
auto_topup_enabledcreated_atcurrencycustomer_ididis_primarymodeorganization_idpromotional_balance_expires_atupdated_atGet a wallet by ID
Retrieves a single wallet by its UUID
path Parameters
idWallet UUID
Get a wallet by ID › Responses
Wrapped in data envelope
auto_topup_enabledcreated_atcurrencycustomer_ididis_primarymodeorganization_idpromotional_balance_expires_atupdated_atAdjust a wallet balance
Applies an adjustment to a wallet balance (positive or negative)
path Parameters
idWallet UUID
Adjust a wallet balance › Request Body
amountpositive or negative
reasonreferencesourceAdjust a wallet balance › Responses
Wrapped in data envelope
created_atcreated_byidorganization_idreasonreferencereverse_chargesourcetax_ratetax_rule_idtypewallet_idCredit a wallet
Adds funds to a wallet, creating a credit transaction
path Parameters
idWallet UUID
Credit a wallet › Request Body
amountexpires_atreasonreferencesourceCredit a wallet › Responses
Wrapped in data envelope
created_atcreated_byidorganization_idreasonreferencereverse_chargesourcetax_ratetax_rule_idtypewallet_idDebit a wallet
Withdraws funds from a wallet, creating a debit transaction
path Parameters
idWallet UUID
Debit a wallet › Request Body
amountreasonreferencesourceDebit a wallet › Responses
Wrapped in data envelope
created_atcreated_byidorganization_idreasonreferencereverse_chargesourcetax_ratetax_rule_idtypewallet_idCreate a wallet hold
Places a hold on wallet funds, reserving the amount for later capture
path Parameters
idWallet UUID
Create a wallet hold › Request Body
amountcurrencyCurrency is optional on the public hold API: when empty the wallet's currency is used. Reserve and other internal callers always pass it explicitly so a mismatch with the wallet's currency fails loudly.
expires_atmetric_keyreasonreference_idreference_typereverse_chargesubscription_idSubscriptionID and MetricKey are populated by the reserve service so the (subscription_id, metric_key) pair becomes queryable. The public hold API leaves them nil - those holds are not subject to the ingest-overlap check.
tax_ratetax_rule_idCreate a wallet hold › Responses
Wrapped in data envelope
captured_atcreated_atcurrencyexpires_atidmetric_keyorganization_idreasonreference_idreference_typeresolved_atreverse_chargestatussubscription_idSubscriptionID and MetricKey identify the usage stream this hold reserves capacity for. Set by the reserve service so the usage event ingest path can detect overlap (Phase D dedup); nil for non-subscription holds like deposits.
tax_ratetax_rule_idvoided_atwallet_idList wallet holds
Lists pending holds for a wallet
path Parameters
idWallet UUID
List wallet holds › Responses
List wrapped in data envelope
captured_atcreated_atcurrencyexpires_atidmetric_keyorganization_idreasonreference_idreference_typeresolved_atreverse_chargestatussubscription_idSubscriptionID and MetricKey identify the usage stream this hold reserves capacity for. Set by the reserve service so the usage event ingest path can detect overlap (Phase D dedup); nil for non-subscription holds like deposits.
tax_ratetax_rule_idvoided_atwallet_idUpdate wallet settings
Updates wallet limit and settings fields
path Parameters
idWallet UUID
Update wallet settings › Request Body
auto_topup_amountauto_topup_enabledauto_topup_payment_method_idcredit_limitlow_balance_thresholdmax_balancemax_single_creditUpdate wallet settings › Responses
Wrapped in data envelope
auto_topup_enabledcreated_atcurrencycustomer_ididis_primarymodeorganization_idpromotional_balance_expires_atupdated_atAdmin-side wallet top-up
Tops up a customer's wallet via a Stripe charge. Accepts mode=hosted_checkout (returns a Stripe Checkout URL the admin can share with the customer) or mode=off_session (charges a saved card synchronously via a confirmed off-session PaymentIntent). The wallet is credited asynchronously via the stripe_webhook handler when Stripe reports the payment succeeded.
path Parameters
idWallet UUID
Admin-side wallet top-up › Request Body
modepayment_method_idAdmin-side wallet top-up › Responses
Wrapped in data envelope
client_secretdecline_codefailure_codefailure_messagemodenext_actionpayment_intent_idOff-session fields - populated when Mode == off_session.
session_idHosted Checkout fields - populated when Mode == hosted_checkout.
stateurlList wallet transactions
Lists transactions for a wallet with cursor-based pagination
path Parameters
idWallet UUID
query Parameters
limitPage size
cursorPagination cursor
List wallet transactions › Responses
Paginated list wrapped in data envelope
created_atcreated_byidorganization_idreasonreferencereverse_chargesourcetax_ratetax_rule_idtypewallet_id