Errors
Error envelope, codes and what to do next
Errors that happen before a run exists use one envelope:
When a run was created and then blocked or failed, the response is the Run itself with status and error, so you always keep the run_id. Hints are generated by AgentRouter; provider text never becomes a hint.
Refused before anything runs (never charged)
Blocked runs (recorded, never charged)
These come back as a Run with status: BLOCKED, error.origin: client and billing.reason: blocked_before_execution.
Blocked runs do not automatically resume when balance or limits change. After resolving the cause, invoke again with a new Idempotency-Key if you use one; the old key keeps returning the original blocked run.
Failed runs
TIMED_OUT and STOPPED runs are not charged either.