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:401.
Sandbox simulation endpoints
All of the helpers below live only on sandbox. Production returns the same generic404 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).
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:
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
virtualcard.* webhook. It never calls
the card issuer.
See Virtual card events.
6. Simulate a spend card event
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.

