justi.fun
§12 · Reference

Errors

Every error code, its status and what to do.

Shape

Every error has the same body. message is plain language and safe to show to users. details carries extra fields for some codes. The SDK throws a JustiError with the same fields plus status and retryAfter.

json
{ "error": { "code": "copy_exists", "message": "...", "details": { "existing": "<mint>" } } }

One exception: a swap that fails on chain after submit is not an HTTP error. Submit answers 200 with status: "failed" and an error object, because the request itself worked.

Codes

codeStatusMeaningWhat to do
bad_request400The request is not valid.Read message; fix the request.
invalid_params400A parameter is missing or not valid.details.issues lists each field and what is wrong.
invalid_json400The body is not valid JSON.Send Content-Type: application/json and a JSON body.
unauthorized401A valid API key is required.The key is missing, wrong or revoked. Never retried as anonymous.
forbidden403This key cannot do that.Ask for a partner key if you need it.
not_found404Not found.Check the mint, id or signature.
conflict409That conflicts with the current state.Read the current state, then retry.
payload_too_large413The body is too large for this endpoint.See body limits on the Keys page. Shrink images.
rate_limited429Too many requests. Wait and retry.Wait Retry-After seconds. Use a key for higher limits.
internal500Something went wrong on our side.Retry later with backoff.
upstream_error502An upstream service (RPC, Jupiter) did not answer.Retry with backoff.
unavailable503This is paused or not configured right now.Check GET /v1/status for the switches.
slippage400The price moved past the slippage limit.Retry with details.suggestSlippageBps.
graduating409The curve is full and the coin is moving to its DAMM v2 pool.Retry in a few seconds; trading resumes on DAMM v2.
insufficient_funds400The wallet does not have enough SOL or tokens.Lower the amount or fund the wallet.
expired410The blockhash expired before it landed.Build again and sign within about 60 seconds.
chain_rejected400The transaction would fail on chain.message has the reason from the simulation.
copy_exists409An exact copy of this coin launched in the copy window.details.existing is the mint. Change any one of ticker, name, image, website, X link.
mint_taken409That mint address is already used or reserved.Use another custom mint.
launch_limit429This wallet reached its launches per day.10 per wallet per day.
tx_mismatch400The signed transaction is not the one that was built.Sign the returned bytes as they are. Wallets may add instructions to swaps, not launches.
signature_invalid400A required signature is missing or wrong.Check signers[] in the build response.
already_submitted409This was already submitted.Poll its status instead.
image_fetch_failed400The image URL could not be fetched.Use a public https URL under 5 MB, or a data URL.