| 400 | No path found | No route exists between the two assets for that amount, with the venues in protocols | No | Add venues to protocols, try a smaller amount, or check that both assets have liquidity |
| 400 | Invalid Stellar address | assetIn or assetOut is not a contract address, for example CODE:ISSUER | No | Send contract addresses (C...); see Stellar gotchas |
| 400 | amount must be a positive integer number of stroops | amount is zero or negative | No | Send the amount in the asset’s smallest unit, as a positive integer string |
| 400 | Amount too small: the fee leaves nothing to swap | The fee takes the whole EXACT_IN amount | No | Send a larger amount |
| 400 | Each value in protocols must be a supported protocol | protocols is missing or has an unknown value | No | Send values from GET /protocols?network=... |
| 400 | Unsupported network: ... | ?network= is not mainnet or testnet | No | Send ?network=mainnet or ?network=testnet |
| 400 | Slippage tolerance must be between 0 and 10000 bps | slippageBps out of range or not a whole number | No | Send a whole number of basis points: 50 is 0.5% |
| 400 | sdex is not available for contract (C) addresses; include at least one Soroban protocol | from or to is a contract and sdex was the only venue | No | Add a Soroban venue to protocols; see Routing through SDEX |
| 400 | Soroban routes deliver to the signing account only: to must equal from (or be omitted) | /quote/build on a Soroban route with a different to | No | Leave to out, or send the output to the other account in a separate payment |
| 400 | invalid version byte. expected 48, got 16 | from on /quote/build is a contract (C...) | No | Smart wallets execute from the contract path; see Stellar gotchas |
| 400 | Gasless trustline is only supported with SDEX | gaslessTrustline without sdex in protocols | No | Add sdex, or drop gaslessTrustline; see Gasless Trustline |
| 400 | sponsor is required when gaslessTrustline is ... | A gasless trustline build or swap without sponsor | No | Send the sponsor’s G... address |
| 400 | Simulation Failed | The transaction fails when simulated. errorCode is the contract error, for example 10 (TokenError.InsufficientBalance) | No | Read errorCode and extra, fix the account state (balance, reserve) and build again |
| 400 | Invalid contract address, not a soroswap contract | /send got a Soroban transaction that does not call a venue the API routes through | No | Submit it through your own Soroban RPC, or send only XDRs built by the API |
| 400 | Transaction Failed | /send submitted the transaction and the network rejected it, for example tx_too_late | No | Read detail and extra; quote and build again before you resubmit. Never resend the same XDR |
| 409 | Quote stale | Your partner fee changed between /quote and /quote/build, so the quote’s fee no longer matches | No | Quote again and build from the new quote |
| 428 | CREATE_TRUSTLINE | The receiving account has no trustline for an asset of the route | After the prerequisite | Sign and submit actionData.xdr, then build again, or use Gasless Trustline |
| 429 | Rate limit exceeded | You are over your plan’s request rate | Yes | Wait Retry-After seconds (also retryAfter in the body); see Plans and rate limits |
| 500 | Internal server error | Seen when amount has a decimal point, for example "10.5" | No | Send an integer string. If your input was valid, report it with the request body |
| 503 | Routing unavailable | The routing service could not answer. Also returned when assetIn or assetOut is a G... address | Yes, if your addresses are C... | Retry with backoff. If it persists for one pair only, check the asset addresses |