GET /quote
What a buy or sale returns right now, simulated through every route it can take: sends nothing.
GET https://uprally.co/api/v1/quoteParameters
Section titled “Parameters”| Name | In | Required | Meaning |
|---|---|---|---|
token | query | yes | The coin |
side | query | yes | buy: ETH for the coin; sell: the coin for ETH |
amount | query | yes | Whole units: ETH (buy) or coins (sell) |
wallet | query | Quote for this wallet | |
slippageBps | query | Default 100 | |
feeBps | query | Your own fee, up to 300 | |
feeRecipient | query | Who gets feeBps | |
maxPriceImpactPct | query | Default 50 |
Response
Section titled “Response”| Field | Type | Required | Meaning |
|---|---|---|---|
chainId | 4663 | yes | |
token | string | yes | A 0x address, lower case |
symbol | string or null | yes | |
side | buy · sell | yes | |
amountIn | object | yes | |
amountIn.amount | string | yes | Whole units, as a decimal string: “0.05” |
amountIn.wei | string | yes | The smallest unit, an integer as a string |
amountIn.symbol | string or null | yes | ETH, or the coin’s ticker |
amountOut | object | yes | What the trader ends up with, after every fee and tax, simulated |
amountOut.amount | string | yes | Whole units, as a decimal string: “0.05” |
amountOut.wei | string | yes | The smallest unit, an integer as a string |
amountOut.symbol | string or null | yes | ETH, or the coin’s ticker |
minOut | object | yes | The least the transaction accepts |
minOut.amount | string | yes | Whole units, as a decimal string: “0.05” |
minOut.wei | string | yes | The smallest unit, an integer as a string |
minOut.symbol | string or null | yes | ETH, or the coin’s ticker |
slippageBps | integer | yes | |
priceImpactPct | number or null | yes | Percent (5 means 5%); null when not known |
venue | object or object | yes | |
venue.kind | curve | yes | |
venue.launchpad | pons · flap | yes | |
venue.contract | string | yes | A 0x address, lower case |
routesCompared | integer | yes | |
fees | object | yes | |
fees.taken | boolean | yes | |
fees.list | object[] | yes | |
fees.list[].who | uprally · builder | yes | |
fees.list[].recipient | string | yes | A 0x address, lower case |
fees.list[].bps | integer | yes | |
fees.why | string | ||
sellBack | object | A buy: selling what it bought straight back, simulated | |
sellBack.ok | true | yes | |
sellBack.sharePct | number | yes | |
sellBack.eth | object | yes | |
sellBack.eth.amount | string | yes | Whole units, as a decimal string: “0.05” |
sellBack.eth.wei | string | yes | The smallest unit, an integer as a string |
simulatedFrom | wallet · test wallet · holder | yes | |
gasUsed | string | yes | The smallest unit, an integer as a string |
asOf | string | yes |
A real response
Section titled “A real response”Captured from the live API on Robinhood Chain, exactly as it was sent (long calldata shortened).
{ "chainId": 4663, "token": "0x39dbed3a2bd333467115de45665cc57f813c4571", "symbol": "PONS", "side": "buy", "amountIn": { "amount": "0.001", "wei": "1000000000000000", "symbol": "ETH" }, "amountOut": { "amount": "7.217711183798691768", "wei": "7217711183798691768", "symbol": "PONS" }, "minOut": { "amount": "7.14553407196070485", "wei": "7145534071960704850", "symbol": "PONS" }, "slippageBps": 100, "priceImpactPct": 0, "venue": { "kind": "pool", "hops": [ { "dex": "uniswap", "version": "v3", "tokenIn": "0x0000000000000000000000000000000000000000", "tokenOut": "0x5fc5360d0400a0fd4f2af552add042d716f1d168", "pool": null, "fee": 100 }, { "dex": "uniswap", "version": "v4", "tokenIn": "0x5fc5360d0400a0fd4f2af552add042d716f1d168", "tokenOut": "0x39dbed3a2bd333467115de45665cc57f813c4571", "pool": "0x486435a1f76cd58193f854c6e6213cd05fd58d637865d02065ff558b387fa6ea", "fee": 8388608, "tickSpacing": 60, "hooks": "0x08e52564bad99e05a694b4809f397edca417a080" } ] }, "routesCompared": 4, "fees": { "taken": true, "list": [] }, "sellBack": { "ok": true, "sharePct": 99, "eth": { "amount": "0.000984842083341669", "wei": "984842083341669" }, "venue": { "kind": "pool", "hops": [ { "dex": "uniswap", "version": "v3", "tokenIn": "0x0000000000000000000000000000000000000000", "tokenOut": "0x5fc5360d0400a0fd4f2af552add042d716f1d168", "pool": null, "fee": 100 }, { "dex": "uniswap", "version": "v4", "tokenIn": "0x5fc5360d0400a0fd4f2af552add042d716f1d168", "tokenOut": "0x39dbed3a2bd333467115de45665cc57f813c4571", "pool": "0x486435a1f76cd58193f854c6e6213cd05fd58d637865d02065ff558b387fa6ea", "fee": 8388608, "tickSpacing": 60, "hooks": "0x08e52564bad99e05a694b4809f397edca417a080" } ] } }, "simulatedFrom": "test wallet", "gasUsed": "270073", "asOf": "2026-10-16T03:36:39.200Z"}Errors
Section titled “Errors”Every error is { "error": { "code", "message", "fix"? } }. This endpoint can answer:
INVALID_ADDRESS: A field that must be a 0x address is not one;fieldsays which.INVALID_SIDE: side is “buy” (ETH for the coin) or “sell” (the coin for ETH).INVALID_AMOUNT: The amount is not a positive decimal in whole units.TOO_MANY_DECIMALS: The amount has more decimal places than the currency has.INVALID_BPS: slippageBps or feeBps is out of range (basis points: 100 = 1%).INVALID_QUERY: A query parameter is out of range or malformed;fieldsays which.NOT_A_COIN: The token address is not an ERC-20 on Robinhood Chain.NO_ROUTE: No pool or curve can make this trade right now (none known, or every one failed in simulation;detaillists them).QUOTE_NEEDS_WALLET: This coin’s sale can only be quoted from a wallet that holds it.PRICE_IMPACT_TOO_HIGH: The trade would move the price more than maxPriceImpactPct (default 50%): the pool is too thin for it.SIMULATION_FAILED: The trade failed when simulated again with its minimum in place: the price moved.HONEYPOT: Selling this coin straight after buying it fails through every route, in simulation: it may not be sellable.CHAIN_UNREACHABLE: Robinhood Chain could not be read or simulated just now.MARKET_UNREACHABLE: The coin’s pools could not be read just now.RATE_LIMITED: Too many requests from this address in the last minute.