Errors are gRPC statuses. The code tells you whether to retry; the message tells you why.

Quote rejections

These come back as INVALID_ARGUMENT. The request needs to change before it will succeed.

Temporary conditions

These come back as UNAVAILABLE. 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

Retry policy

Retry reads freely. Do not retry 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.