This guide covers the full flow for sending crypto from a Yativo account to an external wallet: estimating gas fees, executing the transfer with an idempotency key, and tracking the transaction to completion.Documentation Index
Fetch the complete documentation index at: https://docs.yativo.com/llms.txt
Use this file to discover all available pages before exploring further.
Test this flow in the Sandbox at
https://crypto-sandbox.yativo.com/api/v1/. Sandbox transactions are simulated — no real funds move.Get a gas fee estimate
Before sending, retrieve the current gas fee estimate for the target chain. This lets you show users an accurate fee breakdown and choose a priority level.Response:
Priority levels
| Priority | Speed | Use case |
|---|---|---|
slow | 1–3 min | Non-urgent payouts, batch processing |
medium | 15–30 sec | Default for most use cases |
fast | 5–15 sec | Time-sensitive transactions |
Send funds with an idempotency key
Use Response:
POST /transactions/send-funds to initiate the transfer. Always include an Idempotency-Key header to safely retry without double-spending.Idempotency keys
An idempotency key is a unique string you attach to a request. If the request fails or times out, you can safely retry with the same key — Yativo will return the original response instead of creating a duplicate transaction. If no key is supplied, no deduplication is applied.Best practices:- Derive the key from your internal record ID (e.g.,
payout_${payoutId}) - Keys must be unique per operation — reusing a key for a different transfer will return the original transaction
- Keys expire after 24 hours
Poll for transaction status
You can poll for the current transaction status using Response (completed):
POST /transactions/get-transactions, filtering by transaction_id.Transaction statuses
| Status | Description |
|---|---|
pending | Submitted, waiting to be broadcast |
completed | Included in a block with sufficient confirmations |
failed | Transaction failed (see error_message) |
Common Errors
| Error | Cause | Fix |
|---|---|---|
Assets required | assets body field missing | Include the asset ObjectId in the request body |
Receiving address required | receiving_address missing | Include the destination address |
Valid amount required | amount missing, zero, or negative | Provide a positive numeric amount |
Insufficient balance | Asset balance too low | Check balance before sending |
Withdrawal amount must be greater than total fees | Amount too small to cover platform fee + gas markup | Increase amount or check fee estimates first |
Self funding is only available for native token transactions | use_self_funding: true on a token asset | Remove use_self_funding for token withdrawals |
Transaction blocked due to high-risk receiving address | Chainalysis/Circle screening blocked the address | Do not send to flagged addresses |
DUPLICATE_REQUEST_IN_PROGRESS | Same Idempotency-Key submitted while first request is still processing | Wait for the first request to complete before retrying |
Next Steps
- See Webhook Integration for the full
transaction.confirmedevent payload. - Use Swap Tokens to exchange assets before sending.

