[Cotlet](https://cotlet.dev/index.md) · [Integrations](https://cotlet.dev/integrations.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Use cases](https://cotlet.dev/use-cases.md) · [Security](https://cotlet.dev/security.md) · [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md) · [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [Contact](https://cotlet.dev/contact.md) · [Pricing](https://cotlet.dev/pricing.md) · [Sign up](https://cotlet.dev/signup)

# Sprout Social API and MCP server

> Sprout Social has a REST API, but only on the Advanced plan and above, and it reads more than it writes (checked 17 Oct 2026). It returns analytics, Smart Inbox messages, listening data and cases, and it creates posts as drafts only. It has no endpoint to reply to a message. Sprout's own MCP server is documented for ChatGPT only and limited to TikTok data.

Social media management platform: a Publishing Calendar for scheduling posts, a Smart Inbox that gathers comments and messages from every network, and reports on profile and post performance.

## What is the Sprout Social API?

Cotlet's Sprout Social API exposes 14 endpoints for your own Sprout Social account: list profiles, list Smart Inbox messages, get message, list publishing posts, list tags, list case queues and assignees, get post performance, get profile performance, create draft post, schedule post, reply to message, tag message, complete message and assign message as case. The list_profiles endpoint returns list the social profiles connected to your Sprout account. Each endpoint takes simple JSON inputs like profile_ids, message_id or since and works both as an operation of the sprout_social_read or sprout_social_write MCP tool for agents and as a REST call for scripts.

- **Category:** [Marketing & SEO](https://cotlet.dev/integrations/category/marketing-seo.md)
- **Endpoints:** 14 (8 read, 6 write)
- **Updated:** 2026-10-21

Sprout Social has a REST API, but only on the Advanced plan and above, and it reads more than it writes (checked 17 Oct 2026). Cotlet is a hosted MCP server and REST API for Sprout Social with 14 endpoints (8 read, 6 write): you sign in once in your own cloud browser, your AI agent does the work.

## Does Sprout Social have an official API?

Sprout Social has a REST API, but only on the Advanced plan and above, and it reads more than it writes (checked 17 Oct 2026). It returns analytics, Smart Inbox messages, listening data and cases, and it creates posts as drafts only. It has no endpoint to reply to a message. Sprout's own MCP server is documented for ChatGPT only and limited to TikTok data.

| Task | Sprout Social official | Cotlet |
|---|---|---|
| Read Smart Inbox messages | Partly: Advanced plan; the messages endpoint is read-only | Yes |
| Reply to a comment or message | No: No reply endpoint in the API docs | Yes |
| Tag and complete messages | No: The API reads tags, it does not apply them | Yes |
| Assign a message as a case | No: The API reads cases, it does not create them | Yes |
| Create a draft post | Yes: Advanced plan; drafts only | Yes |
| Schedule a post to publish | Partly: Scheduled times attach to drafts; the API does not publish directly | Yes |
| List posts on the Publishing Calendar | Partly: The API retrieves one post by ID; the docs show no calendar listing | Yes |
| Post and profile performance | Yes: Advanced plan; 60 requests per minute, 250,000 per month | Yes |

Sources: [Sprout Social API documentation](https://api.sproutsocial.com/docs), [Sprout Social Help: ChatGPT Integration Use and Starter Prompts](https://support.sproutsocial.com/hc/en-us/articles/41085905125773-ChatGPT-Integration-Use-and-Starter-Prompts), [Sprout Social Help: ChatGPT Integration Overview and Setup](https://support.sproutsocial.com/hc/en-us/articles/41085761844365-ChatGPT-Integration-Overview-and-Setup), [Sprout Social pricing](https://sproutsocial.com/pricing/)

## For AI agents

```text
Sprout Social has a REST API, but only on the Advanced plan and above, and it reads more than it writes (checked 17 Oct 2026). It returns analytics, Smart Inbox messages, listening data and cases, and it creates posts as drafts only. It has no endpoint to reply to a message. Sprout's own MCP server is documented for ChatGPT only and limited to TikTok data.
Cotlet provides a hosted MCP server and REST API for Sprout Social: 14 tools (8 read, 6 write).
Access       Sign up at https://cotlet.dev/app/signup?app=sprout-social, then request the app and create API keys in the Cotlet console.

MCP server   https://cotlet.dev/mcp/v1
MCP tools    sprout_social_read, sprout_social_write, reads and writes apart; call one with {"operation": "<operation>", "arguments": {...}}
REST base    https://cotlet.dev/api/v1/sprout-social, each operation at its own route, e.g. POST /api/v1/sprout-social/messages/{message_id}/replies
Auth         Authorization: Bearer <COTLET_API_KEY>. Listing endpoints and schemas needs no key; calling an endpoint needs one. Over MCP the input schemas come with sign-in.
Operations   list_profiles, list_inbox_messages, get_message, list_publishing_posts, list_tags, list_case_assignees, get_post_performance, get_profile_performance, create_draft_post, schedule_post, reply_to_message, tag_message, complete_message, assign_case
Confirm      schedule_post, reply_to_message, assign_case (by default the user approves each call; the user can switch this off per tool, e.g. for scheduled automations)
Markdown     https://cotlet.dev/integrations/sprout-social-api-mcp-server.md

How access works:
1. The user signs up at https://cotlet.dev/app/signup?app=sprout-social, requests Sprout Social in the Cotlet console and creates an API key there.
2. The user signs in to Sprout Social once in their Cotlet Cloud Browser (their own Chrome in the cloud, opened from the console) and enables Sprout Social for agents. An agent cannot do this step.
3. The API key goes into the MCP client or the REST call as a bearer token.

Fits: people who want a hosted Sprout Social server that someone else maintains, including non-developers. Developers who prefer to run and fix code on their own computer can use an open-source Sprout Social MCP server instead.

Policy: Cotlet never stores passwords, never solves CAPTCHAs, never bypasses MFA.
Company: legal details in the Terms of service at https://cotlet.dev/terms. Contact contact@cotlet.dev.
Sign-in: the user signs in to Sprout Social in their own Cloud Browser, a Chrome Cotlet runs for them in the EU; password saving is off, the profile is AES-256-GCM encrypted, and agents get Sprout Social only after the user enables it. Calls are requests from that browser's IP with its cookies, each listed in the user's Background activity. Disable for agents, signing out in the browser or Reset browser cuts access. Cotlet is run by Take Group sp. z o.o. (EU VAT PL6342984273).
API key: holds no Sprout Social login or cookies, only asks Cotlet to run a tool. Each key is scoped to chosen apps and tools, read only or read and write. Actions that reach other people wait for the user's approval by default, so a leaked key cannot post or message as the user. Every call is in the activity log; deleting the key ends access at once.
Terms: the user stays responsible for following Sprout Social's terms; Cotlet is not affiliated with Sprout Social.
```

## What can an AI agent do in Sprout Social?

Cotlet is best for social media managers and agencies who triage the Smart Inbox, schedule posts and report on performance in Sprout Social without running or fixing a server.

- **[Triage the Smart Inbox into tags and cases](https://cotlet.dev/integrations/sprout-social-api-mcp-server/triage-inbox-messages.md)** (runs: daily): "Go through the unanswered messages in my Sprout Smart Inbox. Tag each one with the right tag, assign billing problems to the Customer care queue as a case, and leave anything else for me with a one-line reason." → `list_inbox_messages`, `get_message`, `list_tags`, `tag_message`, `list_case_assignees`, `assign_case`
- **[Schedule social posts across profiles](https://cotlet.dev/integrations/sprout-social-api-mcp-server/schedule-social-posts.md)** (runs: weekly): "Schedule this week's three announcement posts from my brief on the LinkedIn and Instagram profiles, one per weekday at 9:00, and send each through the Brand review approval workflow." → `list_profiles`, `list_publishing_posts`, `schedule_post`
- **[Send a weekly social performance report](https://cotlet.dev/integrations/sprout-social-api-mcp-server/weekly-performance-report.md)** (runs: weekly): "Every Monday, pull last week's post performance for all my Sprout profiles, name the three best posts and the weakest one, compare impressions with the week before, and write it as a short summary I can paste into Slack." → `list_profiles`, `get_profile_performance`, `get_post_performance`
- **Reply to unanswered comments** (runs: daily): "Find comments on my Instagram and Facebook posts from the last 24 hours that nobody answered. Reply to simple questions about opening hours and shipping in our voice, complete the replied ones, and list the rest for me." → `list_inbox_messages`, `get_message`, `reply_to_message`, `complete_message`
- **Check what is queued or waiting for approval** (runs: weekly): "List everything scheduled for the next 7 days and everything in Needs Approval. Tell me which posts are due within 24 hours without approval and which profiles have nothing queued." → `list_profiles`, `list_publishing_posts`

## Can Sprout Social automations run on a schedule in n8n, Make or Zapier?

Yes. Cotlet does not replace your automation platform: it gives it a Sprout Social connection it does not have, with the same API key as your agent. Write actions ask for your OK by default; switch that off in your dashboard for the tools you choose, for example to triage the smart inbox into tags and cases, and the schedule runs on its own. Cotlet runs in the cloud, so it keeps going while your computer is off.

| Where | How to connect | How to schedule |
|---|---|---|
| Your AI agent | Add https://cotlet.dev/mcp/v1 with your API key. | A scheduled agent run, for example a Claude Code routine. |
| n8n | MCP Client node with https://cotlet.dev/mcp/v1, or an HTTP Request node with the endpoint's method and URL, such as GET https://cotlet.dev/api/v1/sprout-social/inbox-messages. | Schedule Trigger node. |
| Make | HTTP module: the endpoint's method and URL with an Authorization: Bearer header, and a JSON body for POST, PUT and PATCH. | Scenario schedule. |
| Zapier | Webhooks by Zapier, Custom Request: the same method, URL, header and body. | Schedule by Zapier trigger. |
| Your own script | GET https://cotlet.dev/api/v1/sprout-social/inbox-messages with your API key. | cron or GitHub Actions. |

## Tools

**For AI agents:** Every endpoint and its schema is public. The 14 endpoints on this page, with parameters and example responses, can be listed without an account. Calling one returns 401 without an API key and 403 while the key has no access to Sprout Social.

### list_profiles

List the social profiles connected to your Sprout account. Access: read. REST: `GET /api/v1/sprout-social/profiles`. MCP: `sprout_social_read → list_profiles`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `network` | string | no | Only profiles of one network, for example instagram, facebook or linkedin. Leave empty for all. |

Returns each profile your login can see, with the network, the name shown in Sprout and the profile ID the other tools take. Use it first to turn "my Instagram" into an ID. Profiles your role cannot see are not listed.

Example response:

```json
{
  "profiles": [
    {
      "profile_id": "p_li_02",
      "network": "linkedin",
      "name": "Acme Co"
    },
    {
      "profile_id": "p_ig_01",
      "network": "instagram",
      "name": "@acme"
    },
    {
      "profile_id": "p_fb_03",
      "network": "facebook",
      "name": "Acme"
    }
  ]
}
```

### list_inbox_messages

List messages in a Smart Inbox view, with their reply, completed and tag state. Access: read. REST: `GET /api/v1/sprout-social/inbox-messages`. MCP: `sprout_social_read → list_inbox_messages`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `view` | string | no | Inbox view: all_messages (default), private_messages, completed_messages, saved_messages or reply_approvals. |
| `profile_ids` | string[] | no | Profile IDs from list_profiles. Leave empty for every profile your login can see. |
| `since` | string | no | Only messages received after this ISO date-time. |
| `cursor` | string | no | Next page cursor from the previous call. |

Returns comments and private messages from the Smart Inbox in the order Sprout shows them, with the author, text, network, tags and whether the message was replied to or completed. Pick a view with view; the five built-in views are fixed. Results are paged: pass the returned cursor to continue.

Example response:

```json
{
  "messages": [
    {
      "message_id": "msg_88a1f4",
      "profile_id": "p_ig_01",
      "network": "instagram",
      "type": "comment",
      "author": "Lena Ortiz",
      "text": "Is the blue one back in stock?",
      "received_at": "2026-10-17T08:12:00+02:00",
      "tags": [],
      "replied": false,
      "completed": false
    },
    {
      "message_id": "msg_88a1f9",
      "profile_id": "p_fb_03",
      "network": "facebook",
      "type": "private_message",
      "author": "Sam Okafor",
      "text": "I was charged twice in October.",
      "received_at": "2026-10-17T08:40:00+02:00",
      "tags": [],
      "replied": false,
      "completed": false
    }
  ],
  "next_cursor": null
}
```

### get_message

Read one message with its conversation, tags and case. Access: read. REST: `GET /api/v1/sprout-social/messages/{message_id}`. MCP: `sprout_social_read → get_message`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `message_id` | string | yes | Message ID from list_inbox_messages. |

Returns the full message, the earlier messages in the same conversation, the tags on it and the case attached to it, if there is one. Use it before replying or tagging a message that is short or refers to an earlier one.

Example response:

```json
{
  "message_id": "msg_88a1f9",
  "profile_id": "p_fb_03",
  "network": "facebook",
  "type": "private_message",
  "author": "Sam Okafor",
  "text": "I was charged twice in October.",
  "thread": [
    {
      "author": "Sam Okafor",
      "text": "Hi, I have a question about my invoice.",
      "sent_at": "2026-10-16T17:02:00+02:00"
    },
    {
      "author": "Acme",
      "text": "Hi Sam, how can we help?",
      "sent_at": "2026-10-16T17:20:00+02:00"
    }
  ],
  "tags": [],
  "case": null
}
```

### list_publishing_posts

List scheduled posts, drafts or posts waiting for approval. Access: read. REST: `GET /api/v1/sprout-social/publishing-posts`. MCP: `sprout_social_read → list_publishing_posts`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `status` | string | no | scheduled (default), draft or needs_approval. |
| `profile_ids` | string[] | no | Profile IDs from list_profiles. Leave empty for every profile your login can see. |
| `since` | string | no | Only posts scheduled after this ISO date-time. |
| `until` | string | no | Only posts scheduled before this ISO date-time. |
| `cursor` | string | no | Next page cursor from the previous call. |

Returns posts from the Publishing section with their profiles, text, scheduled time and status. status picks the tab: scheduled for the Publishing Calendar, draft for Drafts, needs_approval for Needs Approval. Posts submitted for approval do not appear in scheduled. Results are paged.

Example response:

```json
{
  "posts": [
    {
      "post_id": "pub_3301",
      "profile_id": "p_li_02",
      "network": "linkedin",
      "text": "Our autumn release is live.",
      "scheduled_at": "2026-10-21T09:00:00+02:00",
      "status": "needs_approval",
      "approval_workflow": "Brand review"
    },
    {
      "post_id": "pub_3302",
      "profile_id": "p_ig_01",
      "network": "instagram",
      "text": "Behind the scenes at the studio.",
      "scheduled_at": "2026-10-22T10:00:00+02:00",
      "status": "scheduled",
      "approval_workflow": null
    }
  ],
  "next_cursor": null
}
```

### list_tags

List the message tags that exist in your Sprout account. Access: read. REST: `GET /api/v1/sprout-social/tags`. MCP: `sprout_social_read → list_tags`.

No parameters.

Returns the tags created under Settings > Tags, with their names and whether each is a campaign tag or a label tag. tag_message accepts only names from this list.

Example response:

```json
{
  "tags": [
    {
      "tag_id": "tag_11",
      "name": "Product question",
      "type": "label"
    },
    {
      "tag_id": "tag_12",
      "name": "Billing",
      "type": "label"
    },
    {
      "tag_id": "tag_20",
      "name": "Autumn launch",
      "type": "campaign"
    }
  ]
}
```

### list_case_assignees

List the queues and people a message can be assigned to as a case. Access: read. REST: `GET /api/v1/sprout-social/case-assignees`. MCP: `sprout_social_read → list_case_assignees`.

No parameters.

Returns the case queues and the users who can take a case, with the IDs assign_case takes. Use it before assign_case so the queue and assignee you name exist in your account.

Example response:

```json
{
  "queues": [
    {
      "name": "Customer care"
    },
    {
      "name": "Support"
    }
  ],
  "users": [
    {
      "user_id": "u_204",
      "name": "Marta Weiss"
    },
    {
      "user_id": "u_311",
      "name": "Tom Becker"
    }
  ]
}
```

### get_post_performance

Get post-level numbers for a date range, with a total. Access: read. REST: `GET /api/v1/sprout-social/post-performance`. MCP: `sprout_social_read → get_post_performance`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `profile_ids` | string[] | no | Profile IDs from list_profiles. Leave empty for every profile your login can see. |
| `since` | string | yes | Start date, ISO, for example 2026-10-12. |
| `until` | string | yes | End date, ISO. |
| `limit` | integer | no | Maximum posts to return. |
| `cursor` | string | no | Next page cursor from the previous call. |

Returns the posts published in the range with their text, network and the performance numbers Sprout reports for each, plus totals over the posts returned. The numbers are what Sprout shows in its post-level reports, so what is available follows your plan. Results are paged.

Example response:

```json
{
  "posts": [
    {
      "post_id": "pub_3188",
      "profile_id": "p_li_02",
      "network": "linkedin",
      "text": "Product launch: three new reports.",
      "published_at": "2026-10-13T09:00:00+02:00",
      "impressions": 9800,
      "engagements": 612
    },
    {
      "post_id": "pub_3190",
      "profile_id": "p_ig_01",
      "network": "instagram",
      "text": "Behind the scenes at the studio.",
      "published_at": "2026-10-15T10:00:00+02:00",
      "impressions": 7100,
      "engagements": 480
    },
    {
      "post_id": "pub_3195",
      "profile_id": "p_fb_03",
      "network": "facebook",
      "text": "How Marta cut her reporting time.",
      "published_at": "2026-10-16T12:00:00+02:00",
      "impressions": 5200,
      "engagements": 351
    }
  ],
  "totals": {
    "impressions": 22100,
    "engagements": 1443
  },
  "next_cursor": null
}
```

### get_profile_performance

Get profile-level numbers for a date range. Access: read. REST: `GET /api/v1/sprout-social/profile-performance`. MCP: `sprout_social_read → get_profile_performance`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `profile_ids` | string[] | no | Profile IDs from list_profiles. Leave empty for every profile your login can see. |
| `since` | string | yes | Start date, ISO. |
| `until` | string | yes | End date, ISO. |

Returns the performance numbers Sprout reports for each profile over the range, one row per profile. Use it twice, for this week and the week before, to show change. What is available follows your plan.

Example response:

```json
{
  "profiles": [
    {
      "profile_id": "p_li_02",
      "impressions": 19800,
      "engagements": 1020
    },
    {
      "profile_id": "p_ig_01",
      "impressions": 14400,
      "engagements": 790
    }
  ]
}
```

### create_draft_post

Create a draft in Sprout for one or more profiles. Access: write. REST: `POST /api/v1/sprout-social/draft-posts`. MCP: `sprout_social_write → create_draft_post`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `profile_ids` | string[] | yes | Profile IDs from list_profiles. |
| `text` | string | yes | Post text. |
| `media_urls` | string[] | no | Public URLs of images or video to attach. |

Creates a draft in Compose. With several profiles, Sprout creates one draft per network so each can be edited. A draft publishes nothing and reaches no one, so create_draft_post runs without asking first; your team finds the drafts in the Drafts tab and can edit, schedule or delete them there.

Example response:

```json
{
  "drafts": [
    {
      "draft_id": "drf_702",
      "profile_id": "p_li_02",
      "status": "draft"
    },
    {
      "draft_id": "drf_703",
      "profile_id": "p_ig_01",
      "status": "draft"
    }
  ]
}
```

### schedule_post

Schedule a post for one or more profiles, optionally through an approval workflow. Access: write, asks the user first. REST: `POST /api/v1/sprout-social/post/schedule`. MCP: `sprout_social_write → schedule_post`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `profile_ids` | string[] | yes | Profile IDs from list_profiles. |
| `text` | string | yes | Post text. |
| `scheduled_at` | string | yes | ISO date-time with offset, in the future. |
| `media_urls` | string[] | no | Public URLs of images or video to attach. |
| `approval_workflow` | string | no | Name of an approval workflow from Settings. Needs the Professional or Advanced plan. |

Schedules a post in Compose at the time you give. With approval_workflow set, the post goes to the Needs Approval tab and does not publish until someone approves it; if nobody approves it before the scheduled time, Sprout does not publish it. Without a workflow it publishes at the scheduled time to the public profile. By default you confirm each call; you can switch that off for this tool.

Example response:

```json
{
  "posts": [
    {
      "post_id": "pub_3301",
      "profile_id": "p_li_02",
      "scheduled_at": "2026-10-21T09:00:00+02:00",
      "status": "needs_approval"
    },
    {
      "post_id": "pub_3302",
      "profile_id": "p_ig_01",
      "scheduled_at": "2026-10-21T09:00:00+02:00",
      "status": "needs_approval"
    }
  ],
  "approval_workflow": "Brand review"
}
```

### reply_to_message

Reply to a comment or private message from the Smart Inbox. Access: write, asks the user first. REST: `POST /api/v1/sprout-social/messages/{message_id}/replies`. MCP: `sprout_social_write → reply_to_message`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `message_id` | string | yes | Message ID from list_inbox_messages. |
| `text` | string | yes | Reply text. |

Sends a reply from the profile the message came to, as you. If your account uses reply approvals, the reply is submitted for approval instead of sent, and the response says so. Completing the message is a separate call. By default you confirm each call; you can switch that off for this tool.

Example response:

```json
{
  "message_id": "msg_88a1f4",
  "status": "sent",
  "sent_at": "2026-10-17T09:05:00+02:00"
}
```

### tag_message

Add or remove tags on a Smart Inbox message. Access: write. REST: `POST /api/v1/sprout-social/messages/{message_id}/tag`. MCP: `sprout_social_write → tag_message`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `message_id` | string | yes | Message ID from list_inbox_messages. |
| `add_tags` | string[] | no | Tag names to add, from list_tags. |
| `remove_tags` | string[] | no | Tag names to remove. |

Adds or removes tags on one message, using names from list_tags. Needs the Apply Tags permission. Tagging is internal: it reaches no customer and is undone by removing the tag, so tag_message runs without asking first.

Example response:

```json
{
  "message_id": "msg_88a1f4",
  "tags": [
    "Product question"
  ]
}
```

### complete_message

Mark a Smart Inbox message as complete so it leaves the main feed. Access: write. REST: `POST /api/v1/sprout-social/messages/{message_id}/complete`. MCP: `sprout_social_write → complete_message`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `message_id` | string | yes | Message ID from list_inbox_messages. |

Marks the message complete. It leaves the main Smart Inbox feed and appears in the Completed Messages view. Needs the Manage Message Status permission. Completing reaches no customer, so complete_message runs without asking first.

Example response:

```json
{
  "message_id": "msg_88a1f4",
  "completed": true
}
```

### assign_case

Assign a Smart Inbox message to a queue and a person as a case. Access: write, asks the user first. REST: `POST /api/v1/sprout-social/messages/{message_id}/case/assign`. MCP: `sprout_social_write → assign_case`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `message_id` | string | yes | Message ID from list_inbox_messages. |
| `queue` | string | no | Queue name from list_case_assignees. |
| `assignee` | string | no | User ID from list_case_assignees, or 'me'. |
| `priority` | string | no | Priority as the case form shows it. Medium by default. |
| `tags` | string[] | no | Tag names to put on the case. |
| `comment` | string | no | Internal comment for the assignee. |
| `complete_message` | boolean | no | Also mark the message complete. Default false. |

Creates a case from the message with the queue, assignee and priority you give. Priority is Medium unless you set it. Tags and an internal comment are optional, and complete_message set to true also removes the message from the feed while keeping it in the assignee's Open Cases. The assignee gets an email and a notification with the case ID. By default you confirm each call; you can switch that off for this tool.

Example response:

```json
{
  "case_id": "case_1182",
  "message_id": "msg_88a1f4",
  "queue": "Customer care",
  "assignee": "u_204",
  "priority": "Medium",
  "tags": [
    "Billing"
  ],
  "comment": "Customer says they were charged twice in October.",
  "message_completed": false
}
```

## How do I connect Sprout Social to Claude Code, Codex or Cursor?

Connecting Sprout Social takes three steps: sign up, sign in to Sprout Social once in your Cloud Browser and enable it for agents, then add one MCP server or call the REST API with the same key.

### Connect Sprout Social to your agent.

1. **Create an account** Sign up and add Sprout Social in the console. Your API key is there too.

2. **Sign in to Sprout Social in your Cloud Browser** Open your Cloud Browser in the console: your own Chrome in the cloud. Sign in to Sprout Social there yourself, the way you always do, then press Enable for agents, read only or read and write. We never save your password, and your agent keeps working even when your computer is off.

3. **Add Cotlet to your agent** Paste the snippet for your client. The same server and key serve every app you connect, so you do this once.

   Claude Code:

```
claude mcp add --transport http cotlet \
  https://cotlet.dev/mcp/v1 \
  --header "Authorization: Bearer $COTLET_API_KEY"
```

   Cursor:

```
{
  "mcpServers": {
    "cotlet": {
      "url": "https://cotlet.dev/mcp/v1",
      "headers": {
        "Authorization": "Bearer ${COTLET_API_KEY}"
      }
    }
  }
}
```

   Codex:

```
# ~/.codex/config.toml
[mcp_servers.cotlet]
url = "https://cotlet.dev/mcp/v1"
bearer_token_env_var = "COTLET_API_KEY"
```

4. **Ask your agent** Ask in plain words. Your agent finds the Sprout Social tools on the server and calls them for you; anything that reaches other people waits for your OK unless you switch that off for a tool.

```
Go through the unanswered messages in my Sprout Smart Inbox. Tag each one with the right tag, assign billing problems to the Customer care queue as a case, and leave anything else for me with a one-line reason.
```

### Call Sprout Social from your scripts.

1. **Export your API key** Your scripts use the same API key as your agent. Keep it in an environment variable, never in your code.

```
export COTLET_API_KEY="cotlet_..."
```

2. **Call a tool** Every tool is an endpoint under /api/v1/sprout-social with its own method and path, listed with the endpoints above. Path parameters go in the URL; the other parameters go in the query for GET and DELETE and in a JSON body otherwise.

```
curl -X POST https://cotlet.dev/api/v1/sprout-social/messages/msg_88a1f4/replies \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Hi Lena, yes, the blue one is back. You can order it on our shop page today."}'
```

3. **Read the result** You get plain JSON back, ready for your script. A failed call costs nothing.

```
{
  "message_id": "msg_88a1f4",
  "status": "sent",
  "sent_at": "2026-10-17T09:05:00+02:00"
}
```

## Why use Cotlet for Sprout Social?

**Built for agents**

- One MCP server for every app you connect.
- The same tools as a REST API for scripts and cron jobs.
- Works with Claude Code, Codex and Cursor.

**Your login stays yours**

- You sign in to Sprout Social yourself, in your own Cloud Browser. We never save your password; the profile is encrypted with AES-256-GCM, the cipher 1Password uses.
- A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory.
- The model never sees a login.
- No stored passwords, no CAPTCHA solving, no MFA bypass.

**You stay in control**

- Scope each API key: its apps, its tools, read only or read and write.
- Anything that reaches other people waits for your OK, so a leaked key cannot post or message as you.
- Every background request listed in your Background activity. Disable for agents in one click.

**Kept working for you**

- We test every integration every 6 hours.
- When Sprout Social changes, the tool pauses until we fix it.
- Failed calls cost nothing.

## Is it safe to connect Sprout Social to Cotlet?

Yes. You sign in to Sprout Social yourself, in your own Cloud Browser, and we never save your password. Your agents only get Sprout Social once you enable it, and every background request is listed. The browser profile is stored encrypted with AES-256-GCM, the same cipher 1Password uses for its vaults and Apple for iCloud Keychain. Independent public scanners grade cotlet.dev A+ and find it clean; click a result to rerun it yourself.

- **A+ on Qualys SSL Labs**: Encryption in transit: TLS setup and certificates, on all four server addresses. [Live result](https://www.ssllabs.com/ssltest/analyze.html?d=cotlet.dev)
- **A+ on securityheaders.com**: Browser protections sent with every page, all six headers present. [Live result](https://securityheaders.com/?q=cotlet.dev&followRedirects=on)
- **A+ on Mozilla Observatory**: Mozilla's web security baseline: score 120 of 100, 12 of 12 tests passed. [Live result](https://developer.mozilla.org/en-US/observatory/analyze?host=cotlet.dev)
- **Clean on Sucuri SiteCheck**: No malware, spam or defacement, and not on any of 9 blocklists, Google Safe Browsing included. [Live result](https://sitecheck.sucuri.net/results/cotlet.dev)

[How Cotlet protects your access](https://cotlet.dev/security.md)

### Common concerns

**Who runs Cotlet?**

Cotlet is run by Take Group, a Polish software company working since 2019. Take Group runs about 3,200 websites on its own systems and has its own DevOps team for infrastructure security. We built and used integrations like this inside the company for years before opening them as Cotlet.

**Is this an official Sprout Social integration?**

No, Cotlet is independent of Sprout Social. Sprout Social's own API is too limited for this work. Cotlet works through your own Sprout Social account, the way you use Sprout Social in the browser, so you need no partner approval and no developer setup.

**What about client data and GDPR?**

Cotlet is run from the EU and follows the GDPR. Cloud Browsers run in Finland, a Tier 1 country in the ITU Global Cybersecurity Index 2024. Data passes through a call and is not kept after it.

**Can I start with read only?**

Yes. Enable the app for agents as read only, or make the API key read only, and anything that reaches other people waits for your OK unless you switch that off per tool.

**Is it reliable?**

Every Cotlet service is checked every 3 minutes from Europe, North America, Asia and Australia. The live results and any outage are public at status.cotlet.dev.

**How do I stop?**

Press Disable for agents next to Sprout Social in your console: your agents lose access at once and you stay signed in. Signing out of Sprout Social in the browser works too, and Reset browser deletes the whole profile.

## Is there a Sprout Social MCP server on GitHub?

Yes. Open-source Sprout Social MCP servers exist on GitHub, usually maintained by one person. The ones we looked at wrap the official API, so you install one yourself, create an API token on the Advanced plan, and fix it when Sprout changes. Cotlet hosts the same kind of server for you, works from your normal Sprout login, and our team keeps it working.

|  | GitHub MCP server | Cotlet |
|---|---|---|
| Setup | Clone the repo, install it, create an API token or OAuth client in Sprout, add it to each MCP client | Sign up, sign in to Sprout once, add one MCP server or API key |
| Plan and limits | Needs the Advanced plan for the API, 60 requests per minute, drafts only for publishing, no reply | Works on the plan you already have, as far as your login can do the task in Sprout |
| When Sprout changes | It breaks until you or the maintainer fix it | Our team tests it daily and fixes it for you; failed calls are free |
| Your Sprout access | A token in a file on your computer, readable by any program you run | Your own Cloud Browser in the EU, profile encrypted, only for the apps you enable, disabled for agents in one click |
| Upkeep | You update, monitor and debug it yourself | Nothing to host or update |
| Where it runs | Your computer, while it is on | Hosted: Claude Code, Codex, Cursor, n8n and scripts, also on a schedule |
| Price | Free, paid for with your time, plus the Advanced plan for the API | Free 7-day trial, then pay-as-you-go credit packs, no subscription |

### Which one fits you

**Pick Cotlet if**

- you are not a developer, or you do not want to maintain a server
- you need it to keep working when Sprout Social changes, without checking it yourself
- your agent or a script should run it on a schedule, also while your computer is off

**Pick an open-source server if**

- you are comfortable installing, updating and fixing it yourself
- you want your sign-in to stay on your own computer
- you only need it now and then, from one MCP client

## How much does the Sprout Social API cost?

Free 7-day trial with 2,000 credits, no card needed. After that, the Sprout Social API is pay as you go with no limit on apps: Credit packs from $29 for 5,000 credits, one-time, no subscription. A successful call uses 20 to 30 credits (25 for most tools, about $0.10 to $0.15), your Cloud Browser uses 50 credits a day while it has an app enabled for agents, however many apps that is, and an agent driving the browser itself uses 5 credits a minute. Credit packs stay valid for 12 months and stack, so unused credits carry over.

| Credits | Price, one time | Calls at 25 credits | Per 1,000 credits |
|---|---|---|---|
| 5,000 | $29 | 200 | $5.80 |
| 15,000 | $79 | 600 | $5.27 |
| 32,000 | $149 | 1,280 | $4.66 |
| 60,000 | $249 | 2,400 | $4.15 |

Only successful calls use credits; failed calls and timeouts cost nothing. At a balance of 0 calls pause, never a surprise charge. Authenticate with the `Authorization: Bearer` header. [See full pricing](https://cotlet.dev/pricing.md)

## How Cotlet holds your access

Cotlet hosts MCP servers and REST APIs for apps with no usable API. Your agent works in your own Sprout Social account.

- **Company details:** Cotlet is run by Take Group sp. z o.o., a company registered in Poland. Its full address and registration numbers are in the Terms of service. [Terms of service](https://cotlet.dev/terms)
- **Your sign-in:** You sign in to Sprout Social yourself, in your own Cloud Browser: a Chrome we run for you in the EU, one per app. We never save your password (password saving is off), the profile is stored encrypted with AES-256-GCM, and your agents get Sprout Social only after you enable it. When Sprout Social signs you out, your agent gives you a link to sign in again. [Security](https://cotlet.dev/security.md)
- **Revoking access:** Press Disable for agents next to Sprout Social, sign out of Sprout Social in your Cloud Browser, or reset the browser. Every background request is listed in your Background activity. Actions that reach other people wait for your OK unless you switch that off per tool.
- **What we never do:** Store passwords, solve CAPTCHAs or bypass MFA.
- **Sprout Social's terms:** You use your own Sprout Social account and stay responsible for following Sprout Social's terms. Cotlet is independent and not affiliated with Sprout Social. [Terms](https://cotlet.dev/terms)
- **Contact:** Questions about the company, security or an app: [contact@cotlet.dev](mailto:contact@cotlet.dev)

## Frequently asked questions

**How do I get access?**

Sign up free, open Sprout Social in the console and press Request access. Then you create your API key and connect Sprout Social there.

**Do I need to be technical?**

No. You sign in to Sprout Social once in your Cloud Browser, a normal Chrome you open from the console, and paste one command into your agent, or one URL into n8n. Your agent can walk you through it. There is no server to install, update or fix.

**Is it safe to connect Sprout Social to Cotlet?**

Yes. You sign in to Sprout Social yourself, in your own Cloud Browser in the EU, and we never save your password. Your agents only get Sprout Social once you enable it, every background request is listed, and the browser profile is stored encrypted with AES-256-GCM, the cipher 1Password uses for its vaults. The AI model never sees a login, posts and messages wait for your OK, and Disable for agents cuts access in one click. Independent scanners grade cotlet.dev A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory; live results are on https://cotlet.dev/security.

**Is a hosted server safer than a local one? My Sprout Social sign-in would leave my computer.**

On Cotlet you sign in inside your own Cloud Browser, which only you open, and its profile is stored encrypted with AES-256-GCM in the EU. Agents get only the apps you enable, and every background request is listed. A local server keeps your Sprout Social cookie in a plain file on your computer, readable by any program you run, and stops when your computer is off.

**Why does Cotlet send requests instead of clicking in my browser?**

To be fast, Cotlet doesn't click through Sprout Social's pages. It sends the same requests your browser would, from your browser's IP with its cookies, without opening a window. Sprout Social sees the same browser and IP you signed in with, and every request is listed in your Background activity.

**What if someone gets my Cotlet API key?**

The key holds no Sprout Social login or cookies, it only asks Cotlet to run a tool. It can call only the apps and tools you gave it, and a read-only key changes nothing. Anything that reaches other people, like posts, comments or messages, waits for your OK in the dashboard by default, so a leaked key cannot post or message as you. When you switch approval off for a scheduled job, give that job its own key limited to that one tool. Every call is in your activity log, and deleting the key ends access at once.

**Why a signed-in browser and not OAuth, like other integration platforms?**

Sprout Social offers no OAuth token you can simply grant for these tools: its official API leaves them out or needs a developer app, a plan or an approval first (see the official API section above). That is why Cotlet sets the limits itself: per key, per tool, with your approval before anything reaches other people. Cotlet is run by Take Group sp. z o.o., an EU company (VAT PL6342984273).

**Does a post my agent schedules still go through my approval workflow?**

Yes, if you name the workflow. A scheduled post that needs approval does not publish until someone approves it, and a post that is not approved before its scheduled time is not published and stays in the Needs Approval tab (Sprout Help: Message Approval Workflows). Approval workflows are on the Professional and Advanced plans.

**Which Sprout plan and role does my agent need?**

The plan and role you already have. Your agent works through your login, so it can do what you can do in Sprout. Tagging needs the Apply Tags permission and completing needs Manage Message Status (Sprout Help: Message management with tagging, Message Actions). The official API needs the Advanced plan, which Sprout lists at $399 per seat per month (checked 17 Oct 2026).

**Can my agent post or send messages in Sprout Social without asking me?**

No. Every call to schedule_post, reply_to_message or assign_case waits for your OK by default. For scheduled automations you can switch confirmation off per tool in your dashboard, for example only for approvals. create_draft_post, tag_message, complete_message runs without asking, because it sends nothing to anyone and one call undoes it.

**Can I use the Sprout Social API in n8n?**

Yes. Add https://cotlet.dev/mcp/v1 with your API key in n8n's MCP Client node, or call its endpoints under https://cotlet.dev/api/v1/sprout-social from the HTTP Request node.

---

Give your AI agents your signed-in browser.

**Product:** [Integrations](https://cotlet.dev/integrations.md) · [Use cases](https://cotlet.dev/use-cases.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Pricing](https://cotlet.dev/pricing.md) · [Security](https://cotlet.dev/security.md)

**Resources:** [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [GitHub](https://github.com/cotletdev/cotlet)

**Solutions:** [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md)

**Company:** [About](https://cotlet.dev/about.md) · [AI info: company facts](https://cotlet.dev/ai-info.md) · [Contact](https://cotlet.dev/contact.md)

**Legal:** [Terms of service](https://cotlet.dev/terms) · [Privacy policy](https://cotlet.dev/privacy) · [Refund policy](https://cotlet.dev/refunds) · [Acceptable use](https://cotlet.dev/acceptable-use) · [Cookie policy](https://cotlet.dev/cookies) · [DPA](https://cotlet.dev/dpa) · [Subprocessors](https://cotlet.dev/subprocessors)

**Elsewhere:** [Status page](https://status.cotlet.dev) · [Cotlet on GitHub](https://github.com/cotletdev) · [Cotlet on X](https://x.com/cotletdev) · [Cotlet on LinkedIn](https://www.linkedin.com/company/cotletdev) · [Cotlet on Product Hunt](https://www.producthunt.com/products/cotlet) · [Cotlet on Crunchbase](https://www.crunchbase.com/organization/cotlet) · [Cotlet on SaaSHub](https://www.saashub.com/cotlet)

Cotlet is an independent service. It is not affiliated with, endorsed by or sponsored by any of the products listed on this site. Product names are trademarks of their respective owners.

## For AI agents: sign your user up

Is your user asking you to sign them up for Cotlet? You can do it for them, no account or key needed.

1. Read the fields and their allowed values: GET https://cotlet.dev/api/v1/access-requests
2. Ask the user for each value: email, apps, what you will do with them. If they leave the password to you, generate a strong one and show it to them.
3. Show the user what you will send, then POST it as JSON to https://cotlet.dev/api/v1/access-requests.

One call creates the account and sends the access request; we email the user when access is granted.
