> ## Documentation Index
> Fetch the complete documentation index at: https://docs.facetime.trychert.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Errors & Failure Semantics

> Every failure is named and machine-readable.

<h2 id="error-response">
  Error response
</h2>

```json theme={null}
{ "error": { "code": "line_busy", "message": "Line is on an active call." } }
```

<h2 id="error-codes">
  Error codes
</h2>

| Code                         | Meaning                                                 |
| ---------------------------- | ------------------------------------------------------- |
| `unauthorized / forbidden`   | Bad key, missing project header, or insufficient scope  |
| `line_busy`                  | The line is already on a call                           |
| `line_unavailable`           | No answerable worker because it is offline or not ready |
| `assistant_not_published`    | The assigned assistant has no active version            |
| `invalid_token_grants`       | A Model 3 token lacks publish or subscribe grants       |
| `participant_not_found`      | The named participant did not join in time              |
| `session_expired`            | The session or token is past expiry                     |
| `webhook_timeout_declined`   | The inbound decision deadline was missed                |
| `readiness_evidence_expired` | The line is pending readiness re-verification           |

<Tip>
  **Nothing fails into silence**

  Calls end with a terminal reason, readiness gates identify the failed check, and webhook payloads carry the reason.
</Tip>
