---
title: "List triager invites"
method: GET
path: "/v1/invites/triager/"
tags: ["invites"]
---

# List triager invites

`GET /v1/invites/triager/`

## Request

- Base URL: `https://api.ethiack.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.ethiack.com/v1/invites/triager/`
- Auth: none declared

List triager invites visible to the caller, filtered + paginated.

Args:
    db (AsyncSession): Request-scoped database session.
    context (ActiveContext): Resolved caller identity and scope.
    query (TriagerInviteListQuery): Email filter + pagination.
    pager (Paginator): Fills the response's navigation metadata.

Returns:
    TriagerInviteListResponse: The authorized, paginated invite list.

## Query parameters

- `page` integer
- `per_page` integer: Page size. Values above 500 are clamped to it (or rejected, per REST__PAGINATION__PER_PAGE_OVER_MAX).
- `email` string, nullable

## Response `200`

Successful Response

- TriagerInviteListResponse: Paginated triager-invite list. ``total`` / ``page`` / ``per_page`` are redeclared as **required** for the same reason as :class:`OrganizationInviteListResponse`. Attributes: total (int): Total invites matching the filters. page (int): Current page number. per_page (int): Page size. invites (list[TriagerInviteResponse]): The page of invites.
  - `total` integer, required
  - `page` integer, required
  - `per_page` integer, required
  - `_links` object, nullable: RFC 8288 rel to URL. Always first; last unless the route opted out of counting; prev and next when applicable.
  - `invites` TriagerInviteResponse[], required
    - `id` integer, required
    - `kind` 'organization' | 'partner' | 'triager', required: Which user kind an account invite grants on redemption. Doubles as the joined-table-inheritance discriminator: ``TRIAGER`` is the base :class:`Invite` (no grant payload); ``ORGANIZATION`` / ``PARTNER`` select the typed child. Attributes: ORGANIZATION: Membership in the invite's organization. PARTNER: Membership in the invite's partner. TRIAGER: The triager kind (platform-scoped, no payload).
    - `email` string, required
    - `status` 'pending' | 'redeemed' | 'revoked', required: The single terminal-state of an invite's lifecycle. A live invite is ``PENDING``; it moves once, irreversibly, to exactly one terminal state. Modelling this as one enum (rather than separate per-outcome timestamps) makes "redeemed AND revoked" unrepresentable rather than merely constraint-guarded, and mirrors :class:`~phoenix.db.models.pentest_hacker_invite.PentestHackerInviteStatus`. Expiry is NOT a member — it is passive and time-derived from ``expires_at``. Attributes: PENDING: Live and awaiting redemption (paired with a null ``resolved_at``). REDEEMED: Consumed by its invitee. REVOKED: Rescinded by a manager before redemption.
    - `created_at` string, date-time, required
    - `expires_at` string, date-time, required
    - `resolved_at` string, date-time, nullable, required
    - `redeemed_by_user_id` string, nullable, required
    - `expired` boolean, required
    - `live` boolean, required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/ethiack/apis/ethiack-api.md) - [All operations](https://skmtc.dev/ethiack/apis/ethiack-api/llms.txt) - [OpenAPI document](https://skmtc.dev/ethiack/apis/ethiack-api/revisions/4eaba89bfebf?raw)
