Skip to main content
POST
Create an order
Creation does not validate intendedAmount. An out-of-range intent is accepted, and one below the minimum returns initialQuote: 0. The minimalAmount and maximalAmount bounds in the response apply to the actual deposit: send an amount inside them, send only the exact deposit token, and fund walletAddress before timeout (about 30 minutes after creation). See Order lifecycle.

Authorizations

x-tenant-api-key
string
header
default:c7eccc0aaed64932a85d35658fa55a4fb2d60cd3d2c529cfd643dc676ee82e82
required

Vane's shared tenant key. Contact support for a dedicated key if you need custom parameters or separate order tracking.

Body

application/json

Order creation payload, which is your swap intent.

depositTokenId
integer
required

Numeric id of the token you will deposit. Ids are chain-specific; look them up with GET /v1/tokens.

settleTokenId
integer
required

Numeric id of the token to receive, on the chain you want to receive it on.

receivingAddress
string
required

Address where the settle tokens will be delivered by the filling solver. Must be valid for the settle token's chain.

intendedAmount
number
required

Intended swap amount. It is not validated against the swap limits: an out-of-range intent is accepted, and a too-small one (0 included) yields initialQuote: 0. The actual deposit must respect the order's minimalAmount and maximalAmount.

intendedIsDeposit
boolean
required

true if intendedAmount is the deposit amount, false if it is the settle amount you want to receive.

Response

Order created. Send the deposit to walletAddress before timeout, within minimalAmount and maximalAmount.

A swap order. Created by POST /v1/orders/create. A solver fills it against the deposit escrowed at walletAddress.

id
integer
required

Internal numeric order id. SSE events do not carry it; their orderId is the uuid.

uuid
string<uuid>
required

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.

status
enum<string>
required

Order lifecycle status.

  • AWAITING_USER_DEPOSIT: waiting for your deposit to the order's walletAddress.
  • 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 and settleAmount is final. Terminal.
  • ERROR: the swap hit an error. Contact support with the order UUID. Terminal.
  • TIMED_OUT: no deposit arrived before timeout. Terminal.
Available options:
AWAITING_USER_DEPOSIT,
AWAITING_USER_DEPOSIT_CONFIRMATIONS,
PROCESSING,
COMPLETED,
ERROR,
TIMED_OUT
timeout
string<date-time>
required

UTC time at which the order expires if no deposit is received (30 minutes after createdAt). Orders cannot expire after a deposit is made.

intendedAmount
number
required

Amount declared at creation. Not validated against minimalAmount and maximalAmount; those bounds bind the actual deposit.

intendedIsDeposit
boolean
required

Whether intendedAmount was expressed in deposit-token units.

initialQuote
number
required

Estimated settle amount computed from intendedAmount at creation. Comes back as 0 when the intent is below the minimum.

depositTokenId
integer
required

Id of the deposit token.

settleTokenId
integer
required

Id of the settle token.

receivingAddress
string
required

Address where the settle tokens are delivered.

depositAmount
number | null
required

Actual amount deposited, once detected. null before any deposit.

depositEstSettleAmount
number | null
required

Estimated settle amount recomputed from the actual depositAmount. null before any deposit.

settleAmount
number | null
required

Amount delivered to receivingAddress. Updates while the order settles and is final once status is COMPLETED. null before settlement starts.

minimalAmount
number
required

Minimum deposit-token amount this order accepts. It binds the actual deposit; creation does not check intendedAmount against it.

maximalAmount
number
required

Maximum deposit-token amount this order accepts. The actual deposit must stay at or below it.

exchange
string
required

Pricing source label carried over from the quote (for example CEX). Settlement still happens through solver intent matching.

senderDepositTx
string | null
required

Transaction hash of your deposit, once detected. null before that.

exchangeWithdrawTx
string | null
required

Transaction hash of the transfer delivering settle tokens to receivingAddress. null until the fill.

Block-explorer link for exchangeWithdrawTx. null until the fill.

tradePath
object[]
required

Order-book legs behind this order's quote. They describe pricing, not how the order settles.

userId
string | null
required

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.

createdAt
string<date-time>
required

UTC creation time.

walletAddress
string
required

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.