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

# Rate Limits

> OutX does not enforce API rate limits. LinkedIn enforces per-action daily caps that apply to every call you make through OutX, whether via the dashboard or the API.

## OutX does not rate-limit the API

OutX does not enforce a request rate limit on the API. There is no per-minute, per-hour, or per-day cap on how often you can call any OutX endpoint, on any paid plan.

The real constraint is **LinkedIn**. Every action OutX performs (fetching a profile, posting a like, sending a message, etc.) runs through a real LinkedIn browser session. LinkedIn enforces its own per-action daily limits on every account, and those limits apply whether the call originates in the OutX dashboard, in our LinkedIn Data API, or anywhere else. OutX does not throttle, queue, or pace requests for you.

<Warning>
  **You are responsible for pacing.** OutX hands the request straight to LinkedIn. If you burst, the underlying LinkedIn account is what gets flagged, not your API key. This applies equally to UI usage and to direct LinkedIn Data API calls.
</Warning>

## API calls do not consume OutX credits

The "OutX Credits" on your plan apply only to **Sales Navigator export** and the **email finder** (1 credit per exported lead, 1 credit per email found). API calls of every kind, watchlist creation, post retrieval, likes, comments, profile fetches, are unlimited and do not consume credits.

## Recommended pace

This applies only to calls that result in a real LinkedIn action: the LinkedIn Data API (`/linkedin-agent/*`), `/api-like`, and `/api-comment`. Read endpoints like `GET /api-posts` or `GET /api-keyword-watchlist` are not constrained, you can call those as often as you want.

For LinkedIn-action calls, as a safe rule of thumb:

* **No more than \~50 LinkedIn-action calls per hour** combined
* **Spread them throughout the day** (a daily cron at the same minute is safer than 30 calls in 60 seconds)
* **Mix action types** when you can (alternating profile fetches with likes looks more natural to LinkedIn than 50 sequential likes)

If you are hitting any per-action daily limit (visible in Dashboard → Settings → Daily Usage Limits), you have two options: spread the work across more team members (each LinkedIn account carries its own daily quota), or wait for the 00:00 UTC reset.

## Per-action daily limits

There are two separate things to keep straight:

**The HTTP API has no rate limit.** You can call `POST /api-keyword-watchlist` to create a watchlist, then `GET /api-keyword-watchlist` to read it 100 times in an hour, then `PUT` to update it, then `DELETE` it. None of those calls are throttled by OutX, and none of them count against any daily quota. The watchlist and engagement endpoints (`/api-keyword-watchlist`, `/api-people-watchlist`, `/api-company-watchlist`, `/api-posts`, `/api-interactions`) are pure CRUD on your data.

**LinkedIn-side actions are capped per LinkedIn account per day.** Anything that hits LinkedIn (a keyword scan running because you created a keyword watchlist, a profile fetch via the LinkedIn Data API, a like, a comment, etc.) draws from a daily allowance LinkedIn enforces on each account. These are the limits below.

| Action                 | What runs against this limit                                                                              | Daily limit |
| ---------------------- | --------------------------------------------------------------------------------------------------------- | ----------- |
| Keyword scans          | One scan per keyword tracked in any keyword watchlist (background work for `POST /api-keyword-watchlist`) | 30          |
| People tracking scans  | One scan per profile in your people watchlists (background work for `POST /api-people-watchlist`)         | 50          |
| Company tracking scans | One scan per company in your company watchlists (background work for `POST /api-company-watchlist`)       | 50          |
| Profile fetches        | Each call to `POST /linkedin-agent/fetch-profile`                                                         | 40          |
| Company fetches        | Each call to `POST /linkedin-agent/fetch-company`                                                         | 40          |
| Profile searches       | Each call to `POST /linkedin-agent/search-profiles`                                                       | 100         |
| Direct messages        | Each call to `POST /linkedin-agent/send-message`                                                          | 100         |
| Likes (any source)     | Each call to `POST /api-like` or `POST /linkedin-agent/like-post`                                         | 50          |
| Comments (any source)  | Each call to `POST /api-comment` or `POST /linkedin-agent/comment-post`                                   | 25          |

So creating a keyword watchlist with 200 keywords does not block you from calling other API endpoints. It just means LinkedIn will scan \~30 of those keywords per day, per active LinkedIn account in your team, until all keywords are covered. The watchlist endpoint itself remains freely callable.

The full list of every LinkedIn-side action and its current usage is visible at **Dashboard → Settings → Daily Usage Limits** in your OutX account. Always check there if you need an exact number for an action not listed above, or if a job is running slower than you expected.

### How daily limits work

* Limits reset at **00:00 UTC**.
* A watchlist with 200 keywords does not start tracking all 200 immediately. Tasks queue and process up to the daily cap, drawn from each active LinkedIn account in your team.
* **Add more team members** with active Chrome extensions to parallelize. Each member's session has its own daily quota.

<Info>
  Live per-action usage is visible in **Dashboard → Settings → Daily Usage Limits**. The dashboard always reflects the current source of truth, the table above is the documented mapping for the most common API actions.
</Info>

## When LinkedIn blocks a call

If you exceed a LinkedIn cap, the affected task fails or sits pending until the next day's reset. OutX surfaces this in the task status returned from `get-task-status`. If a LinkedIn account starts receiving warnings (unusual activity flags, captcha walls, restrictions), reduce volume immediately and review [LinkedIn Safety](/resources/linkedin-safety).

## Plan-based quotas

These are non-rate limits that apply per-plan. They limit *how much you can have* (watchlists, team members, etc.), not how often you can call the API.

| Resource                            | Free | Growth | Expert | Ultimate  |
| ----------------------------------- | ---- | ------ | ------ | --------- |
| Watchlists                          | 2    | 5      | 20     | 100       |
| Profiles tracked per watchlist      | -    | 200    | 200    | 200       |
| Potential leads per watchlist/week  | -    | 400    | 250    | 100       |
| Team members                        | 5    | 10     | 25     | Unlimited |
| Auto-engagement rules per watchlist | 1    | 2      | 5      | 10        |

When you hit a plan quota, you receive a `402` response with a message describing the limit. See [Error Codes](/api-reference/errors) for details.

OutX Credits sit on a separate plan dimension (Sales Navigator export and email finder), see [Pricing & Subscription](/documentation/pricing-and-subscription) for the credit allocations per plan.

## Retry strategy

Treat the absence of a `429` as the norm. If you do see one (rare on the API surface, more common when LinkedIn itself has throttled the underlying account), use exponential backoff:

```javascript theme={null}
async function fetchWithRetry(url, options, maxRetries = 3) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    const response = await fetch(url, options);

    if (response.status === 429) {
      const waitTime = Math.pow(2, attempt) * 1000; // 1s, 2s, 4s
      await new Promise(resolve => setTimeout(resolve, waitTime));
      continue;
    }

    return response;
  }

  throw new Error('Rate limit exceeded after retries');
}
```

## Best practices

* **Batch watchlist creation** in a single session rather than spreading across hours.
* **Set `fetchFreqInHours` based on real need.** Lower frequency = fewer tasks consumed.
* **Cache API responses** locally instead of re-fetching the same posts.
* **Monitor live usage** at Dashboard → Settings → Daily Usage Limits.
* **Use polling, not constant streaming.** Call `/api-posts` with `sort_by=recent_first` at reasonable intervals (e.g. once per hour, not once per minute).

<Info>
  Need higher per-account throughput than LinkedIn allows? Add more team members. Each one carries their own daily allotment. Contact [support@outx.ai](mailto:support@outx.ai) for enterprise volume.
</Info>

***

## Learn More

* [LinkedIn Automation Safety Guide](https://www.outx.ai/blog/linkedin-automation-safety-guide-best-practices-2026)
* [LinkedIn API Guide](https://www.outx.ai/blog/linkedin-api-guide)
