Testing & Sandbox Guide
Validate authentication, service-specific sandbox routes, resource setup, receive, beneficiaries, payouts, FX, webhooks, retries, and RFI handling before production.
Developer Sandbox & Simulation
Use the Verto Sandbox to authenticate, simulate inbound activity, trigger expected failures, and verify your webhook and idempotency handling before you request production access.
This guide is the primary testing runbook for Verto integrations.
Start here
Use this page as the main testing entry point if you are validating a new integration:
- Configure sandbox and confirm authentication works.
- Create the resources your flow depends on, such as wallets, beneficiaries, sub-accounts, or account details.
- Validate the core money movement flows you actually support.
- Confirm webhook and retry handling before you treat the integration as production-ready.
Related validation guides
| Guide | Use it for |
|---|---|
| Webhooks | Event delivery, acknowledgement, deduplication, and asynchronous state changes. |
| Errors and Retries | Timeout recovery, rate limits, validation failures, and uncertain outcomes. |
| Handle RFIs and Compliance Exceptions | Review holds, exception queues, customer messaging, and safe retry blocking. |
| Go-Live Requirements | Final operational and compliance checks before production rollout. |
✅ Before you start testing
Complete these steps before you rely on sandbox results:
- Configure the sandbox base URLs for the services your flow uses.
- Generate sandbox credentials and confirm you can authenticate successfully.
- Register a webhook endpoint if your flow depends on event-driven updates.
- Decide which flows you want to test: receive, wallet, beneficiary, payout, FX, or error handling.
- Define how your sandbox workflow should behave when a transaction enters review or requires an RFI.
Recommended testing order
Run your sandbox validation in this sequence so failures are easier to isolate:
- Authenticate first so you know your credentials and environment are correct.
- Create or identify the resources your flow depends on, such as wallets, beneficiaries, or sub-accounts.
- Simulate inbound or outbound activity to validate business logic.
- Confirm webhook processing so asynchronous state changes are reflected in your app.
- Test retries and failures only after the happy path works end to end.
This order applies whether you are building a direct integration, an Atlas platform flow, or a narrower feature like cards.
🔑 Step 1: Sandbox Environment Setup
| Service | Sandbox base URL | Use it for |
|---|---|---|
| Login | https://api-company-sandbox.vertofx.com | Exchanging credentials for a bearer token with POST /users/login. |
| Wallet | https://api-wallet-sandbox.vertofx.com | Creating wallets, listing wallets, retrieving wallet details, and funding methods. |
| Beneficiary | https://api-beneficiary-sandbox.vertofx.com | Creating, listing, retrieving, updating, deleting, and validating beneficiaries. |
| Exchange | https://api-exchange-now-sandbox.vertofx.com | Getting FX rates, creating FX trades, listing trades, and retrieving trade status. |
| Onboarding | https://api-onboarding-sandbox.vertofx.com | Submitting onboarding data and generating document upload links. |
Keep sandbox credentials and configuration separate from production values so you do not mix test traffic with live operations.
🧱 Step 2: Create the resources your flow depends on
Before you simulate money movement, create or identify the objects your flow needs.
Use this step to validate resource setup such as:
- wallets for direct integrations using Create wallet and Get all Wallets
- sub-accounts and wallets for platform integrations using Create a sub-account (New)
- beneficiaries for payout testing using Create beneficiary
- beneficiary validation using Get account name where supported
- FX prerequisites using Get FX rate and Create FX trade
If this setup does not work in sandbox, later payment and reconciliation tests will not be meaningful.
🏦 Step 3: Simulate inbound and outbound activity
Use sandbox to validate the core money movement flows your integration actually depends on:
- Receive: simulate or observe inbound wallet credits and reconcile them correctly
- Payout: create outbound requests and confirm their state transitions
- Beneficiary: create or update beneficiaries, then check
verificationState,isAccountActive, andisUpdateRequiredbefore payment selection - FX: request a rate, use the short-lived
vfx_token, create the FX trade, and wait for settlement before using converted funds downstream
To credit a sandbox wallet without real capital, use the Simulator API (Sandbox Only).
curl -X POST https://api.sandbox.vertofx.com/v2/simulator/credit \
-d '{
"wallet_id": "wal_gbp_11",
"amount": "50000.00"
}'Use this flow to validate wallet credit handling, webhook processing, and downstream reconciliation without waiting for real settlement rails.
🔔 Step 4: Verify webhook handling
Webhook validation is a required part of sandbox testing for any asynchronous flow.
Use this step to confirm that:
- your endpoint is publicly reachable
- your app acknowledges events quickly
- duplicate events do not create duplicate internal updates
- your ledger changes only when the expected final or usable event state is received
🛑 Step 5: Simulate failures and retry behavior
Append the X-Verto-Simulation header to any request to force a specific error code.
X-Verto-Simulation: error_insufficient_fundsX-Verto-Simulation: error_compliance_hold
Use simulated failures to verify that your retry logic, user-facing messaging, and alerting behave correctly when the API does not return a normal success response.
When simulating error_compliance_hold, verify that your application follows Handle RFIs and Compliance Exceptions: pause automated retries, move the item into an exception queue, and show a review or information-required state instead of marking the transaction as failed.
🎯 Debugging Checklist
- Webhook Deliverability: Use Webhook.site to verify Verto signals reach your app.
- Idempotency: Re-send the same request with the same key to verify the 200/201 response is identical.
- Latency: Sandbox handles requests in ~200ms; production may vary based on bank rail connectivity.
Validation matrix
Use this matrix to confirm each part of your integration behaves as expected.
| Flow | What to test | What success looks like |
|---|---|---|
| Authentication | Token generation and protected API access | Your app obtains a token and can call secured endpoints successfully. |
| Resources | Wallet, beneficiary, sub-account, or account-detail creation | The required setup objects are created once and can be reused in later test steps. |
| Receive | Inbound credit simulation and reconciliation | The correct wallet is credited and your internal balance updates only after the expected state change. |
| Beneficiary | Create, retrieve, update, and readiness checks | Beneficiaries are approved, active, not archived, and do not require remediation before payment use. |
| Payout | Outbound request creation and status tracking | The payout is created once, can be tracked safely, and state changes are reflected in your app. |
| FX | Rate token, execution, and settlement handling | Your app uses the vfx_token before expiry and does not use converted funds downstream until settlement is complete. |
| Webhooks | Delivery, acknowledgement, and deduplication | Events reach your endpoint, are acknowledged quickly, and do not create duplicate internal updates. |
| Retries | Timeout recovery and duplicate prevention | Repeating the same operation with the same key does not create duplicate financial actions. |
| RFI handling | Compliance hold, exception queue, and customer messaging | Review-blocked items pause safely, do not retry with a new key, and have an assigned owner. |
| Cards (Optional) | Authorization and decline scenarios | Card-specific flows return the expected success and failure behavior in sandbox. |
What a successful sandbox run looks like
Before you move toward production, you should be able to say all of the following are true:
- Your app authenticates reliably in sandbox.
- The wallets, beneficiaries, sub-accounts, or receiving accounts your flow needs can be created successfully.
- Your app uses service-specific sandbox hosts for Login, Wallet, Beneficiary, Exchange, and Onboarding APIs.
- Your webhook endpoint receives and acknowledges events quickly.
- Your internal ledger updates only after the expected final or usable state.
- Your payout or transfer retry logic reuses the same idempotency key for uncertain outcomes.
- Your RFI workflow can pause review-blocked items, assign an owner, and resume only after the next valid status update.
- Your team can distinguish a sandbox logic success from a production-readiness success.
Optional: What sandbox does not prove
Sandbox is useful for logic validation, but it does not fully reproduce live operating conditions:
- Production settlement timing can differ by corridor and bank rail.
- Compliance review timing in live flows can delay downstream actions.
- Live webhook volume and retry patterns may differ from low-volume sandbox testing.
Next steps
| Environments → Review the differences between sandbox and production configuration. | Handle RFIs and Compliance Exceptions → Validate your exception queue before production rollout. |
Updated 10 days ago
