> ## Documentation Index
> Fetch the complete documentation index at: https://servo.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Errors

> What each error means and what to do next.

Every Servo error is a `ServoError` with `code`, `message`, and optional `detail`. Start from the named field or resource, because a retry does not fix an invalid input, a missing role, or an incompatible contract. Something that went wrong on the robot without an error starts from the report and the recording in [First motion](/guides/first-motion).

## Errors by class

| Error                                              | When                                                                        | Next step                                                                                            |
| -------------------------------------------------- | --------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| `Unauthorized`                                     | No sign-in, or an expired one                                               | `servo login`; `servo whoami` says who you are                                                       |
| `PermissionDenied`                                 | You hold no role, or a lower one, on that robot; the message names the role | Ask a robot admin for `servo access grant`                                                           |
| `NotFound`                                         | A path, robot, deployment, or session does not exist                        | Check the name; for a private bucket, `servo source verify`                                          |
| `ActionSpaceIncompatible`, `EmbodimentUnsupported` | The checkpoint does not match the robot type or its camera and state layout | Read `report.reasons` from `model.inspect`                                                           |
| `ModelNotServable`                                 | Inspection found an unsupported model family or an incomplete export        | Check the files; contact the Servo team with the path                                                |
| `ObservationInvalid`                               | A camera role or the state is missing, wrongly shaped, or wrongly typed     | The message names the role; check that camera with `servo robot show`                                |
| `NotReady`                                         | The deployment is still loading                                             | `deployment.wait`, or `servo deployment wait`                                                        |
| `ServingDeadlineExceeded`                          | One prediction missed its deadline                                          | Check `servo deployment show`; retry only if another isolated prediction is still useful             |
| `ServingUnavailable`, `ServingCapacityExceeded`    | Capacity is gone or full                                                    | `servo deployment list`; wait, or stop what you no longer need                                       |
| `StaleGeneration`                                  | The deployment changed under an open session                                | Start a new session when the change is intended                                                      |
| `PayloadTooLarge`                                  | An observation exceeded the request limit                                   | Send frames as captured, with no extra channels; check the camera geometry with `servo episode show` |

## Read a hardware error

`attach` fails before any observation and names the role, the device it expected, and the condition, such as a camera that produced no frames.

## Keep the request id

Around a prediction call, catch the error to keep its code and request id:

```python robot computer theme={null}
import servo

sv = servo.Servo()
robot = sv.robots.attach("yam-cell-01")
deployment = sv.models.get("hf://allenai/MolmoAct2-BimanualYAM").deploy()
deployment.wait(timeout_s=900)
session = deployment.start(robot, instruction="pick up the red cup")

try:
    chunk = session.predict(robot)
except servo.ServoError as error:
    print(error.code, error.message, error.detail)
    raise
```

A network interruption raises a transport exception instead, and the absence of a response does not say whether the model ran. For support, keep the error code, the request id from `detail`, the deployment id, and the episode path.
