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

# Call the manageBoostingPool MCP tool

`POST /api/v1/actions/manageBoostingPool`

## Request

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

Manage this workspace's boosting-pool membership. Four actions, three of which require the CALLING USER to be a workspace owner (Admin or Reachium Staff; the legacy client role also counts) - resolved from the connection's user or the signed-in dashboard user; a connection with no resolvable owner, or a non-owner user, is refused exactly like a non-owner member is refused in the app. (1) 'apply' (owner-only): request to join a public named/partner pool (pool_id) - a request only, subject to admin review. If this workspace was previously rejected from that pool, or the pool simply is not open for applications right now, apply refuses with the identical message either way (a rejection is never disclosed). A second apply while already pending or approved just returns the current status, not an error. (2) 'withdraw' (owner-only): retract a pending application (pool_id). (3) 'join': add this workspace's LinkedIn accounts (linkedin_account_ids) to a pool with daily_boost_limit per account (default 5 - how many posts each account likes plus comments per day). pool_type:'workspace' joins your own team's internal pool and needs no owner role. pool_type:'named' joins an approved partner pool (pool_id) and IS owner-only, checked after verifying this workspace is actually approved for that pool. Re-joining with an account already in the pool reactivates it and updates its daily_boost_limit, rather than duplicating it - this is the only assistant-accessible way to reactivate a deactivated membership; changing an existing membership's limit or active state WITHOUT touching which accounts are selected is app-only (the /content/posts boosting pool card). (4) 'leave' (owner-only): remove membership from a pool (pool_type, plus pool_id for a named pool); pass linkedin_account_id to remove just one account, or omit it to remove every one of this workspace's accounts from that pool. Leaving immediately stops those accounts from boosting there - no more likes or comments go out on that pool's members' posts from them. Pool membership counts are workspace-wide aggregates; another workspace's individual accounts are never visible or reachable from here. 'join' is a LAUNCH action and two-step: the first call returns a preview (pool, accounts, boosts per day) plus a confirm_token and joins nothing; after the user approves, repeat the identical call with confirm_token. Once joined, those accounts like and comment automatically with no further confirmation until they leave. apply, withdraw and leave have no confirm step.

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
  - `action` 'apply' | 'withdraw' | 'join' | 'leave', required
  - `pool_id` string, uuid: apply/withdraw: the named pool. join/leave: required only for pool_type:'named'.
  - `pool_type` 'workspace' | 'named': join/leave: 'workspace' (your own team pool) or 'named' (a partner pool).
  - `linkedin_account_ids` string[]: join: the accounts to add (from getLinkedInAccounts). Must all belong to this workspace.
  - `daily_boost_limit` integer: join: posts/day each account likes plus comments in this pool. Default 5.
  - `linkedin_account_id` string, uuid: leave: scope to just one account; omit to remove every account from the pool.
  - `confirm_token` string: join only: from the preview response. Re-send the identical join call plus confirm_token to execute.

## 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/30c16b30b499?raw)
