# Errors

Source: https://finchreach.com/docs/errors

Errors come back as `{ "error": { "code", "message" } }`: as the HTTP response body on the REST API, and as a tool result with `isError: true` on the MCP server. Branch on `code`; the message is for people.

## Error format

Example:
```json
{
  "error": {
    "code": "rate_limited",
    "status": 429,
    "message": "Rate limited: …",
    "retryAt": "2026-01-01T12:00:00.000Z"
  }
}
```

## Error codes

| Code | HTTP status | Meaning |
| --- | --- | --- |
| `bad_request` | 400 | The request body is not valid JSON. |
| `invalid_input` | 400 | A parameter is missing, has the wrong type or is out of range. The message names it. |
| `account_required` | 400 | Pass `accountId`: the workspace has several LinkedIn accounts (or none is connected). |
| `session_account_not_supported` | 400 | A session-connected account cannot publish through the OAuth publishing path; use `linkedin_create_post`. |
| `unauthorized` | 401 | No API key or OAuth token, or it is unknown, revoked or expired. |
| `insufficient_scope` | 403 | The key or token lacks the scope the call needs (see [Authentication](https://finchreach.com/docs/authentication#scopes)). |
| `self_approval_forbidden` | 403 | An action cannot be approved with the API key that proposed it. |
| `not_owner` | 403 | The conversation is not in this account's mailbox. |
| `cross_site_request` | 403 | The dashboard refused a request from another site. |
| `account_not_found` | 404 | No LinkedIn account with this id in your workspace. |
| `action_not_found` | 404 | No pending action with this id that this key can see. |
| `api_key_not_found` | 404 | No active API key with this id. |
| `unknown_operation` | 404 | The REST operation name is not one of the supported operations. |
| `action_not_pending` | 409 | The action was already approved, rejected, run or expired. |
| `needs_reconnect` | 409 | The LinkedIn session expired or hit a checkpoint. Reconnect the account under [Accounts](https://finchreach.com/accounts). |
| `own_urn_missing` | 409 | The account's own profile urn is not known yet; it is set once the session is verified live. |
| `action_expired` | 410 | The action expired before it was approved. Propose it again. |
| `unsupported_media_type` | 415 | Send `Content-Type: application/json`. |
| `invalid_linkedin_session` | 422 | The LinkedIn cookies given to connect an account are not a valid session. |
| `account_paused` | 423 | The account is paused (by you, or by the safety breaker after LinkedIn pushed back) until the time in the message. |
| `rate_limited` | 429 | A rate limit or an account budget is used up. `retryAt` (and the `Retry-After` header on the API) says when to retry. See [Rate limits](https://finchreach.com/docs/rate-limits). |
| `internal` | 500 | An unexpected error. Retry later; nothing was sent to LinkedIn twice. |
| `unverified_operation` | 501 | A Beta operation whose LinkedIn request shape is not verified is turned off on this server. |
| `not_configured` | 503 | The server has no database configured. |
| `auth_not_configured` | 503 | Sign-in is not configured on this server. |
| `proxy_unavailable` | 503 | No residential proxy is available for this account right now. |

## Related

- [Rate limits](https://finchreach.com/docs/rate-limits)
- [Authentication](https://finchreach.com/docs/authentication)
