curl -X POST "https://sandbox-api.tender.cash/v1/api/conversions" \
-H "Content-Type: application/json" \
-H "x-access-id: your-access-id-here" \
-H "x-request-id: 550e8400-e29b-41d4-a716-446655440000" \
-H "x-timestamp: 2026-10-15T09:45:53.000Z" \
-H "authorization: <signature>" \
-d '{"type":"crypto","chain":"ethereum","coin":"usdt","amount":"100","toChain":"solana","toCoin":"sol"}'
curl -X POST "https://sandbox-api.tender.cash/v1/api/conversions" \
-H "Content-Type: application/json" \
-H "x-access-id: your-access-id-here" \
-H "x-request-id: 550e8400-e29b-41d4-a716-446655440000" \
-H "x-timestamp: 2026-10-15T09:45:53.000Z" \
-H "authorization: <signature>" \
-d '{"type":"fiat","chain":"ethereum","coin":"usdt","amount":"100","payoutAccountId":"66aec7de809b7f45c42a49f9"}'
{
"status": "success",
"message": "Conversion created successfully",
"data": {
"conversion": {
"conversionId": "66aec7de809b7f45c42a49f9",
"amount": 100,
"usdAmount": 100,
"status": "pending",
"destinationType": "crypto"
}
}
}
{
"status": "error",
"message": "Conversion request must be more than $20 USD",
"data": {}
}
Create Conversion
Swap crypto to another coin or chain, or convert it to a saved payout account — no OTP required
curl -X POST "https://sandbox-api.tender.cash/v1/api/conversions" \
-H "Content-Type: application/json" \
-H "x-access-id: your-access-id-here" \
-H "x-request-id: 550e8400-e29b-41d4-a716-446655440000" \
-H "x-timestamp: 2026-10-15T09:45:53.000Z" \
-H "authorization: <signature>" \
-d '{"type":"crypto","chain":"ethereum","coin":"usdt","amount":"100","toChain":"solana","toCoin":"sol"}'
curl -X POST "https://sandbox-api.tender.cash/v1/api/conversions" \
-H "Content-Type: application/json" \
-H "x-access-id: your-access-id-here" \
-H "x-request-id: 550e8400-e29b-41d4-a716-446655440000" \
-H "x-timestamp: 2026-10-15T09:45:53.000Z" \
-H "authorization: <signature>" \
-d '{"type":"fiat","chain":"ethereum","coin":"usdt","amount":"100","payoutAccountId":"66aec7de809b7f45c42a49f9"}'
{
"status": "success",
"message": "Conversion created successfully",
"data": {
"conversion": {
"conversionId": "66aec7de809b7f45c42a49f9",
"amount": 100,
"usdAmount": 100,
"status": "pending",
"destinationType": "crypto"
}
}
}
{
"status": "error",
"message": "Conversion request must be more than $20 USD",
"data": {}
}
x-access-id, x-request-id, x-timestamp, and an HMAC-SHA256
authorization signature. See Authentication.cryptoswapscoinonchainintotoCoinontoChain. The result always settles to your own merchant wallet ontoChain.fiatconvertscoinonchainand sends the result to one of your saved, active payout accounts (payoutAccountId). If that payout account is a bank account, the funds are paid out in its fiat currency; if it is a crypto account, they are sent to its address on its chain and coin.
pending and processed asynchronously. There are no conversion webhooks: poll
Get Conversion until status is completed or
failed.
The conversion must be worth more than $20 USD. Call
Calculate Conversion Fee first to show the fee and the
expected output.
Headers
{"timeStamp":"<x-timestamp>","requestId":"<x-request-id>","accessId":"<x-access-id>"}, signed with your access secret. The request body is not part of the signature.Example: "pV3n0o8kq0lK2mJ8bZ1yq3Yt6hR0cXK9u4mVJ2l9sE0=""2026-10-15T09:45:53.000Z""550e8400-e29b-41d4-a716-446655440000""your-access-id-here"application/jsonExample: "application/json"Body
crypto, fiatExample: "crypto""ethereum""usdt""100"type is crypto.Example: "solana"type is crypto.Example: "sol"type is fiat.Example: "66aec7de809b7f45c42a49f9"Response
"success""Conversion created successfully"Show data properties
Show data properties
Show conversion properties
Show conversion properties
"66aec7de809b7f45c42a49f9"100100pending on creationExample: "pending"crypto or fiat. For type: "fiat", this is the type of the payout account.Example: "crypto"Errors
| HTTP | Message | Cause |
|---|---|---|
| 400 | Invalid chain reference / Invalid currency reference | Unknown source chain or coin |
| 400 | Invalid to chain reference / Invalid to currency reference | Unknown toChain or toCoin (crypto) |
| 400 | Merchant wallet not found | You have no merchant wallet on toChain (crypto) |
| 400 | Currency is not enabled for swap | The source coin can’t be converted (fiat) |
| 400 | Invalid or inactive payout account | payoutAccountId is not one of your active payout accounts (fiat) |
| 400 | Conversion request must be more than $20 USD | The amount is worth $20 or less |
| 400 | Validation message, e.g. toChain must be a string | A required field is missing or has the wrong type |
| 500 | Failed to create conversion | The conversion could not be priced or created. Check the pair with the fee endpoint and retry. |
curl -X POST "https://sandbox-api.tender.cash/v1/api/conversions" \
-H "Content-Type: application/json" \
-H "x-access-id: your-access-id-here" \
-H "x-request-id: 550e8400-e29b-41d4-a716-446655440000" \
-H "x-timestamp: 2026-10-15T09:45:53.000Z" \
-H "authorization: <signature>" \
-d '{"type":"crypto","chain":"ethereum","coin":"usdt","amount":"100","toChain":"solana","toCoin":"sol"}'
curl -X POST "https://sandbox-api.tender.cash/v1/api/conversions" \
-H "Content-Type: application/json" \
-H "x-access-id: your-access-id-here" \
-H "x-request-id: 550e8400-e29b-41d4-a716-446655440000" \
-H "x-timestamp: 2026-10-15T09:45:53.000Z" \
-H "authorization: <signature>" \
-d '{"type":"fiat","chain":"ethereum","coin":"usdt","amount":"100","payoutAccountId":"66aec7de809b7f45c42a49f9"}'
{
"status": "success",
"message": "Conversion created successfully",
"data": {
"conversion": {
"conversionId": "66aec7de809b7f45c42a49f9",
"amount": 100,
"usdAmount": 100,
"status": "pending",
"destinationType": "crypto"
}
}
}
{
"status": "error",
"message": "Conversion request must be more than $20 USD",
"data": {}
}
Authorizations
Signed (HMAC) authentication. Required headers: x-access-id, x-request-id (UUID v4), x-timestamp (ISO 8601, must be within 5 minutes of server time), and authorization: the Base64 HMAC-SHA256 of the JSON string {"timeStamp":"","requestId":"","accessId":""} (keys in that order, no whitespace) using your access secret. The request body, method and path are not signed. The API key must be linked to an outlet.
Headers
Base64-encoded HMAC-SHA256 signature of {"timeStamp":"<x-timestamp>","requestId":"<x-request-id>","accessId":"<x-access-id>"}, signed with your access secret. The request body is not part of the signature.
ISO 8601 timestamp; must be within 5 minutes of server time
A unique UUID v4 per request
application/json Body
crypto, fiat 500"ethereum"
500"usdt"
Amount in the source coin, as a string. Must be worth more than $20 USD.
500"100"
Required when type is crypto
500"solana"
Required when type is crypto
500"sol"
Required when type is fiat. One of your active payout accounts.