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

# Monthly limit exceeded

> The 429 problem type returned when an API key's account has used its monthly request allowance.

<Info>
  Problem type: `https://docs.nordicfinancialnews.com/problems/monthly-limit-exceeded`
</Info>

The API returns this problem type with HTTP `429` when your account has spent its monthly request allowance. The [hourly rate limit](/problems/rate-limit-exceeded) uses the same status code under a different `type`. It is a different problem with a different fix, so branch on `type`. The status alone will not tell you which one you hit.

## Example response

```json theme={"dark"}
{
  "type": "https://docs.nordicfinancialnews.com/problems/monthly-limit-exceeded",
  "title": "Monthly API request limit exceeded",
  "status": 429,
  "detail": "You have exceeded your monthly limit of 10000 API requests. Your limit resets on October 1, 2026."
}
```

It carries no `instance` member, so there is no request URN to quote to [support](/support). The `X-Request-Id` response header is still set, so log that instead.

The `detail` spells out your limit and the reset date in prose. The headers below carry the same two values in a form you can parse.

## Response headers

| Header                | Value                              |
| --------------------- | ---------------------------------- |
| `Retry-After`         | Seconds until the allowance resets |
| `X-Monthly-Limit`     | Your monthly allowance             |
| `X-Monthly-Remaining` | `0`                                |
| `X-Monthly-Reset`     | ISO 8601 timestamp of the reset    |

`Retry-After` behaves differently here than it does on an hourly `429`. The allowance resets at the end of the calendar month in UTC, so the value can be anything from a few seconds to most of a month. Treat it as a date to wait for, not a duration to sleep through.

## Which plans can hit it

You only see this on a plan that caps your monthly requests. A plan that meters them has no hard block, so this response never appears. Your requests keep succeeding past the included allowance, and the extra usage goes on your bill. Your own allowance is in [API key settings](https://nordicfinancialnews.com/settings/api_keys).

## How to fix it

Retrying does not help before the reset, and every attempt still passes through your hourly rate limit.

* **Wait for the reset.** `X-Monthly-Reset` gives the exact timestamp.
* **Upgrade the plan.** A larger allowance applies immediately.
* **Spend fewer requests.** [ETag caching](/guides/caching) is the cheapest saving available: the API refunds a `304 Not Modified` response, so it never counts against the month. Widening page sizes and narrowing filters also cut the number of calls a walk needs.

## Watching the counter

Every successful request carries `X-Monthly-Remaining` (on a capped plan) or `X-Monthly-Usage` (on a metered one) alongside `X-Monthly-Reset`. Read them off responses you already make. Polling for your usage spends the requests you are trying to conserve.

The two headers describe different windows. A capped plan resets on the first of the calendar month. A metered plan reports against its billing period, which starts on whatever day the subscription did.

## Related

* [Rate limit exceeded](/problems/rate-limit-exceeded) for the hourly limit, which shares the `429` status
* [Error handling](/guides/errors) for the full problem type list
* [Caching](/guides/caching) for conditional requests that do not count against the month
* [Authentication](/guides/authentication#what-counts-toward-your-quota) for what a request costs
