error result kind; run() never throws for them. On the blocking route the SDK retries a retryable failure once before resolving; streamed turns resolve without a retry. Schedule any second attempt for later and honour retryAfterMs when it is set.
Lifetimes
status() reports health: "expiring_soon" from 14 days out on either 90-day clock.
Rate limits
The budgets are deploy configuration, so no figures here. The keying is the contract:
Per grant is the one to pace: each customer budgets separately, so the traffic that hits it is yours, and one customer can never starve another. A 429 surfaces as
rate_limited.
Error codes
result.code is a closed set.
deployment_paused and deployment_incomplete never succeed on retry. Alert yourself rather than asking the customer to fix them mid-conversation.

