:::endpoint GET /v1/admin/tickets/summary

How many tickets wait for the team and since when the longest has waited, how
many the assistant is answering, how many wait on a trader, and of the open
ones how many are yours and how many nobody holds. The counters above Tickets
on the website. They count every ticket, whatever the
[list](/docs/api/admin/tickets) is filtered on.

`channel` is where the queue hears a ticket arrive, move or change hands while
the screen is open. Sign onto it with
[listen on a websocket](/docs/api/apps/realtime) and ask for the list again
when something arrives, rather than polling.

Needs a firm. Our own staff name one with the `Propper-Workspace` header.

## Request

```bash
curl "https://api.proppertrading.com/v1/admin/tickets/summary" \
  -H "Authorization: Bearer ptat_9f2c1a44_3b8e7d2f5c9a1b4e6d8f0a2c4e6b8d1f" \
  -H "Propper-Workspace: acme"
```

## Response

```json
{
    "data": {
        "object": "ticket_summary",
        "total": 80,
        "waiting": 8,
        "ai": 2,
        "trader": 4,
        "open": 14,
        "ended": 66,
        "mine": 4,
        "unassigned": 10,
        "oldest_waiting_at": "2026-08-17T14:05:19+00:00",
        "channel": "private-tenant-tickets.firm_jhmambx4gxzgc7kg"
    },
    "meta": {
        "request_id": "req_01m50ttwxe28190bnh8nswvjet"
    }
}
```

| Field               | Description |
| ------------------- | ----------- |
| `total`             | Every ticket the firm ever had |
| `waiting`           | Waiting for the team (`awaiting_admin`) |
| `ai`                | Being answered by the assistant (`open`) |
| `trader`            | Waiting on the trader (`awaiting_trader`) |
| `open`              | The three above together: every ticket that has not ended |
| `ended`             | Resolved and closed |
| `mine`              | Open tickets held by you or given to a team you are on |
| `unassigned`        | Open tickets with no agent and no team |
| `oldest_waiting_at` | Since when the ticket waiting longest for the team has waited, counted from the trader's last message. Null when none waits |
| `channel`           | The firm's ticket channel, see [listen on a websocket](/docs/api/apps/realtime#the-ticket-channels) |

## Errors

| Status | Code                      | Meaning                                                                         |
| ------ | ------------------------- | ------------------------------------------------------------------------------- |
| 400    | `workspace_required`      | Asked by our own staff without naming a firm                                    |
| 401    | `invalid_token`           | Not a token, or the secret does not match                                       |
| 401    | `revoked_token`           | Signed out here or from another device                                          |
| 401    | `expired_token`           | Ninety days without use, or a set expiry passed                                 |
| 403    | `admin_access_required`   | This account no longer helps run the environment                                |
| 403    | `insufficient_scope`      | This device does not hold `admin:read`                                          |
| 403    | `workspace_not_permitted` | The `Propper-Workspace` header names an environment this account cannot act in |
| 403    | `forbidden`               | Without `view_tickets`                                                          |