> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pinakelai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Rate limits & usage

> Rate limit and quota policies, the RateLimit headers, 429 responses, and how calls are counted.

The [Rate limits & usage guide](https://docs.pinakelai.com/guides/rate-limits-and-usage.md) explains how to work within your limits. This page is the reference.

## Policies

| Policy | Window | Applies to | When exceeded |
| - | - | - | - |
| `minute` | The current UTC calendar minute | Every authenticated call made with the key, for any product | 429 [`rate-limited`](https://docs.pinakelai.com/errors/rate-limited) |
| `month` | The current UTC calendar month | Every counted call made with the key, for any product | 429 [`quota-exceeded`](https://docs.pinakelai.com/errors/quota-exceeded) |
| `concurrency` | Concurrent searches | `GET /v1/trademarks`, at most two at a time per key | 429 [`rate-limited`](https://docs.pinakelai.com/errors/rate-limited) after waiting up to 1 second |

The limits of your key are in `GET /v1/usage` (`rate_limit_per_minute`, `monthly_quota`) and in every response's `RateLimit-Policy` header. A key without a monthly quota has no `month` policy.

## Headers

Format: [draft-ietf-httpapi-ratelimit-headers-11](https://datatracker.ietf.org/doc/draft-ietf-httpapi-ratelimit-headers/11/).

```http theme={null}
RateLimit-Policy: "minute";q=600;w=60, "month";q=100000;w=2592000
RateLimit: "minute";r=573;t=41, "month";r=95210;t=1555200
```

| Parameter | In | Meaning |
| - | - | - |
| `q` | `RateLimit-Policy` | Quota: calls allowed per window |
| `w` | `RateLimit-Policy` | Window length in seconds (for `month`, the length of the current month) |
| `r` | `RateLimit` | Calls remaining in the current window |
| `t` | `RateLimit` | Seconds until the window resets |

`Retry-After` (seconds) is sent with every 429 and 503. There are no `X-RateLimit-*` headers. The syntax of `RateLimit` and `RateLimit-Policy` is outside the stability guarantee until the IETF draft is final.

## 429 responses

```json theme={null}
{
  "type": "https://docs.pinakelai.com/errors/rate-limited",
  "title": "Rate limit exceeded",
  "status": 429,
  "detail": "This key has used its 600 calls for the current minute.",
  "request_id": "req_01M7Q3ZT6V2X9B4C8D1F5G3H7J",
  "violated_policies": ["minute"]
}
```

`violated_policies` names the policy that refused the call: `minute`, `month` or `concurrency`.

## Counting

| Request | Counted |
| - | - |
| Any call that passes authentication, the rate limit and the quota, including 304 and batch retrieve | 1 |
| A search or feed continuation request (with `cursor`) that returns no records, or fails | 0 |
| A call refused with 401, 403 or 429 | 0 |
| `GET /v1/health`, `GET /v1/openapi.json` | 0 |

Refused calls still count toward the current minute's rate limit.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.