Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.rhinestone.dev/llms.txt

Use this file to discover all available pages before exploring further.

Every non-2xx response shares the same shape:
{
  "code": "INSUFFICIENT_LIQUIDITY",
  "message": "...",
  "traceId": "...",
  "details": { /* optional, code-specific */ }
}
Switch on code, not message. The full code/HTTP table lives in the versioning guide.
switch (err.code) {
  case "INSUFFICIENT_LIQUIDITY":
    // err.details: { availableIntents, unfillable }
    break;
  case "VALIDATION_ERROR":
    // err.details: [{ message, context? }]
    break;
  case "TOO_MANY_REQUESTS":
    // honour the Retry-After header
    break;
  default:
    // unknown codes — fall through to a generic error
    break;
}
The list is extensible — always include a default fallback for codes you don’t recognise.
The account balance can’t cover the requested tokens together with gas and fees, or the cost to claim funds (e.g. on Ethereum mainnet) is too high to fill profitably.details contains availableIntents (alternative routes you could fall back to) and unfillable (the routes that couldn’t be filled and why).Make sure the account is deployed and funded. For SDK users, the spendable amount utility gives an estimate of how much can be spent.
The request payload didn’t validate. Common causes:
  • Unsupported destinationChainId — check the supported chains.
  • Unsupported token address on the destination chain.
  • Mainnet chain ids on a development API key, or testnet chain ids on a production key.
  • Malformed CAIP-2 chain ids — they must be eip155:<chainId> strings.
  • Missing or unknown x-api-version header.
details is an array of { message, context? } entries.
The API key is missing or invalid. Pass it in x-api-key. Reach out to us if you need a key.Make sure you’re using a development API key for testnets and a production API key for mainnets.
POST /intents returns 404 when the intentId no longer exists server-side — typically because the quote TTL elapsed or the quote store was restarted.Re-quote and re-sign. Don’t retry the submit with the same intentId.
The signature didn’t validate against the account. Either the typed data was modified before signing, or the signer isn’t an authorised owner of the account.Forward signData.origin[] and signData.destination verbatim to signTypedData — don’t reconstruct the types client-side. For smart accounts, make sure the validator wraps the signature using its expected encoding.
Rate limited. Honour the Retry-After header before retrying.