# client.approvals.reviewers

> client.approvals.reviewers — the approvals.reviewers operations.

`client.approvals.reviewers` — the `approvals.reviewers` operations.

On `AsyncKindgi` every method is the same, awaited.

## `client.approvals.reviewers.list()`

```python signature
list(
    *,
    limit: int | None = None,
    cursor: str | None = None,
    role: Literal['standard', 'senior', 'admin'] | None = None,
    timeout: float | None = None,
) -> ReviewerCollectionPage
```

List reviewers registered for the caller's tenant. `GET /v1/approvals/reviewers`

Cursor-paginated. Optional `?role=` narrows to a specific role class. The roster names people: with authorization on, a tenant admin or a reviewer (a role on the token, or one the roster gives the user) reads it, and anyone else gets `403 permission-denied`.

## `client.approvals.reviewers.register()`

```python signature
register(
    body: RegisterReviewerBody | Mapping[str, Any] | None = None,
    /,
    *,
    idempotency_key: str | None = None,
    timeout: float | None = None,
    **fields: Any,
) -> Reviewer
```

Register a reviewer. `POST /v1/approvals/reviewers`

Idempotent by `(tenantId, userId)`. Re-registering rotates role/displayName rather than inserting a duplicate row.

## `client.approvals.reviewers.get()`

```python signature
get(reviewer_id: str | UUID, /, *, timeout: float | None = None) -> Reviewer
```

Fetch a reviewer. `GET /v1/approvals/reviewers/{reviewerId}`

With authorization on, a tenant admin or a reviewer reads it, as the roster; anyone else gets `403 permission-denied`.

## `client.approvals.reviewers.unregister()`

```python signature
unregister(
    reviewer_id: str | UUID,
    /,
    *,
    idempotency_key: str | None = None,
    timeout: float | None = None,
) -> UnregisterReviewerResult
```

Unregister (soft-delete) a reviewer. `POST /v1/approvals/reviewers/{reviewerId}/unregister`

Soft-delete so the audit trail survives — reviewer stops receiving new approvals but historical decisions still resolve.
