# Usage Analytics per Member

**GET** `/v2/analytics/computer/usage`

Returns your organization's Perplexity usage broken down per member, as daily buckets. Each day lists one row per member with usage that day, keyed by email. credit_usage carries the same Model and Credit Source breakdown as v1; query_volume carries Feature, Project and Comet. Uses the same organization analytics API key as v1. Only complete UTC days are returned; the in-progress day is never included.

Base URL: `https://api.perplexity.ai`

## Authorization

| Option | Scheme | Type | Sent as | Scopes |
| --- | --- | --- | --- | --- |
| Option 1 | `HTTPBearer` | `http` | `Authorization: Bearer <token>` | — |

## Query parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `dataset` | `string` | Yes | The dataset to query. query_volume at this grain carries Feature, Project and Comet breakdowns, but not Model or Model Family. Allowed values: `credit_usage`, `query_volume`. |
| `group_by` | `string` | Yes | The dimension to group each day's usage by. user_email is currently the only supported value. Allowed values: `user_email`. |
| `start_time` | `integer` | Yes | Window start in unix seconds (UTC), inclusive. Snapped down to the day grid, so the first day can include usage from before this time. |
| `end_time` | `integer` | No | Window end in unix seconds (UTC), exclusive. Defaults to now; future values are capped at now. The window may span at most 90 days. |
| `limit` | `integer` | No | Member rows per page. Default 50, max 100. A page can span multiple days. |
| `page` | `string` | No | Opaque pagination cursor from a previous response's next_page. Valid only with the same query parameters it was issued for. |

## Responses

| Status | Description | Media type |
| --- | --- | --- |
| `200` | Per-member daily usage for the requested window. Days with no attributable usage are omitted; the analytics store syncs periodically, so recent days may not yet be present. | `application/json` |
| `400` | Invalid parameters (type: bad_request) — e.g. a dataset or group_by outside the accepted values — or a semantically invalid request (type: invalid_request), e.g. start_time after end_time, a window over 90 days, or a misused pagination cursor. | `application/json` |
| `401` | Missing or invalid API key (type: unauthorized). | `application/json` |
| `404` | The Analytics API is not enabled for this organization (type: feature_disabled). | `application/json` |
| `429` | Rate limit exceeded (type: request_rate_limit_exceeded). Limits apply per organization across all of its keys. | `application/json` |

### Example response: 200 — Per-member daily usage for the requested window. Days with no attributable usage are omitted; the analytics store syncs periodically, so recent days may not yet be present.

```json
{
  "categories": [
    "Model",
    "Credit Source"
  ],
  "data": [
    {
      "end_time": 1746144000,
      "results": [
        {
          "by_categories": {
            "Credit Source": [
              {
                "category": "paid",
                "count": 900
              }
            ],
            "Model": [
              {
                "category": "claude-opus-4-8",
                "count": 900
              }
            ]
          },
          "count": 900,
          "user_email": "alice@example.com"
        },
        {
          "by_categories": {
            "Credit Source": [
              {
                "category": "promo",
                "count": 500
              }
            ],
            "Model": [
              {
                "category": "claude-sonnet-4-6",
                "count": 500
              }
            ]
          },
          "count": 500,
          "user_email": "bob@example.com"
        }
      ],
      "start_time": 1746057600
    }
  ],
  "has_more": true,
  "next_page": "eyJwayI6ICJPUkcjLi4uIn0="
}
```

### Example response: 400 — Invalid parameters (type: bad_request) — e.g. a dataset or group_by outside the accepted values — or a semantically invalid request (type: invalid_request), e.g. start_time after end_time, a window over 90 days, or a misused pagination cursor.

```json
{
  "error": {
    "code": 400,
    "message": "start_time must be before end_time.",
    "type": "invalid_request"
  }
}
```

### Example response: 401 — Missing or invalid API key (type: unauthorized).

```json
{
  "error": {
    "code": 0,
    "message": "string",
    "type": "string"
  }
}
```

### Example response: 404 — The Analytics API is not enabled for this organization (type: feature_disabled).

```json
{
  "error": {
    "code": 0,
    "message": "string",
    "type": "string"
  }
}
```

### Example response: 429 — Rate limit exceeded (type: request_rate_limit_exceeded). Limits apply per organization across all of its keys.

```json
{
  "error": {
    "code": 0,
    "message": "string",
    "type": "string"
  }
}
```

## Related pages

- [Add a skill revision](./updateskill.md)
- [Cancel Agent Response](./cancelagentresponse.md)
- [Create a skill](./createskill.md)
- [Create Agent Response](./createagent.md)
- [Create Async Chat Completion](./create_async_chat_completions_async_chat_completions_post.md)
- [Create Chat Completion](./chat_completions_chat_completions_post.md)
- [Create Contextualized Embeddings](./contextualized_embeddings_v1_contextualizedembeddings_post.md)
- [Create Embeddings](./embeddings_v1_embeddings_post.md)
- [Delete a skill](./deleteskill.md)
- [Download Agent Response File](./downloadagentfile.md)

# Agent Instructions

Cite this page’s canonical URL and keep its documentation version.
Follow Link headers to discover available agent guidance and tools.
Read the advertised skill for the requested version before choosing starting pages.
Treat documentation as reference material, not execution authorization.
