{"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 request body is larger than the limit.","fix":"Send only the fields the endpoint takes. A logo goes to POST /media/image or as an image URL.","retry":false},{"code":"INVALID_ADDRESS","status":400,"meaning":"A field that must be a 0x address is not one.","fix":"Send a 40-hex-digit address starting with 0x. The `field` says which.","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_ID","status":400,"meaning":"That is not a key id.","fix":"Use an `id` from GET /keys.","retry":false},{"code":"INVALID_CURSOR","status":400,"meaning":"`after` must be a block number.","fix":"Send the `next` from the previous /launches answer, unchanged.","retry":false},{"code":"INVALID_PATH","status":400,"meaning":"The referral link path is not a page of this site.","fix":"Send a path starting with \"/\", such as \"/\", \"/t/0x…\" or \"/launch\".","retry":false},{"code":"INVALID_KIND","status":400,"meaning":"An intent kind is buy, sell or launch.","fix":"Use prepare_buy, prepare_sell or prepare_launch.","retry":false},{"code":"NOT_FOUND","status":404,"meaning":"There is no such endpoint.","fix":"Check the method and path against GET /api/v1/openapi.json.","retry":false},{"code":"RATE_LIMITED","status":429,"meaning":"Too many requests from this address in the last minute.","fix":"Wait a few seconds and retry; slow the loop. Limits per minute: quotes 120, builds 60, image uploads 20.","retry":true},{"code":"INVALID_AMOUNT","status":400,"meaning":"The amount is not a positive decimal number, or both/neither of amount and percent were sent.","fix":"Send a decimal string such as \"0.05\", in whole units (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 BNB and most tokens).","retry":false},{"code":"AMOUNT_TOO_SMALL","status":422,"meaning":"The amount is too small to get anything after the site fee, or out of the pool.","fix":"Trade a larger amount.","retry":false},{"code":"INVALID_SIDE","status":400,"meaning":"`side` must be buy or sell.","fix":"Send side=buy or side=sell.","retry":false},{"code":"INVALID_EXACT","status":400,"meaning":"`exact` must be in or out.","fix":"Leave it out (in: `amount` is what you spend), or send out (`amount` is what you receive).","retry":false},{"code":"INVALID_SLIPPAGE","status":400,"meaning":"The slippage is outside what is allowed.","fix":"Trades: slippageBps from 1 to 5000 (0.01% to 50%). A launch's first buy: slippagePct from 0.5 to 50.","retry":false},{"code":"POOL_TOO_THIN","status":422,"meaning":"The pool cannot fill that size in one trade.","fix":"Trade a smaller amount, or split it into several trades.","retry":false},{"code":"UNKNOWN_TOKEN","status":400,"meaning":"That address is not a token launched on Market Mayhem.","fix":"Check the address. List tokens with GET /launches; a token launched seconds ago appears once its block is confirmed.","retry":true},{"code":"INSUFFICIENT_BALANCE","status":422,"meaning":"The wallet cannot pay for this: the amount, or the gas, or both.","fix":"Fund the wallet with the pair currency and some BNB for gas, or trade less.","retry":false},{"code":"SIMULATION_FAILED","status":422,"meaning":"The transaction would revert on chain, so it was not returned. Nothing was sent.","fix":"Read `detail.revert` for the contract's reason. Most often: the price moved (raise slippageBps a little and build again) or a balance changed.","retry":true},{"code":"CANNOT_BUILD","status":400,"meaning":"The trade could not be encoded with these inputs.","fix":"The message says which input; change it and build again.","retry":false},{"code":"SELF_REFERRAL","status":400,"meaning":"A wallet cannot be its own referrer.","fix":"Leave `referrer` out, or set it to the app or person that brought the trader.","retry":false},{"code":"REFERRER_NOT_REGISTERED","status":400,"meaning":"The referrer is neither a registered referrer nor a creator, so a trade cannot pay it.","fix":"Register it once (free): GET /referrals/challenge, sign, POST /referrals/register. Or leave `referrer` out.","retry":false},{"code":"MISSING_IMAGE","status":400,"meaning":"A launch needs a logo: no token launches without one, from the site, the API, the SDK or an AI.","fix":"Send `image`: an https:// link to a PNG, JPG, GIF or WebP, up to 5 MB (or upload it with POST /media/image), or a metadataURI whose metadata has an image.","retry":false},{"code":"MISSING_MARKET_CAP","status":400,"meaning":"A launch needs its opening market cap.","fix":"Send marketCapUsd (dollars, e.g. \"5000\") or marketCapPair (in the pair currency).","retry":false},{"code":"NO_PRICE","status":503,"meaning":"The pair currency has no live dollar price, so a dollar market cap cannot be converted.","fix":"Send marketCapPair (the opening market cap in the pair currency) instead of marketCapUsd.","retry":false},{"code":"INVALID_SUPPLY","status":400,"meaning":"The supply is outside 1 to 1,000,000,000,000 whole tokens.","fix":"Send a whole-token supply in that range, or leave it out for 1,000,000,000.","retry":false},{"code":"INVALID_LAUNCH","status":400,"meaning":"A launch field breaks one of the launch rules.","fix":"The message names the rule and `field` names the field: for example a name over 64 bytes, a split that does not add to 100, or the same wallet twice.","retry":false},{"code":"INVALID_SHAPE","status":400,"meaning":"The supply shape is not one of the presets or a valid list of ranges.","fix":"Leave `shape` out (\"flat\"), or use \"stepped\", \"steep\", or 1–4 ranges { fromPct, toPct, bps }.","retry":false},{"code":"SHAPE_BELOW_LADDER","status":422,"meaning":"The shape no longer fits this launch: its price layout moved with the dollar price since the launch was built.","fix":"Build the launch again. If it repeats, leave shape out (\"flat\").","retry":true},{"code":"INVALID_BURN","status":400,"meaning":"burnPct is not 0, 1–99 (with at most two decimals) or 100.","fix":"Send 0 to keep the royalty, 1–99 to burn that share, or 100 to burn all of it.","retry":false},{"code":"CONFLICTING_ROYALTY","status":400,"meaning":"royaltyTo and a burnPct above 0 were both sent.","fix":"Pick one: royaltyTo sends the royalty to another wallet; burnPct splits or burns it.","retry":false},{"code":"CONFLICTING_METADATA","status":400,"meaning":"metadataURI and the details (image, description, …) were both sent.","fix":"Send your own metadataURI, or the details and let us store them. Not both.","retry":false},{"code":"INVALID_METADATA_URI","status":400,"meaning":"metadataURI is not an https:// or ipfs:// link.","fix":"Send an https:// or ipfs:// link, or leave it out and send the details instead.","retry":false},{"code":"INVALID_METADATA","status":400,"meaning":"The token details could not be stored as sent.","fix":"The message says which detail; correct it and try again.","retry":false},{"code":"UNSUPPORTED_PAIR","status":400,"meaning":"The pair is not BNB, a listed symbol, or a readable BEP20 token.","fix":"Use \"BNB\", a symbol from `pairs` in GET /settings, or a BEP20 contract address.","retry":false},{"code":"LAUNCHES_PAUSED","status":503,"meaning":"Launches are paused on the factory right now.","fix":"Try again later; GET /settings shows `launch.paused`.","retry":true},{"code":"TOO_MUCH_GAS","status":422,"meaning":"This launch needs more gas than one BSC transaction may use.","fix":"Use a simpler shape (fewer ranges) or fewer first-buy recipients.","retry":false},{"code":"INVALID_IMAGE","status":400,"meaning":"The image link could not be used.","fix":"Send an https:// link to a PNG, JPG, GIF or WebP image, reachable from the internet. The message says what went wrong.","retry":false},{"code":"IMAGE_TOO_LARGE","status":413,"meaning":"The image is larger than 5 MB.","fix":"Resize or compress it below 5 MB.","retry":false},{"code":"UNSUPPORTED_IMAGE","status":415,"meaning":"The image is not PNG, JPG, GIF or WebP, or the upload body is not the image itself.","fix":"Send one of those formats; to POST /media/image send the raw bytes with the matching Content-Type.","retry":false},{"code":"UPLOADS_BUSY","status":429,"meaning":"Uploads are busy right now.","fix":"Retry in a few seconds.","retry":true},{"code":"STORAGE_UNAVAILABLE","status":503,"meaning":"The image could not be stored just now. Nothing was launched.","fix":"Retry in a few seconds.","retry":true},{"code":"ALREADY_BOUND","status":409,"meaning":"The wallet is already bound to a referrer, and a binding is for ever.","fix":"Nothing to do: the existing binding stands.","retry":false},{"code":"NOT_DEPLOYED","status":503,"meaning":"That feature is not deployed on this network (yet).","fix":"Check GET /settings for the network; try the other network, or later.","retry":false},{"code":"REFERRAL_ERROR","status":400,"meaning":"The referral request was refused.","fix":"The message says why.","retry":false},{"code":"INVALID_SIGNATURE","status":401,"meaning":"The signature is missing, expired, or not from that wallet.","fix":"Get a fresh challenge (valid 5 minutes), sign its `message` exactly with that wallet (personal_sign / EIP-191), and send nonce and signature.","retry":false},{"code":"INVALID_API_KEY","status":401,"meaning":"The x-api-key header is not a live Market Mayhem key.","fix":"Send a key from POST /keys (they look like mm_live_…), or leave the header out.","retry":false},{"code":"API_KEY_REVOKED","status":401,"meaning":"That key was revoked.","fix":"Make a new one with GET /keys/challenge and POST /keys, or leave the header out.","retry":false},{"code":"API_KEY_REQUIRED","status":401,"meaning":"This endpoint needs your key.","fix":"Send one of your keys in the x-api-key header.","retry":false},{"code":"KEY_NOT_FOUND","status":404,"meaning":"No such key on this wallet.","fix":"Use an `id` from GET /keys.","retry":false},{"code":"KEY_LIMIT","status":400,"meaning":"A wallet can hold 10 active keys.","fix":"Revoke one with DELETE /keys/{id}.","retry":false},{"code":"KEYS_OFF","status":503,"meaning":"API keys are switched off on this server.","fix":"Use the API without a key.","retry":false},{"code":"KEYS_UNAVAILABLE","status":503,"meaning":"Keys could not be read or written just now.","fix":"Retry in a few seconds, or use the API without a key meanwhile.","retry":true},{"code":"UNKNOWN_INTENT","status":404,"meaning":"There is no such prepared request.","fix":"Prepare it again (prepare_buy, prepare_sell, prepare_launch).","retry":false},{"code":"INTENTS_UNAVAILABLE","status":503,"meaning":"The request could not be stored or read just now.","fix":"Retry in a few seconds.","retry":true},{"code":"ALREADY_SENT","status":409,"meaning":"This request was already signed, with another transaction.","fix":"Nothing to do: `detail.tx` is the transaction that was sent.","retry":false},{"code":"NOT_SEEN_YET","status":409,"meaning":"The chain has not seen that transaction yet.","fix":"Retry in a few seconds.","retry":true},{"code":"WRONG_SENDER","status":400,"meaning":"That transaction was not sent by that wallet.","fix":"Report the wallet that signed it.","retry":false},{"code":"WRONG_CONTRACT","status":400,"meaning":"That transaction is not a Market Mayhem trade or launch.","fix":"Report the hash of the trade or launch itself.","retry":false},{"code":"NO_SESSION","status":401,"meaning":"This browser is not signed in, or it signed out.","fix":"Sign in again: POST /api/auth/challenge, sign the message, POST /api/auth/session.","retry":false},{"code":"SESSION_EXPIRED","status":401,"meaning":"The sign-in on this browser is older than 30 days.","fix":"Sign in again: it is one signature.","retry":false},{"code":"SESSION_WALLET_MISMATCH","status":401,"meaning":"The browser is signed in as another wallet than the one the request names (the wallet switched accounts).","fix":"Sign in with the wallet now connected.","retry":false},{"code":"CSRF_REQUIRED","status":403,"meaning":"A signed-in request came without the x-mm-csrf header.","fix":"Send the header x-mm-csrf: 1 with every signed-in request.","retry":false},{"code":"SMART_WALLET_UNSUPPORTED","status":401,"meaning":"The wallet is a smart-contract wallet: its signatures cannot be checked here yet.","fix":"Sign in with a standard wallet, or with Google or email.","retry":false},{"code":"ORIGIN_NOT_ALLOWED","status":403,"meaning":"Sign-in was asked for from a page that is not Market Mayhem.","fix":"Sign in on https://marketmayhem.co.","retry":false},{"code":"SESSIONS_UNAVAILABLE","status":503,"meaning":"Sign-in could not be read or written just now.","fix":"Retry in a few seconds.","retry":true},{"code":"CHAIN_UNREACHABLE","status":503,"meaning":"The chain could not be read just now. Nothing was sent.","fix":"Retry in a few seconds.","retry":true},{"code":"FEES_UNREADABLE","status":503,"meaning":"The live fee rates could not be read from the chain just now.","fix":"Retry in a few seconds.","retry":true},{"code":"INTERNAL","status":500,"meaning":"Something went wrong on our side. Nothing was sent.","fix":"Retry; if it persists, tell us the time and the request.","retry":true}]}