[{"id":"billing/change-plan","url":"/billing/change-plan","category":"billing","title":"Change or cancel your plan","excerpt":"Upgrade, downgrade, or cancel from the Payments page. All plan changes happen in the Stripe billing portal.","body":"\nPlan changes are handled through Stripe's billing portal, opened from inside PostFast. This page walks through where to find it, what the current plans look like, and what happens when you cancel.\n\n## Where billing lives in PostFast\n\nOpen **Settings → [Payments](https://app.postfa.st/dashboard/payments)** from the sidebar. The page is titled **Billing & Payments** and has two main cards:\n\n- **Current plan** — shows the plan you're on (Starter, Creator, Growth, Pro, or Enterprise) and a **Manage billing** button.\n- **Receipts & Invoices** — download links for past receipts and, where available, the matching invoice. If you haven't been charged yet, you'll see \"You don't have any receipts or invoices currently!\"\n\n## Change your plan\n\n1. Open [Payments](https://app.postfa.st/dashboard/payments).\n2. Click **Manage billing**. This opens the Stripe billing portal in a new tab.\n3. In the portal, pick **Update plan** (to upgrade or downgrade), **Update payment method**, or **Cancel plan**.\n\nThe portal is Stripe-hosted — it's the same interface used by most SaaS products — and you can manage only your own personal subscription from here.\n\n<Callout type=\"tip\">\n**On a trial and want to subscribe?** You're on a 7-day free trial when you sign up, with no credit card required. To switch to a paid plan, click **Manage billing**, then **Add payment method** in Stripe, and pick the plan you want.\n</Callout>\n\n## The plans\n\nAll plans are **monthly** today. Prices and limits come from the [public pricing page](https://postfa.st/pricing), which is always the source of truth.\n\n| Plan | Price/mo | Social accounts | Scheduled posts | Drafts | Workspaces / users |\n| --- | --- | --- | --- | --- | --- |\n| **Starter** | €12 | 4 | 150 | 50 | 1 / 1 |\n| **Creator** | €29 | 12 | 1,500 | 600 | 4 / 5 |\n| **Growth** | €49 | 30 | 3,000 | 2,000 | 10 / 8 |\n| **Pro (Agency)** | €99 | 120 | Unlimited | Unlimited | 30 / 15 |\n| **Enterprise** | €239 | 500 | Unlimited | Unlimited | 110 / 30 |\n\nEvery plan supports all 11 connected platforms. Pro and Enterprise add priority support and workspace logo/branding. See [postfa.st/pricing](https://postfa.st/pricing) for the full feature comparison.\n\n## Cancelling\n\nYou can cancel anytime from **Manage billing → Cancel plan** in the Stripe portal.\n\n<Callout type=\"warning\">\n**What happens after you cancel:**\n\n- **Already-scheduled posts keep publishing until the end of your current billing period.**\n- Once the period ends, any posts still scheduled **after that date** are rejected within 2 days.\n- Your connected accounts, drafts, and analytics history stay in the workspace — cancelling downgrades your access, it doesn't delete data.\n\nIf you change your mind, click **Manage billing** again and resubscribe. You'll see a reminder at the top of the Payments page while the subscription is in the canceled state.\n</Callout>\n\n## Receipts & invoices\n\nPast receipts appear under the **Receipts & Invoices** card on the Payments page. Each entry shows the receipt number, amount (in EUR), and issue date, with a **Receipt** download button. If an invoice was issued (for example, when a business tax ID is on file in Stripe), an **Invoice** download button appears next to it.\n\nTo add or update a tax ID or billing address, open **Manage billing** and edit your billing details in the Stripe portal. The next invoice uses the updated details automatically. If you need a correction applied to a past invoice, email [support@postfa.st](mailto:support@postfa.st).\n\n## Workspaces and billing\n\nBilling is **per-organization**, not per-workspace.\n\n- When you sign up, you become the owner of an organization and its subscription. The plan's limits (workspaces, users per workspace, social accounts, scheduled posts) apply across every workspace you create.\n- One subscription covers **all** workspaces in your organization — there isn't a separate bill per workspace.\n- If you're invited as Editor or Client into someone else's workspace, that workspace belongs to **their** organization. You don't pay for it, and you don't see their billing.\n- Plan-level caps like \"max users per workspace\" are enforced per workspace, but the bill itself goes to the organization owner.\n\nSee [Invite team members to a workspace](/workspaces-and-team/inviting-team-members) for how membership interacts with plan limits.\n\n## Common questions\n\n**Is there yearly billing?** Not yet — all plans are monthly.\n\n**Will I be charged immediately when I upgrade mid-cycle?** Stripe handles proration on plan changes. You'll see the exact amount Stripe will charge (or credit) before you confirm in the portal.\n\n**Who can change the plan?** Each subscription belongs to the user who subscribed. From the Payments page, you can manage only your own personal subscription, not another teammate's.\n\n**Need help?** Email [support@postfa.st](mailto:support@postfa.st) with your workspace name and the email you subscribed with.\n","tags":["billing","plans","upgrade","downgrade","cancel","stripe"]},{"id":"facebook/page-keeps-disconnecting","url":"/facebook/page-keeps-disconnecting","category":"facebook","title":"Why does my Facebook Page keep disconnecting?","excerpt":"Another user on the same Facebook account reconnected and left your Page out. Reconnect, grant access to every Page, and the issue stops.","body":"\nThe single most common cause: **someone else using the same Facebook login reconnected and didn't include your Page**. Meta treats every reconnect as a full permission reset — whichever Pages the last person granted are the only Pages that stay connected. The reset is global to that Facebook account: it affects every PostFast workspace connected through the same login, not just the workspace where the reconnect happened.\n\n## Fix it in two minutes\n\n1. Open [Accounts](https://app.postfa.st/dashboard/accounts) from the sidebar.\n2. Click **Add Social Account** and pick **Facebook**. If Facebook is already connected for this workspace, the same action triggers a reconnect — there's no separate \"Reconnect\" button.\n3. On Meta's consent screen, open **Edit access** and choose **Select all current and future Pages**.\n4. Save and try scheduling again.\n\n<Callout type=\"tip\">\nIf the Page belongs to someone else's workspace (for example, you run an agency), ask the workspace owner to reconnect with **Select all current and future Pages** turned on. Anyone with access to that Facebook login can trigger this.\n</Callout>\n\n## Prevent it happening again\n\n- On Meta's permissions screen, always pick **Select all current and future Pages**.\n- If multiple teammates or agencies share one Facebook login, agree on the rule: whoever reconnects picks the \"all current and future\" option — no exceptions.\n- Separate Facebook logins per brand/workspace where possible. If Brand A and Brand B use two different Facebook accounts, their Pages can't knock each other out.\n\n## Related\n\n- [Select all Pages during Facebook OAuth](/facebook/select-all-pages-during-oauth)\n","tags":["facebook","oauth","permissions","reconnect","workspace"]},{"id":"facebook/select-all-pages-during-oauth","url":"/facebook/select-all-pages-during-oauth","category":"facebook","title":"Select all Pages during Facebook OAuth","excerpt":"Always grant access to every Page when connecting Facebook. Meta replaces (not merges) your permissions on every reconnect.","body":"\nWhen you connect Facebook to PostFast, Meta asks which Pages PostFast may access. Most users only pick the Page they're posting to that day, which is what causes the other Pages to drop out of PostFast.\n\n<Callout type=\"warning\">\nFacebook **replaces** your permissions on every reconnect. It does not merge them with previous grants. If you leave a Page out, PostFast loses access to it immediately — and that applies to **every PostFast workspace** using the same Facebook login, not just the one you're signed into right now.\n</Callout>\n\n<Image\n  src=\"https://assets.postfa.st/images/fb_oauth_6d26d3df30.png\"\n  alt=\"Facebook OAuth screen showing the two radio options: Select all current and future Pages, and Select only current Pages\"\n  width={1200}\n  height={720}\n/>\n\n## The rule\n\nGrant access to **every Page you manage** — even Pages you don't plan to post to today. If you ever add a new Page, re-run the connection and include it too.\n\n## Step-by-step\n\n1. In PostFast, open [Accounts](https://app.postfa.st/dashboard/accounts) from the sidebar.\n2. Click **Add Social Account** and pick **Facebook**. If Facebook is already connected, the same button triggers a reconnect — there is no separate \"Reconnect\" action.\n3. Sign in with your Facebook account if prompted.\n4. On the Meta consent screen, find the Pages section and click **Edit access**.\n5. You'll see two radio options. Choose **Select all current and future Pages** — this grants access to every Page you manage now and any Page you add later.\n6. If you pick **Select only current Pages** instead, you must tick **every** Page in the list that follows. Leaving any Page unticked revokes PostFast's access to that Page — and that revoke is global to your Facebook account: it affects every PostFast workspace connected via the same Facebook login, not only the workspace you're currently signed into.\n7. Continue through the rest of the permission screens without unchecking anything.\n\n<Callout type=\"warning\">\n**When this matters most: agencies and shared logins.**\n\nThis problem bites hardest when the same Facebook personal login is used across multiple PostFast workspaces. Example:\n\n- An agency has three workspaces: **Brand A**, **Brand B**, **Brand C**, all managed with one shared Facebook account.\n- On Monday, a team member reconnects Facebook inside **Brand A** and only ticks Brand A's Pages.\n- Result: Brand B's and Brand C's Facebook Pages **immediately disconnect** from their respective workspaces, because Meta only remembers the most recent permission grant for that Facebook account.\n\nAvoid it by always picking **Select all current and future Pages** on every reconnect — or, if you must use **Select only current Pages**, ticking every Page belonging to every workspace you manage with that Facebook login.\n</Callout>\n\n## Why Meta designed it this way\n\nMeta's OAuth flow is scoped per-session. Each time PostFast asks for access, Meta shows you the full list so you can revoke specific Pages. It's a privacy feature — but it means you must actively re-grant every Page on every reconnect.\n\n## If you already disconnected a Page\n\nSee [Why does my Facebook Page keep disconnecting?](/facebook/page-keeps-disconnecting) — the fix is the same: reconnect and grant access to every Page.\n","tags":["facebook","oauth","permissions","connect"]},{"id":"getting-started/connect-your-first-account","url":"/getting-started/connect-your-first-account","category":"getting-started","title":"Connect your first social account","excerpt":"Connect a social platform, confirm the connection on the Accounts page, and publish your first post from the composer.","body":"\nThis guide walks you through connecting your first social account in PostFast and publishing a post.\n\n## 1. Open the Accounts page\n\nIn the sidebar, open [Accounts](https://app.postfa.st/dashboard/accounts). This is where every connected social account lives.\n\n## 2. Click Add Social Account\n\nClick the **Add Social Account** tile, then pick the platform you want to connect. PostFast supports 11 platforms today:\n\n- Facebook\n- Instagram\n- TikTok\n- YouTube\n- LinkedIn\n- X (Twitter)\n- Pinterest\n- Threads\n- Bluesky\n- Google Business Profile\n- Telegram\n\n## 3. Sign in and grant permissions\n\nEach platform opens its own authorization screen. Follow the prompts and approve access.\n\n<Callout type=\"warning\">\n**Facebook and Instagram** — always grant access to every Page or account you manage. Meta replaces your permissions on each reconnect, so anything you leave out gets disconnected. See [Select all Pages during Facebook OAuth](/facebook/select-all-pages-during-oauth) for the exact flow.\n</Callout>\n\n## 4. Confirm the connection\n\nAfter authorizing, you're returned to the **Accounts** page. The new account appears as a card in the grid with its avatar, handle, and platform badge. That's \"connected.\"\n\nIf an account doesn't appear, refresh the page. If it still isn't there, retry the **Add Social Account** flow.\n\n## 5. Send a test post\n\n1. Click **New Post** at the top of the sidebar. You'll land on the **Create post** composer.\n2. Select the account you just connected from the **Post settings** panel on the right.\n3. Type a caption, and optionally attach an image or video. Upload limits: images ≤ **10 MB**, videos ≤ **250 MB**. Supported formats: `.jpeg`, `.png`, `.gif`, `.webp`, `.mp4`, `.webm`, `.mov`, `.quicktime`.\n4. Click **Post now** to publish immediately, **Pick time** to schedule, or **Save as Draft** to save for later.\n","tags":["onboarding","connect","oauth","first-post"]},{"id":"publishing-scheduling/schedule-to-multiple-platforms","url":"/publishing-scheduling/schedule-to-multiple-platforms","category":"publishing-scheduling","title":"Schedule a post to multiple platforms","excerpt":"Cross-post the same content to multiple social accounts in a single scheduled post - with optional per-platform tweaks to caption, media, and platform-specific settings.","body":"\nPostFast lets you write one post and publish it to multiple social accounts at once, with optional per-platform customization for the cases where \"the same text everywhere\" doesn't fit.\n\n## 1. Open the composer\n\nFrom the sidebar, click **New Post** at the top. You'll land on the **Create post** composer.\n\n## 2. Add content\n\nAdd the base content that will be used across all platforms. You can attach images and videos too, depending on the platforms you're posting to.\n\n<Callout type=\"tip\">\n**Per-platform customization:** enable the **Enable platform specific content** toggle to tailor the caption, media, or other fields for each platform individually. Handy when X's character limit clashes with a longer LinkedIn post, or when you want platform-specific hashtags.\n</Callout>\n\n## 3. Choose your social media accounts\n\n- In the **Post settings** panel on the right, open the **Schedule** tab.\n- Select one or multiple accounts to post to.\n\n## 4. Platform settings (optional)\n\nOpen the **Platform settings** tab to tune platform-specific options - for example, different publishing behavior for X, Instagram, or TikTok. Whatever you set here applies to every post on the corresponding platform.\n\n## 5. Schedule, post, or save\n\nBack in the **Schedule** tab:\n\n- Click **Pick time** to schedule the post for a specific time.\n- Click **Post now** to publish to all selected accounts immediately.\n- Click the arrow next to **Post now** to save it as a draft inside PostFast.\n\n## Related\n\n- [Publish to TikTok from PostFast drafts](/tiktok/publish-from-drafts)\n- [Why did my post fail?](/troubleshooting/why-did-my-post-fail)\n","tags":["scheduling","multi-platform","cross-post","composer"]},{"id":"telegram/connect-telegram-channel-or-group","url":"/telegram/connect-telegram-channel-or-group","category":"telegram","title":"Connect a Telegram channel or group to PostFast","excerpt":"Schedule and publish posts to your Telegram channels and groups by adding the PostFast bot as an admin, then connecting from the Accounts page.","body":"\nYou can schedule and publish posts to Telegram channels and groups directly from PostFast. Setup has two parts: make the PostFast bot an admin of the channel or group, then connect it on the Accounts page.\n\n## Prerequisites\n\n- A Telegram channel or group where you are an admin\n- A PostFast account with an active workspace\n\n## Step 1: Add the PostFast bot as an admin\n\n### For channels\n\n1. Open your Telegram channel.\n2. Tap the channel name (avatar) at the top.\n3. Tap **Edit**.\n4. Go to **Administrators**.\n5. Tap **Add Admin** and search for **@postfastapp_bot**.\n6. Set the following permissions:\n   - **Manage Messages** - Post Messages\n   - **Edit Messages**\n   - **Manage Stories** - Post Stories\n   - Uncheck all other permissions.\n7. Tap **Done**.\n\n### For groups\n\n1. Open your Telegram group.\n2. Tap the group name (avatar) at the top.\n3. Tap **Edit**.\n4. Go to **Administrators**.\n5. Tap **Add Admin** and search for **@postfastapp_bot**.\n6. You can leave all permissions unchecked - the bot only needs admin status to post.\n7. Tap **Done**.\n\n## Step 2: Connect in PostFast\n\n1. Go to [Accounts](https://app.postfa.st/dashboard/accounts) in PostFast.\n2. Click **Add Social Account**.\n3. Select **Telegram** from the platform list.\n4. Enter your channel or group identifier (see below).\n5. Click **Connect**.\n\n## Finding your channel or group identifier\n\n### Public channels and groups\n\nIf your channel or group has a public username (e.g. `@mychannel`), simply type it in the input field. Usernames always start with `@`.\n\n### Private channels and groups\n\nPrivate channels and groups don't have a public username. To connect them:\n\n1. Open the channel or group in Telegram.\n2. Right-click (or long-press on mobile) on any message.\n3. Select **Copy Message Link**.\n4. You'll get a link like `https://t.me/c/1234567890/5`.\n5. Paste the full link into the input field in PostFast - PostFast extracts the chat ID automatically.\n\n## Channels vs groups: what to expect\n\n| | Channels | Groups |\n| --- | --- | --- |\n| **Post attribution** | Posts appear as the channel itself - no bot name shown | The bot name (`@postfastapp_bot`) is visible next to messages |\n| **Can hide bot name?** | N/A - already hidden | No - this is a Telegram API limitation that applies to all scheduling tools |\n| **Best for** | Broadcasting content to subscribers | Community discussions with scheduled announcements |\n\nIf bot attribution is a concern, we recommend using channels for content publishing.\n\n## Supported content\n\n- **Text**: up to 4,096 characters (Telegram truncates automatically)\n- **Media**: up to 10 images or videos per post, mixed media allowed\n- **Links**: fully supported with automatic link previews\n\n## Troubleshooting\n\n### \"The bot is not an admin of the channel or group\"\n\nThe bot needs to be added as an administrator before you can connect. Follow **Step 1** above to add `@postfastapp_bot` as an admin.\n\n### \"Channel or group not found\"\n\n- Make sure the bot has been added as an admin before trying to connect.\n- Double-check the username starts with `@` (e.g. `@mychannel`, not `mychannel`).\n- For private channels or groups, make sure you're pasting the full message link.\n\n### \"The bot is not a member of this channel\"\n\nThe bot was removed or was never added. Go to your channel/group admin settings and add `@postfastapp_bot` as an administrator again.\n\n## Content policy\n\nTo protect the platform, the following are forbidden:\n\n- Spam or unsolicited messages\n- Scraping or data collection\n- Impersonation\n- Prohibited content (terrorism, malware, illegal goods, doxing)\n\nViolations of Telegram's Bot Terms of Service may result in your account and all associated accounts in PostFast being permanently banned.\n","tags":["telegram","connect","bot","channels","groups"]},{"id":"tiktok/publish-from-drafts","url":"/tiktok/publish-from-drafts","category":"tiktok","title":"Publish to TikTok from PostFast drafts","excerpt":"Schedule TikTok videos and carousels from PostFast. You can publish directly, schedule for later, or push to TikTok as a draft for last-minute edits inside the TikTok app.","body":"\nYou can schedule, directly post, or save-as-draft any TikTok video or carousel from PostFast. This guide walks through each option, plus the TikTok-specific Platform Settings you can tune before publishing.\n\n## 1. Open the composer\n\nFrom the sidebar, click **New Post** at the top. You'll land on the **Create post** composer.\n\n## 2. Add content\n\n- Add the base content you'd use for the TikTok post.\n- Attach images (for a carousel) or a video.\n\n## 3. Choose your TikTok account\n\n- In the **Post settings** panel on the right, open the **Schedule** tab.\n- Select your TikTok account. You can cross-post to other platforms at the same time.\n\n## 4. Platform settings (optional)\n\nIn the **Post settings** panel, open the **Platform settings** tab to tune TikTok-specific options:\n\n- **Publish as draft** - tick this if you want to edit the post inside the TikTok app before it goes live. The post appears in TikTok's **Inbox → System Notifications** on your device, ready to be finalized.\n- **Auto add music** - when enabled, TikTok will attach a song to the post automatically on publish. Works for **image carousels only**, not videos.\n\n## 5. Schedule, post, or save\n\nBack in the **Schedule** tab on the right:\n\n- Click **Pick time** to schedule the post for a specific time.\n- Click **Post now** to publish immediately.\n- Click the arrow next to **Post now** to **Save as Draft** (inside PostFast, not TikTok).\n\n<Callout type=\"tip\">\nWant to do this programmatically instead? All of the above is available via the [PostFast API](https://postfa.st/api-integrations). Useful if you're building a content pipeline.\n</Callout>\n\n## Related\n\n- [Connect your first social account](/getting-started/connect-your-first-account)\n- [Why did my post fail?](/troubleshooting/why-did-my-post-fail)\n","tags":["tiktok","drafts","carousels","videos","publishing"]},{"id":"troubleshooting/why-did-my-post-fail","url":"/troubleshooting/why-did-my-post-fail","category":"troubleshooting","title":"Why did my post fail?","excerpt":"Failed posts live on the Posts → Failed tab. PostFast auto-retries 3 times before giving up; after that you can retry, edit, or duplicate the post.","body":"\nIf a scheduled post didn't go live, here's what happened and what to do about it.\n\n## Where to find failed posts\n\nOpen **Posts** from the sidebar. The page has four tabs: **Scheduled**, **Published**, **Draft**, and **Failed**. Failed posts only appear on the **Failed** tab — they don't show in Calendar or Dashboard.\n\nEach failed post shows a red alert icon with an inline error message from the platform. The error tooltip also links back here for more context.\n\n## Auto-retry — what happens before \"Failed\"\n\nPostFast retries automatically before marking anything as failed. The sequence:\n\n| Attempt | Wait before retry |\n| --- | --- |\n| 1 fails | 2 minutes |\n| 2 fails | 5 minutes |\n| 3 fails | 15 minutes |\n| All 3 fail | Status → **Failed** |\n\nWhile this is happening, the post stays on the **Scheduled** tab with \"Retry attempt: 1/3\" (etc.) in amber. Your original scheduled time is preserved, and you can reschedule it yourself if you don't want to wait.\n\nYou'll see the post appear on the **Failed** tab only after all three retries fail.\n\n## Retry, edit, or duplicate\n\nOn the Failed tab, open the three-dot dropdown on a post:\n\n- **Retry** — reschedules the post for 2 minutes from now with the same content. Sets approval to **Approved** so it publishes directly.\n- **Edit** — opens the composer. Useful if the failure was caused by the post itself (duplicate content, media too large, caption rules) and you need to change something before trying again.\n- **Duplicate** — creates a fresh draft with the same content. Handy if you want to keep the failed post as a record.\n\n## How you'll know a post failed\n\nTwo signals, both only after the 3 auto-retries are exhausted:\n\n- **Email to the workspace owner** — includes the workspace name, platform, account handle, post content, and the error reason.\n- **Failed status on the post itself** — the post moves to the **Failed** tab on the Posts page with the platform's error message attached.\n\n<Callout type=\"warning\">\nThe failure email goes to the **workspace owner**, not the teammate who created the post. If you wrote and scheduled a post inside someone else's workspace and it failed, ask the workspace owner — they're the one who got the email.\n</Callout>\n\nThere are no in-app bell notifications for failures today, and no push notifications. Check the Failed tab on the Posts page or ask your workspace owner whether they got a failure email.\n\n## Common causes\n\nMost failures fall into two buckets:\n\n- **Disconnected or stale account.** The platform revoked access, or a teammate reconnected and left this account out. Go to [Accounts](https://app.postfa.st/dashboard/accounts) and reconnect. For Facebook specifically, follow [Select all Pages during Facebook OAuth](/facebook/select-all-pages-during-oauth) — this is the single biggest source of failures.\n- **Media the platform rejected.** Each platform has its own rules for image size, video codec, aspect ratio, and duration. Check the error message on the failed post for specifics, then shrink, re-encode, or swap the file and retry.\n\nThe error message on the failed post is the most useful signal. It comes straight from the platform's API, translated into human-readable English where PostFast recognizes the error code.\n\n## Still stuck?\n\nEmail [support@postfa.st](mailto:support@postfa.st) with:\n\n- A screenshot of the failed post inside PostFast (the Failed tab view)\n- The platform and account handle you were posting to\n- The scheduled or failed time\n\nThat's enough for us to look up the raw platform response in the logs and tell you exactly what went wrong.\n","tags":["errors","retry","publishing","failed","debugging"]},{"id":"workspaces-and-team/inviting-team-members","url":"/workspaces-and-team/inviting-team-members","category":"workspaces-and-team","title":"Invite team members to a workspace","excerpt":"Add teammates or clients from Settings → Workspace → Users. Email or shareable link, optional bulk invite across every workspace you manage.","body":"\nWorkspace membership lives on the **Users** tab inside [Settings → Workspace](https://app.postfa.st/dashboard/workspace). Admins see it as **Manage Workspace Users** with full controls; everyone else sees it as a read-only list.\n\n## Add a user\n\nAdmins can add users from the Users tab.\n\n1. Click **Add User**.\n2. Fill in **Email**, **First name**, **Last name**, and pick a **Role** (Editor or Client). For how roles differ, see [Roles and permissions](/workspaces-and-team/roles-and-permissions).\n3. Optional: toggle **Also add to other workspaces** to invite the same person across multiple workspaces you manage in one action. Workspaces near their plan limit show their seat count (e.g. `4/5`); workspaces that are full are grayed out with a **Full** label and can't be selected.\n4. Click **Add**. The invitee gets an email with a tokenized link, and you'll see a confirmation toast.\n\n<Callout type=\"tip\">\n**Admin isn't an option in this dialog** — it's intentional. The workspace creator becomes Admin automatically, and there's no way to invite another user directly as Admin. If you need someone else to be Admin, promote them via support or transfer ownership.\n</Callout>\n\n## What the invitee sees\n\nWhen the invitee clicks the link in their email:\n\n- **If they already have a PostFast account**, they see a one-click **Accept Invite** button and are joined into the workspace(s).\n- **If they're new to PostFast**, they set a password and accept in the same step. The invite page shows their email, the workspace name(s), and the assigned role.\n- After accepting, they're signed out and asked to log in fresh, so the new permissions take effect cleanly.\n\n## Generate a shareable invite link\n\nIf the invitee isn't getting your email or you'd rather send the link through another channel:\n\n1. Open the user's three-dot dropdown on the Users list and select **Generate Invite Link**.\n2. Optional: tick **Send an email with the link on generation** to also email it.\n3. The link is shown in a copyable field — paste it anywhere.\n\nInvite tokens expire over time. If a link no longer works, regenerate it from the same dropdown.\n\n## Remove a user\n\nOpen the user's three-dot dropdown on the Users list and select **Delete**. After you confirm, the user immediately loses access to that workspace.\n\nA few rules:\n\n- **You can't remove yourself.** If you need to leave a workspace, another Admin has to remove you.\n- **You can't remove an Admin this way.** An Admin is the workspace's owner — if you genuinely want them out of the workspace, the workspace itself needs to be deleted or transferred (see [Change or cancel your plan](/billing/change-plan) for how billing ownership works).\n- Removing a user only deletes the link between the user and the workspace. Their PostFast account still exists.\n- **Social accounts, posts, drafts, tags, and other resources stay in the workspace.** They belong to the workspace, not to the individual user who created them. Nothing is orphaned.\n\n## Workspace capacity\n\nEach plan has a maximum user count (Starter 1, Creator 5, Growth 8, Pro 15, Enterprise 30). Once a workspace is full, you can't add more members until you remove someone or upgrade.\n\nIf you try to bulk-invite someone and every target workspace already has them as a member, the whole invite is rejected — there's nothing to add them to.\n\nSee [Change or cancel your plan](/billing/change-plan) for the full per-plan limits and how billing interacts with workspaces.\n\n## Switching workspaces\n\nIf you belong to multiple workspaces (your own plus any you've been invited to), use the workspace switcher at the top of the sidebar to change which one you're working in. The switcher shows the current workspace name and opens a list of workspaces you're a member of.\n","tags":["team","invites","workspace","agency"]},{"id":"workspaces-and-team/roles-and-permissions","url":"/workspaces-and-team/roles-and-permissions","category":"workspaces-and-team","title":"Roles and permissions in a workspace","excerpt":"The three roles (Admin, Editor, Client), how to customize permissions per user, and how the approval workflow gates scheduled posts.","body":"\nPostFast uses three roles, each with a default set of permissions. Admins can override individual permissions per user on top of the role template — so a role is a starting point, not a hard boundary.\n\n## The three roles\n\n- **Admin** — full control of a workspace: billing, API keys, deleting the workspace, managing members, everything. **Admin is assigned automatically to whoever creates the workspace.** You can't invite a new user directly as Admin from the Users tab; that role only exists via workspace creation.\n- **Editor** — full day-to-day operational access: create, edit, delete, schedule, and approve posts; internal team comments; connect social accounts; generate public connect links; manage tags.\n- **Client** — built for external collaborators (typically agency clients reviewing scheduled content). Clients can view posts and post regular comments, and by default they can also approve posts (the agency→client review pattern that gave this role its name). What Clients **cannot** do by default: see or post internal team comments, edit workspace settings, or manage accounts/tags.\n\nExact per-role defaults are visible in the **Edit Permissions** dialog — that's the canonical source of truth, since overrides can make any two users with the same role behave differently.\n\n## Edit a user's permissions\n\nAdmins can fine-tune permissions per user beyond the role defaults.\n\n1. From [Settings → Workspace → Users](https://app.postfa.st/dashboard/workspace), click the **shield icon** next to a non-Admin user (or pick **Edit Permissions** from the three-dot dropdown on mobile).\n2. The dialog groups all permissions into five categories:\n   - **Posts** — Create, Edit, Delete, Schedule, Approve posts\n   - **Comments** — Internal comments (Admin and Editor only; not granted to Client by default)\n   - **Accounts** — Connect accounts, Generate connect links\n   - **Filter Tags** — Create / Update / Delete tags\n   - **Workspace** — Workspace settings, Manage members, API keys (admin only), Delete workspace (admin only)\n3. Toggle any permission. An **Override** badge appears next to permissions that differ from the role's default — handy for spotting which access has been customized.\n4. Admin-only permissions (API keys, Delete workspace) are locked with a lock icon and can't be granted to non-Admin users at all.\n5. **Save** is only enabled if something actually changed.\n\n<Callout type=\"warning\">\n**Roles themselves can't be changed.** If you need to switch someone from Client to Editor (or vice versa), remove them and re-invite with the new role. Per-user permission overrides don't carry over after re-invite. Use overrides when you only need a small adjustment to an existing role.\n</Callout>\n\n## Approval workflow\n\nPosts move through a status flow. **Only posts in the Approved state will publish when their scheduled time arrives** — anything else is held back.\n\nAnyone with the **Approve posts** permission can approve. By default, all three roles have this permission — so the same person who schedules a post can usually approve it. The **Client approves** pattern is common for agency setups: the agency drafts and schedules, the client reviews and approves.\n\nTo take approval rights away from a specific user, open **Edit Permissions** and toggle **Approve posts** off. The **Override** badge will show the permission has been customized away from the role default.\n\n## Related\n\n- [Invite team members to a workspace](/workspaces-and-team/inviting-team-members)\n- [Change or cancel your plan](/billing/change-plan) — per-plan user limits and how billing spans workspaces\n","tags":["roles","permissions","approval","agency","workspace"]}]