Developers8 min read

Quotes and liquidity API

Request and validate launch, proportional trade, liquidity funding, and secondary-market quotes.

The quote service reads the configured contracts and venue to produce transaction limits. It does not execute swaps or sign transactions. Each route below is a JSON POST unless stated otherwise; see the HTTP reference for transport and errors.

All 0x111…, 0x222…, and 0x333… addresses in these examples are synthetic placeholders, not deployed assets or contract recommendations. Replace them with verified addresses on the configured network. Responses depend on actual contract state and liquidity.

Shared quote rules

Raw quantities use decimal strings. quotedBlock and observedBlock are decimal block numbers. quotedAt and expiresAt are Unix milliseconds; liquidity deadline is a decimal string of Unix seconds equal to floor(expiresAt / 1000).

Quotes expire two minutes after quotedAt. The current implementation uses 50 basis points (0.5%) slippage and a maximum 500 basis points (5%) impact against fee-adjusted pool spot estimates. These are distinct constraints. Routing checks pool provenance and searches a bounded set of direct/two-hop V3 routes at fees 100, 500, 3000, and 10000; it does not promise globally optimal execution.

The shared quote read context allows at most 450 upstream calls, six concurrent reads, and a 14-second time budget. At most two native/liquidity read operations run concurrently per upstream transport. Coalesce duplicate previews in the client and back off on capacity errors rather than launching parallel retries.

Launch and proportional-trade snapshots use head minus 20 blocks on Robinhood networks. Liquidity queries prefer the current head and permit bounded fallback to head minus 5 or 20 only for a state-height RPC error. See freshness before treating a quote as current enough to submit.

ETH-route availability

POST /v1/launch/availability requires nativeLaunch configuration. Supply 1–10 distinct, nonzero token addresses:

{
  "tokens": [
    "0x1111111111111111111111111111111111111111",
    "0x2222222222222222222222222222222222222222"
  ]
}

Illustrative result shape:

{
  "chainId": 46630,
  "observedBlock": "123456",
  "tokens": [
    {"token":"0x1111111111111111111111111111111111111111","available":true,"reason":"available"},
    {"token":"0x2222222222222222222222222222222222222222","available":false,"reason":"no_active_route"}
  ]
}

The response preserves input order. The configured wrapped-native token passes without a swap. RPC failures fail the request rather than turning into available: false. An available structural route can still fail at the final amount, on token behavior, or because multiple basket legs would share a pool.

ETH-funded creation

POST /v1/launch/quote accepts exactly tokens, weightsBps, and amountIn:

{
  "tokens": [
    "0x1111111111111111111111111111111111111111",
    "0x2222222222222222222222222222222222222222"
  ],
  "weightsBps": [6000, 4000],
  "amountIn": "10000000000000000"
}

This example allocates 0.01 ETH at 60/40 spend weights. Supply 2–10 unique tokens, one positive integer weight per token, and an exact total of 10,000. The first allocations round down; the final token receives the remaining wei. Each allocation must be positive, and each supported output must meet the 1,000 raw-unit minimum.

Response fields Meaning
chainId, factory, router Chain, native launch factory, and DEX router binding
amountIn, weightsBps, tokens Echoed funding and ordered allocation inputs
paths Forward V3 byte paths, one per token; wrapped-native leg uses 0x
amountsOut, minimumAmounts Ordered expected and minimum raw token outputs
priceImpactBps Ordered per-leg impact
quotedBlock, quotedAt, expiresAt, slippageBps Snapshot and validity

Allocation weights describe ETH spending at launch. They are not oracle-backed value weights. The response does not include a signed transaction or wallet address; the frontend binds it to the active account and draft before execution.

Proportional ETH buy and sell

POST /v1/trade/quote requires nativeTrading configuration and accepts exactly:

{
  "basket": "0x1111111111111111111111111111111111111111",
  "side": "buy",
  "amount": "10000000000000000"
}

For buy, amount is an ETH budget in wei. For sell, it is raw shares to burn. Do not add account to this HTTP body: the route rejects extra fields. The frontend request type carries account separately and binds it when validating the response.

Responses include every nativeTrading setting (chainId, router, registry, nativeRegistry, dexRouter, dexFactory, wrappedNative, quoter, intermediates) plus:

Fields Meaning
basket, side, amount Bound request
tokens, paths, componentAmounts Ordered constituents, forward routes, exact proportional quantities
grossShares, feeShares, netShares Backed issuance fee split; sell preview carries its corresponding zero-fee split
estimatedAmount ETH cost for buy; ETH proceeds for sell
limitAmount Maximum submitted ETH for buy; minimum ETH output for sell
quotedBlock, quotedAt, expiresAt, slippageBps, priceImpactBps Snapshot, expiry, and per-leg execution bounds

For buys, the service verifies previewMint against active reserves and outstanding supply, then fits a bounded share quantity to the ETH budget. limitAmount is the estimated cost plus 0.5%, rounded up, and must fit within amount. Unsubmitted budget stays in the wallet; the router refunds unused submitted ETH. Gas is additional.

For sells, quantities match previewRedeem rounding and limitAmount is estimated proceeds less 0.5%, rounded down. Individual zero-output components use empty routes; aggregate output must remain positive. Trades require supported registered backing, executable constituent routes, and no shared pools across nonzero legs.

Pool discovery

GET /v1/liquidity/pools?basket=<address> queries the configured factory directly rather than waiting for the basket index or token directory.

A configured response contains enabled, ready, chainId, basket, settings, quotedBlock, quoteTokens, and pools. Quote-token metadata includes address, symbol, and decimals. Each pool entry contains:

address (nullable), basket, quoteToken, fee, token0, token1,
status, executable, sqrtPriceX96, liquidity, sharesBalance, quoteBalance

status is missing, uninitialized, unfunded, or active. executable reports whether small bounded buy/sell probes passed; it is not a promise that any trade amount will succeed. The pool list can include missing fee-tier/token combinations.

Check an extra pool-funding budget

POST /v1/liquidity/funding/quote needs no existing basket or allowance:

{
  "quoteToken": "0x2222222222222222222222222222222222222222",
  "amountIn": "10000000000000000"
}

The token must appear in liquidity.quoteTokens. A wrapped-native quote is exact wrapping with path: "0x"; another configured quote token needs an executable ETH conversion route.

The response contains all liquidity settings, quoteToken, quoteTokenMetadata, amountIn, expectedOut, minOut, path, scalar priceImpactBps, quotedBlock, quotedAt, expiresAt, deadline, and slippageBps. It checks present feasibility. After creation, obtain a fresh full liquidity quote.

Add full-range liquidity

POST /v1/liquidity/quote combines existing caller-owned basket shares and an ETH budget:

{
  "basket": "0x1111111111111111111111111111111111111111",
  "account": "0x3333333333333333333333333333333333333333",
  "shares": "100000000000000000",
  "amountIn": "10000000000000000",
  "quoteToken": "0x2222222222222222222222222222222222222222",
  "fee": 3000
}

Account, shares, funding amount, supported quote token, and fee tier are required. The service checks wallet balances and registered basket backing, including balances covering active reserves plus pending claims. It does not submit an approval.

The response includes all liquidity settings and the following groups:

Fields Meaning
basket, account, receiver, quoteToken, fee, amountIn Request/receiver bindings
sharesDesired, sharesUsed, sharesMin, sharesRefund Share-side funding and limits
quoteDesired, quoteUsed, quoteMin, quoteRefund Quote-token funding and limits
minQuoteOut, quotePath ETH conversion bound and route
minLiquidity, expectedLiquidity LP liquidity bounds
sqrtPriceX96, minSqrtPriceX96, maxSqrtPriceX96 Initial/current price and permitted interval
pool, poolExists, token0, token1 Pool identity; address can be null before creation
tickLower, tickUpper, tickSpacing Full-range position parameters
reference kind: "underlying-redemption", shares, ethValue, quoteValue, and explanatory meaning
Quote timestamps, deadline, slippage, scalar priceImpactBps Freshness and conversion execution limits

The price reference estimates redemption proceeds from actual backing and pre-funding pool prices. Existing pool prices more than 5% away are rejected. This is not an external oracle or guaranteed NAV; funding itself can move the reference. The helper sends the LP NFT to the receiver. Unused wrapped native is refunded as ETH; another unused quote token remains that token.

Trade existing shares through a pool

POST /v1/liquidity/trade/quote accepts { basket, side, amount, account? }. Buy amounts are raw ETH; sell amounts are existing basket shares. An optional account adds balance checks and response account/receiver bindings. The frontend requires an account before execution.

Responses include all liquidity settings, basket, side, optional account and receiver, amountIn, expectedOut, minOut, path, pool, quoteToken, fee, timestamps, deadline, slippage, and scalar priceImpactBps. Output is shares for a buy or ETH for a sell. Supported routes are direct wrapped-native/share swaps or two-hop routes through a configured quote token.

ERC-20 settlement

POST /v1/liquidity/token-trade/quote accepts:

{
  "basket": "0x1111111111111111111111111111111111111111",
  "side": "buy",
  "amount": "1000000",
  "settlementToken": "0x2222222222222222222222222222222222222222",
  "account": "0x3333333333333333333333333333333333333333"
}

account is optional for quoting. A buy amount uses the settlement token’s raw units; a sell amount uses raw basket shares. Amounts must be positive and below 2^255. The settlement token must be a configured non-wrapped quote token, and router02 must be true.

The response has the ETH pool-trade fields plus executor: "dex-router", settlementToken, and settlementTokenMetadata. It uses direct settlement-token/share pools or two-hop routes through wrapped native. The service verifies a deadline-enforcing Router02 multicall at the quote block.

Execution approves the actual input token to the DEX router and sends zero ETH value for the swap. ETH is still required for gas. The ETH liquidity helper is not the spender for this flow.

Validate before asking for a wallet transaction

Use the application’s quote validators as the integration reference. Check the request, chain, complete deployment settings, ordered tokens, route endpoints, amounts, fee split, recipient, and expiry. Recheck after approvals and immediately before submission. A quote that expires while an approval is confirming requires a new preview.

Confirm the receipt’s expected event and refresh balances/backing afterward. Preserve submitted transaction hashes for recovery; a timeout is not proof of transaction failure. See wallets and metadata and integration examples.

Documentation reviewed September 10, 2026Back to top ↑
Start typing to search all documentation.
↑ ↓ to navigate · Enter to openesc to close
Documentation
Open app