GET /errors
Every error code: what it means, the fix, and whether retrying can succeed.
GET https://uprally.co/api/v1/errorsResponse
Section titled “Response”| Field | Type | Required | Meaning |
|---|---|---|---|
errors | object[] | yes | |
errors[].code | string | yes | |
errors[].status | integer | yes | |
errors[].meaning | string | yes | |
errors[].fix | string | yes | |
errors[].retry | boolean | 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).
{ "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 } ]}