# Usage history (GET /v1/usage)

> GET /v1/usage: Usage history. border.bot API reference (Account).

Source: https://border.bot/docs/api/list-usage

> Documentation index: https://border.bot/llms.txt. Every page is Markdown at its URL + `.md`.

`GET https://api.border.bot/v1/usage`

Requires an API key (`Authorization: Bearer bb_live_…`).

Every billable request made by the workspace (dashboard, API and MCP), newest first, with cursor pagination.

API key scope: `account`.

## Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `limit` | integer | no | Page size (1–100). |
| `cursor` | string | no | Opaque cursor from a previous page. |
| `action` | "classify" \| "classify_max" \| "classify_regulator" \| "calculate" \| "calculate_stacking" \| "extract_product" \| "infer_origin" | no | Only this action. |

## Responses

- `200`: A page of usage events. (`UsageResponse`)
- `400`: Invalid input (`invalid_input`). (`Error`)
- `401`: Missing, invalid, revoked or expired API key (`unauthorized`). (`Error`)
- `403`: The API key doesn’t have the `account` scope (`forbidden`, `details.reason: "missing_scope"`). (`Error`)
- `429`: Rate limited (`rate_limited`). Retry after `Retry-After` seconds; `RateLimit` says which limit was hit (`r=0`, `t` seconds until its window ends) and `RateLimit-Policy` its quota. (`Error`)
- `500`: Unexpected error (`internal`). (`Error`)

## Example

```bash
curl -X GET 'https://api.border.bot/v1/usage' \
  -H 'Authorization: Bearer bb_live_...'
```
