Exwell API Documentation
Every request must include the query parameter key — the API key from the partner cabinet. Key format: 32 characters A–Z a–z 0–9. Missing or invalid key → 401.
| API URI | https://exwell.io/v1/api — same as https://exwell-swap-api.mananalraskakaip.workers.dev/partner/v1/ |
|---|---|
| Response | json, except the XML rate feed |
| Auth | key only. The site refId parameter is not read by the API |
| Commission | paid only if Partner Fee Rate is set in the cabinet. Otherwise the swap completes with no payout |
| Errors | 401 — no key (Key parameter is required!) or unknown key (User does not exist!). Other codes are listed per method |
Swap
Call order
- /currencies — available coins
- /pairs — open pairs
- /rate — quote and limits for an amount
- /validate-address — payout address
- /exchange-create — order + deposit address
- User sends the deposit
- /exchange-status — poll until a final status
GET /currencies — Currency list
Available coins, networks, min/max, and memo/tag names.
https://exwell.io/v1/api/currencies?key=Kq8WmP2nXrT5vLcYhB7jFdZuAs4gE9oN
No extra parameters.
Response 200
{
"XMR": {
"coinName": "Monero",
"minamount": 20.01,
"maxamount": 23724,
"tagname": "",
"network": "Monero",
"available": true
},
"XRP": {
"coinName": "XRP",
"minamount": 6180.12,
"maxamount": 7343941,
"tagname": "TAG",
"network": "Ripple",
"available": true
}
}
If tagname is not empty, the tag is required (destinationTag / refundTag).
GET /pairs — Pair list
Open pairs: key is the source currency, value is the list of destinations.
https://exwell.io/v1/api/pairs?key=Kq8WmP2nXrT5vLcYhB7jFdZuAs4gE9oN
No extra parameters.
Response 200
{
"ZEC": ["BTC", "USDT", "USDC", "ETH", "BTCLIGHTNING", "USDTTRC20"],
"DASH": ["USDC", "BTC", "ETH", "USDCTRC20"]
}
GET /rate — Quote for an amount
Current pair rate. Does not include the miner withdrawal fee.
https://exwell.io/v1/api/rate?key=Kq8WmP2nXrT5vLcYhB7jFdZuAs4gE9oN&from=ZEC&to=BTC&amount=1000
Parameters
| Parameter | Type | Example |
|---|---|---|
| from | string |
ZEC |
| to | string |
BTC |
| amount | float |
1000 |
| fix optional | boolean |
false (default) |
Response 200
{
"minamount": 100.4,
"maxamount": 121334,
"rate": 0.9835947505534923,
"withdrawalFee": "0.002 BTC",
"fix": false,
"result": true
}
withdrawalFee is an approximate withdrawal fee; it floats.
GET /validate-address — Address validation
Checks that the address is valid for the payout currency.
https://exwell.io/v1/api/validate-address?key=Kq8WmP2nXrT5vLcYhB7jFdZuAs4gE9oN¤cy=USDT&address=0x651bf10b18d1ecaf7753cfe2457ac1aa23de540b
Parameters
| Parameter | Type | Example |
|---|---|---|
| currency | string |
USDT |
| address | string |
0x651bf10b18d1ecaf7753cfe2457ac1aa23de540b |
Response 200
{
"result": true
}
GET /exchange-create — Create a swap
Creates an order. All fields are query parameters (GET).
https://exwell.io/v1/api/exchange-create?key=Kq8WmP2nXrT5vLcYhB7jFdZuAs4gE9oN&from=XMR&to=BTC&amount=26.4509&fix=false&destinationAddress=33NWPY7z4vHzMnuyzRJg6hUvMXDw5Y7v9o&refundAddress=87mEgetMnPSMMKsAFRRf7UMKLSdzdke99Rk63PYZv5hYeUmx29gEd9PKbwiQ7ZsYv7AJMKZ3515E
Parameters
| Parameter | Type | Example |
|---|---|---|
| from | string |
XMR |
| to | string |
BTC |
| amount | float |
26.4509 |
| fix | boolean |
false |
| destinationAddress | string |
33NWPY7z4vHzMnuyzRJg6hUvMXDw5Y7v9o |
| destinationTag optional | string |
|
| refundAddress optional | string |
87mEgetMnPSMMKsAFRRf7UMKLSdzdke99Rk63PYZv5hYeUmx29gEd9PKbwiQ7ZsYv7AJMKZ3515E |
| refundTag optional | string |
Response 200
{
"id": "43c393b8-1dc6-40e3-ad83-d721bf467ac1",
"from": "XMR",
"to": "BTC",
"expectedAmountFrom": "26.4509",
"expectedAmountTo": "0.24118351760777",
"depositAddress": "87mEgetMnPSMMKsAFRRf7UMKLSdzdke99Rk63PYZv5hYeUmx29gEd9PKbwiQ7ZsYv7AJMKZ3515E",
"depositTag": ""
}
GET /exchange-status — Swap status
Current order state. Poll until the status is final.
https://exwell.io/v1/api/exchange-status?key=Kq8WmP2nXrT5vLcYhB7jFdZuAs4gE9oN&id=43c393b8-1dc6-40e3-ad83-d721bf467ac1
Parameters
| Parameter | Type | Example |
|---|---|---|
| id | string |
43c393b8-1dc6-40e3-ad83-d721bf467ac1 |
Response 200
{
"status": "deposit_received",
"from": "XMR",
"to": "BTC",
"depositAddress": "87mEgetMnPSMMKsAFRRf7UMKLSdzdke99Rk63PYZv5hYeUmx29gEd9PKbwiQ7ZsYv7AJMKZ3515E",
"depositTag": "",
"depositTxId": "",
"destinationAddress": "33NWPY7z4vHzMnuyzRJg6hUvMXDw5Y7v9o",
"destinationTag": "",
"refundAddress": "87mEgetMnPSMMKsAFRRf7UMKLSdzdke99Rk63PYZv5hYeUmx29gEd9PKbwiQ7ZsYv7AJMKZ3515E",
"refundTag": "",
"expectedAmountFrom": "26.4509",
"expectedAmountTo": "0.24118351760777",
"amountFrom": "26.4509",
"date": "01.06.2023 10:24:30",
"txId": null,
"amountTo": null,
"result": true
}
Statuses:
waiting_deposit — waiting for the deposit
deposit_received — deposit received
exchanging — exchanging
sending — sending
success — completed
time_expired — deposit wait timed out
failed — error
sending_failed — send failed
reverted — funds returned to the client
Rates in XML format
Rate feed for all open pairs. Not the same as JSON /rate (one pair and amount). Response application/xml: root <rates>, items <item>.
v1 and v2 return the same data. The difference is the min/max tag names (limits on the from currency):
| v1 | v2 | |
|---|---|---|
| URL | https://exwell.io/v1/api/rate.xml |
https://exwell-swap-api.mananalraskakaip.workers.dev/partner/v2/rate.xml |
| minimum | <minamount> |
<frommin> |
| maximum | <maxamount> |
<frommax> |
Other tags are the same: from, to, in, out, amount, param. The site prefix /v1/api does not rewrite to v2.
Call order
- Put
keyinto the feed URL - Fetch XML on your schedule
GET /rate.xml — XML rates v1
Same public prefix /v1/api.
https://exwell.io/v1/api/rate.xml?key=Kq8WmP2nXrT5vLcYhB7jFdZuAs4gE9oN
No extra parameters.
Response 200 application/xml
<rates>
<item>
<from>BTC</from>
<to>USDTTRC20</to>
<in>1</in>
<out>68420.15</out>
<minamount>0.001</minamount>
<maxamount>5</maxamount>
<amount>150000</amount>
<param>floating</param>
</item>
</rates>
| Tag | Type | Meaning |
|---|---|---|
| from | string |
source currency |
| to | string |
destination currency |
| in | int |
input coefficient, always 1 |
| out | string |
rate: how much to for in units of from |
| minamount | string |
minimum on from |
| maxamount | string |
maximum on from |
| amount | string |
reserve |
| param | string |
always floating |
GET /partner/v2/rate.xml — XML rates v2
Same pairs and values as v1. Limits use frommin / frommax. The site prefix /v1/api does not rewrite here — call the API host.
https://exwell-swap-api.mananalraskakaip.workers.dev/partner/v2/rate.xml?key=Kq8WmP2nXrT5vLcYhB7jFdZuAs4gE9oN
No extra parameters.
Response 200 application/xml
<rates>
<item>
<from>BTC</from>
<to>USDTTRC20</to>
<in>1</in>
<out>68420.15</out>
<frommin>0.001</frommin>
<frommax>5</frommax>
<amount>150000</amount>
<param>floating</param>
</item>
</rates>
| Tag | Type | Meaning |
|---|---|---|
| from | string |
source currency |
| to | string |
destination currency |
| in | int |
input coefficient, always 1 |
| out | string |
rate: how much to for in units of from |
| frommin | string |
minimum on from (v1: minamount) |
| frommax | string |
maximum on from (v1: maxamount) |
| amount | string |
reserve |
| param | string |
always floating |
Wallet
Cabinet addresses (main and test) and the USDT balance inside the wallet resource. TRX Energy rental is charged from this balance, not on-chain from the client address. TRON test network is Nile (response TESTNET).
Call order if you need energy
- GET /wallet — MAINNET and TESTNET addresses
- Deposit USDT TRC20 to the address for that network
- GET /wallet/balance — enough USDT?
- Then the TRX Energy section
GET /wallet — Main and test wallets
Partner addresses: MAINNET and TESTNET (Nile).
https://exwell.io/v1/api/wallet?key=Kq8WmP2nXrT5vLcYhB7jFdZuAs4gE9oN
No extra parameters.
Response 200
[
{
"address": "TExWKszFWYTKZH8LYiovAPKzS3L9MLZ4kw",
"type": "MAIN",
"blockchain": "TRON",
"network": "MAINNET"
},
{
"address": "TYsbVzAGJrDvDm8LxngY1uBYxHzpQKWzRv",
"type": "MAIN",
"blockchain": "TRON",
"network": "TESTNET"
}
]
GET /wallet/balance — Balance
Available balance inside the resource. address is yours, from GET /wallet.
https://exwell.io/v1/api/wallet/balance?key=Kq8WmP2nXrT5vLcYhB7jFdZuAs4gE9oN&address=TExWKszFWYTKZH8LYiovAPKzS3L9MLZ4kw&asset=USDT
Parameters
| Parameter | Type | Example |
|---|---|---|
| address | string |
your TRON address |
| asset optional | string |
USDT (default) |
Response 200
{
"balance": 12.50,
"asset": "USDT"
}
Errors: 404 — not your address.
GET /wallet/transaction — Wallet transactions
Deposits and charges. Energy rental is HOLD first, then SUCCESS.
https://exwell.io/v1/api/wallet/transaction?key=Kq8WmP2nXrT5vLcYhB7jFdZuAs4gE9oN&address=TExWKszFWYTKZH8LYiovAPKzS3L9MLZ4kw&pageNumber=0&pageSize=10
Parameters
| Parameter | Type | Example |
|---|---|---|
| address | string |
your TRON address |
| pageNumber optional | int |
0 |
| pageSize optional | int |
10 |
Response 200
{
"content": [
{
"serviceType": "TRX_ENERGY",
"amount": -0.86,
"createdAt": "2026-08-26T12:00:00",
"asset": "USDT",
"status": "SUCCESS"
}
],
"totalElements": 1,
"totalPages": 1,
"number": 0,
"size": 10
}
serviceType: DEPOSIT, TRX_ENERGY. status: HOLD, SUCCESS.
Errors: 404 — not your address.
TRX Energy
TRON energy rental. Charged from the cabinet USDT balance. Query network=TESTNET — Nile; MAINNET or omit network — mainnet (estimate, rent, list, and order status). Look up a Nile order with network=TESTNET.
Call order
- /wallet/trx-energy/info — limits
- /wallet/trx-energy/energy-required — price;
addressis the energy recipient - POST /wallet/trx-energy — order, status
PROCESSimmediately - GET /wallet/trx-energy/{orderId} — poll
PROCESS→SUCCESS/ERROR
GET /wallet/trx-energy/info — Rental limits
Periods and min/max energy. Balance is not here — see /balance.
https://exwell.io/v1/api/wallet/trx-energy/info?key=Kq8WmP2nXrT5vLcYhB7jFdZuAs4gE9oN
No extra parameters.
Response 200
{
"periods": ["H1", "D1", "D3", "D30"],
"minEnergy": 10000,
"maxEnergy": 1000000
}
periods is informational. There is no period field on the rental body.
GET /wallet/trx-energy/energy-required — Estimate
Rental price. address is the energy recipient (does not have to be the partner wallet). Without energyAmount the server estimates that address’s need. Omit network — MAINNET.
https://exwell.io/v1/api/wallet/trx-energy/energy-required?key=Kq8WmP2nXrT5vLcYhB7jFdZuAs4gE9oN&address=TExWKszFWYTKZH8LYiovAPKzS3L9MLZ4kw&energyAmount=65000&network=MAINNET
Parameters
| Parameter | Type | Example |
|---|---|---|
| address | string |
recipient TRON address |
| energyAmount optional | int |
65000 |
| network optional | string |
MAINNET or TESTNET |
Response 200
{
"recipientAddress": "TExWKszFWYTKZH8LYiovAPKzS3L9MLZ4kw",
"energyRequired": 65000,
"price": 0.86,
"priceSymbol": "USDT"
}
price is the amount charged, markup already included.
Errors: 409 — bad address or amount out of limits.
POST /wallet/trx-energy — Rent energy
Creates an order. Status is PROCESS immediately — poll by id on the same network (omit network and status is looked up on MAINNET).
https://exwell.io/v1/api/wallet/trx-energy?key=Kq8WmP2nXrT5vLcYhB7jFdZuAs4gE9oN&network=MAINNET
Body application/json
{
"recipients": [
{
"address": "TExWKszFWYTKZH8LYiovAPKzS3L9MLZ4kw",
"energy": 65000
}
]
}
Parameters
| Parameter | Type | Example |
|---|---|---|
| network optional | string |
MAINNET or TESTNET |
| recipients body | object[] |
[{"address":"TAddr...","energy":65000}] |
Response 200
[
{
"id": 48,
"recipientAddress": "TExWKszFWYTKZH8LYiovAPKzS3L9MLZ4kw",
"rentEnergy": 65000.0,
"sellingPrice": 0.86,
"sellingPriceSymbol": "USDT",
"status": "PROCESS",
"createdAt": "2026-08-26T12:00:00"
}
]
Errors: 409 — insufficient balance; amount out of limits (see info); bad address; more than 10 recipients.
GET /wallet/trx-energy/{orderId} — Order status
Poll a single order. Omit network or pass MAINNET — mainnet; Nile — network=TESTNET.
https://exwell.io/v1/api/wallet/trx-energy/48?key=Kq8WmP2nXrT5vLcYhB7jFdZuAs4gE9oN
Parameters
| Parameter | Type | Example |
|---|---|---|
| orderId path | int |
48 |
| network optional | string |
MAINNET or TESTNET |
Response 200
{
"id": 48,
"recipientAddress": "TExWKszFWYTKZH8LYiovAPKzS3L9MLZ4kw",
"rentEnergy": 65000.0,
"sellingPrice": 0.86,
"sellingPriceSymbol": "USDT",
"status": "SUCCESS",
"createdAt": "2026-08-26T12:00:00"
}
Statuses: PROCESS — delegating, SUCCESS — energy on the address, ERROR — failed.
Errors: 404 or 409 — Order not found.
GET /wallet/trx-energy — Order list
Rental history. Same path as POST — GET method. network=TESTNET — Nile; omit network or MAINNET — mainnet.
https://exwell.io/v1/api/wallet/trx-energy?key=Kq8WmP2nXrT5vLcYhB7jFdZuAs4gE9oN&pageNumber=0&pageSize=10&network=MAINNET
Parameters
| Parameter | Type | Example |
|---|---|---|
| pageNumber optional | int |
0 |
| pageSize optional | int |
10 |
| network optional | string |
MAINNET or TESTNET |
Response 200
{
"content": [
{
"id": 48,
"recipientAddress": "TExWKszFWYTKZH8LYiovAPKzS3L9MLZ4kw",
"rentEnergy": 65000.0,
"sellingPrice": 0.86,
"sellingPriceSymbol": "USDT",
"status": "SUCCESS",
"createdAt": "2026-08-26T12:00:00"
}
],
"totalElements": 1,
"totalPages": 1,
"number": 0,
"size": 10
}
If you have integration questions, we will be happy to help.
© 2022-2026 exwell.io