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

# Rate Limits

> Per-account scoring model and retry strategies

# Rate Limits

The API uses a per-account scoring model with in-memory tracking.

## Scoring model

Each API call costs points based on the operation type:

| Operation                            | Cost     |
| ------------------------------------ | -------- |
| Read (GET, list, search)             | 1 point  |
| Write (POST, create, update, delete) | 3 points |

## Limits by environment

| Environment | Max Score    | Window    |
| ----------- | ------------ | --------- |
| Development | 60 points    | 5 minutes |
| Production  | 9,000 points | 5 minutes |

Points decay over the window period — you don't need to wait for the full window to reset.

## Rate limit response

When you exceed the limit, the API returns:

```json theme={null}
{
  "error": "Rate limit exceeded",
  "code": "RATE_LIMITED"
}
```

**HTTP Status:** `429 Too Many Requests`

## Retry strategy

When rate limited:

1. Wait for the `Retry-After` header value (in seconds)
2. If no header, use exponential backoff starting at 5 seconds
3. Maximum 3 retries before failing

## Upstream platform limits

Each ad platform has its own rate limits that are separate from ours:

| Platform               | Limit                                     | Notes                           |
| ---------------------- | ----------------------------------------- | ------------------------------- |
| Meta Graph API         | Varies by endpoint                        | Business Use Case rate limiting |
| LinkedIn Marketing API | 100 calls/day (dev), higher in production | Per-application limits          |
| Google Ads API         | 15,000 requests/day (basic)               | Developer token tier-based      |

The API handles upstream rate limits with automatic retries (3 retries with backoff). If upstream limits are exhausted, the error is passed through to you.
