Skip to content

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/quote
NameInRequiredMeaning
tokenqueryyesThe coin
sidequeryyesbuy: ETH for the coin; sell: the coin for ETH
amountqueryyesWhole units: ETH (buy) or coins (sell)
walletqueryQuote for this wallet
slippageBpsqueryDefault 100
feeBpsqueryYour own fee, up to 300
feeRecipientqueryWho gets feeBps
maxPriceImpactPctqueryDefault 50
FieldTypeRequiredMeaning
chainId4663yes
tokenstringyesA 0x address, lower case
symbolstring or nullyes
sidebuy · sellyes
amountInobjectyes
amountIn.amountstringyesWhole units, as a decimal string: “0.05”
amountIn.weistringyesThe smallest unit, an integer as a string
amountIn.symbolstring or nullyesETH, or the coin’s ticker
amountOutobjectyesWhat the trader ends up with, after every fee and tax, simulated
amountOut.amountstringyesWhole units, as a decimal string: “0.05”
amountOut.weistringyesThe smallest unit, an integer as a string
amountOut.symbolstring or nullyesETH, or the coin’s ticker
minOutobjectyesThe least the transaction accepts
minOut.amountstringyesWhole units, as a decimal string: “0.05”
minOut.weistringyesThe smallest unit, an integer as a string
minOut.symbolstring or nullyesETH, or the coin’s ticker
slippageBpsintegeryes
priceImpactPctnumber or nullyesPercent (5 means 5%); null when not known
venueobject or objectyes
venue.kindcurveyes
venue.launchpadpons · flapyes
venue.contractstringyesA 0x address, lower case
routesComparedintegeryes
feesobjectyes
fees.takenbooleanyes
fees.listobject[]yes
fees.list[].whouprally · builderyes
fees.list[].recipientstringyesA 0x address, lower case
fees.list[].bpsintegeryes
fees.whystring
sellBackobjectA buy: selling what it bought straight back, simulated
sellBack.oktrueyes
sellBack.sharePctnumberyes
sellBack.ethobjectyes
sellBack.eth.amountstringyesWhole units, as a decimal string: “0.05”
sellBack.eth.weistringyesThe smallest unit, an integer as a string
simulatedFromwallet · test wallet · holderyes
gasUsedstringyesThe smallest unit, an integer as a string
asOfstringyes

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"
}

Every error is { "error": { "code", "message", "fix"? } }. This endpoint can answer:

  • INVALID_ADDRESS: A field that must be a 0x address is not one; field says 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; field says 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; detail lists 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.