# Aggregated usage over a period

GET /v1/usage: Aggregated usage over a period

```http
GET /v1/usage
```

|  |  |
|---|---|
| Operation id | `getUsage` |
| Key scope | `read`: every key |
| Section | [Usage](https://docs.kaab.ist/reference/api#usage) |

## Parameters

| Name | In | Type | Required | Description |
|---|---|---|---|---|
| `from` | query | string (date-time) | yes |  |
| `to` | query | string (date-time) | yes |  |
| `group_by` | query | `"day"`, `"program"`, `"tier"`, `"tag"` |  | default `"day"` |

## Example request

```bash
curl -X GET "https://api.kaab.ist/v1/usage" \
  -H "Authorization: Bearer $KAAB_API_KEY"
```

## Responses

### 200

Usage

| Field | Type | Required | Description |
|---|---|---|---|
| `data` | object[] | yes |  |
| `data[].key` | string | yes |  |
| `data[].jobs` | integer | yes | ≥ 0 |
| `data[].credits` | number | yes |  |
| `data[].compute` | number | yes |  |
| `data[].proxy_mb` | number | yes |  |
| `data[].llm_tokens` | number | yes |  |
| `data[].captcha` | number | yes |  |

## Errors

Every error answers with the [error envelope](https://docs.kaab.ist/reference/api/schemas/error-response); its `code` is one of the [error codes](https://docs.kaab.ist/reference/codes#errors).

| Status | When |
|---|---|
| 400 | `request_invalid`: request validation failed |
| 401 | Missing or invalid API key |
| 403 | The key's scope does not cover this operation |
| 429 | Rate limited; see `Retry-After` |
| 500 | `internal`: unexpected server error |
