API resource

Slack

Each connected Slack channel is its own account: Create a post with platforms: ["slack"] sends to every connected channel (narrow it with account_ids), and a slack object turns it into a thread reply (threadTs), controls link previews (unfurlLinks, unfurlMedia) or changes the name and avatar of one message (username, iconUrl). There is no channel field: the channel is the connected account. DMs to the bot and messages that @mention it arrive in Messages; reply with POST /v1/inbox/conversations/{id}/messages (replyTo keeps the answer in the thread), or start a DM with a member through POST /v1/inbox/conversations and participantId. These calls cover the channel account itself: its default message identity, the members a DM can go to, and connecting more channels.

List Slack channels

GET/v1/accounts/{accountId}/slack-channels

Works on: Slack

Public and private channels of the Slack workspace behind a connected channel, read live from Slack (archived ones left out). isMember says whether the bot is already in the channel: it joins a public channel by itself, a private one has to invite it first.

Path parameters

accountIdstringrequired

A connected Slack channel (its acc_ id).

curl "https://creatoros-production-5658.up.railway.app/v1/accounts/acc_Sk6Tn2Vw9Kx4Ry1Lm8Qc5Hb3Js7Df0Ga2Ue6Ki9Oq1S/slack-channels" \
  -H "Authorization: Bearer $CREATOROS_API_KEY"
Response 200
{
  "team": {
    "id": "T0123456789",
    "name": "Example Co",
    "icon": "https://..."
  },
  "channels": [
    {
      "id": "C0123456789",
      "name": "marketing",
      "isPrivate": false,
      "isMember": true
    },
    {
      "id": "G0123456789",
      "name": "launch-room",
      "isPrivate": true,
      "isMember": false
    }
  ]
}

Connect more Slack channels

POST/v1/connect/slack

Works on: Slack

Connects more channels of a Slack workspace that already has a connected channel, each as its own account, with no second sign-in. The first channel comes from the browser flow: GET /v1/connect/slack returns a link to Slack's approval screen, which ends on a Creator OS channel picker. Every connected channel counts as a connected account; a workspace holds up to 10.

Body

account_idstringrequired

A connected Slack channel of the same Slack workspace (its acc_ id).

channel_idsstring[]required

Up to 25 channel ids from List Slack channels.

curl -X POST "https://creatoros-production-5658.up.railway.app/v1/connect/slack" \
  -H "Authorization: Bearer $CREATOROS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "account_id": "acc_Sk6Tn2Vw9Kx4Ry1Lm8Qc5Hb3Js7Df0Ga2Ue6Ki9Oq1S",
    "channel_ids": [
      "C0123456789"
    ]
  }'
Response 200
{
  "message": "Slack channel connected successfully",
  "account": {
    "accountId": "acc_Sk6Tn2Vw9Kx4Ry1Lm8Qc5Hb3Js7Df0Ga2Ue6Ki9Oq1S",
    "platform": "slack",
    "username": "marketing",
    "displayName": "marketing",
    "isActive": true,
    "channelId": "C0123456789",
    "teamName": "Example Co"
  }
}

List Slack workspace members

GET/v1/accounts/{accountId}/slack-members

Works on: Slack

Members of the connected Slack workspace that can receive a direct message, for populating a recipient picker. Bots, deactivated members and Slackbot are excluded. Start a DM by passing a member id as participantId to POST /v1/inbox/conversations.

Path parameters

accountIdstringrequired

Query parameters

querystring

Case-insensitive filter over display name and handle.

limitinteger

curl "https://creatoros-production-5658.up.railway.app/v1/accounts/acc_Sk6Tn2Vw9Kx4Ry1Lm8Qc5Hb3Js7Df0Ga2Ue6Ki9Oq1S/slack-members" \
  -H "Authorization: Bearer $CREATOROS_API_KEY"
Response 200
{
  "members": [
    {
      "id": "string",
      "name": "string",
      "username": "string",
      "picture": "string"
    }
  ]
}

Get Slack account settings

GET/v1/accounts/{accountId}/slack-settings

Works on: Slack

Returns the connected Slack channel details and the default message identity (name and avatar shown as the author on every post, with Slack's APP badge). The identity applies to messages only; the app's own Slack profile is global and cannot be changed per workspace.

Path parameters

accountIdstringrequired

curl "https://creatoros-production-5658.up.railway.app/v1/accounts/acc_Sk6Tn2Vw9Kx4Ry1Lm8Qc5Hb3Js7Df0Ga2Ue6Ki9Oq1S/slack-settings" \
  -H "Authorization: Bearer $CREATOROS_API_KEY"
Response 200
{
  "account": {
    "id": "string",
    "platform": "slack",
    "displayName": "string",
    "channelId": "1234567890123456789",
    "channelName": "string",
    "channelType": "string",
    "teamId": "string",
    "teamName": "string",
    "defaultUsername": "string",
    "defaultIconUrl": "string"
  }
}

Update Slack account settings

PATCH/v1/accounts/{accountId}/slack-settings

Works on: Slack

Set or clear the default message identity for this channel. Empty string clears a field; per-post platformSpecificData.username/iconUrl still override these defaults.

Path parameters

accountIdstringrequired

Body

defaultUsernamestring

Author name shown on posts. Empty string clears it.

defaultIconUrlstring

Author avatar image URL. Empty string clears it.

curl -X PATCH "https://creatoros-production-5658.up.railway.app/v1/accounts/acc_Sk6Tn2Vw9Kx4Ry1Lm8Qc5Hb3Js7Df0Ga2Ue6Ki9Oq1S/slack-settings" \
  -H "Authorization: Bearer $CREATOROS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "defaultUsername": "string"
  }'
Response 200
{
  "ok": true
}