Virtual keys can carry spend budgets and request-rate limits, enforced inline on the hot path. When a key is limit-configured, successful responses carry advisory x-ratelimit-* headers so clients can self-pace.
| Status | When | Headers |
|---|---|---|
| 402 | Budget exhausted (routeplane_budget_exceeded). | Retry-After, x-routeplane-limit-* |
| 429 | Rate limit exceeded (routeplane_rate_limit_exceeded). | x-ratelimit-*, Retry-After |
Both responses use the OpenAI error envelope with truthful, non-advisory header values, the Retry-After reflects the real window.