> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to Buffer

The Buffer connector lets your AI agent act in each user's Buffer account. Each user signs in to Buffer once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 23 tools.

**Authentication:** OAuth 2.0
**Categories:** Marketing, Communication
**Tools:** 23: 12 read, 8 write, 3 destructive
**Users sign in with:** OAuth
**OAuth app:** Your own Buffer app
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=BUFFER)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Buffer connection

   In **AgentKit > Connections**, create a Buffer connection and copy its redirect URI. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

4. ### Register an OAuth app

   Buffer connections use your own OAuth app. Register one with Buffer and add the redirect URI you copied.

   Then enter the app's Client ID and Client Secret on the Buffer connection.

5. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'buffer'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Buffer:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'buffer_get_account',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "buffer"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Buffer:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="buffer_get_account",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user signs in once. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'buffer_get_account',
  toolInput: {},
  connector: 'buffer',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="buffer_get_account",
    tool_input={},
    connection_name="buffer",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `buffer_get_account`

Get Account · Read-only

Get the authenticated Buffer account profile.
Returns account id, email, name, timezone, avatar url and creation date.
Use get_account to identify the connected user. Use list_organizations to find organization ids.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `buffer_get_channel`

Get Channel · Read-only

Get a single Buffer channel by id.
Returns channel name, service, type, timezone, connection, lock and queue status, and posting schedule.
Use get_channel when you already have the channel id. Use list_channels to discover channels in an organization.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`string`, required): ID of the channel to fetch. Get it from buffer_list_channels.

Example input: `{"id":"<id>"}`

### `buffer_get_daily_posting_limits`

Get Daily Posting Limits · Read-only

Check how many posts are sent and scheduled for channels on a given day against each network's daily limit.
Returns per channel the sent count, scheduled count, limit (null means unlimited) and whether the limit is reached.
Use get_daily_posting_limits before scheduling many posts on one day. Use list_posts to see the posts themselves.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `channelIds` (`array`, required): IDs of the channels to check. All channels must belong to the same organization.
- `date` (`string`, optional): Day to check as an ISO 8601 datetime. Defaults to today when omitted.

Example input: `{"channelIds":[]}`

### `buffer_get_post`

Get Post · Read-only

Get a single Buffer post by id.
Returns post text, status, share mode, schedule and sent times, channel, tags, assets and any publishing error.
Use get_post when you have the post id. Use list_posts to search for posts.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`string`, required): ID of the post to fetch. Get it from buffer_list_posts or the create_post response.

Example input: `{"id":"<id>"}`

### `buffer_get_tag`

Get Tag · Read-only

Get a single Buffer tag by id.
Returns the tag id, name, color, color name and lock state.
Use get_tag when you have the tag id. Use list_tags to browse an organization's tags.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`string`, required): ID of the tag to fetch. Get it from buffer_list_tags.

Example input: `{"id":"<id>"}`

### `buffer_list_channels`

List Channels · Read-only

List the connected social channels of a Buffer organization, optionally only locked or unlocked ones.
Returns channel id, name, service, type, timezone, connection and queue status, and posting schedule.
Use list_channels to find the channelId needed by create_post and list_posts. Use get_channel for one channel by id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `organizationId` (`string`, required): ID of the Buffer organization that owns the channels. Get it from buffer_list_organizations.
- `isLocked` (`boolean`, optional): When true return only locked channels, when false only unlocked channels. Omit to return all channels.
- `product` (`string`, optional): Only return channels supported by this Buffer product. Omit to return all channels. One of: `analyze`, `buffer`, `comments`, `engage`, `publish`, `startPage`.

Example input: `{"organizationId":"<organizationId>"}`

### `buffer_list_idea_groups`

List Idea Groups · Read-only

List the idea groups (board columns) of a Buffer organization.
Returns each group's id, name and lock state.
Use list_idea_groups to find the group ids used to filter list_ideas.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `organizationId` (`string`, required): ID of the Buffer organization that owns the idea groups. Get it from buffer_list_organizations.

Example input: `{"organizationId":"<organizationId>"}`

### `buffer_list_ideas`

List Ideas · Read-only

List ideas in a Buffer organization, optionally filtered by group or tag, with cursor pagination.
Returns idea id, title, text, target date, services, tags, media and group id, plus pageInfo.endCursor for the next page.
Use list_ideas to browse saved content ideas. Use list_idea_groups to find group ids.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `organizationId` (`string`, required): ID of the Buffer organization that owns the ideas. Get it from buffer_list_organizations.
- `after` (`string`, optional): Opaque pagination cursor. Pass pageInfo.endCursor from the previous response to fetch the next page; omit for the first page.
- `first` (`integer`, optional): Number of items to return per page (maximum 100). Omit to use Buffer's default page size.
- `groupIds` (`array`, optional): Only return ideas in these idea group IDs. Takes precedence over groupMembership.
- `groupMembership` (`string`, optional): Return only grouped or only ungrouped ideas. Ignored when groupIds is set. One of: `grouped`, `ungrouped`.
- `tagIds` (`array`, optional): Only return ideas carrying any of these tag IDs.

Example input: `{"organizationId":"<organizationId>"}`

### `buffer_list_organizations`

List Organizations · Read-only

List the Buffer organizations the authenticated account belongs to.
Returns each organization's id, name, owner email and connected channel count.
Use list_organizations first to get the organizationId required by list_channels, list_posts, list_ideas and tag tools.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `buffer_list_posts`

List Posts · Read-only

List posts in a Buffer organization, filtered by status, channel, tag or date range, with cursor pagination.
Returns post id, text, status, schedule time, channel, tags and assets for each post, plus pageInfo.endCursor for the next page.
Use list_posts to browse or find posts. Use get_post for one post by id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `organizationId` (`string`, required): ID of the Buffer organization that owns the posts. Get it from buffer_list_organizations.
- `after` (`string`, optional): Opaque pagination cursor. Pass pageInfo.endCursor from the previous response to fetch the next page; omit for the first page.
- `channelIds` (`array`, optional): Only return posts for these channel IDs.
- `createdAtEnd` (`string`, optional): Only return posts created at or before this ISO 8601 datetime.
- `createdAtStart` (`string`, optional): Only return posts created at or after this ISO 8601 datetime.
- `dueAtEnd` (`string`, optional): Only return posts scheduled at or before this ISO 8601 datetime.
- `dueAtStart` (`string`, optional): Only return posts scheduled at or after this ISO 8601 datetime.
- `first` (`integer`, optional): Number of items to return per page (maximum 100). Omit to use Buffer's default page size.
- `sortDirection` (`string`, optional): Sort direction when sortField is set: asc or desc. Defaults to desc when sortField is set. One of: `asc`, `desc`.
- `sortField` (`string`, optional): Field to sort by: dueAt or createdAt. Omit to use Buffer's default order. One of: `dueAt`, `createdAt`.
- `status` (`array`, optional): Only return posts in these statuses. Valid values: draft, error, needs_approval, scheduled, sending, sent.
- `tagIds` (`array`, optional): Only return posts carrying any of these tag IDs.

Example input: `{"organizationId":"<organizationId>"}`

### `buffer_list_snippets`

List Snippets · Read-only

List the saved hashtag snippets of a Buffer organization sorted by name, with cursor pagination.
Returns snippet id, name and text, plus pageInfo.endCursor for the next page.
Use list_snippets to find snippet ids for update_snippet and delete_snippet.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `organizationId` (`string`, required): ID of the Buffer organization that owns the snippets. Get it from buffer_list_organizations.
- `after` (`string`, optional): Opaque pagination cursor. Pass pageInfo.endCursor from the previous response to fetch the next page; omit for the first page.
- `first` (`integer`, optional): Number of items to return per page (maximum 100). Omit to use Buffer's default page size.

Example input: `{"organizationId":"<organizationId>"}`

### `buffer_list_tags`

List Tags · Read-only

List the tags of a Buffer organization sorted by name, with cursor pagination.
Returns tag id, name, color, color name and lock state, the total tag count, and pageInfo.endCursor for the next page.
Use list_tags to find tag ids for create_post, list_posts and list_ideas. Use get_tag for one tag by id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `organizationId` (`string`, required): ID of the Buffer organization that owns the tags. Get it from buffer_list_organizations.
- `after` (`string`, optional): Opaque pagination cursor. Pass pageInfo.endCursor from the previous response to fetch the next page; omit for the first page.
- `first` (`integer`, optional): Number of items to return per page (maximum 100). Omit to use Buffer's default page size.
- `isLocked` (`boolean`, optional): When true return only locked tags, when false only unlocked tags. Omit to return both.

Example input: `{"organizationId":"<organizationId>"}`

### `buffer_create_idea`

Create Idea · Write

Create an idea in a Buffer organization to capture content before it is assigned to a channel.
Returns the created idea with id, title, text, services, media and timestamps.
Use create_idea to save draft content for later. Use create_post to schedule content on a channel now.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `organizationId` (`string`, required): ID of the Buffer organization that owns the idea. Get it from buffer_list_organizations.
- `date` (`string`, optional): Target date for the idea as an ISO 8601 datetime, often used for planning.
- `imageUrls` (`array`, optional): Publicly accessible HTTPS URLs of images to attach to the idea. Video is not supported for ideas.
- `services` (`array`, optional): Social networks the idea targets. Valid values: bluesky, facebook, googlebusiness, instagram, linkedin, mastodon, pinterest, startPage, substack, threads, tiktok, twitter, whatsapp, youtube.
- `text` (`string`, optional): Main body text of the idea.
- `title` (`string`, optional): Title or headline of the idea.

Example input: `{"organizationId":"<organizationId>"}`

### `buffer_create_post`

Create Post · Write

Create a post on one Buffer channel: add it to the queue, share it next or now, schedule it for a time, or save it as a draft.
Returns the created post with id, text, status, schedule time, channel and assets, or an error message when Buffer rejects the post.
Use create_post to publish new content. Use edit_post to change an existing post. Use create_idea to capture content without a channel.
Requires the channel id from list_channels.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `channelId` (`string`, required): ID of the channel to post to. Get it from buffer_list_channels.
- `mode` (`string`, required): How the post is scheduled: addToQueue (next queue slot), shareNext (first queue slot), shareNow (publish immediately) or customScheduled (publish at dueAt). One of: `addToQueue`, `shareNext`, `shareNow`, `customScheduled`.
- `dueAt` (`string`, optional): ISO 8601 datetime to publish at. Required when mode is customScheduled.
- `imageUrls` (`array`, optional): Publicly accessible HTTPS URLs of images to attach, in order. Buffer does not host media, so the URLs must be directly downloadable.
- `metadata` (`object`, optional): Network-specific post options keyed by service, for example {"instagram": {"type": "post", "shouldShareToFeed": true}} or {"twitter": {"thread": [{"text": "1/ Hello"}, {"text": "2/ World"}]}}. Supported keys are bluesky, facebook, google, instagram, linkedin, mastodon, pinterest, substack, threads, tiktok, twitter and youtube. Instagram posts require type and shouldShareToFeed.
- `saveToDraft` (`boolean`, optional): When true the post is saved as a draft and not scheduled. Posting limits are not checked for drafts.
- `schedulingType` (`string`, optional): automatic publishes the post by itself, notification sends a reminder to publish it manually. Defaults to automatic. One of: `automatic`, `notification`.
- `tagIds` (`array`, optional): IDs of tags to apply to the post. Get them from buffer_list_tags.
- `text` (`string`, optional): Text of the post. Buffer enforces each network's character limit. For threaded posts it must match the first thread entry in metadata.
- `videoUrl` (`string`, optional): Publicly accessible HTTPS URL of one video to attach. Buffer does not host media, so the URL must be directly downloadable.

Example input: `{"channelId":"<channelId>","mode":"addToQueue"}`

### `buffer_create_snippet`

Create Snippet · Write

Create a saved hashtag snippet in a Buffer organization.
Returns the created snippet with id, name and text, or an error message when the name or text is empty or too long.
Use create_snippet to save reusable hashtags. Use update_snippet to change one.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Display name of the snippet.
- `organizationId` (`string`, required): ID of the Buffer organization that owns the snippet. Get it from buffer_list_organizations.
- `text` (`string`, required): The hashtags inserted into a post when the snippet is used.

Example input: `{"name":"<name>","organizationId":"<organizationId>","text":"<text>"}`

### `buffer_create_tag`

Create Tag · Write

Create a tag in a Buffer organization with a name and color.
Returns the created tag, or an error message when the name is a duplicate or the plan's tag limit is reached.
Use create_tag to add a label. Use update_tag to rename or recolor an existing tag.
The caller must be an administrator of the organization.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `color` (`string`, required): Tag color as a hex triplet: # followed by exactly six hex digits. Shorthand such as #F51 is rejected.
- `name` (`string`, required): Tag display name, 1 to 100 characters, unique within the organization (comparison is case-sensitive).
- `organizationId` (`string`, required): ID of the Buffer organization that owns the tag. Get it from buffer_list_organizations.

Example input: `{"color":"<color>","name":"<name>","organizationId":"<organizationId>"}`

### `buffer_edit_post`

Edit Post · Write

Edit an existing Buffer post: change its text, schedule, mode, tags, media or draft state. Omitted fields keep their current value.
Returns the updated post, or an error message when Buffer rejects the edit.
Use edit_post to change a post. Use move_post_in_queue to only reorder a queued post. Use create_post for new posts.
Requires the post id from list_posts or get_post.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`string`, required): ID of the post to edit. Get it from buffer_list_posts.
- `dueAt` (`string`, optional): New ISO 8601 publish time. Use together with mode customScheduled.
- `imageUrls` (`array`, optional): Replaces all existing media. Publicly accessible HTTPS URLs of images to attach, in order. Buffer does not host media, so the URLs must be directly downloadable.
- `metadata` (`object`, optional): Network-specific post options keyed by service, for example {"instagram": {"type": "post", "shouldShareToFeed": true}} or {"twitter": {"thread": [{"text": "1/ Hello"}, {"text": "2/ World"}]}}. Supported keys are bluesky, facebook, google, instagram, linkedin, mastodon, pinterest, substack, threads, tiktok, twitter and youtube. Instagram posts require type and shouldShareToFeed.
- `mode` (`string`, optional): New scheduling mode: addToQueue, shareNext, shareNow or customScheduled. Omit to leave scheduling unchanged. One of: `addToQueue`, `shareNext`, `shareNow`, `customScheduled`.
- `saveToDraft` (`boolean`, optional): When true, convert the post to a draft instead of keeping it scheduled.
- `schedulingType` (`string`, optional): Change between automatic publishing and notification reminders. Omit to leave unchanged. One of: `automatic`, `notification`.
- `tagIds` (`array`, optional): IDs of tags to apply to the post. Get them from buffer_list_tags.
- `text` (`string`, optional): New text for the post. Omit to keep the current text.
- `videoUrl` (`string`, optional): Publicly accessible HTTPS URL of one video to attach. Buffer does not host media, so the URL must be directly downloadable.

Example input: `{"id":"<id>"}`

### `buffer_move_post_in_queue`

Move Post In Queue · Write

Move a queued Buffer post to the top or bottom of its channel's queue without changing its content.
Returns the updated post with its new schedule time, or an error message.
Use move_post_in_queue to reorder the queue. Use edit_post to change content or time.
Requires the post id of a queued post from list_posts.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`string`, required): ID of the queued post to move. Get it from buffer_list_posts.
- `position` (`string`, required): Where to move the post in the channel queue: top takes the next slot, bottom takes the last slot. One of: `top`, `bottom`.

Example input: `{"id":"<id>","position":"top"}`

### `buffer_update_snippet`

Update Snippet · Write

Replace the name and text of a Buffer snippet. Both are replaced, so send the current value for the one you are not changing.
Returns the updated snippet, or an error message.
Use update_snippet to edit a snippet. Use delete_snippet to remove it.
Requires the snippet id from list_snippets.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`string`, required): ID of the snippet to update. Get it from buffer_list_snippets.
- `name` (`string`, required): Display name of the snippet.
- `organizationId` (`string`, required): ID of the Buffer organization that owns the snippet. Get it from buffer_list_organizations.
- `text` (`string`, required): The hashtags inserted into a post when the snippet is used.

Example input: `{"id":"<id>","name":"<name>","organizationId":"<organizationId>","text":"<text>"}`

### `buffer_update_tag`

Update Tag · Write

Rename or recolor a Buffer tag. Both name and color are replaced, so send the current value for the one you are not changing.
Returns the updated tag, or an error message when the name is a duplicate or the tag is locked.
Use update_tag to edit a tag. Use delete_tag to remove it.
Requires the tag id from list_tags and administrator access.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `color` (`string`, required): Tag color as a hex triplet: # followed by exactly six hex digits. Shorthand such as #F51 is rejected.
- `id` (`string`, required): ID of the tag to update. Get it from buffer_list_tags.
- `name` (`string`, required): Tag display name, 1 to 100 characters, unique within the organization (comparison is case-sensitive).

Example input: `{"color":"<color>","id":"<id>","name":"<name>"}`

### `buffer_delete_post`

Delete Post · Destructive

Permanently delete a Buffer post by id.
Returns the id of the deleted post, or an error message when the post cannot be deleted.
Use delete_post to remove a post. Use edit_post with saveToDraft to unschedule it without deleting.
Requires the post id from list_posts.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `id` (`string`, required): ID of the post to delete. Get it from buffer_list_posts.

Example input: `{"id":"<id>"}`

### `buffer_delete_snippet`

Delete Snippet · Destructive

Permanently delete a Buffer snippet.
Returns the id of the deleted snippet, or an error message.
Use delete_snippet to remove a snippet. Use update_snippet to edit instead.
Requires the snippet id from list_snippets.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `id` (`string`, required): ID of the snippet to delete. Get it from buffer_list_snippets.
- `organizationId` (`string`, required): ID of the Buffer organization that owns the snippet. Get it from buffer_list_organizations.

Example input: `{"id":"<id>","organizationId":"<organizationId>"}`

### `buffer_delete_tag`

Delete Tag · Destructive

Permanently delete a Buffer tag and remove it from every post, idea and content item that carries it.
Returns the id of the deleted tag, or an error message.
Use delete_tag to remove a tag. Posts and ideas that carried it are kept.
Requires the tag id from list_tags and administrator access.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `id` (`string`, required): ID of the tag to delete. Get it from buffer_list_tags.

Example input: `{"id":"<id>"}`

## Related

Other Marketing connectors ([all 87](/agentkit/connectors/?category=marketing)):

- [HubSpot](/agentkit/connectors/hubspot/): Scalekit connector, OAuth, 457 tools
- [Mailchimp](/agentkit/connectors/mailchimp/): Scalekit connector, OAuth, 73 tools
- [Twitter / X](/agentkit/connectors/twitteroauth/): Scalekit connector, OAuth, 92 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
