Quote rejections
These come back asINVALID_ARGUMENT. The request needs to change before it will succeed.
Temporary conditions
These come back asUNAVAILABLE. The same request may succeed shortly after, so retry with backoff rather than surfacing a hard failure.
insufficient inventory is a size problem, not an outage. If your interface can suggest a smaller amount, that is a better response than an error.Auth and limits
Address screening
Every address that receives or sends funds is screened. A flagged address comes back asPERMISSION_DENIED, and the same request will not succeed with that address.
Screening runs again on the depositor,
recipient, and refund_address right before an order is filled. An order flagged at that point is refunded to refund_address; see Refunds.
Retry policy
GetQuote in a tight loop to force inventory to appear; it is rate limited and the answer will not change within a second.
Failures after the deposit
Once a deposit lands, nothing surfaces as an API error. Failure is expressed as order state instead: the order routes to a refund, or to one of the terminal failure states. Handle those in the tracking path, not in error handling. See Order lifecycle.Reverts on chain
Stale swap calldata is the most common one. Fetch instructions immediately before sending, not at quote time.