Staging onlySimulated transactions exist only in the staging environment (
https://transactional-graph.staging.fluzapp.com/api/v1/graphql). No funds move, no interchange is generated, and nothing is submitted to Mastercard. In production, transactions arrive only from real merchant activity.Before you request a simulation
An authorization runs through the full control stack, so a card that isn’t set up correctly will decline for reasons that have nothing to do with your test.1
The account has passed KYC
Cards can only be issued — and only authorize — on a verified account. See Testing KYC Flows for identities that return a pass.
2
You have an ACTIVE card
Issue one with
createVirtualCard using an offer from Test Virtual Card Offers. Hold on to the virtual_card_id — it’s how we locate the card.3
The card is funded and unlocked
The card draws on your Fluz balance. Confirm the spend limit covers your test amount and that the card hasn’t been locked, expired, or spent down.
getVirtualCardBalance shows you remainingBalance at a glance.What you can simulate
Ask for whichever leg of the lifecycle you need. Each maps to a distinct set of records and webhooks on your side.Clearing (capture)
Clearing (capture)
The settlement leg that follows an authorization, sometimes days later in the real world. We can either capture in a single step alongside the authorization, or leave the authorization open so you can observe the pending state and then request the capture separately. The second option is the more faithful rehearsal of production.
Decline
Decline
A transaction the authorization service rejects. Tell us which decline you want to see — a control-driven decline (over the spend limit, wrong merchant on a brand-locked card, locked card) or an authentication decline (CVV mismatch). Declines surface a
declineReason and declineCategory; see Decline Codes for the full set.Reversal
Reversal
An authorization released before it clears — the merchant abandoned the sale, or the terminal timed out. The held amount returns to the card. Worth testing if you reconcile on authorizations rather than clearings.
Refund
Refund
Value returned to the card after a purchase has cleared, in full or in part. Appears as a
REFUND transaction type rather than a reduction of the original purchase, so your ledger needs to handle it as a separate record.Zero-dollar and AVS checks
Zero-dollar and AVS checks
Some merchants probe a card with a 0.01 authorization before charging it. These appear as their own records and are reversed shortly after. If your reconciliation sums authorizations, test this case — it’s a common source of double-counting.
What to send us
The more of this you provide, the fewer round trips.Verifying the result
Once we confirm the simulation has run, everything is readable over the API. Nothing about reading a simulated transaction differs from reading a real one.PURCHASE row with a matching drop in remainingBalance. A decline shows up under the DECLINE type and leaves the balance untouched — declines are also queryable in isolation through Get Declined Transactions.
Webhooks
Simulated transactions fire the same events as real ones, which makes this the cleanest way to test your endpoint end to end:
If you asked for an authorization without single-step clearing, you should see
TRANSACTION_CREATE on its own and TRANSACTION_UPDATE only after the capture is run. See Webhooks for payloads and signature verification.
Troubleshooting
Next steps
Your First Virtual Card Purchase
The full happy path — pick a program, issue a card, reveal it, and track its spend.
Get Virtual Card Transactions
Filter card activity by type and date range, and read every field on a transaction.
Decline Codes
Every decline reason and category, and what your app should do with each.
Webhooks
Subscribe to transaction events, verify signatures, and handle retries.