[{"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\nPlans can be billed **monthly** or **yearly**. Pay yearly and save 2 months on every tier. You can switch between billing intervals from the Stripe billing portal at any time. Stripe handles the proration automatically. Prices and limits come from the [public pricing page](https://postfa.st/pricing), which is always the source of truth.\n\n| Plan | Monthly | Yearly | Effective /mo | Social accounts | Scheduled posts | Drafts | Workspaces / users |\n| --- | --- | --- | --- | --- | --- | --- | --- |\n| **Starter** | €12 | €120 | €10 | 4 | 150 | 50 | 1 / 1 |\n| **Creator** | €29 | €288 | €24 | 12 | 1,500 | 600 | 4 / 5 |\n| **Growth** | €49 | €480 | €40 | 30 | 3,000 | 2,000 | 10 / 8 |\n| **Pro (Agency)** | €99 | €990 | €82.50 | 120 | Unlimited | Unlimited | 30 / 15 |\n| **Enterprise** | €239 | €2,388 | €199 | 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?** Yes, every tier is available monthly or yearly, and yearly saves you the equivalent of 2 months. You can switch between monthly and yearly at any time from **Manage billing**, and Stripe handles the proration automatically.\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":"instagram/add-a-first-comment-to-instagram","url":"/instagram/add-a-first-comment-to-instagram","category":"instagram","title":"Add a first comment to your Instagram post","excerpt":"Post a first comment automatically right after your Instagram post goes live, a common spot for hashtags, credits, or context you want out of the caption.","body":"\nA **first comment** is a comment PostFast publishes on your Instagram post immediately after the post itself goes live. It's a common place to stash hashtags, credits, links, or extra context you don't want cluttering the caption.\n\n## Add a first comment\n\n1. In the composer, below the **Post content** field, click **First Comment**.\n2. A **First Comment** editor appears. Type the comment there, up to 2,200 characters, same limit as the caption.\n3. Schedule or post as normal.\n\nOnce Instagram confirms the original post, PostFast publishes the first comment on it automatically.\n\n## When the first comment is skipped\n\nIf the original post fails to publish, there's nothing to comment on, the first comment is skipped.\n\n## Related\n\n- [Schedule a post to Instagram](/instagram/schedule-a-post-to-instagram)\n- [Post Reels and Trial Reels to Instagram](/instagram/post-reels-and-trial-reels)\n- [Add collaborators to an Instagram post](/instagram/add-collaborators-to-instagram-posts)\n- [Why did my post fail?](/troubleshooting/why-did-my-post-fail)\n","tags":["instagram","first-comment","captions","hashtags","publishing"]},{"id":"instagram/add-collaborators-to-instagram-posts","url":"/instagram/add-collaborators-to-instagram-posts","category":"instagram","title":"Add collaborators to an Instagram post","excerpt":"Invite up to 3 Instagram accounts as collaborators on a single post. Enter their usernames in Platform settings, comma-separated.","body":"\nInstagram lets you invite other accounts to be **collaborators** on a post. Once they accept, the post appears on their profile as well as yours. PostFast exposes this through the **Collaborators** field in Platform settings.\n\n## Add collaborators\n\n1. In the composer, open **Post settings → Platform settings** and select your Instagram account.\n2. Scroll to the **Collaborators** field.\n3. Enter up to **3** valid Instagram usernames, separated by commas, for example: `user1, user_2, user.name`.\n4. Schedule or post as normal.\n\n## What happens at publish\n\nWhen PostFast sends the post to Instagram, it passes the collaborator usernames along with it. Instagram then sends each collaborator an invitation to join the post.\n\n<Callout type=\"warning\">\nPostFast does not verify the usernames ahead of time. If any of them are wrong, misspelled, or don't exist on Instagram, **Instagram rejects the post at publish** and it will fail.\n\nDouble-check each handle before scheduling.\n</Callout>\n\n## Related\n\n- [Schedule a post to Instagram](/instagram/schedule-a-post-to-instagram)\n- [Post Reels and Trial Reels to Instagram](/instagram/post-reels-and-trial-reels)\n- [Why did my post fail?](/troubleshooting/why-did-my-post-fail)\n","tags":["instagram","collaborators","collab","tagging","publishing"]},{"id":"instagram/post-an-instagram-carousel","url":"/instagram/post-an-instagram-carousel","category":"instagram","title":"Post an Instagram carousel","excerpt":"Instagram carousels on Timeline can hold up to 10 photos and videos, mixed together. Upload them in the composer in the order you want them published.","body":"\nAn Instagram carousel is a Timeline post with more than one media item. Followers can swipe through each item in the order you uploaded them.\n\n## What's allowed\n\n- Up to **10 items** per carousel.\n- **Photos and videos can be mixed** in the same carousel.\n- Carousels are **Timeline only**: Reels and Stories do not support them.\n\n## Create a carousel\n\n1. In the composer, drop your photos and videos into the **Image/Video** area, or click it to open the file picker. The counter shows `N/10 Media Items` so you know how much room is left.\n2. Reorder the items if needed, they publish in the order shown in the composer.\n3. In **Post settings → Platform settings**, select your Instagram account and make sure **Publish type** is set to **Timeline**.\n4. Write your caption and schedule or post as normal.\n\n<Callout type=\"tip\">\nIf you switch the publish type to **Reel** or **Story** after uploading multiple items, Instagram won't accept them as a carousel. Keep it on **Timeline** for multi-media posts.\n</Callout>\n\n## Related\n\n- [Schedule a post to Instagram](/instagram/schedule-a-post-to-instagram)\n- [Post Reels and Trial Reels to Instagram](/instagram/post-reels-and-trial-reels)\n- [Add collaborators to an Instagram post](/instagram/add-collaborators-to-instagram-posts)\n- [Why did my post fail?](/troubleshooting/why-did-my-post-fail)\n","tags":["instagram","carousel","timeline","images","videos","publishing"]},{"id":"instagram/post-reels-and-trial-reels","url":"/instagram/post-reels-and-trial-reels","category":"instagram","title":"Post Reels and Trial Reels to Instagram","excerpt":"Pick Reel as the publish type to unlock the Post to grid toggle and Trial Reels. Trial Reels are shown only to non-followers, then graduated manually after 24h or automatically after 72h.","body":"\nWhen your Instagram publish type is **Reel**, two extra controls appear in **Platform settings**: **Post to grid** and **Trial Reel**.\n\n## Enable Reel publish type\n\n1. In the composer, open **Post settings → Platform settings** and select your Instagram account.\n2. Under **Publish type**, pick **Reel**.\n\nThe **Post to grid** toggle and **Trial Reel** dropdown become available.\n\n## Post to grid\n\nThis toggle decides whether your Reel also appears on your profile grid.\n\n- **On**: the Reel is shared to your profile grid in addition to the Reels tab.\n- **Off**: the Reel only appears in the Reels tab on your profile.\n\n## Trial Reels\n\nA Trial Reel is a Reel shown **only to non-followers** on Instagram. Use it to test how a Reel performs with a cold audience before deciding whether to push it to your own followers.\n\nOpen the **Trial Reel** dropdown and pick one of three options:\n\n- **None (normal reel)**: a regular Reel, shown to followers and non-followers as usual.\n- **Manual — you share after 24h**: Instagram keeps the Reel out of your followers' feeds. After 24 hours, you decide whether to share it to all followers.\n- **Auto — shared after 72h if performs well**: Instagram automatically shares the Reel to your followers after 72 hours if it's performing well. This is sometimes called \"auto-graduate\".\n\n<Callout type=\"info\">\nTrial Reels require a **public Professional account with at least 1,000 followers**, per Instagram. If you don't meet those requirements, Instagram will reject the post at publish.\n</Callout>\n\n## Related\n\n- [Schedule a post to Instagram](/instagram/schedule-a-post-to-instagram)\n- [Post an Instagram carousel](/instagram/post-an-instagram-carousel)\n- [Add collaborators to an Instagram post](/instagram/add-collaborators-to-instagram-posts)\n- [Why did my post fail?](/troubleshooting/why-did-my-post-fail)\n","tags":["instagram","reels","trial-reels","publishing"]},{"id":"instagram/schedule-a-post-to-instagram","url":"/instagram/schedule-a-post-to-instagram","category":"instagram","title":"Schedule a post to Instagram","excerpt":"Schedule, directly post, or save any Instagram post from PostFast, Timeline, Reel, or Story.","body":"\nYou can schedule, post immediately, or save-as-draft any Instagram post from PostFast. This guide walks through the basic flow and shows where to pick between **Timeline**, **Reel**, and **Story**.\n\nFor Reel-specific options (Trial Reels, Post to grid), collaborators, carousels, and first comments, see the linked articles at the bottom.\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- Write your caption. The composer shows a character counter up to Instagram's 2,200-character caption limit.\n- Attach images, a video, or a mix of both (see [Post an Instagram carousel](/instagram/post-an-instagram-carousel) for multi-media posts).\n\n## 3. Choose your Instagram account\n\n- In the **Post settings** panel on the right, open the **Schedule** tab.\n- Select your Instagram account. You can cross-post to other platforms at the same time.\n\n## 4. Pick the publish type\n\nOpen the **Platform settings** tab. Under **Publish type**, pick one:\n\n- **Timeline**: a regular feed post. Supports single image, single video, or a carousel of up to 10 photos and videos.\n- **Reel**: publishes as a Reel. Unlocks the **Post to grid** toggle and **Trial Reel** options. See [Post Reels and Trial Reels to Instagram](/instagram/post-reels-and-trial-reels).\n- **Story**: publishes to Stories.\n\n<Callout type=\"info\">\nChanging the publish type can change which Platform settings are available. For example, **Trial Reel** is only active when Publish type is set to **Reel**.\n</Callout>\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.\n\n## Related\n\n- [Post Reels and Trial Reels to Instagram](/instagram/post-reels-and-trial-reels)\n- [Post an Instagram carousel](/instagram/post-an-instagram-carousel)\n- [Add collaborators to an Instagram post](/instagram/add-collaborators-to-instagram-posts)\n- [Add a first comment to your Instagram post](/instagram/add-a-first-comment-to-instagram)\n- [Why did my post fail?](/troubleshooting/why-did-my-post-fail)\n","tags":["instagram","scheduling","reels","stories","timeline","publishing"]},{"id":"publishing-scheduling/bulk-import-posts-from-csv","url":"/publishing-scheduling/bulk-import-posts-from-csv","category":"publishing-scheduling","title":"Bulk import posts from a CSV","excerpt":"Upload a CSV to schedule up to 200 posts at once across your connected platforms. Walks through upload, validation preview, and tracking progress.","body":"\nBulk CSV import lets you schedule up to **200 posts** at once by uploading a single spreadsheet. Useful for planning a month's content, migrating from another scheduler, or rolling out a campaign across multiple accounts.\n\nFor the exact column names, date format, and platform-specific fields, see the [CSV format reference](/publishing-scheduling/csv-format-for-bulk-import).\n\n## 1. Open Bulk Imports\n\nFrom the sidebar, click **Bulk Imports**, then click **Upload CSV** to open the import dialog.\n\n## 2. Prepare your CSV\n\nInside the dialog you'll find everything you need to build the file:\n\n- **Download a CSV template** with the correct header row, easiest starting point.\n- **Connected account IDs** accordion: copy the UUID of each social account you want to post from.\n- **CSV column reference** accordion: the full list of supported columns.\n- **Pinterest board IDs** accordion: board UUIDs for Pinterest rows.\n\nFile requirements: **`.csv`** format, **up to 10 MB**, **up to 200 rows**.\n\nSee the [CSV format reference](/publishing-scheduling/csv-format-for-bulk-import) for a detailed walkthrough of each column.\n\n## 3. Upload and preview\n\n1. Drag the file onto the dialog or click to select it.\n2. Choose a **default post status** (**Scheduled** or **Draft**) and an **approval status**. These apply to every row unless overridden.\n3. PostFast validates each row and shows you the results:\n   - **Valid** rows are ready to import.\n   - **Invalid** rows are flagged with the specific error (invalid date, account not found, and so on). Fix them in your source spreadsheet and re-upload, or proceed with only the valid rows.\n\n## 4. Confirm the import\n\nClick **Import** to confirm. Only valid rows are processed. Invalid rows are skipped.\n\nThe dialog shows a **live progress bar** as rows are processed. You can **close the dialog at any time**. Processing continues server-side, and you can reopen the Bulk Imports list to check on it.\n\n## 5. Track progress and view details\n\nEvery import shows up in the **Bulk Imports** list with a status badge:\n\n- **Ready**: all rows succeeded.\n- **Partial**: some rows succeeded, some failed.\n- **Failed**: the entire import could not be processed.\n- **Cancelled**: the import was cancelled.\n\nClick the eye icon on any import to open the detail panel:\n\n- See each row's status (**successful**, **failed**, or **invalid**) with the specific error for failures.\n- Filter by **All**, **Successful**, **Failed**, or **Invalid**.\n- Click the eye icon on a successful row to open the created post in a new tab.\n- **Download the original CSV** at any time from the same panel.\n\n<Callout type=\"tip\">\nIf your import comes back as **Partial**, download the original CSV from the detail panel, fix only the failed rows in your spreadsheet, and re-upload those rows as a new import.\n</Callout>\n\n## Related\n\n- [CSV format reference for bulk import](/publishing-scheduling/csv-format-for-bulk-import)\n- [Schedule a post to multiple platforms](/publishing-scheduling/schedule-to-multiple-platforms)\n- [Why did my post fail?](/troubleshooting/why-did-my-post-fail)\n","tags":["bulk","csv","import","scheduling","migration"]},{"id":"publishing-scheduling/crop-images-before-posting","url":"/publishing-scheduling/crop-images-before-posting","category":"publishing-scheduling","title":"Crop images before you post","excerpt":"Crop your images to fit each network right inside the composer. Pick an aspect ratio, crop once for every account or differently per account, and re-crop anytime without losing quality.","body":"\nCrop your images inside PostFast so they fit each network, with no separate editor needed. Cropping happens in your browser, and the cropped version is sent with the post when you publish.\n\n## Where to find the crop tool\n\nAdd an image to a post, or open a post or draft that already has one. In the **Image/Video** area, hover over an image thumbnail and click the crop icon. On mobile the buttons are always visible. Cropping is for images only: you won't see a crop button on videos or GIFs.\n\n## Crop an image\n\n1. Click the crop icon on the image thumbnail.\n2. Pick an aspect ratio from the bar at the top, or choose **Free** to crop to any shape.\n3. Drag inside the box to move it, and drag a corner to resize it. With a locked ratio the box keeps that shape. With **Free** you can size it any way.\n4. Click **Apply** to keep the crop, or **Cancel** to discard it. **Reset** puts the box back to its starting position.\n\nThe thumbnail updates to your cropped version right away. The cropped image uploads when you publish or schedule the post.\n\n## Pick the right aspect ratio\n\nThe ratio bar adapts to the accounts you've selected:\n\n- **No account selected:** you'll see common ratios: Square (1:1), Portrait (4:5), Wide (1.91:1), Landscape (16:9), and Story (9:16).\n- **One account selected:** you'll see that platform's recommended sizes, with the best one marked **Best**. Instagram, for example, shows Portrait (4:5, marked Best), Square (1:1), and Story (9:16).\n- **Free** is always available if you'd rather crop to a custom shape.\n\nFor exact pixel dimensions and file-size limits for every network, see [postfa.st/sizes](https://postfa.st/sizes), which is always the source of truth.\n\n## Crop for multiple platforms\n\nWhen you select several accounts, the ratio bar combines all the sizes those platforms use, with no duplicates. Each ratio shows small platform icons telling you which networks favor it, so a Square option might show the Instagram, Facebook, and TikTok icons while Wide shows just LinkedIn and Facebook.\n\nOne crop is shared by every selected account unless you choose to use different media per account (see below). Pick the ratio that works best across the platforms you're posting to, or crop per account for a perfect fit on each.\n\n## Crop a different image for each account\n\nTo give one account its own crop:\n\n1. Click the account above the post text to edit just that account.\n2. Turn on **Use different media for this account**.\n3. Crop that account's image however you like.\n\nEach account's crop is independent. Cropping one account's image never changes another account's image or your shared base image. The preview on the right shows each account exactly the image it will post, so you can confirm every crop before publishing.\n\n## Crop an image that's already in a post or draft\n\nYou can crop images in posts and drafts you've already created, not just brand-new uploads:\n\n1. Open a scheduled post or draft and find its image in the **Image/Video** area.\n2. Click the crop icon. PostFast loads the full image so you can crop it.\n3. Crop, click **Apply**, then save the post or draft.\n\nSaving replaces that image with your cropped version. This works the same in scheduled posts, drafts, and per-account media.\n\n## Re-cropping is non-destructive\n\nPostFast always keeps your full, original image, so:\n\n- You can re-crop as many times as you want without losing quality. Each crop starts from the original, not from your previous crop.\n- When you reopen the crop tool, it remembers the ratio and position you used last, so you can fine-tune instead of starting over.\n- Switch from one ratio to another at any time and you'll always be working from the full image.\n\n## Which files you can crop\n\nYou can crop JPEG, PNG, and WebP images. GIFs and videos can't be cropped, so they don't show a crop button. Your cropped image keeps its original format, so PNGs keep their transparency.\n\n## Image quality\n\nCrops are made at your image's native resolution, so there's no upscaling or blurriness from the crop itself. Send a sharp, well-sized image and the crop preserves it. Every network re-compresses uploads on its end, so cropping to the recommended size beforehand gives you the best-looking result.\n\n## Frequently asked questions\n\n### Why does the preview still show my old image?\n\nMake sure you clicked **Apply**. **Cancel** discards the crop. If you're cropping for a specific account, check that **Use different media for this account** is turned on and that you're viewing that account's preview.\n\n### Can I crop after I've already scheduled a post?\n\nYes. Open the scheduled post or draft, crop its image, and save. The cropped version replaces the original.\n\n### Why don't I see a crop button on this item?\n\nCropping is available for images only. Videos and GIFs don't show a crop button.\n\n### Will cropping lower my image quality?\n\nNo. The crop is done at full resolution with no upscaling, and the original format is preserved. Networks compress uploads regardless, so a correctly-sized crop actually looks better after publishing.\n\n### Does my image get sent anywhere while I crop?\n\nCropping happens in your browser. For brand-new uploads, only the final cropped image is uploaded when you publish. For images already in a post, the cropped version replaces the original when you save.\n\n### Can each platform have its own crop?\n\nYes. Turn on **Use different media for this account** for any account and crop that account's image independently. Crops never bleed between accounts.\n\n## Related\n\n- [Schedule a post to multiple platforms](/publishing-scheduling/schedule-to-multiple-platforms)\n- [Post an Instagram carousel](/instagram/post-an-instagram-carousel)\n- [Why did my post fail?](/troubleshooting/why-did-my-post-fail)\n","tags":["cropping","images","media","aspect-ratio","composer","publishing"]},{"id":"publishing-scheduling/csv-format-for-bulk-import","url":"/publishing-scheduling/csv-format-for-bulk-import","category":"publishing-scheduling","title":"CSV format reference for bulk import","excerpt":"Complete column reference for PostFast's bulk CSV import, required fields, the ISO-8601 date format, media URLs, and platform-specific columns for Facebook, Instagram, YouTube, and Pinterest.","body":"\nThis is the authoritative reference for the CSV format used by PostFast's [bulk import](/publishing-scheduling/bulk-import-posts-from-csv). For the end-to-end workflow, start there.\n\n## File limits\n\n- **`.csv`** format\n- **Max 10 MB** per file\n- **Max 200 rows** per file (excluding the header row)\n- The first row must be the column headers\n\nThe fastest way to get started is to **download the CSV template** from inside the Bulk Imports dialog. It already contains every supported header.\n\n## Required columns\n\nEvery row must have these three.\n\n| Column | Value | Example |\n| --- | --- | --- |\n| `scheduled_at` | ISO-8601 datetime with a timezone offset | `2026-05-01T10:00:00Z` |\n| `account_id` | UUID of a connected social account | Copy from the **Connected account IDs** accordion in the upload dialog |\n| `content` | Post text content | `\"Example post\"` |\n\n## Optional columns\n\n| Column | Value |\n| --- | --- |\n| `media_urls` | Comma-separated list of media URLs. Wrap the cell in double quotes if you include more than one URL so the CSV parser treats it as a single field. |\n| `first_comment` | First comment to publish on the post after it goes live. |\n\n## Platform-specific columns\n\nOnly fill these in for rows that target the matching platform. Leave them blank on every other row.\n\n| Column | Platform | Values |\n| --- | --- | --- |\n| `fb_content_type` | Facebook | `POST`, `REEL`, or `STORY` |\n| `ig_publish_type` | Instagram | `POST`, `REEL`, or `STORY` |\n| `yt_is_short` | YouTube | `true` or `false` |\n| `pinterest_board_id` | Pinterest | Board UUID: copy from the **Pinterest board IDs** accordion in the upload dialog |\n\nOther connected platforms (X, LinkedIn, Threads, Bluesky, TikTok) use the base columns only. No extra platform column is required.\n\n## Date format\n\n`scheduled_at` must be a valid **ISO-8601** datetime that includes a timezone offset. The safest form is **UTC with a `Z` suffix**:\n\n```\n2026-05-01T10:00:00Z\n```\n\nRows whose `scheduled_at` is in the past will fail validation.\n\n## Example\n\n```csv\nscheduled_at,account_id,content,media_urls,first_comment,fb_content_type,ig_publish_type,yt_is_short,pinterest_board_id\n2026-05-01T10:00:00Z,<FB_ACCOUNT_ID>,\"Example Facebook post\",https://example.com/image.jpg,,POST,,,\n2026-05-01T12:00:00Z,<IG_ACCOUNT_ID>,\"Instagram reel caption\",https://example.com/video.mp4,,,REEL,,\n2026-05-01T14:00:00Z,<YT_ACCOUNT_ID>,\"YouTube Shorts video\",https://example.com/video.mp4,,,,true,\n2026-05-01T16:00:00Z,<PINTEREST_ACCOUNT_ID>,\"Pinterest pin description\",https://example.com/image.jpg,,,,,<BOARD_ID>\n```\n\n## Authoring tips\n\n- **Google Sheets is safer than Excel.** Excel occasionally mangles UTF-8, smart quotes, and emoji when saving to CSV.\n- **Multiline `content` works**: wrap the cell in double quotes and use real line breaks inside.\n- **Emoji are fine**: save the file as UTF-8.\n- **Leave unused optional columns blank**: empty cells are ignored.\n\n## Related\n\n- [Bulk import posts from a CSV](/publishing-scheduling/bulk-import-posts-from-csv)\n- [Schedule a post to multiple platforms](/publishing-scheduling/schedule-to-multiple-platforms)\n- [Why did my post fail?](/troubleshooting/why-did-my-post-fail)\n","tags":["bulk","csv","import","reference","columns"]},{"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":"troubleshooting/why-was-my-account-disconnected","url":"/troubleshooting/why-was-my-account-disconnected","category":"troubleshooting","title":"Why was my account disconnected and my posts paused?","excerpt":"When a network revokes PostFast's access, the account is marked Disconnected and posting pauses. Reconnect and your future posts publish on schedule. Only posts whose time already passed need a retry.","body":"\nEvery so often a social network revokes or expires PostFast's access to one of your accounts. When that happens, PostFast marks the account **Disconnected** and pauses posting to it, so it doesn't keep firing your scheduled posts at a connection the network will only reject.\n\n## What happens to your scheduled posts\n\nNothing is lost. What happens to each post depends on its timing:\n\n- **Posts still in the future stay Scheduled.** PostFast doesn't touch their status. As soon as you reconnect, they publish at their scheduled time as if nothing happened.\n- **Posts whose scheduled time passed while you were disconnected are marked Failed.** Their moment came and went with no working connection, so they couldn't go live. After you reconnect, retry them from the **Failed** tab. See [Why did my post fail?](/troubleshooting/why-did-my-post-fail) for the Retry, Edit, and Duplicate options.\n\nSo reconnecting promptly is what matters: do it before a post's scheduled time and that post is unaffected.\n\n## How to reconnect\n\n1. Open [Accounts](https://app.postfa.st/dashboard/accounts) from the sidebar.\n2. Find the account marked **Disconnected**.\n3. Click **Reconnect** and complete the network's authorization screen.\n\nOnce the account shows as connected again, your future scheduled posts are back on track.\n\n<Callout type=\"warning\">\n**Facebook and Instagram:** when you reconnect, grant access to every Page or account you manage. Meta resets your permissions on each reconnect, so anything you leave out stays disconnected. See [Select all Pages during Facebook OAuth](/facebook/select-all-pages-during-oauth).\n</Callout>\n\n## Scheduling while disconnected\n\nWhile an account is **Disconnected**, you can still write and **save drafts** for it, but you can't schedule new posts to it until you reconnect. Reconnect first, then schedule.\n\n## Common reasons an account disconnects\n\n- You changed your password on the social network.\n- You removed PostFast's access in the network's app or security settings.\n- The network suspended, restricted, or otherwise limited the account.\n- The access token expired.\n\nIf the same account keeps dropping, especially a Facebook Page, there's usually a specific cause behind it. See [Why does my Facebook Page keep disconnecting?](/facebook/page-keeps-disconnecting).\n\n## Related\n\n- [Why did my post fail?](/troubleshooting/why-did-my-post-fail)\n- [Why does my Facebook Page keep disconnecting?](/facebook/page-keeps-disconnecting)\n- [Connect your first social account](/getting-started/connect-your-first-account)\n","tags":["accounts","reconnect","disconnected","failed","oauth"]},{"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"]},{"id":"x-twitter/auto-retweet-your-post","url":"/x-twitter/auto-retweet-your-post","category":"x-twitter","title":"Auto-retweet your own X post","excerpt":"Schedule PostFast to automatically retweet your own X post after a delay, 6h, 12h, 1d, 7d, or a custom time. The retweet is cleared after 12 hours to avoid timeline clutter.","body":"\n**Auto retweet** tells PostFast to retweet your own X post some time after it goes out, useful for giving a post a second wave of exposure without having to remember to retweet it yourself.\n\nThis is different from the **Tweet URL** option, which retweets someone else's tweet. See [Retweet a tweet on X](/x-twitter/retweet-a-tweet) for that one.\n\n## How it works\n\nWhen you enable Auto retweet and pick a delay, PostFast schedules a retweet of your *own* published post to run after that delay. You can add more than one schedule (for example, one retweet at 6h and another at 1d) to get multiple waves off a single post.\n\n<Callout type=\"info\">\nEvery auto-retweet is automatically undone 12 hours after it fires. This keeps your timeline from filling up with your own retweets. The 12-hour window is fixed and does not change with the delay you pick.\n</Callout>\n\n## Enable Auto retweet\n\n1. In the composer, open **Post settings → Platform settings** and select your X account.\n2. Turn on the **Auto retweet** toggle.\n3. Pick one of the preset delays (**6h**, **12h**, **1d**, or **7d**) or click **+ Custom time** to enter your own.\n4. To add more waves, pick another delay; each chip you select becomes an additional retweet schedule for this post.\n5. Schedule or post as normal.\n\nOnce the original post publishes successfully, PostFast handles the retweets in the background.\n\n## What happens on each schedule\n\nFor each delay you added, PostFast:\n\n1. Waits until the delay elapses from the original post time.\n2. Retweets your post on X.\n3. 12 hours later, removes the retweet.\n\nIf the original post fails to publish, any auto-retweets attached to it are cancelled, there's nothing for PostFast to retweet.\n\n## Tips on picking a delay\n\n- **6h** works well for same-day reach in a different timezone.\n- **1d** is handy for catching followers who missed the first wave.\n- **7d** is good for evergreen posts you want to resurface after a week.\n- Use multiple delays on one post if you want several waves.\n\n## Related\n\n- [Schedule a post to X (Twitter)](/x-twitter/schedule-a-post-to-x)\n- [Retweet a tweet on X](/x-twitter/retweet-a-tweet)\n- [Why did my post fail?](/troubleshooting/why-did-my-post-fail)\n","tags":["x","twitter","retweet","auto-retweet","scheduling"]},{"id":"x-twitter/retweet-a-tweet","url":"/x-twitter/retweet-a-tweet","category":"x-twitter","title":"Retweet a tweet on X","excerpt":"Paste a tweet URL in X Platform settings to retweet it from your scheduled post.","body":"\nPostFast's **Tweet URL** field lets your scheduled X post retweet an existing tweet. When the post fires, PostFast performs a straight retweet of the target tweet from your connected X account.\n\n## Where to find it\n\n1. In the composer, open the **Post settings** panel on the right.\n2. Click the **Platform settings** tab.\n3. Select your X account. You'll see the **Tweet URL** field.\n\n## Retweet a tweet\n\n1. Paste the full URL of the tweet you want to retweet into the **Tweet URL** field.\n2. Schedule or post as normal.\n\n<Callout type=\"warning\">\nYour post content and any attached media are ignored when you fill in **Tweet URL**. PostFast performs a straight retweet of the target tweet, nothing else is published.\n</Callout>\n\n## Auto-retweet vs Tweet URL\n\nThe **Tweet URL** field retweets *someone else's* tweet. **Auto retweet** schedules retweets of *your own* published post after a delay. The two are independent and can be used together. See [Auto-retweet your own X post](/x-twitter/auto-retweet-your-post) for how that works.\n\n## Related\n\n- [Schedule a post to X (Twitter)](/x-twitter/schedule-a-post-to-x)\n- [Auto-retweet your own X post](/x-twitter/auto-retweet-your-post)\n- [Why did my post fail?](/troubleshooting/why-did-my-post-fail)\n","tags":["x","twitter","retweet","tweet-url"]},{"id":"x-twitter/schedule-a-post-to-x","url":"/x-twitter/schedule-a-post-to-x","category":"x-twitter","title":"Schedule a post to X (Twitter)","excerpt":"Schedule, directly post, or save any post to X from PostFast.","body":"\nYou can schedule, post immediately, or save-as-draft any X post from PostFast. This guide walks through the basic flow.\n\nIf you want to retweet an existing tweet, or auto-retweet your own post later, see the companion articles linked at the bottom.\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- Write your post text. The composer shows a character counter so you can see how much room you have left.\n- Attach images or a video if needed.\n\n## 3. Choose your X account\n\n- In the **Post settings** panel on the right, open the **Schedule** tab.\n- Select your X account. You can cross-post to other platforms at the same time.\n\n## 4. Schedule, post, or save\n\nStill 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.\n\n## Related\n\n- [Retweet a tweet on X](/x-twitter/retweet-a-tweet)\n- [Auto-retweet your own X post](/x-twitter/auto-retweet-your-post)\n- [Schedule a post to multiple platforms](/publishing-scheduling/schedule-to-multiple-platforms)\n- [Why did my post fail?](/troubleshooting/why-did-my-post-fail)\n","tags":["x","twitter","scheduling","publishing"]},{"id":"x-twitter/x-link-post-limits","url":"/x-twitter/x-link-post-limits","category":"x-twitter","title":"X link-post limits","excerpt":"X's API charges much more for posts that contain a link, so each plan includes a monthly allowance of X (Twitter) link posts. Text posts, media posts, and retweets are unaffected.","body":"\nX's API pricing makes posts that contain a link much more expensive to publish than posts without one. To keep PostFast sustainable and fair for everyone, each plan includes a monthly allowance of X (Twitter) posts that contain a link. Text posts, media posts, and retweets are not affected.\n\n## Your monthly link-post allowance\n\nEach plan includes a set number of X posts that contain a link, per calendar month. Higher plans include a larger allowance.\n\nFor the exact allowance on your plan, see [postfa.st/fair-usage](https://postfa.st/fair-usage), which is always the source of truth.\n\n## What counts toward the limit\n\n- Any X post that contains a link. That includes a full web address, a short link like bit.ly, or even a bare domain like example.com.\n- A link in the post's first comment also counts. A post with a link in both the text and the first comment counts as two.\n- Retweets and posts without any link do not count.\n\n## What happens when you reach the limit\n\n- You can keep posting to X as usual. Only posts that contain a link are affected.\n- If you try to schedule or publish a link post once you are over your allowance, you'll see a message that you've reached your monthly X link-post limit.\n- The allowance resets on the 1st of each month.\n\n## Tips\n\n- Not every post needs a link. Text and media posts to X are unaffected.\n- If you regularly need more link posts, [upgrading your plan](/billing/change-plan) raises the allowance.\n\n<Callout type=\"info\">\nThis monthly link-post allowance is separate from your normal daily posting limits to X, which still apply.\n</Callout>\n\n## Related\n\n- [Schedule a post to X (Twitter)](/x-twitter/schedule-a-post-to-x)\n- [Change or cancel your plan](/billing/change-plan)\n- [Why did my post fail?](/troubleshooting/why-did-my-post-fail)\n","tags":["x","twitter","links","limits","fair use","plans"]}]