Skip to main content
Sandbox is a separate Yativo environment. Keys, customers, balances and webhooks never mix with production. Use it to settle test payins and payouts, credit a wallet, and fire the same webhooks your live integration will see. Base URL: https://smtp.yativo.com These helpers run only on https://smtp.yativo.com. Calling them on api.yativo.com, office.yativo.com, or any other host on the production server returns the same generic 404 Not found as an unknown route. The handler also refuses the request when this process is the production server, so a Host-header spoof cannot credit or settle.

Authentication

Same as every other business endpoint:
See Authentication. An IP whitelist is optional on sandbox. Production keys still need one — a production request with no whitelist is 401.

Sandbox simulation endpoints

All of the helpers below live only on sandbox. Production returns the same generic 404 Not found as an unknown route.

1. Credit a test wallet

amount is in major units (100 credits 100.00). The wallet must already exist. USDC and OUSD stay blocked by their wallet guards. Send an Idempotency-Key if a retry should not add the funds twice. Without one, repeating the same body credits again — that is how you add more test funds.

2. Mark a payin or payout success or fail

Create the deposit or payout with the normal endpoints, then settle it:
{id} is the deposit id, payout id, or the transaction_id from the transaction record. Only your own pending records can be settled. Succeeding a deposit credits the wallet the same way a real settlement does, and sends deposit.updated. Succeeding a payout marks it complete and sends payout.updated. Failing a pending deposit marks it failed (no credit). Failing a pending payout marks it failed and refunds the debit. A deposit that has already been credited, or a payout that has already completed, cannot be moved backwards (409).
Pending payouts under $50 USD are also auto-completed every five minutes on sandbox; larger pending payouts are auto-failed. Use the endpoints above when you want a specific outcome immediately.

3. Virtual account creation on sandbox

On sandbox, virtual account creation automatically provisions simulated virtual accounts for any supported currency (USD, EUR, GBP, MXN, COP, NGN, etc.) with dummy banking details, without calling external banking partners:
The response returns a full dummy account with routing number, bank address, and account number. You can immediately use this account’s account_id or account_number to test deposits via the simulation endpoint below.

4. Simulate a virtual account deposit

{accountId} is the virtual account’s account_id or account_number. The account must belong to you. Sandbox simulations do not charge VA fees.

5. Simulate a virtual card event

The card must belong to your business. This updates local card status where the event would in production (for example a decline increments failed attempts) and sends the matching virtualcard.* webhook. It never calls the card issuer.
See Virtual card events.

6. Simulate a spend card event

The card must belong to your business. Transaction events are written to the spend-card activity history and sent as business_spend_card.transaction.*. Lifecycle events (created, funded, suspended, …) only send the webhook.
See Spend card events.

7. Sample webhooks without creating records

When you only need to exercise your webhook handler, send a signed sample to your registered URL:
{type} can be a legacy slug (payin, payout, virtual_account, rfi), a documented event name (virtualcard.topup.completed, rfi.created), or a family alias (virtualcard, spendcard, card_checkout). These samples do not credit a wallet or change a record. Prefer the simulate endpoints above when you need the object to exist afterwards. Full catalog and examples: Testing your integration on sandbox.

Errors

Team members need the matching permission: Transactions → create to settle payins/payouts, Deposits → create to simulate a VA deposit, Virtual cards → manage to simulate a card event.