Reseller API
API documentation
Use the EagleSwap API to get prices, create swaps, and check their status.
Basic information
Base URL: https://eagleswap.net/api/v1. All requests use HTTPS and return JSON.
Authentication
Send these headers with your requests. Content-Type is required for JSON request bodies.
Request headers
| Name | Type | Required | Description |
|---|---|---|---|
Authorization | string | Yes | Bearer YOUR_API_KEY |
Content-Type | string | Conditional | application/json for POST requests. |
List assets
https://eagleswap.net/api/v1/assetsReturns the available coins and networks. Use the returned asset IDs in quote and swap requests.
Parameters
None.
Response fields (assets[])
| Name | Type | Description |
|---|---|---|
assetId | string | Asset ID. Copy it exactly as returned; do not construct or hard-code IDs. |
networkId | string | Network ID. Catalog information, not a request parameter. |
symbol | string | Coin symbol, such as BTC or USDT. |
decimals | integer | Maximum decimal places for this asset. |
networkName | string | Network name. The same coin can be available on multiple networks. |
memoRequired | boolean | Whether this network can use a memo or tag. Follow the quote requirements. |
memoName | string | Memo or tag label, when available. |
import requests # pip install requests
response = requests.get(
"https://eagleswap.net/api/v1/assets",
headers={"Authorization": "Bearer YOUR_API_KEY"},
timeout=30,
)
response.raise_for_status()
print(response.json()){
"assets": [
{
"assetId": "<btc_asset_id_from_assets>",
"networkId": "<bitcoin_network_id_from_assets>",
"symbol": "BTC",
"decimals": 8,
"networkName": "Bitcoin",
"memoRequired": false
}
]
}Fetch a quote
https://eagleswap.net/api/v1/quotesReturns a price estimate and address requirements. This step is optional and does not create a swap.
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
originAssetId | string | Yes | Asset ID of the coin being sent, from the asset list. |
destinationAssetId | string | Yes | Asset ID of the coin being received, from the asset list. |
amount | decimal string | Yes | Positive amount, e.g. "0.01". Amount sent for float; amount received for fixed. |
swapType | string | No | float (default) or fixed. |
routingMode | string | No | direct (default) or private. Private routing supports float only. |
privateRouteOption | string | No | standard (default) or xmr. Used only with private routing. |
Response fields
| Name | Type | Description |
|---|---|---|
quoteId | string | Preview ID. Do not send it when creating a swap. |
swapType | string | float or fixed. |
input | object | Input assetId and amount. |
output | object | Output assetId and estimatedAmount. |
expiresAt | datetime | Quote expiry. Previews last at most 30 seconds. |
requirements | object | recipientMemoRequired, refundAddressRequired, refundAddressSupported, and refundMemoRequired. |
limits | object | When available: minimumInputAmount and maximumInputAmount, in input coin units. |
Creation checks the price again. Always use the payment instructions from the created swap.
import requests # pip install requests
response = requests.get(
"https://eagleswap.net/api/v1/quotes",
headers={"Authorization": "Bearer YOUR_API_KEY"},
params={
"originAssetId": "<btc_asset_id_from_assets>",
"destinationAssetId": "<eth_asset_id_from_assets>",
"swapType": "float",
"amount": "0.01"
},
timeout=30,
)
response.raise_for_status()
print(response.json()){
"quoteId": "<quote_id_from_quotes>",
"swapType": "float",
"input": {
"assetId": "<btc_asset_id_from_assets>",
"amount": "0.01"
},
"output": {
"assetId": "<eth_asset_id_from_assets>",
"estimatedAmount": "0.2481"
},
"expiresAt": "2026-08-22T12:00:30.000Z",
"requirements": {
"recipientMemoRequired": false,
"refundAddressRequired": true,
"refundAddressSupported": true,
"refundMemoRequired": false
}
}Fixed amount example
import requests # pip install requests
response = requests.get(
"https://eagleswap.net/api/v1/quotes",
headers={"Authorization": "Bearer YOUR_API_KEY"},
params={
"originAssetId": "<btc_asset_id_from_assets>",
"destinationAssetId": "<eth_asset_id_from_assets>",
"swapType": "fixed",
"amount": "0.25"
},
timeout=30,
)
response.raise_for_status()
print(response.json()){
"quoteId": "<fixed_quote_id_from_quotes>",
"swapType": "fixed",
"input": {
"assetId": "<btc_asset_id_from_assets>",
"amount": "0.0112"
},
"output": {
"assetId": "<eth_asset_id_from_assets>",
"estimatedAmount": "0.25"
},
"expiresAt": "2026-08-22T12:00:30.000Z",
"requirements": {
"recipientMemoRequired": false,
"refundAddressRequired": true,
"refundAddressSupported": true,
"refundMemoRequired": false
}
}Create a swap
https://eagleswap.net/api/v1/swapsCreates a swap from trade details and addresses. A quote is not required.
Body parameters (JSON)
| Name | Type | Required | Description |
|---|---|---|---|
originAssetId | string | Yes | Asset ID of the coin being sent, from the asset list. |
destinationAssetId | string | Yes | Asset ID of the coin being received, from the asset list. |
amount | decimal string | Yes | Positive amount, e.g. "0.01". Amount sent for float; amount received for fixed. |
swapType | string | No | float (default) or fixed. |
routingMode | string | No | direct (default) or private. Private routing supports float only. |
privateRouteOption | string | No | standard (default) or xmr. Used only with private routing. |
recipientAddress | string | Yes | Address that receives the output coin. |
refundAddress | string | Conditional | Refund address on the input network. The quote requirements show whether it is required or supported. Omit it if unsupported. |
recipientMemo | string | No | Recipient memo or tag. If included in the address itself, send the complete address instead. |
refundMemo | string | Conditional | Memo or tag when the refund network requires it. Send only with a refund address. |
externalOrderId | string | No | Your order reference, unique within your partner account. Reusing a saved reference returns a conflict. A failed request without a saved order does not reserve the reference. |
201 returns the saved swap and payment instructions. Any other response is an error: show its message and stop waiting. Creation has no pending response or recovery polling.
A manual retry after a lost response may create another unpaid provider order. Only show payment instructions from a successful response.
import requests # pip install requests
response = requests.post(
"https://eagleswap.net/api/v1/swaps",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"originAssetId": "<btc_asset_id_from_assets>",
"destinationAssetId": "<eth_asset_id_from_assets>",
"amount": "0.01",
"swapType": "float",
"recipientAddress": "<complete_recipient_address>",
"refundAddress": "<complete_refund_address>",
"externalOrderId": "order-9481"
},
timeout=30,
)
response.raise_for_status()
print(response.json()){
"orderId": "7k2m48p3x6",
"externalOrderId": "order-9481",
"swapType": "float",
"status": "AWAITING_PAYMENT",
"input": {
"assetId": "<btc_asset_id_from_assets>",
"amount": "0.01"
},
"output": {
"assetId": "<eth_asset_id_from_assets>",
"estimatedAmount": "0.2481"
},
"payment": {
"assetId": "<btc_asset_id_from_assets>",
"amount": "0.01",
"address": "<deposit_address>",
"expiresAt": "2026-08-22T12:30:00.000Z"
},
"createdAt": "2026-08-22T12:00:12.000Z",
"updatedAt": "2026-08-22T12:00:12.000Z"
}Check a swap
https://eagleswap.net/api/v1/swaps/{orderId}Returns the swap and its current status. Poll every 10–15 seconds using the API key that created it.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
orderId | string | Yes | Order ID returned when the swap was created. |
Response fields are the same as Create a swap, plus transactions.inputTxId and transactions.outputTxId when known. output.estimatedAmount may temporarily be null while recalculating; do not show the previous estimate as final.
Swap statuses
| Status | Description |
|---|---|
AWAITING_PAYMENT | Waiting for the customer deposit. |
PAYMENT_RECEIVED | Deposit detected on-chain. |
INCOMPLETE_DEPOSIT | Deposit is below the required amount. Send the rest to the same address. |
PROCESSING | The swap is being executed. |
COMPLETED | Output transaction sent. Final status. |
REFUNDED | Input returned to the refund address. Final status. |
FAILED | The swap could not complete. Final status. |
EXPIRED | Payment window closed. Final status. |
If the latest provider status cannot be checked, the response shows the last known status; keep polling. Stop polling at a final status. Missing orders and orders owned by another API key both return 404 NOT_FOUND.
import requests # pip install requests
response = requests.get(
"https://eagleswap.net/api/v1/swaps/7k2m48p3x6",
headers={"Authorization": "Bearer YOUR_API_KEY"},
timeout=30,
)
response.raise_for_status()
print(response.json()){
"orderId": "7k2m48p3x6",
"externalOrderId": "order-9481",
"swapType": "float",
"status": "PAYMENT_RECEIVED",
"input": {
"assetId": "<btc_asset_id_from_assets>",
"amount": "0.01"
},
"output": {
"assetId": "<eth_asset_id_from_assets>",
"estimatedAmount": null
},
"payment": {
"assetId": "<btc_asset_id_from_assets>",
"amount": "0.01",
"address": "<deposit_address>",
"expiresAt": "2026-08-22T12:30:00.000Z"
},
"transactions": {
"inputTxId": "<input_transaction_id>"
},
"createdAt": "2026-08-22T12:00:12.000Z",
"updatedAt": "2026-08-22T12:04:00.000Z"
}Errors
Errors include a code, message, and request ID. Save the request ID when contacting support.
| HTTP | Code | Description |
|---|---|---|
| 400 | INVALID_REQUEST | Invalid request fields or identifier format. |
| 401 | AUTHENTICATION_REQUIRED | The bearer key is missing. |
| 401 | INVALID_API_KEY | The bearer key is invalid. |
| 403 | ACCOUNT_SUSPENDED | The reseller account is unavailable. |
| 404 | API_DISABLED | The reseller API is unavailable. |
| 404 | NOT_FOUND | No swap found for this API key. |
| 409 | ORDER_CONFLICT | The external order ID was already used. |
| 422 | INVALID_REQUEST | The amount is invalid, out of range, or has too many decimal places. |
| 422 | INVALID_ASSET | The asset or pair is unsupported. |
| 422 | INVALID_ADDRESS | A recipient or refund address is invalid. |
| 422 | INVALID_MEMO | A memo is missing or invalid. |
| 429 | RATE_LIMITED | Wait for the Retry-After delay before trying again. |
| 500 / 503 | INTERNAL_ERROR | An internal service failed or is unavailable. |
| 503 | QUOTE_UNAVAILABLE | A quote is temporarily unavailable. |
| 503 | SWAP_UNAVAILABLE | Swap creation is temporarily unavailable. |
| 503 | STATUS_UNAVAILABLE | The latest status is temporarily unavailable. |
{
"error": {
"code": "INVALID_REQUEST",
"message": "Invalid swap request",
"requestId": "request_4af127b83c9d46e5a021f79863bc80db"
}
}Rate limits
Limits apply per API key, per minute.
| Endpoint | Requests per minute |
|---|---|
GET /assets | 60 |
GET /quotes | 60 |
POST /swaps | 10 |
GET /swaps/{orderId} | 60 |
Shared service limits can also return 429. Wait for the Retry-After delay, in seconds, before retrying.
The maximum transaction value is $200,000 USD of input value. Requests above this limit return 422 INVALID_REQUEST.