> ## Documentation Index
> Fetch the complete documentation index at: https://demo-travel.webbinghub.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Errors, traces and supplier health

> Every Omnibeds failure answers in one format with a plain reason and, when unexpected, a trace id. See the error codes, the Inspector, retention and the Health page.

In Omnibeds a failure is explained, never hidden. Every error a user sees carries a reason in plain words, and an unexpected one also carries the id of a trace that holds the technical detail and the supplier payloads.

## One error format

Every failed API call answers with the same body:

```json theme={null}
{
  "error": "FORBIDDEN",
  "message": "A reason written for the user.",
  "traceId": "present only when the failure was logged"
}
```

Some errors add fields: `issues` for invalid input, `problems` when a room rule is broken, and `check` when an offer was refreshed.

There are two kinds of failure:

* **An expected refusal** (a rule, a missing record, a stale price) answers with its code and message. Nothing is logged.
* **Anything else** is explained, logged as a trace, and answered with the trace's id. In the screen, the error offers **Open log**, which opens that trace in the Inspector in a new window.

## Common codes

| Code | Status | Meaning |
| - | - | - |
| `INVALID_REQUEST` | 400 | The input didn't match the command's schema; the first bad field is named |
| `INVALID_JSON` | 400 | The body wasn't valid JSON |
| `FORBIDDEN` | 403 | The user's role doesn't have the permission |
| `MODULE_OFF` | 403 | The agency turned this module off |
| `PRESENTER_REQUIRED` | 403 | The data belongs to a confidential supplier |
| `NOT_FOUND` | 404 | The record doesn't exist (or isn't this agency's) |
| `OFFER_REFRESHED` | 409 | Nothing was booked: the offer changed; the body carries the new price check |

Quote rules that aren't listed above answer 409.

## Traces and the Inspector

Every search, price check, booking and cancellation is recorded as a trace: one span per supplier step, with timings, retries, whether the cache answered, and the raw request and response next to what we made of it.

* Traces are kept for 7 days, and at most the newest 300.
* Secrets in payloads are masked before they are stored.
* Confidential suppliers' payloads are only shown in presenter mode. See [Confidential suppliers](https://demo-travel.webbinghub.io/docs/suppliers/confidential.md).
* Very large payloads are shown as a preview with a download, so the Inspector stays fast.

## Health

The Health page is computed from the same spans: for each supplier, the median and 95th-percentile latency, error and timeout counts, the cache hit ratio and the circuit breaker's state.

## API usage

The API usage page counts live calls to real suppliers per day, so you can see how much of each quota is used. A small counter in the top bar shows the same.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.