# Errors

Errors use a public response body that is safe for partners to log and send to Percents support.

```json
{
  "uuid": "err_aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
  "code": 400101,
  "httpStatusCode": 400,
  "message": "Invalid request",
  "reasonCode": "missing_required_field",
  "details": {
    "field": "cardId"
  }
}
```

| Field | Meaning |
|  --- | --- |
| `uuid` | Unique error instance id. It uses the `err_` prefix and is the value support uses to find the exact failure. |
| `code` | Error class. Use this for durable handling when a workflow needs to branch by error category. |
| `httpStatusCode` | HTTP status code associated with the response. |
| `message` | Public human-readable message. |
| `name` | Optional public error name. |
| `reasonCode` | Optional machine-readable reason within the error class. |
| `details` | Optional public structured context. Values are strings, numbers, booleans, or null. |


Private messages, stack traces, internal model names, and internal diagnostics are not part of the public error body.

## Handling Guidance

- Log the full public error response.
- Show only appropriate public copy to cardholders.
- Include `uuid` when escalating to Percents.
- Do not parse `message` for workflow decisions.
- Treat missing optional fields as normal.