Skip to content

API ReferenceAPI reference

API Reference

API reference

Base URL: https://<host>/v1. Machine-readable: openapi.yaml (served at GET /v1/openapi.yaml). Conventions (amounts, native HYPE, errors, request ids): API at a glance. Auth and limits: Access.


Swap

GET /quote

Best route, exact quote, and a simulated transaction for an exact-input swap.

Query parameters

NameTypeRequiredDefaultDescription
intoken id✅ERC20 address, or HYPE for native
outtoken id✅Must differ from in
amountuint string✅Input in base units, > 0
recipientaddress✅Receives the output
senderaddressrecipientSigns the tx; used for balance, allowance and gas simulation
slippageBpsinteger500–5000. minOut = amountOut × (10000 − slippageBps) / 10000
permit2"true"ERC20 input: use Permit2 instead of an approve to the Executor. Flow
signaturehex (65 bytes)Permit2 signature (2nd call)
permit2Nonceuint stringrandomNonce of the signed permit (2nd call)
permit2Deadlineuint stringtx deadlineDeadline of the signed permit (2nd call)

Response 200

FieldTypeDescription
amountInuint stringEcho of amount
amountOutuint stringExpected output to the recipient, net of the router fee and measured token taxes
minOutuint stringFloor written into the tx
feeBpsintegerRouter fee (0 on the launchpad path)
priceImpactBpsinteger | nullOutput vs. the no-impact spot output of the same route
taxBpsintegerMeasured sell tax of in + buy tax of out, already deducted from amountOut
routerAmountOutuint stringOutput before token taxes
venue"launchpad"Only present when the bonding curve beat the aggregator
warningsstring[]Token warnings prefixed in: / out:, launchpad notice
gas.estimateuint stringGas units of the route (model)
gas.costInTokenOutuint stringThat gas, priced in tokenOut (used to rank routes)
splits[]arrayLegs of the route
splits[].amountInuint stringPart of amountIn sent down this leg
splits[].route[]arrayHops of the leg, in order
…route[].protocolstringv2, v3, v4, wrap, launchpad solidly
…route[].pooladdress | bytes32Pool address; for v4, the 32-byte pool id
…route[].factoryaddress | nullFactory, or the PoolManager for v4 (null for wrap)
…route[].tokenIn / tokenOutaddressTokens of this hop (WHYPE stands for native)
…route[].feeintegerLP fee, hundredths of a bp (3000 = 0.3%)
wrappedNativeaddress | nullWHYPE used for native in/out; null when neither side is native
txobject{ from, to, data, value, chainId }; adds warning when the simulation failed
approvalobject | null{ to, data } approve to send first
permit2object | null{ typedData } to sign (Permit2 path)
simulationobject{ ok, gas? , error? }
blockuint stringIndexer block the quote is based on

Errors: 400 bad input · 404 no route · 422 honeypot output · 429 · 503 backfilling / not configured.

Example

curl "$API/quote?in=HYPE&out=0x7D29d8047B905000459c0E80c34a26CeedcB47b2&amount=1000000000000000000&recipient=0xYou&slippageBps=50"

Tokens and prices

GET /price

NameTypeRequiredDescription
idsstring✅Comma-separated token ids, max 100
{ "quote": "USDC", "data": { "HYPE": 24.81, "0x7D29…": 1, "0xdead…": null } }

Spot price of one whole token in USDC (net of LP fees, no size impact), computed in memory. null = no route to USDC.

GET /tokens

NameTypeDefaultDescription
qstringSubstring of symbol or name, or an exact address
limitinteger50Max 500
strict"true"Verified tokens only

Returns { tokens: Token[] }: native HYPE first (when it matches q), then verified tokens, then by live pool count. Only tokens with at least one live pool are listed.

Token

FieldTypeDescription
addressstringChecksummed address, or HYPE
symbol, namestringFrom the contract
decimalsinteger
poolsintegerLive pools containing it
verifiedbooleanOn the curated list
logoURIstring | nullVerified tokens only
tagsstring[]Verified tokens only
warningsstring[]See Token safety
checkobject | nullProbe result: status (ok/taxed/honeypot/unknown), buyTaxBps, sellTaxBps, transferTaxBps, transferBlocked, checkedAt

GET /tokens/{address}

One token, as above plus price (USDC). Runs the probe now if this token was never checked (the call can then take a second or two). 404 if the token isn't in any indexed pool.

WS /ws/prices

Send {"subscribe": [ids…]} (max 100). Receive {"prices": {id: price}} at once, then only changed prices after each block. See Live prices.


Orders

All three return 503 if the server has no ORDERBOOK_ADDRESS.

GET /orders

NameTypeDescription
owneraddressOptional filter
{ "orders": [ { "id": "3", "owner": "0x…", "tokenIn": "HYPE", "tokenOut": "0x7D29…", "remaining": "500000000000000000",
                "perSlice": "250000000000000000", "minOutPerSlice": "5600000", "interval": "86400",
                "nextFillAt": "1762500000", "expiry": "1762900000" } ] }

GET /orders/create

NameTypeRequiredDefaultDescription
in, outtoken id✅
amountuint string✅Total input
owneraddress✅Signs, receives output and refunds
minOutuint string✅> 0, for the whole amount; pro rata per slice
slicesinteger11–1000, ≤ amount
intervalinteger (s)if slices > 10
expiresIninteger (s)604800

Response: { order: { perSlice, minOutPerSlice, slices, interval, expiry }, tx, approval, simulation }. The approval spender is the OrderBook.

GET /orders/cancel

NameTypeRequired
iduint string✅

Response: { tx: { to, data, value: "0", chainId } }. The owner can send it any time; anyone after expiry.


Account

GET /portfolio

owner (address, required). Returns { owner, totalUsd, tokens: [{ address, symbol, name, decimals, balance, price, usd }] }. Non-zero balances only. Details.

GET /history

owner (address, required), limit (default 50, max 200). Returns { owner, items: [...] }, newest first; item type is Swapped, OrderCreated, OrderFilled or OrderCancelled. Details.


System

GET /health

Not rate limited.

{ "ready": true, "lastBlock": "24263641", "pools": { "v3": 2263, "v2": 1456, "v4": 767 },
  "executor": "0x…", "orderBook": "0x…", "keeper": true }

ready turns true once the initial backfill or snapshot replay is done; /quote returns 503 until then.

GET /config

{ "name": "Elysium Testnet", "chainId": 99801, "rpcUrl": "https://testnet-rpc.elysium.kinetiq.xyz", "explorer": "https://testnet.elysium.kinetiq.xyz" }

The public RPC from the network file (never the server's private RPC_URL). Used by wallets to add or switch the chain.

GET /openapi.yaml

The OpenAPI 3.1 spec of this API.


Changelog

VersionChange
v1Versioned paths (/v1/...), partner API keys, x-request-id, requestId in errors, OpenAPI spec
lane.markets · Make the most of every move.