---
title: "Call the getConversations MCP tool"
method: POST
path: "/api/v1/actions/getConversations"
tags: ["Actions"]
---

# Call the getConversations MCP tool

`POST /api/v1/actions/getConversations`

## Request

- Base URL: `https://app.reachium.io`
- URL: `https://app.reachium.io/api/v1/actions/getConversations`
- Auth: HTTP bearer

List LinkedIn inbox conversations. OMIT account_id to read a unified inbox across ALL connected accounts (one merged, most-recent-first page); pass an account_id (from getLinkedInAccounts) to read just that account. Each chat returns the other person’s name, unread count, last-activity time, the owning account (account_id + account_name), campaign attribution (campaign_id + campaign_name + lead_state, aliased as status) when the chat came from a campaign, the lead’s classification tags, and last_category (the most recent AI reply classification; only populated for campaigns with the reply agent enabled - null for organic chats is normal). Each chat also carries last_message_from ("them" | "you" | null) and has_recent_inbound - use these to count who actually replied or wrote in, INCLUDING organic (non-campaign) conversations, which getWorkspaceStats deliberately excludes from its campaign-only replies number. null direction means unknown (outside the sampled window - see direction_note), never "no reply". Optionally filter by status and/or tags. Pass include_lead_details: true to also get linkedin_url, job_title, company_name, and location for the chat’s lead (omitted by default; an extra lookup most callers don’t need). A chat whose other person is not a tracked lead comes back with name: null (LinkedIn’s chat list itself carries no names for those) - the response then also includes a top-level name_note explaining this and pointing at resolve_names. Pass resolve_names: true to live-fetch up to 5 of those names (adds latency; do this only when the user actually needs the name). Use getConversationMessages to read a thread. Replying requires a key with the launch scope (sendReply); without it, the user replies from the Reachium inbox. NOTE: when status or tags is supplied, filtering happens AFTER the underlying LinkedIn page is fetched, so a returned page can have fewer than `limit` items even though more may match; keep following `next_cursor` until it is null to see everything.

Called through the Actions bridge: the response is that tool's own result, wrapped as `{ data: <tool result> }` under HTTP 200. Billing, daily-cap, and confirm-step outcomes are embedded INSIDE `data`, never remapped to an HTTP status (see the templated `/api/v1/actions/{toolName}` operation above for the full protocol, and `x-mcp-actions` for this tool's machine-readable scope/cap/confirm_behavior fields). Authentication, request-shape, and optional idempotency-protocol failures still use their documented non-200 statuses.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `account_id` string, uuid: Optional: a single connected LinkedIn account (from getLinkedInAccounts). Omit to read every account’s inbox at once.
  - `cursor` string: Pagination cursor from a previous call’s next_cursor.
  - `limit` integer: How many conversations to return (default 20, max 50).
  - `status` string[]: Optional: only return chats whose status (lead_state) is one of these values.
  - `channel` 'both' | 'classic' | 'sales_navigator': Both inbox products by default; each original conversation remains separate.
  - `tags` string[]: Optional: only return chats whose lead has at least one of these classification tags.
  - `include_lead_details` boolean: Optional (default false): also return linkedin_url, job_title, company_name, and location for each chat’s lead.
  - `resolve_names` boolean: Optional (default false): live-fetch the other person's name for up to 5 chats where it is null (organic chats). Adds up to ~3s latency.

## Response `200`

The result of calling this tool.

- object
  - `data` unknown, required
  - `error` unknown, required

## Other responses

- `400`: The request body was not a JSON object (code invalid_request), or Idempotency-Key is malformed (code invalid_idempotency_key).
- `401`: Missing or invalid API key. Send `Authorization: Bearer rmcp_...` (code unauthorized).
- `403`: This tool is out of the key’s granted scope (code insufficient_scope).
- `409`: This Idempotency-Key has an unresolved in-flight or ambiguous result (code request_in_flight). Reconcile before using a new key.
- `422`: This Idempotency-Key was already used with a different request body (code idempotency_key_reuse).
- `429`: Rate limited: shared `mcp:ip:{ip}` (600/60s) or `mcp:key:{keyId}` (120/60s) bucket, the SAME buckets the MCP endpoint uses (code rate_limited).
- `500`: Unhandled server error (code internal_error).

---

[API](https://skmtc.dev/reachium/apis/reachium-api.md) · [All operations](https://skmtc.dev/reachium/apis/reachium-api/llms.txt) · [OpenAPI document](https://skmtc.dev/reachium/apis/reachium-api/revisions/11682826692b?raw)
