> ## 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.

# Error Codes

> HTTP error codes and error messages returned by the OutX API. Includes authentication errors, validation errors, plan limits, and troubleshooting steps.

All OutX API errors return a JSON object with an `error` field containing a human-readable message.

```json theme={null}
{
  "error": "Error message here"
}
```

## Error Codes

### 400, Bad Request

Missing or invalid parameters. Check the error message for specifics.

**Watchlist endpoints:**

| Error Message                                       | Cause                                                          |
| --------------------------------------------------- | -------------------------------------------------------------- |
| `keywords array is required and must not be empty`  | Keyword watchlist: `keywords` missing, not an array, or empty  |
| `No valid keywords provided after cleaning`         | All keywords are invalid/empty after normalization             |
| `profiles array is required and must not be empty`  | People watchlist: `profiles` missing, not an array, or empty   |
| `No valid profile identifiers provided`             | No profiles passed validation                                  |
| `companies array is required and must not be empty` | Company watchlist: `companies` missing, not an array, or empty |
| `No valid company identifiers provided`             | No companies passed validation                                 |
| `Invalid fetchFreqInHours`                          | Must be one of: 1, 3, 6, 12, 24, 48, 72                        |
| `Missing required parameter: id`                    | Watchlist update/delete called without `id`                    |
| `Name cannot be empty`                              | Watchlist update with empty name                               |
| `No valid update fields provided`                   | Watchlist update with nothing to change                        |
| `disable must be a boolean value`                   | Watchlist enable/disable with invalid value                    |
| `Invalid watchlist ID(s)`                           | Get Posts: `watchlist_id` doesn't exist                        |

**Engagement endpoints:**

| Error Message                                                      | Cause                                              |
| ------------------------------------------------------------------ | -------------------------------------------------- |
| `Missing required parameter: post_id`                              | Like/comment without `post_id`                     |
| `Missing required parameter: user_email`                           | Like/comment without `user_email`                  |
| `Missing required parameter: comment_text`                         | Comment without `comment_text`                     |
| `comment_text cannot be empty`                                     | Comment with empty or whitespace-only text         |
| `Invalid actor_type. Must be 'user' or 'company'`                  | `actor_type` not `"user"` or `"company"`           |
| `company_title is required when actor_type is 'company'`           | Engaging as company without providing company name |
| `Post does not support like functionality (missing social_urn)`    | Post has no activity URN (may be deleted)          |
| `Post does not support comment functionality (missing social_urn)` | Post has no activity URN (may be deleted)          |

**LinkedIn Data endpoints:**

| Error Message                                                   | Cause                                                      |
| --------------------------------------------------------------- | ---------------------------------------------------------- |
| `Missing or invalid 'profile_slug'`                             | `fetch-profile` without a valid `profile_slug` string      |
| `Missing or invalid 'profile_urns' (must be a non-empty array)` | `fetch-profiles-posts` without a valid array of URNs       |
| `Missing or invalid 'social_urn'`                               | `like-post` or `comment-post` without a valid `social_urn` |
| `Missing or invalid 'comment_text'`                             | `comment-post` without a valid `comment_text`              |
| `Missing or invalid 'api_agent_task_id'`                        | `get-task-status` without a valid task ID                  |
| `Missing or invalid 'email'`                                    | Auth endpoints without a valid email                       |
| `Missing or invalid 'otp'`                                      | `auth-verify-otp` without a valid OTP code                 |

### 401, Unauthorized

API key is missing or invalid.

| Error Message            | Cause                                                  |
| ------------------------ | ------------------------------------------------------ |
| `Missing API Key`        | No `x-api-key` header in the request                   |
| `Invalid API Key`        | The API key does not match any team                    |
| `Invalid or expired OTP` | OTP code is incorrect or has expired (auth-verify-otp) |

**Fix:** Include your API key in the `x-api-key` header. Get your key at [mentions.outx.ai/api-doc](https://mentions.outx.ai/api-doc).

### 402, Plan Limit Reached

Your team has hit a plan-based limit. The error message includes your current limit.

| Error Message Pattern                                        | Cause                                                |
| ------------------------------------------------------------ | ---------------------------------------------------- |
| `Your plan includes up to N watchlists...`                   | Watchlist count limit reached                        |
| `Your plan includes total of N likes...`                     | Daily like limit reached (resets at UTC midnight)    |
| `Your plan includes total of N comments...`                  | Daily comment limit reached (resets at UTC midnight) |
| `Your plan includes total of N company trackings...`         | Company tracking limit reached                       |
| `Your plan includes total of N team members...`              | Team member invitation limit reached                 |
| `Your plan allows up to N posts per week per watchlist...`   | Weekly post fetch limit per watchlist reached        |
| `Your plan allows up to N active AI agents per watchlist...` | Auto-engagement rule limit per watchlist reached     |

**Fix:** Upgrade your plan at [outx.ai/pricing](https://www.outx.ai/#pricing) or wait for daily/weekly limits to reset.

<Info>
  Plan limits by tier:

  * **Free**: 2 watchlists, 1 auto-engagement rule per watchlist, 5 team members
  * **Pro**: 5 watchlists, 2 auto-engagement rules per watchlist, 10 team members
  * **Expert**: 20 watchlists, 5 auto-engagement rules per watchlist, 25 team members
  * **Ultimate**: 100 watchlists, 10 auto-engagement rules per watchlist, unlimited team members
</Info>

### 403, Forbidden

Access denied. Most commonly caused by the Chrome extension not being active.

| Error Message                                                                                                                                                                              | Cause                                                      |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------- |
| `Plugin installation required: Please install the OutX browser extension on at least one team member's account to use the API. The plugin must have been active within the last 48 hours.` | No team member has an active Chrome extension              |
| `Access denied: You don't have permission to access this resource`                                                                                                                         | Trying to access another team's resources                  |
| `Access denied: You don't have permission to access these watchlists`                                                                                                                      | Trying to access watchlists from another team              |
| `Access denied: You don't have permission to interact with this post`                                                                                                                      | Trying to engage with a post from another team's watchlist |

**Fix for plugin error:** Install the [OutX Chrome extension](https://chromewebstore.google.com/detail/outxai-track-linkedin-pos/epnimaeheelhgeelbppbfkjegklflakj), sign into LinkedIn in the same browser, and keep the browser open. The extension must have been active within the last 48 hours. See [Chrome Extension Guide](/resources/chrome-extension).

<Warning>
  The 403 plugin error is the most common API issue. If you're getting this error, check that:

  1. The Chrome extension is installed on at least one team member's browser
  2. That browser has been open within the last 48 hours
  3. The team member is signed into LinkedIn in the same browser
</Warning>

### 404, Not Found

The requested resource does not exist or belongs to a different team.

| Error Message                                      | Cause                                                                                                                                         |
| -------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `Agent task not found`                             | LinkedIn Data task ID does not exist or belongs to another team                                                                               |
| `Watchlist not found or access denied`             | Watchlist ID does not exist, isn't the requested type (keyword/people/company), or belongs to another team. Returned on GET, PUT, and DELETE. |
| `List not found or access denied`                  | Creating watchlist with a `list_id` that doesn't exist                                                                                        |
| `Post not found`                                   | The `post_id` in a like/comment request does not exist                                                                                        |
| `Tracking list not found`                          | The post's associated watchlist no longer exists                                                                                              |
| `User not found with email: [email]`               | The `user_email` is not a member of your team                                                                                                 |
| `Company not found`                                | The `company_title` does not match any company page for the admin user                                                                        |
| `No admin user found in the team`                  | LinkedIn Data engagement, your team has no admin members                                                                                      |
| `No company admin found for the specified company` | No admin user manages the specified company page                                                                                              |

### 405, Method Not Allowed

```json theme={null}
{
  "error": "Method GET not allowed"
}
```

You used the wrong HTTP method. Check the endpoint documentation for the correct method (GET, POST, PUT, DELETE).

### 429, Rate Limit Exceeded

```json theme={null}
{
  "error": "Rate limit exceeded. Please try again later."
}
```

You have exceeded your plan's API request quota. See [Rate Limits](/api-reference/rate-limits) for details and retry strategies.

### 500, Internal Server Error

An unexpected error occurred on our side. Retry with exponential backoff. If the error persists, contact [support@outx.ai](mailto:support@outx.ai).

## Error Response Format

All errors follow the same JSON format:

```json theme={null}
{
  "error": "Human-readable error message"
}
```

For Watchlist API endpoints, some errors may also include additional context:

```json theme={null}
{
  "error": "Missing required parameter: keywords",
  "details": "The 'keywords' field must be a non-empty array"
}
```

## Frequently Asked Questions

<AccordionGroup>
  <Accordion title="Why am I getting a 403 error even though my API key is correct?">
    The most common cause is the Chrome extension requirement. At least one team member must have the OutX Chrome extension installed and actively used within the last 48 hours. Install the [OutX Chrome Extension](https://chromewebstore.google.com/detail/outxai-track-linkedin-pos/epnimaeheelhgeelbppbfkjegklflakj), sign into LinkedIn in the same browser, and keep the browser open.
  </Accordion>

  <Accordion title="What does 'Plugin installation required' mean?">
    OutX retrieves LinkedIn data through real browser sessions via the Chrome extension. This error means no team member has had the extension active recently. The extension runs in the background, just keep Chrome open with the extension installed and it will stay active.
  </Accordion>

  <Accordion title="How do I fix a 402 plan limit error?">
    402 errors mean you've reached a limit on your current plan. You can either upgrade your plan at [outx.ai/pricing](https://www.outx.ai/#pricing), wait for daily/weekly limits to reset, or delete existing resources (like watchlists) to make room for new ones.
  </Accordion>

  <Accordion title="Do daily limits reset at a specific time?">
    Yes. Daily limits (likes, comments) reset at UTC midnight (00:00 UTC). Weekly limits (posts per watchlist) reset on Monday at 00:00 UTC.
  </Accordion>
</AccordionGroup>
