curl --request GET \
--url https://api.vane.xyz/api/v1/orders/{uuid}const options = {method: 'GET'};
fetch('https://api.vane.xyz/api/v1/orders/{uuid}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.vane.xyz/api/v1/orders/{uuid}"
response = requests.get(url)
print(response.text){
"id": 74,
"uuid": "7f9c2e4a-1b3d-4c5e-8f6a-2d9b0c1e3f5a",
"status": "AWAITING_USER_DEPOSIT",
"timeout": "2026-01-15T14:30:00.000Z",
"intendedAmount": 0.005,
"intendedIsDeposit": true,
"initialQuote": 316.23212,
"depositTokenId": 158,
"settleTokenId": 231,
"receivingAddress": "0x1234567890abcdef1234567890abcdef12345678",
"depositAmount": null,
"depositEstSettleAmount": null,
"settleAmount": null,
"minimalAmount": 0.00020766,
"maximalAmount": 0.14162023,
"exchange": "CEX",
"senderDepositTx": null,
"exchangeWithdrawTx": null,
"exchangeWithdrawTxLink": null,
"tradePath": [
{
"symbol": "BTCUSDT",
"side": "SELL",
"inputToken": "BTC",
"outputToken": "USDT"
}
],
"userId": null,
"createdAt": "2026-01-15T14:00:00.000Z",
"walletAddress": "bc1p...",
"depositToken": {
"id": 158,
"name": "Bitcoin",
"symbol": "BTC",
"address": "native",
"decimals": 8,
"blockchainId": 1,
"isBaseToken": true,
"isStablecoin": false,
"active": true,
"blockchain": {
"id": 1,
"name": "Bitcoin",
"network": "BTC",
"neededConfirmations": 2,
"depositsActive": true
}
},
"settleToken": {
"id": 231,
"name": "TetherUS",
"symbol": "USDT",
"address": "0xdac17f958d2ee523a2206206994597c13d831ec7",
"decimals": 6,
"blockchainId": 2,
"isBaseToken": false,
"isStablecoin": true,
"active": true,
"blockchain": {
"id": 2,
"name": "Ethereum (ERC20)",
"network": "ETH",
"neededConfirmations": 12,
"depositsActive": true
}
}
}{
"statusCode": 500,
"message": "Internal Server Error"
}Get order by UUID
Returns the current state of an order: status, amounts, transaction hashes, and the expanded depositToken and settleToken objects. No authentication required. Anyone who has the UUID can read the order, so store it securely.
Poll this endpoint to track an order, or pair it with the SSE status stream. Fetch current state here first and subscribe after, because the stream sends no initial snapshot.
An unknown or malformed UUID returns HTTP 500 with {"statusCode": 500, "message": "Internal Server Error"} and no error field. There is no 404 for missing orders.
curl --request GET \
--url https://api.vane.xyz/api/v1/orders/{uuid}const options = {method: 'GET'};
fetch('https://api.vane.xyz/api/v1/orders/{uuid}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.vane.xyz/api/v1/orders/{uuid}"
response = requests.get(url)
print(response.text){
"id": 74,
"uuid": "7f9c2e4a-1b3d-4c5e-8f6a-2d9b0c1e3f5a",
"status": "AWAITING_USER_DEPOSIT",
"timeout": "2026-01-15T14:30:00.000Z",
"intendedAmount": 0.005,
"intendedIsDeposit": true,
"initialQuote": 316.23212,
"depositTokenId": 158,
"settleTokenId": 231,
"receivingAddress": "0x1234567890abcdef1234567890abcdef12345678",
"depositAmount": null,
"depositEstSettleAmount": null,
"settleAmount": null,
"minimalAmount": 0.00020766,
"maximalAmount": 0.14162023,
"exchange": "CEX",
"senderDepositTx": null,
"exchangeWithdrawTx": null,
"exchangeWithdrawTxLink": null,
"tradePath": [
{
"symbol": "BTCUSDT",
"side": "SELL",
"inputToken": "BTC",
"outputToken": "USDT"
}
],
"userId": null,
"createdAt": "2026-01-15T14:00:00.000Z",
"walletAddress": "bc1p...",
"depositToken": {
"id": 158,
"name": "Bitcoin",
"symbol": "BTC",
"address": "native",
"decimals": 8,
"blockchainId": 1,
"isBaseToken": true,
"isStablecoin": false,
"active": true,
"blockchain": {
"id": 1,
"name": "Bitcoin",
"network": "BTC",
"neededConfirmations": 2,
"depositsActive": true
}
},
"settleToken": {
"id": 231,
"name": "TetherUS",
"symbol": "USDT",
"address": "0xdac17f958d2ee523a2206206994597c13d831ec7",
"decimals": 6,
"blockchainId": 2,
"isBaseToken": false,
"isStablecoin": true,
"active": true,
"blockchain": {
"id": 2,
"name": "Ethereum (ERC20)",
"network": "ETH",
"neededConfirmations": 12,
"depositsActive": true
}
}
}{
"statusCode": 500,
"message": "Internal Server Error"
}500, not 404. The full status table lives in Order lifecycle.Path Parameters
Order UUID returned by POST /v1/orders/create.
Response
The order, with expanded deposit and settle token objects.
An order with the deposit and settle token objects expanded.
Internal numeric order id. SSE events do not carry it; their orderId is the uuid.
Public order identifier and a bearer capability: anyone holding it can read the order. Store it server-side and keep it out of public URLs. For accountless orders it is your only handle. SSE events echo it as orderId.
Order lifecycle status.
AWAITING_USER_DEPOSIT: waiting for your deposit to the order'swalletAddress.AWAITING_USER_DEPOSIT_CONFIRMATIONS: deposit detected, waiting for on-chain confirmations (blockchain.neededConfirmations).PROCESSING: transitional state between deposit confirmation and completion. Treat it as in flight.COMPLETED: fill delivered andsettleAmountis final. Terminal.ERROR: the swap hit an error. Contact support with the order UUID. Terminal.TIMED_OUT: no deposit arrived beforetimeout. Terminal.
AWAITING_USER_DEPOSIT, AWAITING_USER_DEPOSIT_CONFIRMATIONS, PROCESSING, COMPLETED, ERROR, TIMED_OUT UTC time at which the order expires if no deposit is received (30 minutes after createdAt). Orders cannot expire after a deposit is made.
Amount declared at creation. Not validated against minimalAmount and maximalAmount; those bounds bind the actual deposit.
Whether intendedAmount was expressed in deposit-token units.
Estimated settle amount computed from intendedAmount at creation. Comes back as 0 when the intent is below the minimum.
Id of the deposit token.
Id of the settle token.
Address where the settle tokens are delivered.
Actual amount deposited, once detected. null before any deposit.
Estimated settle amount recomputed from the actual depositAmount. null before any deposit.
Amount delivered to receivingAddress. Updates while the order settles and is final once status is COMPLETED. null before settlement starts.
Minimum deposit-token amount this order accepts. It binds the actual deposit; creation does not check intendedAmount against it.
Maximum deposit-token amount this order accepts. The actual deposit must stay at or below it.
Pricing source label carried over from the quote (for example CEX). Settlement still happens through solver intent matching.
Transaction hash of your deposit, once detected. null before that.
Transaction hash of the transfer delivering settle tokens to receivingAddress. null until the fill.
Block-explorer link for exchangeWithdrawTx. null until the fill.
Order-book legs behind this order's quote. They describe pricing, not how the order settles.
Show child attributes
Show child attributes
User id for orders created with a JWT access token, a UUID string matching the id from GET /auth/me. null for accountless (tenant-key) orders.
UTC creation time.
The deposit address: a per-order escrow address on the deposit token's chain (a taproot bc1p... address for BTC). Send only the exact deposit token here, within the min/max bounds, before timeout.
A token in the catalog. The same asset has a distinct numeric id per chain.
Show child attributes
Show child attributes
A token in the catalog. The same asset has a distinct numeric id per chain.
Show child attributes
Show child attributes

