collect.succeeded webhook, fetched the collect, and confirmed the credit on your balance. You need two things before starting: a sandbox account with API keys (Get Started with Tazapay) and an entity — no real onboarding needed on sandbox, you can create an entity and simulate its approval directly. Everything below runs against sandbox, so no real money moves.
This walkthrough uses a Singapore SGD Virtual Account. The identical flow applies to Stablecoin Wallets — swap the payload as shown in Requesting via API and a deposit address replaces the bank details.
The flow at a glance
- Provision the account —
POST /v3/collection_account - Account enabled — the enablement request succeeds and
statusflips toenabled - Fetch account details — the bank coordinates you give your payer
- Payer transfers funds — a normal domestic transfer, or SWIFT, or an on-chain send
- Collect created & screened — Tazapay creates a collect and runs compliance screening
- Collect succeeds —
collect.succeededfires - Balance credited — funds land in your Tazapay balance, converted if needed
1
Set up authentication
The Tazapay API uses HTTP Basic authentication: your
API_Key is the username and your API_Secret is the password, joined with a colon, Base64-encoded, and sent as Authorization: Basic <value>. See Authentication for the full breakdown.All calls in this guide use the sandbox base URL. See Endpoints and Environments.Sandbox base URL
curl -u performs the Basic encoding for you, so the examples below stay copy-pasteable:Set your credentials
2
Discover what you can create
Before creating anything, ask the Metadata API what your account is actually allowed to provision. This returns the payment method types, currencies, rails, and transfer limits available to you.Full reference: Virtual Account Metadata. For stablecoins, call Wallet Metadata instead.
Request
Response (trimmed)
Sandbox availability may differ from production. In production, what you can provision depends on your onboarding profile — if a corridor you need is missing here, check Virtual Account coverage and talk to your account manager.
3
Create the collection account
Create a Singapore SGD Virtual Account on the local rail. Only Note the account is born
type and payment_method_type are required by the schema; country and currencies are additionally required for virtual accounts.Request
Response
disabled with an enablement request attached — it cannot receive funds yet. The account’s status is derived from the state of that request, not set directly. For the full request lifecycle and every state a request can pass through, see Collection Account Status Flow.Save the returned id — every step below uses it:4
Wait for enablement
- Webhooks (recommended)
- Polling
Subscribe to The same family of events reports the unhappy paths —
collection_account.creation_succeeded. It fires when the enablement request succeeds and the account flips to enabled.collection_account.creation_succeeded (trimmed)
creation_requires_action, creation_under_approval_hold, creation_failed, creation_cancelled. Handle at least creation_failed before going live. Full list and payloads: Collection Account Webhooks.On setting up and securing your endpoint, see the Webhooks Guide and Webhook Authentication.5
Fetch the account details your payer needs
Fetch the account and read the The keys present under
virtual_account block. These are the coordinates your payer transfers to.Request
Virtual account details to share with your payer
bank_codes vary by country and rail — it may contain swift_code, routing_code, sort_code, ach_routing_number, fedwire_routing_number, bsb_code, or bank_code. Read them dynamically rather than assuming a fixed set. Full reference: Collection Account object.In production, these are the details you display to your customer or print on your invoice. The payer then makes a normal domestic transfer to this account — from their side it looks like paying a local business, not an international wire.6
Simulate an incoming payment
Sandbox includes a Collect Simulation feature so you can mimic an incoming payment without moving real money. This step is performed from the dashboard, not the API.Go to the Sandbox dashboard → Virtual Accounts/Wallets → Simulate Collect, pick the account you just created, and simulate the
succeeded state.You can simulate every intermediate and terminal state, which is how you exercise the unhappy paths in your integration:Stablecoin wallets add
detected transitions, since on-chain payments are visible before final confirmation. The complete matrix for both fiat and crypto is on Simulating Collects on Sandbox.Simulated collects also create a real sandbox balance, which you can then use to fund and test payouts end to end.
7
Receive the collect and confirm the credit
The webhook. As soon as the collect settles, All collect events and their payloads: Collect Webhooks.The sibling events are Field-level reference: Collect object. Amounts are in the currency’s smallest unit — Balance amounts are strings in the currency’s smallest unit —
collect.succeeded fires. This is the event your system should treat as the signal that money arrived — note balance_transaction, which ties the collect to the ledger entry on your balance.collect.succeeded
collect.failed, collect.on_hold, and collect.detected (wallets only). See Collect Webhooks.Fetch the collect. Take the collect ID from the webhook and fetch it directly:Request
Collect — succeeded USD collect
100000 here is USD 1,000.00.The four fields to reconcile against are status (succeeded), amount and currency (what arrived), destination (which collection account received it), and balance_transaction (the ledger entry).Confirm the balance. Finally, check that the funds are on your balance:Request
Response (trimmed)
"100000" is SGD 1,000.00.If the incoming currency is not one of your holding currencies, it is converted automatically at the point of credit rather than as a separate step — see FX.Going to production
- Handle compliance holds — subscribe to
collect.on_holdand surface held payments rather than treating silence as failure → Compliance Holds - Understand the full collect state machine, including the wallet-only
detectedstate → State Machine - Plan for reversals when a collect fails after funds have arrived → Reversals
- Decide your holding currencies and how FX should behave → FX and Enabling Additional Balance Currencies
- Review coverage for the corridors you actually need → Virtual Accounts and Stablecoins
- Collecting for your customers? Read Collections on Behalf Of for entity-level attribution
- Read the use case guide matching your business → B2B Collections, Financial Institutions, or Marketplaces
Request via Dashboard
Prefer no code? Provision the same account from the Tazapay dashboard.
Collection Account API Reference
Every field, enum, and endpoint for collection accounts.