This page covers open-loop card transactions — spend on virtual cards Fluz issues onto the card networks. Gift card purchases, deposits, withdrawals, and wallet transfers do not go through this lifecycle; they settle on their own rails. See Transactions Overview for the unified ledger that holds all of them.
The three stages
Settlement is a banking process that runs behind clearing on the network’s own schedule. Fluz represents clearing and settlement as one event — when a transaction is cleared on Fluz, treat it as final.
One purchase, several records
A single purchase can produce an authorization, one or more clearings, and possibly a reversal or a refund. Fluz exposes these through three queries that answer different questions:
Three purchases, and the records each one leaves behind:
Single-message and dual-message flows
How many messages the network sends depends on the merchant and the transaction type. Both flows are normal, and your integration has to handle both.Single-message
The network sends one message that authorizes and clears at the same time. Common for PIN debit, ATM withdrawals, and transit. There is no pending window — the transaction is final almost immediately.Dual-message
The network sends an authorization first, and the merchant submits the clearing later — typically the same night, but up to several days for hotels, car rentals, and travel. The gap between the two is the pending window, and it is where most reconciliation bugs live.The cleared amount can differ from the authorized amount. Tips, fuel pumps, currency conversion, and partial shipments all produce a clearing that is higher or lower than the original hold. Take the cleared amount as authoritative, and never treat an authorization amount as final.
Where the money sits
The same lifecycle, viewed from the account rather than the network:What Fluz records at each stage
A decline is not a transaction. Declined authorizations never enter the account ledger, so they will not appear in
getTransactions at any status. Query them through getDeclinedTransactions and read the reason from Decline Codes.Authorization
When the network asks Fluz to approve a charge, Fluz evaluates the request against the card, the account, and the funding behind the card. All of it happens in well under a second, because the network will time out.What gets checked
What gets checked
- The card is
ACTIVE— not locked, expired, past itslockDate, or already consumed by a single-use rule - The amount fits within
spendLimitfor the card’sspendLimitDuration - The merchant matches the card’s brand lock, if the card was issued on a brand-locked program
- The account holder has passed identity verification
- The funding sources behind the card can cover the amount
- The bank program’s own limits are not exceeded
Where the money comes from
Where the money comes from
A card does not hold a balance of its own. It draws, at authorization time, from the funding stack configured when the card was issued:
- The spend account named in
userCashBalanceId, or the account default - The prepayment (gift card) balance, unless
usePrepaymentBalance: false - The rewards balance, unless
useRewardsBalance: false - An external bank account, when
primaryFundingSourceisBANK_ACCOUNT
spendLimit is higher. → Manage Virtual Card Funding SourcesApproved amount vs requested amount
Approved amount vs requested amount
The network requests an amount; Fluz posts what it approves. On a partial approval the two differ, and the approved amount is what is held. Read the amount from the Fluz record rather than assuming it matches what the merchant asked for.
Declines
Declines
A declined authorization returns a response code to the merchant and produces a
declineReason and declineCategory on the Fluz side. The most common causes are an amount over the spend limit, a locked card, insufficient funds behind the card, a brand-locked card at the wrong merchant, and CVV or AVS mismatch. → Decline CodesAuthorizations that are not purchases
Held funds
An approved authorization reduces what the card can still spend without moving money out of the account. Until it clears:- The card’s
remainingBalancereflects the hold - The ledger record sits at
PENDING expectedClearedDatetells you when to look again
Reversals
A reversal cancels an authorization before it clears. The hold is released and the funds return to the card. Reversals can be full or partial. Common causes:- The merchant abandoned the sale, or the terminal timed out
- The item was out of stock, or the cardholder cancelled before shipment
- A duplicate authorization was sent
- The authorization expired without a clearing
Clearing and settlement
Clearing is the merchant submitting the final amount, usually as part of an overnight batch. Fluz matches it to the open authorization using the network’s reference identifiers and finalizes the record. Realities to build for:- The amount changes. Tips, fuel, FX, and partial shipments all move the number.
- There can be more than one clearing. A split shipment clears in pieces against one authorization, and the pieces can arrive out of order.
- A clearing can arrive with no authorization. Networks permit a merchant to force-post in some situations — offline terminals, in-flight purchases, transit fare aggregation. Fluz monitors these, but your ledger has to accept a purchase that appears already cleared with no pending phase.
- Matching is not guaranteed. In rare cases the identifiers on a clearing do not line up with the authorization it belongs to, and the clearing appears as its own record.
Refunds
A merchant returning value sends a credit back through the network. Fluz posts it as aREFUND on the card feed and as a credit on the ledger. It may arrive as an authorization that clears later, or as a clearing on its own.
Two cases that break naive matching:
- Unlinked refunds. The network may send the credit with no reference to the original purchase, or with different identifiers. It arrives as a standalone credit with nothing to join it to.
- Batched refunds. Several refunds for different original purchases can share network identifiers and arrive grouped.
Foreign currency
A purchase made in another currency clears in USD, with the original amount preserved on the record:
These three fields are returned together — all populated, or all null. Conversion happens at clearing, so a foreign authorization and its clearing commonly differ in USD terms even when the merchant charged the same amount.
Common message sequences
Beyond the two happy paths, these are the sequences worth having test coverage for.Building against the lifecycle
1
Treat pending and cleared as different things
Never show a pending authorization as a completed purchase, and never sum authorizations and clearings together. If you need one number, sum cleared records and show holds separately.
2
Subscribe to all three transaction events
TRANSACTION_CREATE, TRANSACTION_UPDATE, and TRANSACTION_DECLINE. An integration that listens only for creates will show every transaction stuck at its authorization amount forever. → Webhooks3
Sync on updatedGte, not createdGte
A record created as
PENDING and later cleared changes its updated timestamp, not its created timestamp. A created-date sync silently misses every settlement.4
Reconcile balances from snapshots
Every ledger record carries the after-state of every balance. Read those fields rather than summing amounts yourself — they already account for fees, cashback, and open holds.
5
Make handlers idempotent
Webhooks retry, and clearings can arrive out of order. Key on the Fluz record identifier and make replay a no-op.
Testing the lifecycle
Staging cards are real card records but are not on a live network, so transactions are injected against them rather than swiped. You can exercise an authorization, a separate clearing, a decline, a reversal, a refund, and a zero-dollar probe — each producing the same records and webhooks as production. → Simulate Virtual Card TransactionsNext steps
Transactions Overview
The unified ledger — what a record contains and how to reconcile it.
Get Virtual Card Transactions
Card-level activity, filters, FX fields, and pagination.
Get Declined Transactions
Authorizations that never became transactions.
Decline Codes
Every decline reason and category, and what to do with each.
Simulate Virtual Card Transactions
Put a test spend on a staging card and watch the lifecycle run.
Webhooks
Subscribe to transaction events, verify signatures, handle retries.