# Reach MCP — REST API

Base URL `https://app.reachmcp.com/api`. Authenticate with `X-API-Key: mcp_…` (create keys in the app). Interactive reference with request and response schemas: https://app.reachmcp.com/scalar; machine-readable: https://app.reachmcp.com/openapi.json.

Conventions:

- Errors: `detail` (legacy) plus an `error` object with `code`, `message`, `status`, `safe_to_retry`, `retry_at`, `remediation` — see [Errors](/docs/errors.md).
- Writes accept `Idempotency-Key` — see [Idempotency](/docs/idempotency.md).
- Daily quotas apply to writes — see [Quotas](/docs/quotas.md).
- Webhooks are managed under `/webhooks` — see [Webhooks](/docs/webhooks.md).
- Batches of actions run over time are `/jobs` — see [Jobs](/docs/jobs.md).

## Endpoints (61)

| Method | Path | Summary |
|---|---|---|
| POST | `/api/jobs` | Create a job: a batch of actions spread over the account's working window |
| GET | `/api/jobs` | List jobs |
| GET | `/api/jobs/actions` | Actions a job can run, with their payload fields |
| GET | `/api/jobs/{job_id}` | One job with its items |
| POST | `/api/jobs/{job_id}/cancel` | Cancel the pending items of a job |
| POST | `/api/jobs/{job_id}/pause` | Pause a job |
| POST | `/api/jobs/{job_id}/resume` | Resume a paused job; pending items are re-planned from now |
| GET | `/api/linkedin-accounts` | List LinkedIn accounts |
| DELETE | `/api/linkedin-accounts/{account_id}` | Delete a LinkedIn account |
| GET | `/api/linkedin-accounts/{account_id}/logs` | Get request logs |
| GET | `/api/linkedin-accounts/{account_id}/logs/stats` | Get request logs statistics |
| GET | `/api/linkedin-accounts/{account_id}/quotas` | Get account quotas |
| PATCH | `/api/linkedin-accounts/{account_id}/quotas` | Update account quotas |
| POST | `/api/linkedin/{account_id}/accept-invitation` | LinkedIn proxy: accept a received invitation |
| POST | `/api/linkedin/{account_id}/comment-post` | LinkedIn proxy: comment on a post |
| POST | `/api/linkedin/{account_id}/connect` | LinkedIn proxy: send a connection request |
| GET | `/api/linkedin/{account_id}/connections` | LinkedIn proxy: list connections (paged) |
| GET | `/api/linkedin/{account_id}/conversations` | LinkedIn proxy: list messenger conversations (paged) |
| DELETE | `/api/linkedin/{account_id}/conversations/{conversation_linkedin_id}` | LinkedIn proxy: delete a conversation |
| POST | `/api/linkedin/{account_id}/conversations/{conversation_linkedin_id}/archive` | LinkedIn proxy: archive or unarchive a conversation |
| GET | `/api/linkedin/{account_id}/conversations/{conversation_linkedin_id}/messages` | LinkedIn proxy: list messages in a conversation |
| POST | `/api/linkedin/{account_id}/conversations/{conversation_linkedin_id}/star` | LinkedIn proxy: star or unstar a conversation |
| POST | `/api/linkedin/{account_id}/create-multi-photo` | LinkedIn proxy: create a multi-photo object |
| POST | `/api/linkedin/{account_id}/create-post` | LinkedIn proxy: create or schedule a post |
| POST | `/api/linkedin/{account_id}/decline-invitation` | LinkedIn proxy: decline a received invitation |
| POST | `/api/linkedin/{account_id}/follow` | LinkedIn proxy: follow or unfollow a member |
| GET | `/api/linkedin/{account_id}/invitation-status` | LinkedIn proxy: get invitation/connection status with a member |
| POST | `/api/linkedin/{account_id}/like-post` | LinkedIn proxy: like a post |
| GET | `/api/linkedin/{account_id}/me` | LinkedIn proxy: get /me |
| POST | `/api/linkedin/{account_id}/messages` | LinkedIn proxy: send a message |
| GET | `/api/linkedin/{account_id}/profile-viewers` | LinkedIn proxy: get recent profile viewers (premium only) |
| POST | `/api/linkedin/{account_id}/react-message` | LinkedIn proxy: react to a message with an emoji |
| GET | `/api/linkedin/{account_id}/received-invitations` | LinkedIn proxy: list received pending invitations |
| POST | `/api/linkedin/{account_id}/remove-connection` | LinkedIn proxy: remove a 1st-degree connection |
| POST | `/api/linkedin/{account_id}/reply-comment` | LinkedIn proxy: reply to a comment |
| GET | `/api/linkedin/{account_id}/salesnav/messaging/threads` | Sales Navigator proxy: list messaging threads (paged) |
| POST | `/api/linkedin/{account_id}/salesnav/messaging/threads/{thread_id}/messages` | Sales Navigator proxy: send a message in a thread |
| GET | `/api/linkedin/{account_id}/salesnav/messaging/threads/{thread_id}/messages` | Sales Navigator proxy: list messages in a thread |
| GET | `/api/linkedin/{account_id}/scheduled-posts` | LinkedIn proxy: list scheduled posts |
| PATCH | `/api/linkedin/{account_id}/scheduled-posts` | LinkedIn proxy: update a scheduled post |
| DELETE | `/api/linkedin/{account_id}/scheduled-posts` | LinkedIn proxy: delete a scheduled post |
| GET | `/api/linkedin/{account_id}/scrape-my-posts` | LinkedIn proxy: scrape likers and/or commenters of the account's recent posts |
| GET | `/api/linkedin/{account_id}/scrape-post` | LinkedIn proxy: scrape likers and/or commenters of a post |
| GET | `/api/linkedin/{account_id}/scrape-profile` | LinkedIn proxy: scrape a single profile |
| GET | `/api/linkedin/{account_id}/scrape-search` | LinkedIn proxy: scrape a search page |
| GET | `/api/linkedin/{account_id}/sent-invitations` | LinkedIn proxy: list sent pending invitations |
| POST | `/api/linkedin/{account_id}/upload-media` | LinkedIn proxy: upload a media file |
| POST | `/api/linkedin/{account_id}/upload-media-url` | LinkedIn proxy: upload a media file from a URL |
| GET | `/api/linkedin/{account_id}/user-posts` | LinkedIn proxy: get recent posts of a LinkedIn member |
| POST | `/api/linkedin/{account_id}/visit-profile` | LinkedIn proxy: simulate a profile visit |
| POST | `/api/linkedin/{account_id}/withdraw-invitation` | LinkedIn proxy: withdraw a sent invitation |
| POST | `/api/webhooks/deliveries/{delivery_id}/replay` | Send this event again, now |
| GET | `/api/webhooks/endpoints` | List webhook endpoints |
| POST | `/api/webhooks/endpoints` | Create a webhook endpoint (returns the secret once) |
| PATCH | `/api/webhooks/endpoints/{endpoint_id}` | Update url, events, accounts or active state |
| DELETE | `/api/webhooks/endpoints/{endpoint_id}` | Delete a webhook endpoint |
| GET | `/api/webhooks/endpoints/{endpoint_id}/deliveries` | Recent deliveries to this endpoint |
| POST | `/api/webhooks/endpoints/{endpoint_id}/rotate-secret` | Replace the signing secret |
| GET | `/api/webhooks/endpoints/{endpoint_id}/secret` | Reveal the signing secret |
| POST | `/api/webhooks/endpoints/{endpoint_id}/test` | Send a signed ping now |
| GET | `/api/webhooks/events` | Event types Reach can send |
