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

NameTypeRequiredDescription
AuthorizationstringYesBearer YOUR_API_KEY
Content-TypestringConditionalapplication/json for POST requests.

List assets

GEThttps://eagleswap.net/api/v1/assets

Returns the available coins and networks. Use the returned asset IDs in quote and swap requests.

Parameters

None.

Response fields (assets[])

NameTypeDescription
assetIdstringAsset ID. Copy it exactly as returned; do not construct or hard-code IDs.
networkIdstringNetwork ID. Catalog information, not a request parameter.
symbolstringCoin symbol, such as BTC or USDT.
decimalsintegerMaximum decimal places for this asset.
networkNamestringNetwork name. The same coin can be available on multiple networks.
memoRequiredbooleanWhether this network can use a memo or tag. Follow the quote requirements.
memoNamestringMemo 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())
Example response · 200
{
  "assets": [
    {
      "assetId": "<btc_asset_id_from_assets>",
      "networkId": "<bitcoin_network_id_from_assets>",
      "symbol": "BTC",
      "decimals": 8,
      "networkName": "Bitcoin",
      "memoRequired": false
    }
  ]
}

Fetch a quote

GEThttps://eagleswap.net/api/v1/quotes

Returns a price estimate and address requirements. This step is optional and does not create a swap.

Query parameters

NameTypeRequiredDescription
originAssetIdstringYesAsset ID of the coin being sent, from the asset list.
destinationAssetIdstringYesAsset ID of the coin being received, from the asset list.
amountdecimal stringYesPositive amount, e.g. "0.01". Amount sent for float; amount received for fixed.
swapTypestringNofloat (default) or fixed.
routingModestringNodirect (default) or private. Private routing supports float only.
privateRouteOptionstringNostandard (default) or xmr. Used only with private routing.

Response fields

NameTypeDescription
quoteIdstringPreview ID. Do not send it when creating a swap.
swapTypestringfloat or fixed.
inputobjectInput assetId and amount.
outputobjectOutput assetId and estimatedAmount.
expiresAtdatetimeQuote expiry. Previews last at most 30 seconds.
requirementsobjectrecipientMemoRequired, refundAddressRequired, refundAddressSupported, and refundMemoRequired.
limitsobjectWhen 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())
Example response · 200
{
  "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())
Example response · 200
{
  "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

POSThttps://eagleswap.net/api/v1/swaps

Creates a swap from trade details and addresses. A quote is not required.

Body parameters (JSON)

NameTypeRequiredDescription
originAssetIdstringYesAsset ID of the coin being sent, from the asset list.
destinationAssetIdstringYesAsset ID of the coin being received, from the asset list.
amountdecimal stringYesPositive amount, e.g. "0.01". Amount sent for float; amount received for fixed.
swapTypestringNofloat (default) or fixed.
routingModestringNodirect (default) or private. Private routing supports float only.
privateRouteOptionstringNostandard (default) or xmr. Used only with private routing.
recipientAddressstringYesAddress that receives the output coin.
refundAddressstringConditionalRefund address on the input network. The quote requirements show whether it is required or supported. Omit it if unsupported.
recipientMemostringNoRecipient memo or tag. If included in the address itself, send the complete address instead.
refundMemostringConditionalMemo or tag when the refund network requires it. Send only with a refund address.
externalOrderIdstringNoYour 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())
Example response · 201
{
  "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

GEThttps://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

NameTypeRequiredDescription
orderIdstringYesOrder 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

StatusDescription
AWAITING_PAYMENTWaiting for the customer deposit.
PAYMENT_RECEIVEDDeposit detected on-chain.
INCOMPLETE_DEPOSITDeposit is below the required amount. Send the rest to the same address.
PROCESSINGThe swap is being executed.
COMPLETEDOutput transaction sent. Final status.
REFUNDEDInput returned to the refund address. Final status.
FAILEDThe swap could not complete. Final status.
EXPIREDPayment 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())
Example response · 200
{
  "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.

HTTPCodeDescription
400INVALID_REQUESTInvalid request fields or identifier format.
401AUTHENTICATION_REQUIREDThe bearer key is missing.
401INVALID_API_KEYThe bearer key is invalid.
403ACCOUNT_SUSPENDEDThe reseller account is unavailable.
404API_DISABLEDThe reseller API is unavailable.
404NOT_FOUNDNo swap found for this API key.
409ORDER_CONFLICTThe external order ID was already used.
422INVALID_REQUESTThe amount is invalid, out of range, or has too many decimal places.
422INVALID_ASSETThe asset or pair is unsupported.
422INVALID_ADDRESSA recipient or refund address is invalid.
422INVALID_MEMOA memo is missing or invalid.
429RATE_LIMITEDWait for the Retry-After delay before trying again.
500 / 503INTERNAL_ERRORAn internal service failed or is unavailable.
503QUOTE_UNAVAILABLEA quote is temporarily unavailable.
503SWAP_UNAVAILABLESwap creation is temporarily unavailable.
503STATUS_UNAVAILABLEThe latest status is temporarily unavailable.
Example error response
{
  "error": {
    "code": "INVALID_REQUEST",
    "message": "Invalid swap request",
    "requestId": "request_4af127b83c9d46e5a021f79863bc80db"
  }
}

Rate limits

Limits apply per API key, per minute.

EndpointRequests per minute
GET /assets60
GET /quotes60
POST /swaps10
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.