Errors
Every error comes back as { "error": { "code", "message", "fix"?, "field"?, "detail"? } } with an HTTP status. Act on code: it never changes. The same list is live at GET /api/v1/errors.
Retry means the same request can succeed later, unchanged; wait a few seconds first.
ALREADY_BOUND
Section titled “ALREADY_BOUND”HTTP 409
The wallet is already bound to a referrer, and a binding is for ever.
Fix: Nothing to do: the existing binding stands.
ALREADY_SENT
Section titled “ALREADY_SENT”HTTP 409
This request was already signed, with another transaction.
Fix: Nothing to do: detail.tx is the transaction that was sent.
AMOUNT_TOO_SMALL
Section titled “AMOUNT_TOO_SMALL”HTTP 422
The amount is too small to get anything after the site fee, or out of the pool.
Fix: Trade a larger amount.
API_KEY_REQUIRED
Section titled “API_KEY_REQUIRED”HTTP 401
This endpoint needs your key.
Fix: Send one of your keys in the x-api-key header.
API_KEY_REVOKED
Section titled “API_KEY_REVOKED”HTTP 401
That key was revoked.
Fix: Make a new one with GET /keys/challenge and POST /keys, or leave the header out.
BODY_TOO_LARGE
Section titled “BODY_TOO_LARGE”HTTP 413
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.
CANNOT_BUILD
Section titled “CANNOT_BUILD”HTTP 400
The trade could not be encoded with these inputs.
Fix: The message says which input; change it and build again.
CHAIN_UNREACHABLE
Section titled “CHAIN_UNREACHABLE”HTTP 503 · retry
The chain could not be read just now. Nothing was sent.
Fix: Retry in a few seconds.
CONFLICTING_METADATA
Section titled “CONFLICTING_METADATA”HTTP 400
metadataURI and the details (image, description, …) were both sent.
Fix: Send your own metadataURI, or the details and let us store them. Not both.
CONFLICTING_ROYALTY
Section titled “CONFLICTING_ROYALTY”HTTP 400
royaltyTo and a burnPct above 0 were both sent.
Fix: Pick one: royaltyTo sends the royalty to another wallet; burnPct splits or burns it.
CSRF_REQUIRED
Section titled “CSRF_REQUIRED”HTTP 403
A signed-in request came without the x-mm-csrf header.
Fix: Send the header x-mm-csrf: 1 with every signed-in request.
FEES_UNREADABLE
Section titled “FEES_UNREADABLE”HTTP 503 · retry
The live fee rates could not be read from the chain just now.
Fix: Retry in a few seconds.
IMAGE_TOO_LARGE
Section titled “IMAGE_TOO_LARGE”HTTP 413
The image is larger than 5 MB.
Fix: Resize or compress it below 5 MB.
INSUFFICIENT_BALANCE
Section titled “INSUFFICIENT_BALANCE”HTTP 422
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.
INTENTS_UNAVAILABLE
Section titled “INTENTS_UNAVAILABLE”HTTP 503 · retry
The request could not be stored or read just now.
Fix: Retry in a few seconds.
INTERNAL
Section titled “INTERNAL”HTTP 500 · retry
Something went wrong on our side. Nothing was sent.
Fix: Retry; if it persists, tell us the time and the request.
INVALID_ADDRESS
Section titled “INVALID_ADDRESS”HTTP 400
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.
INVALID_AMOUNT
Section titled “INVALID_AMOUNT”HTTP 400
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).
INVALID_API_KEY
Section titled “INVALID_API_KEY”HTTP 401
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.
INVALID_BODY
Section titled “INVALID_BODY”HTTP 400
The body is not a JSON object.
Fix: Send Content-Type: application/json and a JSON object.
INVALID_BURN
Section titled “INVALID_BURN”HTTP 400
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.
INVALID_CURSOR
Section titled “INVALID_CURSOR”HTTP 400
after must be a block number.
Fix: Send the next from the previous /launches answer, unchanged.
INVALID_EXACT
Section titled “INVALID_EXACT”HTTP 400
exact must be in or out.
Fix: Leave it out (in: amount is what you spend), or send out (amount is what you receive).
INVALID_HASH
Section titled “INVALID_HASH”HTTP 400
That is not a transaction hash.
Fix: Send the 0x-prefixed 64-hex-digit hash your wallet returned.
INVALID_ID
Section titled “INVALID_ID”HTTP 400
That is not a key id.
Fix: Use an id from GET /keys.
INVALID_IMAGE
Section titled “INVALID_IMAGE”HTTP 400
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.
INVALID_JSON
Section titled “INVALID_JSON”HTTP 400
The body is not valid JSON.
Fix: Send Content-Type: application/json and valid JSON.
INVALID_KIND
Section titled “INVALID_KIND”HTTP 400
An intent kind is buy, sell or launch.
Fix: Use prepare_buy, prepare_sell or prepare_launch.
INVALID_LAUNCH
Section titled “INVALID_LAUNCH”HTTP 400
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.
INVALID_METADATA
Section titled “INVALID_METADATA”HTTP 400
The token details could not be stored as sent.
Fix: The message says which detail; correct it and try again.
INVALID_METADATA_URI
Section titled “INVALID_METADATA_URI”HTTP 400
metadataURI is not an https:// or ipfs:// link.
Fix: Send an https:// or ipfs:// link, or leave it out and send the details instead.
INVALID_PATH
Section titled “INVALID_PATH”HTTP 400
The referral link path is not a page of this site.
Fix: Send a path starting with ”/”, such as ”/”, “/t/0x…” or “/launch”.
INVALID_SHAPE
Section titled “INVALID_SHAPE”HTTP 400
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 }.
INVALID_SIDE
Section titled “INVALID_SIDE”HTTP 400
side must be buy or sell.
Fix: Send side=buy or side=sell.
INVALID_SIGNATURE
Section titled “INVALID_SIGNATURE”HTTP 401
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.
INVALID_SLIPPAGE
Section titled “INVALID_SLIPPAGE”HTTP 400
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.
INVALID_SUPPLY
Section titled “INVALID_SUPPLY”HTTP 400
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.
KEY_LIMIT
Section titled “KEY_LIMIT”HTTP 400
A wallet can hold 10 active keys.
Fix: Revoke one with DELETE /keys/{id}.
KEY_NOT_FOUND
Section titled “KEY_NOT_FOUND”HTTP 404
No such key on this wallet.
Fix: Use an id from GET /keys.
KEYS_OFF
Section titled “KEYS_OFF”HTTP 503
API keys are switched off on this server.
Fix: Use the API without a key.
KEYS_UNAVAILABLE
Section titled “KEYS_UNAVAILABLE”HTTP 503 · retry
Keys could not be read or written just now.
Fix: Retry in a few seconds, or use the API without a key meanwhile.
LAUNCHES_PAUSED
Section titled “LAUNCHES_PAUSED”HTTP 503 · retry
Launches are paused on the factory right now.
Fix: Try again later; GET /settings shows launch.paused.
MISSING_IMAGE
Section titled “MISSING_IMAGE”HTTP 400
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.
MISSING_MARKET_CAP
Section titled “MISSING_MARKET_CAP”HTTP 400
A launch needs its opening market cap.
Fix: Send marketCapUsd (dollars, e.g. “5000”) or marketCapPair (in the pair currency).
NO_PRICE
Section titled “NO_PRICE”HTTP 503
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.
NO_SESSION
Section titled “NO_SESSION”HTTP 401
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.
NOT_DEPLOYED
Section titled “NOT_DEPLOYED”HTTP 503
That feature is not deployed on this network (yet).
Fix: Check GET /settings for the network; try the other network, or later.
NOT_FOUND
Section titled “NOT_FOUND”HTTP 404
There is no such endpoint.
Fix: Check the method and path against GET /api/v1/openapi.json.
NOT_SEEN_YET
Section titled “NOT_SEEN_YET”HTTP 409 · retry
The chain has not seen that transaction yet.
Fix: Retry in a few seconds.
ORIGIN_NOT_ALLOWED
Section titled “ORIGIN_NOT_ALLOWED”HTTP 403
Sign-in was asked for from a page that is not Market Mayhem.
Fix: Sign in on https://marketmayhem.co.
POOL_TOO_THIN
Section titled “POOL_TOO_THIN”HTTP 422
The pool cannot fill that size in one trade.
Fix: Trade a smaller amount, or split it into several trades.
RATE_LIMITED
Section titled “RATE_LIMITED”HTTP 429 · retry
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.
REFERRAL_ERROR
Section titled “REFERRAL_ERROR”HTTP 400
The referral request was refused.
Fix: The message says why.
REFERRER_NOT_REGISTERED
Section titled “REFERRER_NOT_REGISTERED”HTTP 400
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.
SELF_REFERRAL
Section titled “SELF_REFERRAL”HTTP 400
A wallet cannot be its own referrer.
Fix: Leave referrer out, or set it to the app or person that brought the trader.
SESSION_EXPIRED
Section titled “SESSION_EXPIRED”HTTP 401
The sign-in on this browser is older than 30 days.
Fix: Sign in again: it is one signature.
SESSION_WALLET_MISMATCH
Section titled “SESSION_WALLET_MISMATCH”HTTP 401
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.
SESSIONS_UNAVAILABLE
Section titled “SESSIONS_UNAVAILABLE”HTTP 503 · retry
Sign-in could not be read or written just now.
Fix: Retry in a few seconds.
SHAPE_BELOW_LADDER
Section titled “SHAPE_BELOW_LADDER”HTTP 422 · retry
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”).
SIMULATION_FAILED
Section titled “SIMULATION_FAILED”HTTP 422 · retry
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.
SMART_WALLET_UNSUPPORTED
Section titled “SMART_WALLET_UNSUPPORTED”HTTP 401
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.
STORAGE_UNAVAILABLE
Section titled “STORAGE_UNAVAILABLE”HTTP 503 · retry
The image could not be stored just now. Nothing was launched.
Fix: Retry in a few seconds.
TOO_MANY_DECIMALS
Section titled “TOO_MANY_DECIMALS”HTTP 400
The amount has more decimal places than the currency has.
Fix: Round it to the currency’s decimals (18 for BNB and most tokens).
TOO_MUCH_GAS
Section titled “TOO_MUCH_GAS”HTTP 422
This launch needs more gas than one BSC transaction may use.
Fix: Use a simpler shape (fewer ranges) or fewer first-buy recipients.
UNKNOWN_INTENT
Section titled “UNKNOWN_INTENT”HTTP 404
There is no such prepared request.
Fix: Prepare it again (prepare_buy, prepare_sell, prepare_launch).
UNKNOWN_TOKEN
Section titled “UNKNOWN_TOKEN”HTTP 400 · retry
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.
UNSUPPORTED_IMAGE
Section titled “UNSUPPORTED_IMAGE”HTTP 415
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.
UNSUPPORTED_PAIR
Section titled “UNSUPPORTED_PAIR”HTTP 400
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.
UPLOADS_BUSY
Section titled “UPLOADS_BUSY”HTTP 429 · retry
Uploads are busy right now.
Fix: Retry in a few seconds.
WRONG_CONTRACT
Section titled “WRONG_CONTRACT”HTTP 400
That transaction is not a Market Mayhem trade or launch.
Fix: Report the hash of the trade or launch itself.
WRONG_SENDER
Section titled “WRONG_SENDER”HTTP 400
That transaction was not sent by that wallet.
Fix: Report the wallet that signed it.