Skip to main content
All Deframe API errors use one JSON envelope. The HTTP status line is the source of truth for the status code; the body is always:
{
  "error": {
    "code": "QUOTE_NOT_FOUND",
    "message": "Quote not found or expired"
  }
}
The details field is only present when there is extra structured context. For Zod validation failures (422), issues are in details.errors (path + message per field). Domain-specific data (for example needsSignUp) also lives under details.

Quote Errors

CodeHTTP StatusDescriptionResolution
QUOTE_NOT_FOUND404Quote not found or expiredRequest a new quote — quotes are valid for 5 minutes
QUOTE_EXPIRED400Quote has expiredRequest a new quote using the same parameters
QUOTE_GENERATION_FAILED400Could not generate a quote for the specified parametersVerify token addresses, chain names, and amount format
QUOTE_VALIDATION_ERROR400Quote validation failedCheck that quoteId and rawQuote match the original quote response

Swap Errors

CodeHTTP StatusDescriptionResolution
NO_ROUTE_FOUND400No swap route available between the specified chains or tokensTry a different token pair or check supported networks
INVALID_PREFERRED_PROVIDER400Unknown preferredProvider name on GET /v2/swap/quoteUse a registered provider id (relay, mayan, lifi, cctp, 1inch, etc.)
PREFERRED_PROVIDER_NOT_ELIGIBLE400preferredProvider does not support this chain/token routeOmit the parameter or pick a provider eligible for the route
PREFERRED_PROVIDER_QUOTE_UNAVAILABLE400Eligible provider did not return a quote in timeRetry or omit preferredProvider to use the best available quote
PROVIDER_NOT_FOUND404Swap provider not found for the requested routeUse a supported chain and token combination
BYTECODE_GENERATION_FAILED500Failed to generate transaction bytecodeRetry the request — if the issue persists, contact support
SWAP_EXECUTION_FAILED500Failed to execute the swap transactionVerify wallet balance, allowance, and gas fees

Validation Errors

CodeHTTP StatusDescriptionResolution
INVALID_AMOUNT_PARAMS400Cannot specify both amountIn and amountOut simultaneouslyUse only one of amountIn or amountOut per request
MISSING_AMOUNT_PARAMS400Either amountIn or amountOut is requiredInclude at least one amount parameter in the request
INVALID_SLIPPAGE400slippage must be between 0.0001 and 0.5 as a fraction of 1Use a value like 0.01 for 1% slippage
AMOUNT_IN_TOO_LOW_OFFRAMP400Off-ramp amountIn must be greater than 1 USDCIncrease the input amount
AMOUNT_IN_TOO_HIGH_OFFRAMP400Off-ramp amountIn must be less than 5k USDCReduce the input amount or contact support for higher limits
AMOUNT_OUT_TOO_LOW_OFFRAMP400Off-ramp amountOut must be greater than 5 BRLAIncrease the output amount
AMOUNT_OUT_TOO_HIGH_OFFRAMP400Off-ramp amountOut must be less than 26k BRLAReduce the output amount or contact support for higher limits
AMOUNT_IN_TOO_LOW_ONRAMP400On-ramp amountIn must be greater than 5 BRLAIncrease the input amount
AMOUNT_IN_TOO_HIGH_ONRAMP400On-ramp amountIn must be less than 75k BRLAReduce the input amount or contact support for higher limits
AMOUNT_OUT_TOO_LOW_ONRAMP400On-ramp amountOut must be greater than 1 USDCIncrease the output amount
AMOUNT_OUT_TOO_HIGH_ONRAMP400On-ramp amountOut must be less than 15k USDCReduce the output amount or contact support for higher limits

Bridge Errors

CodeHTTP StatusDescriptionResolution
TRANSFER_VALIDATION_FAILED400Token transfer validation failedVerify the token address, chain, and transfer amount
INSUFFICIENT_AMOUNT_FOR_REFUND400Transferred amount is insufficient to cover the refund feeIncrease the transfer amount to cover bridge fees
DEPOSIT_NOT_FOUND404Bitcoin deposit not foundWait for on-chain confirmation or check the deposit address

General Errors

CodeHTTP StatusDescriptionResolution
INTERNAL_SERVER_ERROR500An unexpected error occurredRetry the request — if the issue persists, contact support
SYMBIOSIS_API_ERROR502Error communicating with the Symbiosis bridge APIRetry after a short delay — this is usually transient

Authentication Errors

CodeHTTP StatusDescriptionResolution
401No API key providedInclude x-api-key header in your request
401Invalid API keyVerify your API key at deframe.io
429Rate limit exceededWait for the retry window — see retryAfter in the response body

Rate Limit Response

When you hit a rate limit, the body matches the same envelope, for example:
{
  "error": {
    "code": "RATE_LIMITED",
    "message": "Too many requests"
  }
}
Some endpoints also send a Retry-After response header (seconds). Prefer that header when present. See Authentication for rate limit details.