---
title: "Connecting Accounts"
description: "Link your social media platforms to Octopost"
---

## Supported platforms

Octopost supports 12 platforms across four different authentication methods. Here is the full list:

| Platform | Auth Type | Notes |
|----------|-----------|-------|
| Twitter/X | OAuth 2.0 with PKCE | Personal or business accounts |
| LinkedIn | OAuth 2.0 | Personal profiles and company pages |
| Threads | OAuth 2.0 (Meta) | Requires Instagram Business/Creator account |
| Instagram | OAuth 2.0 (Facebook) | Business or Creator accounts only |
| Facebook | OAuth 2.0 | Pages only (personal profiles not supported via API) |
| TikTok | OAuth 2.0 | Creator or Business accounts |
| YouTube | OAuth 2.0 (Google) | Any YouTube channel |
| Bluesky | App Password | No OAuth -- uses AT Protocol sessions |
| Mastodon | Instance OAuth | Varies per instance |
| Discord | Webhook | Channel-level webhooks |
| Slack | Webhook | Incoming webhook integration |
| Telegram | Bot Token | Via BotFather |

## OAuth platforms

**Applies to:** Twitter, LinkedIn, Threads, Instagram, Facebook, TikTok, YouTube

These platforms all follow the same general flow:

1. From your Octopost dashboard, click **Connect Account** and select the platform.
2. You will be redirected to that platform's authorization page.
3. Log in (if you are not already) and review the permissions Octopost is requesting. We only ask for what we need -- typically the ability to create posts and read basic profile info.
4. Click **Authorize** or **Allow**.
5. You will be sent back to Octopost with the account connected and ready to use.

Your access tokens are stored securely and refreshed automatically before they expire. If a token refresh ever fails, Octopost will let you know and ask you to reconnect.

### Platform-specific notes

**Twitter/X** -- Uses PKCE (Proof Key for Code Exchange) for extra security during the OAuth flow. This happens automatically; you do not need to do anything special.

**Instagram** -- You need a Business or Creator account linked to a Facebook Page. Personal Instagram accounts cannot be connected via the API. If you have a personal account, you can convert it to a Creator account in the Instagram app under Settings > Account > Switch to Professional Account.

**Facebook** -- Octopost can only post to Facebook Pages, not personal profiles. This is a limitation of Meta's API, not something we can work around. You will select which Page to connect during the OAuth flow.

**Threads** -- Also requires an Instagram Business or Creator account, since Threads authentication goes through Meta's systems.

**TikTok** -- Requires a Creator or Business account. Video-only platform, so you will need to attach a video when posting to TikTok.

**YouTube** -- Standard Google OAuth. You will pick which channel to connect if you have more than one.

## App passwords (Bluesky)

Bluesky uses the AT Protocol and does not support OAuth in the traditional sense. Instead, you will use an app password:

1. Open the Bluesky app or go to [bsky.app](https://bsky.app).
2. Navigate to **Settings > App Passwords**.
3. Click **Add App Password** and give it a name like "Octopost".
4. Copy the generated password. You will only see it once.
5. Back in Octopost, click **Connect Account > Bluesky**.
6. Enter your Bluesky handle (e.g., `yourname.bsky.social`) and paste the app password.
7. Click **Connect**. Octopost will create a session and verify everything works.

App passwords are scoped specifically for third-party apps and do not give access to your main account password. You can revoke them at any time from Bluesky settings.

## Instance-based OAuth (Mastodon)

Mastodon is decentralized, which means every instance (server) is its own separate thing. The connection flow has one extra step compared to regular OAuth:

1. Click **Connect Account > Mastodon**.
2. Enter your instance URL. This is the domain of your Mastodon server -- for example, `mastodon.social`, `hachyderm.io`, or `fosstodon.org`.
3. Octopost registers itself with your instance (this happens once per instance, automatically).
4. You will be redirected to your instance's authorization page.
5. Log in and approve the connection.
6. You will be sent back to Octopost with your Mastodon account connected.

We store your instance URL alongside your account, so all API calls go to the right server. Character limits may vary by instance (usually 500, but some instances allow more). Octopost detects your instance's limit automatically.

## Webhooks (Discord and Slack)

Discord and Slack use incoming webhooks, which means posts are sent to a specific channel rather than published as your user account.

### Discord

1. In Discord, open the channel you want to post to.
2. Click the gear icon to open **Channel Settings**.
3. Go to **Integrations > Webhooks**.
4. Click **New Webhook**, give it a name (like "Octopost"), and copy the webhook URL.
5. In Octopost, click **Connect Account > Discord** and paste the webhook URL.

### Slack

1. Go to [api.slack.com/apps](https://api.slack.com/apps) and create a new app (or use an existing one).
2. Under **Incoming Webhooks**, toggle it on and click **Add New Webhook to Workspace**.
3. Pick the channel you want to post to and authorize.
4. Copy the webhook URL.
5. In Octopost, click **Connect Account > Slack** and paste the webhook URL.

## Bot token (Telegram)

Telegram uses bot tokens to post messages to channels or groups:

1. Open Telegram and search for **@BotFather**.
2. Send `/newbot` and follow the prompts to create a bot.
3. BotFather will give you a bot token. Copy it.
4. Add your bot to the Telegram channel or group where you want to post, and make it an admin with permission to post messages.
5. In Octopost, click **Connect Account > Telegram**, paste the bot token, and enter the chat ID or channel username.

## Troubleshooting

### "Authorization failed" or redirect errors

- Make sure you are logged into the correct account on the platform before starting the OAuth flow.
- Check that third-party app access is not disabled in your platform's security settings.
- Try clearing your browser cookies for that platform and starting over.
- If you are using a company account, your organization may have restricted third-party app connections.

### Bluesky connection fails

- Double-check your handle. It should include the full domain (e.g., `yourname.bsky.social`, not just `yourname`).
- Make sure you are using an app password, not your main account password.
- If you just created the app password, give it a few seconds before trying to connect.

### Mastodon instance not recognized

- Make sure you are entering just the domain (e.g., `mastodon.social`), not a full URL with `https://` or a trailing slash.
- Some very small or private instances may have API access restricted. Check with your instance admin.

### Token expired or account disconnected

- OAuth tokens expire over time. Octopost refreshes them automatically, but occasionally a refresh will fail (usually because you changed your password or revoked access on the platform side).
- If you see a warning that an account needs to be reconnected, just click through the connection flow again. Your posts and history are preserved.

### Instagram says "Business account required"

- Instagram's API only works with Business or Creator accounts, not personal ones.
- Open Instagram, go to **Settings > Account > Switch to Professional Account**, and choose Creator or Business.
- You will also need a Facebook Page linked to your Instagram account. Instagram will walk you through this during the switch.

### Facebook says "Page access required"

- Meta's API does not allow posting to personal Facebook profiles. You can only post to Pages you manage.
- During the OAuth flow, make sure you select the Page you want to post to when prompted.
