Skip to content

GET /errors

Every error code: what it means, the fix, and whether retrying can succeed.

GET https://uprally.co/api/v1/errors
FieldTypeRequiredMeaning
errorsobject[]yes
errors[].codestringyes
errors[].statusintegeryes
errors[].meaningstringyes
errors[].fixstringyes
errors[].retrybooleanyes

Captured from the live API on Robinhood Chain, exactly as it was sent (long calldata shortened).

{
"errors": [
{
"code": "INVALID_BODY",
"status": 400,
"meaning": "The body is not a JSON object.",
"fix": "Send Content-Type: application/json and a JSON object.",
"retry": false
},
{
"code": "INVALID_JSON",
"status": 400,
"meaning": "The body is not valid JSON.",
"fix": "Send Content-Type: application/json and valid JSON.",
"retry": false
},
{
"code": "BODY_TOO_LARGE",
"status": 413,
"meaning": "The body is larger than the limit (64 KB of JSON, 5 MB for an image).",
"fix": "Send only the fields the endpoint takes.",
"retry": false
},
{
"code": "INVALID_ADDRESS",
"status": 400,
"meaning": "A field that must be a 0x address is not one; `field` says which.",
"fix": "Send a 40-hex-digit address starting with 0x.",
"retry": false
},
{
"code": "INVALID_HASH",
"status": 400,
"meaning": "That is not a transaction hash.",
"fix": "Send the 0x-prefixed 64-hex-digit hash your wallet returned.",
"retry": false
},
{
"code": "INVALID_QUERY",
"status": 400,
"meaning": "A query parameter is out of range or malformed; `field` says which.",
"fix": "Send it as the message says, or leave it out for the default.",
"retry": false
},
{
"code": "NOT_FOUND",
"status": 404,
"meaning": "There is no such endpoint.",
"fix": "GET /api/v1 lists every endpoint.",
"retry": false
},
{
"code": "RATE_LIMITED",
"status": 429,
"meaning": "Too many requests from this address in the last minute.",
"fix": "Wait (the retry-after header says how long) and slow the loop. Per minute: reads 300, quotes 120, swaps and launches 60, uploads 20.",
"retry": true
},
{
"code": "INTERNAL",
"status": 500,
"meaning": "Something failed on our side; nothing was sent.",
"fix": "Retry; if it persists, tell us the time and the request.",
"retry": true
},
{
"code": "UNKNOWN_COIN",
"status": 404,
"meaning": "The address has no market, launchpad or curve on Robinhood Chain.",
"fix": "Check the address: GET /coins lists every coin with a market.",
"retry": false
},
{
"code": "UNKNOWN_GROUP",
"status": 404,
"meaning": "A holder group is bundled or snipers.",
"fix": "Ask /holders/bundled or /holders/snipers.",
"retry": false
},
{
"code": "UNKNOWN_CREATOR",
"status": 404,
"meaning": "Nobody we know of launched this coin: it was not made on a launchpad we read.",
"fix": "GET /coins/{address} shows its launchpad.",
"retry": false
},
{
"code": "DATA_UNREACHABLE",
"status": 503,
"meaning": "The data behind this answer could not be read just now.",
"fix": "Retry in a few seconds.",
"retry": true
},
{
"code": "INVALID_SIDE",
"status": 400,
"meaning": "side is \"buy\" (ETH for the coin) or \"sell\" (the coin for ETH).",
"fix": "Send side=buy or side=sell.",
"retry": false
},
{
"code": "INVALID_AMOUNT",
"status": 400,
"meaning": "The amount is not a positive decimal in whole units.",
"fix": "Send a decimal string such as \"0.05\" (ETH for a buy, the coin for a sale), not wei.",
"retry": false
},
{
"code": "TOO_MANY_DECIMALS",
"status": 400,
"meaning": "The amount has more decimal places than the currency has.",
"fix": "Round it to the currency's decimals (18 for ETH and most coins).",
"retry": false
},
{
"code": "INVALID_BPS",
"status": 400,
"meaning": "slippageBps or feeBps is out of range (basis points: 100 = 1%).",
"fix": "slippageBps: 1 to 5000. feeBps: 0 to 300, with feeRecipient.",
"retry": false
},
{
"code": "WALLET_REQUIRED",
"status": 400,
"meaning": "A swap is built for the wallet that will send it.",
"fix": "Send `wallet`.",
"retry": false
},
{
"code": "NOT_A_COIN",
"status": 400,
"meaning": "The token address is not an ERC-20 on Robinhood Chain.",
"fix": "Send the coin's contract address.",
"retry": false
},
{
"code": "NO_ROUTE",
"status": 422,
"meaning": "No pool or curve can make this trade right now (none known, or every one failed in simulation; `detail` lists them).",
"fix": "Try a smaller amount; a coin minutes old may have no pool yet.",
"retry": true
},
{
"code": "QUOTE_NEEDS_WALLET",
"status": 422,
"meaning": "This coin's sale can only be quoted from a wallet that holds it.",
"fix": "Send `wallet`: an address holding at least `amount` of the coin.",
"retry": false
},
{
"code": "INSUFFICIENT_BALANCE",
"status": 422,
"meaning": "The wallet holds less of the coin than the sale.",
"fix": "Sell at most what the wallet holds.",
"retry": false
},
{
"code": "INSUFFICIENT_FUNDS",
"status": 422,
"meaning": "The wallet holds less ETH than the buy.",
"fix": "Spend less, or add ETH (it also pays gas).",
"retry": false
},
{
"code": "PRICE_IMPACT_TOO_HIGH",
"status": 422,
"meaning": "The trade would move the price more than maxPriceImpactPct (default 50%): the pool is too thin for it.",
"fix": "Trade less, or send maxPriceImpactPct (up to 100) to allow it.",
"retry": false
},
{
"code": "SIMULATION_FAILED",
"status": 422,
"meaning": "The trade failed when simulated again with its minimum in place: the price moved.",
"fix": "Retry, or allow more slippage (slippageBps).",
"retry": true
},
{
"code": "HONEYPOT",
"status": 422,
"meaning": "Selling this coin straight after buying it fails through every route, in simulation: it may not be sellable.",
"fix": "Do not buy it. GET /coins/{address} shows what is known.",
"retry": false
},
{
"code": "CHAIN_UNREACHABLE",
"status": 503,
"meaning": "Robinhood Chain could not be read or simulated just now.",
"fix": "Retry in a few seconds.",
"retry": true
},
{
"code": "MARKET_UNREACHABLE",
"status": 503,
"meaning": "The coin's pools could not be read just now.",
"fix": "Retry in a few seconds.",
"retry": true
},
{
"code": "INVALID_LAUNCH",
"status": 400,
"meaning": "A launch field is missing or wrong; `field` says which.",
"fix": "Fix the field named and send it again (GET /launch lists each launchpad's options).",
"retry": false
},
{
"code": "INVALID_DETAILS",
"status": 400,
"meaning": "A coin detail (name, ticker, description, picture or link) is not accepted; `field` says which.",
"fix": "Fix the field named. A picture must come from POST /media/image.",
"retry": false
},
{
"code": "LAUNCH_WOULD_FAIL",
"status": 422,
"meaning": "The launch reverted when simulated.",
"fix": "Change the first buy or the options, then build again.",
"retry": false
},
{
"code": "LAUNCH_OFF",
"status": 503,
"meaning": "Launching is switched off on this server for now.",
"fix": "Try again later.",
"retry": true
},
{
"code": "UNSUPPORTED_IMAGE",
"status": 415,
"meaning": "The body is not a PNG, JPEG, GIF or WebP image.",
"fix": "Send the raw image bytes with Content-Type image/png, image/jpeg, image/gif or image/webp.",
"retry": false
},
{
"code": "IMAGE_TOO_LARGE",
"status": 413,
"meaning": "The image is larger than 5 MB.",
"fix": "Send a smaller image.",
"retry": false
},
{
"code": "UPLOADS_BUSY",
"status": 429,
"meaning": "Uploads are busy right now.",
"fix": "Try again in a few minutes.",
"retry": true
}
]
}