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

# Harnesses

> Every published harnesses operation, generated from the contract.

12 operations on `client.harnesses`, including `harnesses.sessions`, `harnesses.traces`.

Path parameters come first, positionally; the request body is last, as a plain
object. Method names are `snake_case` in Python and `camelCase` in
TypeScript, and resource names follow the same rule.

<CodeGroup>
  ```python Python theme={null}
  result = client.harnesses.aggregate(body)
  ```

  ```typescript TypeScript theme={null}
  const result = await client.harnesses.aggregate(body);
  ```
</CodeGroup>

## Operations

| Call                                                       | Route                                                          | Does                                 |
| ---------------------------------------------------------- | -------------------------------------------------------------- | ------------------------------------ |
| `client.harnesses.aggregate(body)`                         | `POST /agent/v1/harnesses/aggregate`                           | Aggregate harnesses                  |
| `client.harnesses.archive(harness_id)`                     | `POST /agent/v1/harnesses/{harness_id}/archive`                | Archive a harness                    |
| `client.harnesses.create(body)`                            | `POST /agent/v1/harnesses`                                     | Register a harness                   |
| `client.harnesses.get(harness_id)`                         | `GET /agent/v1/harnesses/{harness_id}`                         | Get a harness                        |
| `client.harnesses.list()`                                  | `GET /agent/v1/harnesses`                                      | List harnesses                       |
| `client.harnesses.search(body)`                            | `POST /agent/v1/harnesses/search`                              | Search harnesses                     |
| `client.harnesses.update(harness_id, body)`                | `PATCH /agent/v1/harnesses/{harness_id}`                       | Update a harness                     |
| `client.harnesses.sessions.list(harness_id)`               | `GET /agent/v1/harnesses/{harness_id}/sessions`                | List a harness's sessions            |
| `client.harnesses.traces.get(harness_id, trace_id)`        | `GET /agent/v1/harnesses/{harness_id}/traces/{trace_id}`       | Read one trace for a harness         |
| `client.harnesses.traces.list(harness_id)`                 | `GET /agent/v1/harnesses/{harness_id}/traces`                  | List traces for a harness            |
| `client.harnesses.traces.list_spans(harness_id, trace_id)` | `GET /agent/v1/harnesses/{harness_id}/traces/{trace_id}/spans` | List spans in a trace for a harness  |
| `client.harnesses.traces.query_stats(harness_id, body)`    | `POST /agent/v1/harnesses/{harness_id}/traces/stats/query`     | Query trace statistics for a harness |

## Related

<CardGroup cols={2}>
  <Card title="How the client is organised" icon="list" href="/sdk/operations">
    Resources, call shapes, and errors.
  </Card>

  <Card title="Errors and retries" icon="triangle-exclamation" href="/developers/errors-and-retries">
    What the SDK raises, and which calls are safe to retry.
  </Card>
</CardGroup>
