Documentation Index
Fetch the complete documentation index at: https://docs.deframe.io/llms.txt
Use this file to discover all available pages before exploring further.
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
| Code | HTTP Status | Description | Resolution |
|---|
QUOTE_NOT_FOUND | 404 | Quote not found or expired | Request a new quote — quotes are valid for 5 minutes |
QUOTE_EXPIRED | 400 | Quote has expired | Request a new quote using the same parameters |
QUOTE_GENERATION_FAILED | 400 | Could not generate a quote for the specified parameters | Verify token addresses, chain names, and amount format |
QUOTE_VALIDATION_ERROR | 400 | Quote validation failed | Check that quoteId and rawQuote match the original quote response |
Swap Errors
| Code | HTTP Status | Description | Resolution |
|---|
NO_ROUTE_FOUND | 400 | No swap route available between the specified chains or tokens | Try a different token pair or check supported networks |
PROVIDER_NOT_FOUND | 404 | Swap provider not found for the requested route | Use a supported chain and token combination |
BYTECODE_GENERATION_FAILED | 500 | Failed to generate transaction bytecode | Retry the request — if the issue persists, contact support |
SWAP_EXECUTION_FAILED | 500 | Failed to execute the swap transaction | Verify wallet balance, allowance, and gas fees |
Validation Errors
| Code | HTTP Status | Description | Resolution |
|---|
INVALID_AMOUNT_PARAMS | 400 | Cannot specify both amountIn and amountOut simultaneously | Use only one of amountIn or amountOut per request |
MISSING_AMOUNT_PARAMS | 400 | Either amountIn or amountOut is required | Include at least one amount parameter in the request |
AMOUNT_IN_TOO_LOW | 400 | amountIn is below the minimum threshold (1 USDC) | Increase the input amount |
AMOUNT_IN_TOO_HIGH | 400 | amountIn exceeds the maximum threshold (3,000 USDC) | Reduce the input amount or contact support for higher limits |
Bridge Errors
| Code | HTTP Status | Description | Resolution |
|---|
TRANSFER_VALIDATION_FAILED | 400 | Token transfer validation failed | Verify the token address, chain, and transfer amount |
INSUFFICIENT_AMOUNT_FOR_REFUND | 400 | Transferred amount is insufficient to cover the refund fee | Increase the transfer amount to cover bridge fees |
DEPOSIT_NOT_FOUND | 404 | Bitcoin deposit not found | Wait for on-chain confirmation or check the deposit address |
General Errors
| Code | HTTP Status | Description | Resolution |
|---|
INTERNAL_SERVER_ERROR | 500 | An unexpected error occurred | Retry the request — if the issue persists, contact support |
SYMBIOSIS_API_ERROR | 502 | Error communicating with the Symbiosis bridge API | Retry after a short delay — this is usually transient |
Authentication Errors
| Code | HTTP Status | Description | Resolution |
|---|
| — | 401 | No API key provided | Include x-api-key header in your request |
| — | 401 | Invalid API key | Verify your API key at deframe.io |
| — | 429 | Rate limit exceeded | Wait 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.