# PostPulse > Publish to 9 social platforms from one integration — REST API, n8n & Make.com nodes, an MCP server for AI agents, and white-label OAuth under your own brand. No platform audits, no token juggling. Official site: https://post-pulse.com Source index: https://post-pulse.com/llms.txt Generated: 2026-09-16 This file is the full markdown content of the documentation and key pages of post-pulse.com, generated at build time from the same source as the site. Each section starts with the page URL. ## Contents - [The Social Media API for Apps, Automations & AI Agents](https://post-pulse.com) - [Simple, usage-based pricing](https://post-pulse.com/pricing) - [Getting Started with PostPulse](https://post-pulse.com/getting-started) - [API Documentation](https://post-pulse.com/api-docs) - [Webhook Events](https://post-pulse.com/webhooks) - [Media & Text Validation](https://post-pulse.com/media-validation) - [Model Context Protocol (MCP) Server](https://post-pulse.com/mcp-server) - [n8n Integration Guide](https://post-pulse.com/n8n-integration) - [Make Integration Guide](https://post-pulse.com/make-integration) - [White-Label Integration](https://post-pulse.com/white-label) - [The white-label *social media API*](https://post-pulse.com/white-label-social-media-api) - [A social media API *for agencies*](https://post-pulse.com/social-media-api-for-agencies) - [Embed social media publishing *in your SaaS*](https://post-pulse.com/social-media-api-for-saas) - [9 Platforms. One API. No Audit Required.](https://post-pulse.com/platforms) - [The *Bluesky* publishing API for developers](https://post-pulse.com/platforms/bluesky) - [The *Facebook* publishing API for developers](https://post-pulse.com/platforms/facebook) - [Ship Instagram publishing without the *Meta App Review*.](https://post-pulse.com/platforms/instagram) - [The *LinkedIn* publishing API for developers](https://post-pulse.com/platforms/linkedin) - [The *Telegram* publishing API for developers](https://post-pulse.com/platforms/telegram) - [Ship to Threads *before* the Meta App Review queue moves.](https://post-pulse.com/platforms/threads) - [Publish to TikTok without the developer audit.](https://post-pulse.com/platforms/tiktok) - [The *Twitter / X* publishing API for developers](https://post-pulse.com/platforms/twitter) - [The *YouTube* publishing API for developers](https://post-pulse.com/platforms/youtube) - [PostPulse vs. the alternatives](https://post-pulse.com/compare) - [PostPulse vs. Ayrshare](https://post-pulse.com/compare/ayrshare) - [PostPulse vs. Blotato](https://post-pulse.com/compare/blotato) - [PostPulse vs. Buffer](https://post-pulse.com/compare/buffer) - [PostPulse vs. Hootsuite](https://post-pulse.com/compare/hootsuite) - [PostPulse vs. Later](https://post-pulse.com/compare/later) - [PostPulse vs. Postiz](https://post-pulse.com/compare/postiz) - [PostPulse vs. SocialPilot](https://post-pulse.com/compare/socialpilot) - [PostPulse vs. Sprout Social](https://post-pulse.com/compare/sprout-social) - [PostPulse vs. Upload-Post](https://post-pulse.com/compare/upload-post) - [PostPulse vs. Zernio](https://post-pulse.com/compare/zernio) --- ## The Social Media API for Apps, Automations & AI Agents Source: https://post-pulse.com Title: PostPulse — The Social Media API for Apps, Automations & AI Agents Description: Publish to 9 social platforms from one integration — REST API, n8n & Make.com nodes, an MCP server for AI agents, and white-label OAuth under your own brand. No platform audits, no token juggling. Last modified: 2026-09-16 Unified social media publishing API One integration publishes to Instagram, TikTok, YouTube, LinkedIn, X, Threads, Bluesky, Facebook & Telegram. Use the REST API, the n8n & Make.com nodes, or the MCP server — and white-label it as your own. No platform audits. No token juggling. [Get started free](https://post-pulse.com/app) [Read the API docs](https://post-pulse.com/api-docs) 9 platforms · 1 API ![PostPulse dashboard showing a week of posts scheduled across TikTok, Instagram, YouTube and X](https://post-pulse.com/static/media/week.CwsLdpt_.png) Build with - { } REST API - n8n - Make.com - MCP server ### 9 platforms, one integration Publish everywhere from a single API call. We keep up with each platform's API changes, tokens, and rate limits so you don't have to. Instagram Business / Creator accounts TikTok YouTube Shorts & video LinkedIn Personal profiles X (Twitter) Threads Bluesky Facebook Pages Telegram Channels & chats ![A single PostPulse post scheduled to multiple platforms at once, with attached media and a scheduled time](https://post-pulse.com/static/media/post-details.b4Q6Ymmo.png) ### Four ways to ship — technical or not Whether you write code, build no-code automations, or run AI agents, there's a first-class way to publish with PostPulse. #### REST API One unified endpoint for all 9 platforms. SDK-friendly, webhook callbacks. ![REST API with PostPulse](https://post-pulse.com/static/media/post-lifecycle.DrQX_3g6.png) #### n8n Official community node — drag-and-drop publishing in your workflows. No code. ![n8n with PostPulse](https://post-pulse.com/static/media/n8n-flow.DohDOLLK.png) #### Make.com Official app — connect publishing to 2,000+ other tools. No code. ![Make.com with PostPulse](https://post-pulse.com/static/media/create-post.46mcArRM.png) #### MCP Server New Let Claude, Cursor, and any LLM/agent publish to social media in their tool loop. ![MCP Server with PostPulse](https://post-pulse.com/static/media/inspector.B5bdSUfx.png) ### One request. Nine platforms. A webhook when it lands. POST once and PostPulse fans your content out to every connected account, handles each platform's media rules, and calls your webhook on success or failure. No per-platform code, no app audits, no token refresh logic. 201 Created `{ "id": 9821, "overallStatus": "SCHEDULED", "scheduledTime": "2026-06-10T14:00:00Z" }` POST /v1/posts ``` curl -X POST https://api.post-pulse.com/v1/posts \ -H "Authorization: Bearer $POSTPULSE_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "scheduledTime": "2026-06-10T14:00:00Z", "isDraft": false, "publications": [ { "socialMediaAccountId": 445, "platformSettings": { "type": "INSTAGRAM" }, "posts": [{ "content": "Shipping from one API 🚀", "attachmentPaths": ["launch.mp4"] }] }, { "socialMediaAccountId": 512, "platformSettings": { "type": "TIKTOK" }, "posts": [{ "content": "Shipping from one API 🚀", "attachmentPaths": ["launch.mp4"] }] } ] }' ``` ![Post lifecycle: draft, scheduled, in progress, completed, partially completed or failed](https://post-pulse.com/static/media/post-lifecycle.DrQX_3g6.png) ### Why build on PostPulse #### No platform audits We own the verified platform apps. Skip the months-long Meta / TikTok / Google review process — go live in days, not months. #### Tokens handled forever OAuth, refresh, rate limits, and constant API version changes are our problem, not yours. Integrate once; we maintain it. #### White-label OAuth Your users connect their accounts on a flow branded as you — they never see PostPulse. #### Built for AI agents A first-class MCP server means autonomous agents can publish as part of their reasoning loop. White-label ### Resell publishing under your own brand A fully branded, native experience — your users connect and publish without ever leaving your app or seeing PostPulse. Your users connect their accounts on an OAuth flow branded as you, and publish from inside your product — they never see PostPulse. **$200 / mo + $1 per active social account.** An account is "active" only if it publishes at least one post that month. Connected-but-idle accounts are free. Startup support program: still building or in beta? We waive fees until you launch — discussed individually. [Talk to the founder](https://cal.com/alex-pohorelov/30min) [Start in the app](https://post-pulse.com/app) 1. 1 Your app syncs a user to PostPulse via the API. 2. 2 The user clicks “Connect Instagram” inside your app. 3. 3 They approve on the platform via your-branded OAuth. 4. 4 PostPulse stores the token and returns the user to you. 5. 5 You publish to that account through the PostPulse API. ### Builders ship faster on PostPulse [Reviewed on **Product Hunt**](https://www.producthunt.com/products/postpulse-2/reviews?utm_source=badge-testimonial-wall&utm_medium=badge) [![James Mccarthy](https://ph-avatars.imgix.net/9722277/original.png) James Mccarthy I use PostPulse with an AI agent via their MCP server. My agent literally posts to social media on its own now. Didn’t expect that to work as smoothly as it did.](https://www.producthunt.com/products/postpulse-2/reviews?review=503356&utm_source=badge-testimonial-wall&utm_medium=badge) [![Antonio Widera](https://ph-avatars.imgix.net/9722274/original.png) Antonio Widera $5/month for what would otherwise require a full backend engineer to maintain? Easy yes. The REST API is clean and well-documented too, which is rare.](https://www.producthunt.com/products/postpulse-2/reviews?review=503355&utm_source=badge-testimonial-wall&utm_medium=badge) [![Shawn Padilla](https://ph-avatars.imgix.net/9722269/original.png) Shawn Padilla Tried to get TikTok API access myself. Three weeks, two rejections. Switched to PostPulse and was posting to TikTok the same day. Wish I hadn’t wasted that time.](https://www.producthunt.com/products/postpulse-2/reviews?review=503354&utm_source=badge-testimonial-wall&utm_medium=badge) [![Karen Rivers](https://ph-avatars.imgix.net/9722268/original.png) Karen Rivers I’m a Make.com power user and needed to post to 5 platforms from one scenario. The native PostPulse app for Make connected everything in one afternoon. Would’ve taken me weeks to do manually.](https://www.producthunt.com/products/postpulse-2/reviews?review=503353&utm_source=badge-testimonial-wall&utm_medium=badge) [![Douglas Finch](https://ph-avatars.imgix.net/9722265/original.png) Douglas Finch I built an n8n automation for a client and needed to add social publishing. The official PostPulse n8n node was literally drag and drop. No headache.](https://www.producthunt.com/products/postpulse-2/reviews?review=503352&utm_source=badge-testimonial-wall&utm_medium=badge) [![Andrea Scott](https://ph-avatars.imgix.net/9722262/original.png) Andrea Scott Saved me months of dev work. I was about to start integrating Instagram and TikTok APIs separately — then I found out Meta’s app review alone can take months. PostPulse just handled all of that. Shipped social posting in under a week.](https://www.producthunt.com/products/postpulse-2/reviews?review=503351&utm_source=badge-testimonial-wall&utm_medium=badge) [![William Dirks](https://ph-avatars.imgix.net/9718284/original.png) William Dirks The most flexible pricing model on the market! Pay-as-you-go let me experiment without commitment — and now that we have stable traffic I’ve switched to the $5/month plan. Best support too — the founder personally emailed me when I hit an error and walked me through the fix.](https://www.producthunt.com/products/postpulse-2/reviews?review=502545&utm_source=badge-testimonial-wall&utm_medium=badge) [![solo serg](https://ph-avatars.imgix.net/8594446/original.png) solo serg We optimized the posting to 20 twitter accounts. It was a problem to manage such a number, but through the platform everything works out perfectly. Very convenient dashboard for tracking errors. Great product.](https://www.producthunt.com/products/postpulse-2/reviews?review=456488&utm_source=badge-testimonial-wall&utm_medium=badge) ### Frequently asked questions What is PostPulse? PostPulse is a social media publishing platform for apps, automations, and AI agents. One integration publishes to 9 networks via a REST API, official n8n and Make.com nodes, or an MCP server — and you can white-label the whole flow under your own brand. Which platforms does PostPulse support? Instagram, TikTok, YouTube, LinkedIn, X (Twitter), Threads, Bluesky, Facebook, and Telegram — nine platforms from a single integration. Do I need to pass Meta, TikTok, or Google app review? No. PostPulse provides the verified platform apps, so you skip the months-long developer-audit process and go live in days instead of months. Can an AI agent post to social media with PostPulse? Yes. PostPulse ships an MCP (Model Context Protocol) server, so assistants like Claude and Cursor — and any LLM agent — can publish to social media directly inside their tool loop. Is there a no-code option? Yes. The official n8n community node and the Make.com app let you build multi-platform publishing workflows without writing any code. How much does PostPulse cost? Every account starts with 10 free credits, no card required. Private-label: pay-as-you-go at $0.20 per successful publication (connect unlimited accounts, credits never expire), or $5 per account per month ($48/year) for unlimited posts. White-label: $200/month plus $1 per active social account — connected-but-idle accounts are free. Startups can have fees waived while building. Full breakdown: post-pulse.com/pricing. What is the difference between private-label and white-label? Private-label: your users connect their accounts inside PostPulse and you publish via the API, n8n, Make.com, or MCP. White-label: a fully branded, native experience where your users connect and publish without ever leaving your app or seeing PostPulse. ![Oleksandr Pohorelov, founder of PostPulse](https://post-pulse.com/static/media/oleksandr-pohorelov.svGEwh8z.jpeg) “I answer support emails myself. If you're integrating PostPulse, you're talking to the person who builds it.” **Oleksandr Pohorelov** · Founder, PostPulse [support@post-pulse.com](mailto:support@post-pulse.com) [Join the Discord](https://discord.gg/GvZrAXzv) ### Ship social publishing this week Create an account, generate API keys, and publish your first post in minutes. [Get started free](https://post-pulse.com/app) [Read the blog](https://post-pulse.com/blog) --- ## Simple, usage-based pricing Source: https://post-pulse.com/pricing Title: Pricing — PostPulse Description: PostPulse pricing: pay-as-you-go at $0.20 per publication, $5 per account per month (or $48/year) for unlimited posts, or white-label at $200/month + $1 per active account. 10 free credits to start, no card required. Last modified: 2026-09-16 Pricing Pay per publication, per connected account, or white-label the whole flow under your brand. Start with 10 free credits — no card required. [Start free](https://post-pulse.com/app) [Talk to us](https://cal.com/alex-pohorelov/30min) ### Three ways to pay Private-label is self-serve. White-label is for partners reselling publishing under their own brand. Private-label · Pay-as-you-go $0.20 / publication #### What's included - All platforms, all four integrations (REST API, n8n, Make.com, MCP) - Unlimited connected accounts - Webhooks, media validation, and the PostPulse web app: calendar, analytics, media gallery #### How billing works - 1 credit = 1 successful publication to one social account ($0.20) - Failed publications are not charged - Credit packs from 10 credits, optional auto top-up - Credits never expire - Start with 10 free credits — no card required [Start free](https://post-pulse.com/app) [How it works ↓](https://post-pulse.com/pricing#pay-as-you-go) Most popular Private-label · Subscription $5 / account / mo #### What's included - Everything in pay-as-you-go - Unlimited posts per seat — no credits to watch - A seat is any connected account: swap accounts freely #### How billing works - $5 / seat / month, or $48 / seat / year ($4 / mo — 2 months free) - Add seats any time — prorated for the rest of the cycle - Cancel any time — the plan stays active until the cycle ends - Manage seats and invoices in the Stripe billing portal [Choose subscription](https://post-pulse.com/app) [How it works ↓](https://post-pulse.com/pricing#subscription) White-Label $200 / mo + $1 / active acct #### What's included - OAuth connect flow under your brand — users never see PostPulse - Developer portal: OAuth apps, webhooks, delivery logs - Your users are never billed by PostPulse — you invoice them - Everything the private-label API can do #### How billing works - $200 / month platform fee - + $1 per active social account per month - An account is active only in months it publishes; idle accounts are free - Startup program: fees waived until you launch [Talk to us](https://cal.com/alex-pohorelov/30min) [How it works ↓](https://post-pulse.com/pricing#white-label) ### How Private Label works Self-serve: start on free credits, then pay per publication or per seat — the same API, nodes and MCP server either way. #### Start free Create an account and get **10 free credits** — no card, no trial clock. Every platform and every integration (REST API, n8n, Make.com, MCP) is available from the first minute, so you can wire up a real workflow and publish real posts before deciding how to pay. One limit applies on free credits: social accounts that were already connected to PostPulse in the past cannot be connected again until the first payment. Any credit purchase or subscription lifts it. #### Pay-as-you-go — $0.20 / publication ##### How it is billed - **1 credit = 1 successful publication** to one social account. A post sent to three social accounts uses three credits. - A failed publication is **not charged** — the credit is consumed only when the platform accepts the post. - Credit packs start at **10 credits**; optional auto top-up refills the balance when it runs low. - Credits **never expire**. - Connect **unlimited accounts** — you pay for publishing, not for connecting. ##### Who it suits - Irregular posting — a launch a month, not a post a day. - Many accounts that each publish rarely (agencies onboarding clients, multi-brand SaaS). - Integrations and AI agents with unpredictable volume. - Anyone below about 25 publications per account per month — use the calculator below. #### Subscription — $5 / seat / month or $48 / seat / year ##### How it is billed - **A seat is a slot, not an account.** Buy one seat, connect a TikTok account, later swap it for an Instagram account — the seat moves with you. - **Unlimited publications** per seat. No credits to watch. - Yearly billing is $48 per seat — $4 a month, two months free. - **Add seats any time** — the extra seat is prorated for the days left in the current cycle, then billed in full from the next one. - **Remove seats or cancel any time** — the change applies at the next renewal. The current cycle is already paid, so you keep everything until it ends; there is no refund for the remaining days. - If more accounts are connected than seats renewed, the app shows a warning until the cycle ends and then disconnects the newest extra accounts automatically. - Seats, invoices and payment methods are managed in the **Stripe billing portal** under Billing in the app. ##### Who it suits - Steady daily publishing — 25+ publications per account per month. - Teams that want a fixed, predictable monthly bill. - Content pipelines that fan every post out to several social accounts. #### Which plan is cheaper for me? Enter how many accounts you connect and how often each one publishes. Both prices update instantly. Connected accounts Publications per account per month Pay-as-you-go **$12/ mo** 60 publications × $0.20 Subscription **$15/ mo** 3 seats × $5 · or $12 / mo billed yearly Break-even is 25 publications per account per month ($5 ÷ $0.20). Below that, pay-as-you-go is cheaper; above it, a subscription is. #### Earn with PostPulse Recommend PostPulse and earn **20% of every payment** your referrals make for 12 months — subscriptions and credit purchases alike. Monthly PayPal payouts from $50. [Affiliate program →](https://post-pulse.com/affiliates) ### How White Label works For partners who resell publishing inside their own product: one platform fee plus a per-account charge only for accounts that actually publish. #### White-label — $200 / mo + $1 per active social account ##### How it is billed - **$200 / month** platform fee. - **$1 per active social account** per month. An account is "active" only if it publishes at least one post that month. Connected-but-idle accounts are free. - Example: 200 connected accounts, 60 of them published this month → $200 + 60 × $1 = **$260**. - Startup support program: still building or in beta? We waive fees until you launch — discussed individually. ##### What you get - A fully branded, native experience — your users connect and publish without ever leaving your app or seeing PostPulse. - OAuth connect flow branded as your product — your users never see PostPulse. - Developer portal with OAuth apps, webhooks and delivery logs. - Your users are never billed by PostPulse — one monthly invoice to you, you price it for them. - To start: [book a call with the founder](https://cal.com/alex-pohorelov/30min) or write to [support@post-pulse.com](mailto:support@post-pulse.com). See [how white-label works](https://post-pulse.com/white-label). ### What's included in every plan | Feature | Pay-as-you-go | Subscription | White-label | | --- | --- | --- | --- | | 9 platforms (Instagram, TikTok, YouTube, LinkedIn, X (Twitter), Threads, Bluesky, Facebook, Telegram) | ✓ | ✓ | ✓ | | REST API | ✓ | ✓ | ✓ | | n8n | ✓ | ✓ | Your own UI | | Make.com | ✓ | ✓ | Your own UI | | MCP Server | ✓ | ✓ | Your own UI | | Webhooks (post status callbacks) | ✓ | ✓ | ✓ | | Automated media validation | ✓ | ✓ | ✓ | | PostPulse web app (calendar, analytics, media gallery) | ✓ | ✓ | Your own UI | | Connected accounts | Unlimited | One per seat | Unlimited | | Publications | 1 credit each | Unlimited | Unlimited | | OAuth connect flow under your brand | — | — | ✓ | | Your users never see PostPulse | — | — | ✓ | | Developer portal | OAuth apps, webhooks, delivery log | OAuth apps, webhooks, delivery log | White-label admin portal: credentials, webhooks & deliveries, your users, their accounts & publications, billing | ### Pricing FAQ What counts as a publication? One post delivered to one social account. A post sent to three social accounts is three publications and costs three credits on pay-as-you-go ($0.60). On a subscription, publications are unlimited. Am I charged if a publication fails? No. A credit is consumed only when the platform accepts the post. If a publication fails — a rejected video format, an expired token, a platform outage — nothing is deducted. Do credits expire? No. Credits stay on your balance until you use them. The smallest pack is 10 credits, and you can enable auto top-up so a busy week never stalls your workflow. What is a seat? A seat is one slot for a connected social account — not a specific account. Buy one seat, connect a TikTok account, later disconnect it and connect an Instagram account instead: the seat simply moves. Change the number of seats at any time in the billing portal. What happens if I add or remove seats mid-cycle? Adding a seat is prorated: you pay only for the days left in the current cycle, then the full $5 per seat from the next one. Removing seats takes effect at the next renewal — the current cycle is already paid, so you keep every seat until it ends. If more accounts are connected than seats renewed, the newest extra accounts are disconnected automatically. Can I cancel the subscription? Yes, at any time in the Stripe billing portal. The subscription stays active until the end of the paid cycle and simply does not renew; there is no refund for the remaining days of the current cycle. Can I combine pay-as-you-go and a subscription? An account is billed under one model at a time: if you have an active subscription, publishing is unlimited within your seats; without one, each successful publication uses a credit. Switch whenever your volume changes. What does an active account mean for white-label? An account is "active" only if it publishes at least one post that month. Connected-but-idle accounts are free. You pay the $1 only for accounts that actually published that month, on top of the $200 monthly platform fee. Is there a free plan? Every new account gets 10 free credits — no card required — to test every platform and integration. One limit applies before your first payment: social accounts that were already connected to PostPulse in the past cannot be connected on free credits. Any purchase lifts it. How do I pay? Payments go through Stripe: Card, Apple Pay, Google Pay, Link. Prices are in USD. Invoices and payment methods are managed in the Stripe billing portal inside the app. What if we are a startup still building? Startup support program: still building or in beta? We waive fees until you launch — discussed individually. Book a call with the founder and tell us where you are. --- ## Getting Started with PostPulse Source: https://post-pulse.com/getting-started Title: Getting Started — PostPulse Social Media Publishing API Description: Quickstart for the PostPulse API: get OAuth credentials and publish your first post to Instagram, TikTok, X, LinkedIn, YouTube & more in ~5 minutes. Copy-paste code samples included. Last modified: 2026-09-16 Follow these steps to start publishing to 9 social media platforms using PostPulse API or n8n integration. 1 ### Sign Up for PostPulse Create your PostPulse account to get started with our unified social media publishing platform. **Note:** You'll need this account to authenticate and manage your social media connections. [Sign Up for PostPulse](https://post-pulse.com/app) 2 ### Connect Your Social Media Accounts Add all the social media accounts you want to publish to. PostPulse supports: - Instagram (Feed, Reels, Stories) - TikTok - YouTube - LinkedIn - Threads - Telegram - Facebook - Twitter/X - Bluesky [Manage Accounts](https://post-pulse.com/app/accounts) 3 ### Create API Application Sign up at [post-pulse.com/app](https://post-pulse.com/app) and complete the onboarding. You'll be guided to create an OAuth application and get your API credentials instantly — no need to contact support. **New:** OAuth apps, credentials, and webhooks are all managed directly inside the PostPulse app. No separate developer portal needed. **In the PostPulse app, you can:** - Create new OAuth applications with custom names - Set OAuth redirect URLs for your applications - Get your client ID instantly - View your client secret securely - Edit callback URLs anytime - Manage webhooks for real-time notifications - Delete applications when no longer needed [Create OAuth App](https://post-pulse.com/app/portal/apps) 4 ### Choose Your Integration Method PostPulse offers four main ways to integrate: #### 🔗 Direct API Integration Use our REST API directly in your applications for maximum flexibility and control. - Full control over requests and responses - Custom error handling - Perfect for developers building custom solutions [View API Docs](https://post-pulse.com/api-docs) #### ⚡ n8n Integration Use our official n8n node for visual workflow automation without coding. - Visual workflow builder - No coding required - Perfect for content creators and marketers [n8n Guide](https://post-pulse.com/n8n-integration) #### 🧩 Make Integration Connect PostPulse to thousands of apps using our official Make integration. - Visual scenario builder - Automate cross-platform posting - Connect with GDrive, Airtable, etc. [Make Guide](https://post-pulse.com/make-integration) #### 🤖 MCP Server Give your AI agents (Claude, Cursor) the ability to post on social media. - Natural language scheduling - Context-aware publishing - Agentic workflow automation [MCP Guide](https://post-pulse.com/mcp-server) 5 ### Test Your Integration Once you have your credentials, test your integration: ##### 1. Authenticate Use your client ID and secret to authenticate with PostPulse ##### 2. Fetch Accounts Retrieve your connected social media accounts ##### 3. Upload Media (if needed) Upload any images or videos you want to publish ##### 4. Schedule a Test Post Create a test post to verify everything works correctly --- ## API Documentation Source: https://post-pulse.com/api-docs Title: PostPulse API Docs — Publish to 9 Social Platforms (REST) Description: Full REST API reference: authenticate, connect accounts, and publish or schedule posts across Instagram, TikTok, YouTube, X, LinkedIn, Threads, Facebook, Telegram & Bluesky. Last modified: 2026-09-14 Complete reference for the PostPulse API - unified publishing to 9 social media platforms. ### Authentication PostPulse API uses OAuth 2.0 for authentication. Sign up at [PostPulse](https://post-pulse.com/app) and create an OAuth application at [PostPulse Developer Portal](https://post-pulse.com/app/portal/apps) to get your API credentials instantly. #### API Base URLs ``` Authentication: https://auth.post-pulse.com API Endpoints: https://api.post-pulse.com ``` #### OAuth Flow ``` // Step 1: Get authorization code GET https://auth.post-pulse.com/authorize ?client_id=YOUR_CLIENT_ID &response_type=code &redirect_uri=YOUR_REDIRECT_URI &scope=postpulse-api/accounts.read postpulse-api/api postpulse-api/media.write postpulse-api/posts.read postpulse-api/posts.write postpulse-api/webhooks.write &state=YOUR_STATE_PARAMETER &audience=https://api.post-pulse.com // Step 2: Exchange code for access token POST https://auth.post-pulse.com/oauth/token Content-Type: application/json { "grant_type": "authorization_code", "client_id": "YOUR_CLIENT_ID", "client_secret": "YOUR_CLIENT_SECRET", "code": "AUTHORIZATION_CODE", "redirect_uri": "YOUR_REDIRECT_URI" } ``` #### Using Access Token All API requests must include the Bearer token in the Authorization header: ``` Authorization: Bearer YOUR_ACCESS_TOKEN ``` ### Accounts Retrieve connected social media accounts for the authenticated user. #### Get All Accounts GET /v1/accounts Returns a list of all social media accounts connected by the user. ##### Response Example ``` [ { "id": 123, "platform": "INSTAGRAM", "accountId": "instagram_user_id", "accountUsername": "myaccount", "accountDisplayName": "My Instagram Account", "accountAvatarUrl": "https://example.com/avatar.jpg", "createdTime": "2025-08-15T10:30:00.000000", "updatedTime": "2025-08-15T10:30:00.000000" } ] ``` #### Get Connected Chats GET /v1/accounts/{id}/chats?platform={platform} For platforms like Telegram, retrieve available channels/chats where the bot can publish. ##### Response Example ``` [ { "id": "-1002726180643", "title": "PostPulse Official", "type": "channel", "platform": "TELEGRAM" } ] ``` ### Media Upload Most platforms require media to be hosted in PostPulse storage before scheduling. You have three ways to get media there — pick the one that fits your use case. 1 ##### Direct Upload POST /v1/media/upload Send the file as binary in a single multipart/form-data request. - Simplest approach - Best for small files - Synchronous — returns the media key immediately 2 ##### Pre-signed PUT URL POST /v1/media/upload/urls Request a pre-signed URL, then PUT the file directly to our storage. - Best for large files - Bypasses API size limits - Confirm step recommended after upload 3 ##### Public URL Import POST /v1/media/upload/import Provide a public URL — we download the file into our storage. - Fully asynchronous - Poll for completion - Or pass the URL directly to `attachmentPaths` #### Direct Upload POST /v1/media/upload Upload an image or video file in a single request. ##### Request ``` Content-Type: multipart/form-data file: [binary file data] ``` ##### Response Example ``` { "path": "6354d8d2-e0f1-702b-af6c-62e28e377ec7/e1992700-96f5-4f0b-bd48-45d902ffbb0c.jpeg" } ``` Use the returned `path` as an entry in `attachmentPaths` when creating a post. #### Pre-signed PUT URL For large files, request a pre-signed URL and upload the binary directly to our storage. This takes three calls: request URL → PUT file → confirm upload. Your Client PostPulse API Object Storage POST /v1/media/upload/urls { filename, contentType, sizeBytes } 200 OK { key, url, method, headers, expiresAt } PUT {url} — binary file (with headers from previous response) 200 OK POST /v1/media/upload/confirm (recommended) { key } 204 No Content ##### 1. Request the URL POST /v1/media/upload/urls Get a pre-signed URL configured for your file's filename, content type, and size. ###### Request Schema ``` { "filename": "my-video.mp4", "contentType": "video/mp4", "sizeBytes": 10485760 } ``` ###### Response Schema ``` { "key": "f157080a-7c45-4b43-9d7c-d17dd83dbf92/b43ec45c-6367-4edd-868b-5f704a4ff04e.mp4", "method": "PUT", "url": "https://social-media-planner-s3.fly.storage.tigris.dev/f157080a-7c45-4b43-9d7c-d17dd83dbf92/b43ec45c-6367-4edd-868b-5f704a4ff04e.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20260418T193733Z&X-Amz-SignedHeaders=content-type%3Bhost%3Bx-amz-meta-declared-size%3Bx-amz-meta-orig-filename&X-Amz-Credential=...&X-Amz-Expires=600&X-Amz-Signature=...", "headers": { "Content-Type": "video/mp4", "x-amz-meta-declared-size": "10485760", "x-amz-meta-orig-filename": "my-video.mp4" }, "expiresAt": "2026-04-18T19:47:33Z" } ``` **Important:** You must send the request to the returned `url` with the exact `headers` and HTTP `method` from the response — the signature is bound to them. ##### 2. PUT the file to the returned URL ``` PUT https://social-media-planner-s3.fly.storage.tigris.dev/...?X-Amz-Signature=... Content-Type: video/mp4 x-amz-meta-declared-size: 10485760 x-amz-meta-orig-filename: my-video.mp4 [binary file bytes] ``` Storage responds with `200 OK` on success. The URL expires after the window shown in `expiresAt`. ##### 3. Confirm the upload (recommended) POST /v1/media/upload/confirm Confirms the file landed in our storage, runs a basic integrity check (for videos, this verifies the container is readable), and detects the file's real type from its bytes. Optional but recommended — catches transfer problems early and avoids surprises at post time. ###### Request Schema ``` { "key": "f157080a-7c45-4b43-9d7c-d17dd83dbf92/b43ec45c-6367-4edd-868b-5f704a4ff04e.mp4" } ``` ###### Response Schema ``` { "key": "b43ec45c-6367-4edd-868b-5f704a4ff04e.mp4", "path": "f157080a-7c45-4b43-9d7c-d17dd83dbf92/b43ec45c-6367-4edd-868b-5f704a4ff04e.mp4", "filename": "my-video.mp4", "contentType": "video/mp4", "sizeBytes": 10485760, "url": "https://..." } ``` The returned `path` is always the `key` you were given in step 1 — a key never moves once it has been handed out, so it is safe to store it before confirming. **Content type beats the extension.** The key's extension comes from the filename you declared before any bytes existed, so it can disagree with what you actually uploaded — a PNG sent under the name `photo.jpeg` keeps a `.jpeg`key. The returned `contentType` is detected from the file itself and is what we use when publishing (image conversion, platform format rules). Read the type from `contentType`, never from the key. A file whose bytes are neither an image nor a video is refused: confirm answers `400` naming the type we found, the stored object is deleted, and that key can no longer be used in `attachmentPaths` — scheduling a post with it fails with the same reason. Upload the file again as a supported image or video. A corrupt or incomplete file is refused the same way. #### Public URL Import Already have a public URL? Hand it to us and we'll pull the file into storage for you. This is fully asynchronous — you get an import job back and poll for completion. Your Client PostPulse API Source URL POST /v1/media/upload/import { url, filenameHint } 202 Accepted { id, state: "QUEUED" } GET (background download) GET /v1/media/upload/import/{id} (poll) 200 OK { state: "READY", s3Key,... } **Shortcut:** You can also pass a public URL directly as an entry in`attachmentPaths` when creating a post — see the [Post Scheduling](https://post-pulse.com/api-docs#post-scheduling) section. The platform will create the import job for you and flip the post to `SCHEDULED` once the file is ready. ##### Start an import POST /v1/media/upload/import Kick off a background import from a public URL. ###### Request Schema ``` { "url": "https://example.com/image.jpg", "filenameHint": "image.jpg" } ``` ###### Response Schema ``` { "id": 12345, "state": "QUEUED" } ``` ##### Poll import status GET /v1/media/upload/import/{id} Get the current status of a media import job. ###### Response Schema ``` { "id": 12345, "state": "READY", // QUEUED, DOWNLOADING, VALIDATING, UPLOADING, READY, FAILED_TEMPORARY, FAILED_PERMANENT "sourceUrl": "https://example.com/image.jpg", "bytesDownloaded": 2048576, "totalBytes": 2048576, "detectedMime": "image/jpeg", "s3Key": "6354d8d2-e0f1-702b-af6c-62e28e377ec7/e1992700-96f5-4f0b-bd48-45d902ffbb0c.jpeg", "errorCode": null, "errorMessage": null } ``` When `state` is `READY`, use `s3Key` as the `attachmentPaths` entry. `FAILED_PERMANENT` means the job is dead — inspect `errorCode` and `errorMessage`. `FAILED_TEMPORARY` may still recover. **Tip:** Instead of polling, you can use [Webhooks](https://post-pulse.com/webhooks) to receive a `media.upload.ready` event when the import is complete. ### Post Scheduling Schedule posts to one or multiple social media platforms simultaneously. #### Understanding the Data Model ##### PostSchedule The root object that contains common settings for all publications: - **scheduledTime:** When to publish. Accepts ISO 8601 with or without timezone offset (see below). - **isDraft:** Whether this is a draft (recommended: false for API) - **publications:** Array of Publication objects ##### Publication Represents publishing to one social media account: - **accountId:** ID from the accounts endpoint - **platformSettings:** Platform-specific configuration - **posts:** Array of Post objects ##### Post Individual post content: - **content:** Post text/description - **attachmentPaths:** Array of media references — each entry is either an s3 key returned by a media upload, or a public URL we should import. - **chatId:** For Telegram only - specific channel ID - **thumbnailPath:** Optional thumbnail (coming soon) #### Scheduled Time Formats The `scheduledTime` field accepts ISO 8601 with or without a timezone offset. All values are normalized to UTC on the server. ``` // All three formats are accepted: "2026-04-17T23:33:00" // No offset — interpreted as UTC "2026-04-17T23:33:00Z" // Explicit UTC "2026-04-17T19:33:00-04:00" // With offset — normalized to UTC server-side ``` #### Attachments: Key vs Public URL Each entry in `attachmentPaths` can be one of two things: ##### Storage key (path) Returned from any of the [Media Upload](https://post-pulse.com/api-docs#media-upload) endpoints. The post is created in **SCHEDULED** status immediately. ``` "attachmentPaths": [ "6354d8d2-.../e1992700-...jpeg" ] ``` ##### Public URL We create an import job and flip the post to **SCHEDULED** once the file is ready. If the import fails permanently, the post moves to **MEDIA_IMPORT_FAILED**. ``` "attachmentPaths": [ "https://example.com/my-image.jpg" ] ``` #### Post Lifecycle The diagram below shows how a posting schedule moves through statuses. Posts with s3 keys go straight to **SCHEDULED**. Posts with public URLs start in **AWAITING_MEDIA** and transition to **SCHEDULED** once every referenced file has been imported — or to **MEDIA_IMPORT_FAILED** if any import fails permanently. ![Post schedule lifecycle diagram showing transitions between DRAFT, AWAITING_MEDIA, SCHEDULED, MEDIA_IMPORT_FAILED, IN_PROGRESS, COMPLETED, PARTIALLY_COMPLETED and FAILED states](https://post-pulse.com/static/media/post-lifecycle.DrQX_3g6.png) #### Create Post Schedule POST /v1/posts Schedule a post to one or multiple platforms. ##### Request Example — Storage Key ``` { "scheduledTime": "2026-04-17T19:33:00-04:00", "isDraft": false, "publications": [ { "socialMediaAccountId": 445, "platformSettings": { "type": "TELEGRAM" }, "posts": [ { "content": "Ready to go!", "chatId": "-1001947450140", "attachmentPaths": [ "6354d8d2-e0f1-702b-af6c-62e28e377ec7/e1992700-96f5-4f0b-bd48-45d902ffbb0c.jpeg" ] } ] } ] } ``` ##### Request Example — Public URL ``` { "scheduledTime": "2026-04-20T12:00:00Z", "isDraft": false, "publications": [ { "socialMediaAccountId": 445, "platformSettings": { "type": "TELEGRAM" }, "posts": [ { "content": "Posting from a remote image", "chatId": "-1001947450140", "attachmentPaths": [ "https://example.com/my-image.jpg" ] } ] } ] } ``` ##### Response Returns `201 Created` with the newly created posting schedule: ``` { "id": 9821, "overallStatus": "SCHEDULED", // SCHEDULED | AWAITING_MEDIA | DRAFT "scheduledTime": "2026-04-17T23:33:00Z", "publications": [ { "id": 14433, "socialMediaAccountId": 445, "platformSettings": { "type": "TELEGRAM" }, "posts": [ { "id": 28801, "chatId": "-1001947450140", "content": "Ready to go!", "attachmentPaths": [ "6354d8d2-e0f1-702b-af6c-62e28e377ec7/e1992700-96f5-4f0b-bd48-45d902ffbb0c.jpeg" ], "thumbnail": null } ] } ], "pendingImports": [] // Populated when attachmentPaths contain public URLs } ``` When any `attachmentPaths` entry is a public URL, `overallStatus` is `AWAITING_MEDIA` and `pendingImports` is populated with one entry per in-flight import. Track progress by polling `GET /v1/media/upload/import/{importTaskId}`: ``` "pendingImports": [ { "postId": 28801, "attachmentIndex": 0, "importTaskId": 12345, "sourceUrl": "https://example.com/my-image.jpg", "state": "QUEUED" // Poll GET /v1/media/upload/import/{importTaskId} } ] ``` ### Platform Settings Each platform requires specific settings in the `platformSettings` JSON object. The `type` field is mandatory for all platforms and must match the platform name. **Important:** Even if a platform doesn't have specific settings yet (like X/Twitter), you must still include the `platformSettings` field with the `type` value in your request. #### Instagram ``` { "type": "INSTAGRAM", "publicationType": "FEED" | "REELS" | "STORY" } ``` #### LinkedIn ``` { "type": "LINKEDIN", "visibility": "PUBLIC" | "CONNECTIONS" | "GROUP" } ``` #### Threads ``` { "type": "THREADS", "topicTag": "optional topic tag" } ``` #### TikTok ``` { "type": "TIK_TOK", "title": "Video title", "privacyLevel": "PUBLIC_TO_EVERYONE" | "FOLLOWER_OF_CREATOR" | "MUTUAL_FOLLOW_FRIENDS" | "SELF_ONLY", "disableDuet": false, "disableComments": false, "disableStitch": false, "brandContent": false, "brandOrganic": false, "hasUsageConfirmation": true } ``` #### YouTube ``` { "type": "YOUTUBE", "title": "Video title", "privacyStatus": "PUBLIC" | "UNLISTED" | "PRIVATE", "category": "FILM_ANIMATION" | "AUTOS_VEHICLES" | "MUSIC" | "PETS_ANIMALS" | "SPORTS" | "TRAVEL_EVENTS" | "GAMING" | "PEOPLE_BLOGS" | "COMEDY" | "ENTERTAINMENT" | "NEWS_POLITICS" | "HOWTO_STYLE" | "EDUCATION" | "SCIENCE_TECHNOLOGY" } ``` #### Telegram ``` { "type": "TELEGRAM" } ``` #### X (Twitter) ``` { "type": "TWITTER" } ``` #### Bluesky ``` { "type": "BLUE_SKY" } ``` #### Facebook ``` { "type": "FACEBOOK", "publicationType": "FEED" | "REELS" | "STORY" } ``` ### Data Models #### Account Model ``` { "id": "number", "platform": "X_TWITTER" | "YOUTUBE" | "THREADS" | "TIKTOK" | "INSTAGRAM" | "LINKEDIN" | "BLUE_SKY" | "TELEGRAM" | "FACEBOOK", "accountId": "string", "accountUsername": "string", "accountDisplayName": "string", "accountAvatarUrl": "string", "createdTime": "ISO 8601 datetime", "updatedTime": "ISO 8601 datetime" } ``` #### Chat Model ``` { "id": "string", "title": "string", "type": "string", "platform": "string" } ``` #### Media Upload Response ``` { "path": "string" } ``` #### Publication Model ``` { "socialMediaAccountId": "number", "platformSettings": { "type": "platform_enum" }, "posts": [ { "content": "string", "chatId": "string (optional, for Telegram)", "attachmentPaths": ["string — storage key (from media upload) OR public URL"] } ] } ``` #### Posting Schedule Created Response Returned from `POST /v1/posts`. ``` { "id": "number", "overallStatus": "SCHEDULED | AWAITING_MEDIA | DRAFT", "scheduledTime": "ISO 8601 datetime (UTC)", "publications": [ { "id": "number", "socialMediaAccountId": "number", "platformSettings": { "type": "platform_enum" }, "posts": [ { "id": "number", "chatId": "string | null", "content": "string", "attachmentPaths": ["string"], "thumbnail": "string | null" } ] } ], "pendingImports": [ { "postId": "number", "attachmentIndex": "number", "importTaskId": "number", "sourceUrl": "string", "state": "QUEUED | DOWNLOADING | VALIDATING | UPLOADING | READY | FAILED_TEMPORARY | FAILED_PERMANENT" } ] } ``` ### Error Handling PostPulse API uses standard HTTP status codes and returns detailed error information. #### Error Response Format ``` { "error": { "code": "VALIDATION_ERROR", "message": "Invalid request data", "details": [ { "field": "publications[0].platformSettings.type", "message": "Required field missing" } ] } } ``` #### Common Error Codes | HTTP Status | Error Code | Description | | --- | --- | --- | | 400 | VALIDATION_ERROR | Request data validation failed | | 401 | UNAUTHORIZED | Invalid or missing authentication | | 403 | FORBIDDEN | Insufficient permissions | | 404 | NOT_FOUND | Resource not found | | 429 | RATE_LIMITED | Too many requests | | 500 | INTERNAL_ERROR | Server error | --- ## Webhook Events Source: https://post-pulse.com/webhooks Title: Webhooks — PostPulse Social Media API Description: Real-time webhook callbacks for posting and media events: delivery status, errors and the full post lifecycle across all 9 platforms. Last modified: 2026-09-14 PostPulse sends webhook events to notify your application about important changes in media imports and posting operations. Configure webhook endpoints at https://post-pulse.com/app/portal/webhooks to receive real-time notifications. ### Overview Webhooks are HTTP POST requests sent to your configured endpoints when specific events occur. Each webhook contains a JSON payload with event details and metadata. **Event Structure:** All webhook events follow a common structure with id, type, occurredAt, and data fields. #### Common Event Structure ``` { "id": "unique-event-id", "type": "event.type.name", "occurredAt": "2024-01-15T10:30:00", "data": { // Event-specific payload } } ``` ### Media Import Events Events related to media file import and processing operations. #### media.import.queued Triggered when a media import task is created and queued for processing. ##### Data Fields | Field | Type | Description | | --- | --- | --- | | `taskId` | string | Unique identifier for the import task | | `state` | string | Current state: QUEUED, DOWNLOADING, VALIDATING, UPLOADING, READY, FAILED_TEMPORARY, FAILED_PERMANENT | | `sourceUrl` | string | URL of the media file being imported | ##### Example Payload ``` { "id": "evt_123456789", "type": "media.import.queued", "occurredAt": "2024-01-15T10:30:00", "data": { "taskId": "12345", "state": "QUEUED", "sourceUrl": "https://example.com/video.mp4" } } ``` #### media.import.progress Triggered during media import processing to report progress updates. ##### Data Fields | Field | Type | Description | | --- | --- | --- | | `taskId` | string | Unique identifier for the import task | | `state` | string | Current state: DOWNLOADING, VALIDATING, UPLOADING | | `bytesDownloaded` | number | Number of bytes downloaded so far | | `totalBytes` | number | Total file size in bytes (-1 if unknown) | | `detectedMime` | string | Detected MIME type of the file | ##### Example Payload ``` { "id": "evt_123456790", "type": "media.import.progress", "occurredAt": "2024-01-15T10:30:15", "data": { "taskId": "12345", "state": "DOWNLOADING", "bytesDownloaded": 1048576, "totalBytes": 5242880, "detectedMime": "video/mp4" } } ``` #### media.import.ready Triggered when media import completes successfully. ##### Data Fields | Field | Type | Description | | --- | --- | --- | | `taskId` | string | Unique identifier for the import task | | `state` | string | Final state of the task ("READY") | | `s3Key` | string | S3 key where the imported file is stored | | `detectedMime` | string | Detected MIME type of the file | | `bytesDownloaded` | number | Total bytes downloaded | ##### Example Payload ``` { "id": "evt_123456791", "type": "media.import.ready", "occurredAt": "2024-01-15T10:31:00", "data": { "taskId": "12345", "state": "READY", "s3Key": "media/user123/video_12345.mp4", "detectedMime": "video/mp4", "bytesDownloaded": 5242880 } } ``` #### media.import.failed.temporary Triggered when media import fails temporarily and will be retried. ##### Data Fields | Field | Type | Description | | --- | --- | --- | | `taskId` | string | Unique identifier for the import task | | `state` | string | Current state ("FAILED_TEMPORARY") | | `attempts` | number | Number of retry attempts made | | `errorCode` | string | Error code identifying the failure type | | `errorMessage` | string | Human-readable error description | ##### Example Payload ``` { "id": "evt_123456792", "type": "media.import.failed.temporary", "occurredAt": "2024-01-15T10:30:45", "data": { "taskId": "12345", "state": "FAILED_TEMPORARY", "attempts": 2, "errorCode": "TIMEOUT", "errorMessage": "Connection timeout while downloading media" } } ``` #### media.import.failed.permanent Triggered when media import fails permanently and will not be retried. ##### Data Fields | Field | Type | Description | | --- | --- | --- | | `taskId` | string | Unique identifier for the import task | | `state` | string | Final state ("FAILED_PERMANENT") | | `attempts` | number | Total number of attempts made | | `errorCode` | string | Error code identifying the failure type | | `errorMessage` | string | Human-readable error description | ##### Example Payload ``` { "id": "evt_123456793", "type": "media.import.failed.permanent", "occurredAt": "2024-01-15T10:35:00", "data": { "taskId": "12345", "state": "FAILED_PERMANENT", "attempts": 5, "errorCode": "UNSUPPORTED_MIME", "errorMessage": "File format not supported" } } ``` ### Posting Events Events related to social media posting operations and their lifecycle. #### Post Events ##### post.completed Triggered when an individual post to a social media platform completes successfully. - **scheduleId:** - **publicationId:** - **postId:** - **status:** COMPLETED - **platform:** - **accountId:** - **platformPostIdentifier:** ##### post.failed Triggered when an individual post to a social media platform fails. - **scheduleId:** - **publicationId:** - **postId:** - **status:** FAILED - **platform:** - **accountId:** - **errorMessage:** ##### Post Event Example ``` { "id": "evt_post_123", "type": "post.completed", "occurredAt": "2024-01-15T14:30:00", "data": { "scheduleId": "schedule_456", "publicationId": "pub_789", "postId": "post_101112", "status": "COMPLETED", "platform": "TWITTER", "accountId": "acc_twitter_123", "platformPostIdentifier": "1234567890123456789", "errorMessage": null } } ``` #### Publication Events ##### publication.scheduled Triggered when a platform publication is created with a scheduled time. Emitted once per platform at scheduling, before anything is published. - **scheduleId:** - **publicationId:** - **status:** SCHEDULED - **platform:** - **accountId:** ##### publication.draft Triggered when a platform publication is saved as a draft. - **scheduleId:** - **publicationId:** - **status:** DRAFT - **platform:** - **accountId:** ##### publication.awaiting_media Triggered when a platform publication is created while its media is still being imported from a URL; it becomes scheduled once the import finishes. - **scheduleId:** - **publicationId:** - **status:** AWAITING_MEDIA - **platform:** - **accountId:** ##### publication.completed Triggered when all posts in a platform publication complete successfully. ##### publication.failed Triggered when all posts in a platform publication fail. ##### publication.partially_completed Triggered when some posts in a platform publication succeed while others fail. #### Schedule Events ##### schedule.completed Triggered when all publications in a posting schedule complete successfully. ##### schedule.failed Triggered when all publications in a posting schedule fail. ##### schedule.partially_completed Triggered when some publications in a posting schedule succeed while others fail. ##### Schedule Event Example ``` { "id": "evt_schedule_126", "type": "schedule.completed", "occurredAt": "2024-01-15T15:00:00", "data": { "scheduleId": "schedule_456", "status": "COMPLETED" } } ``` ### Media Import Error Codes When media import events fail, they include specific error codes to help you understand and handle different failure scenarios. #### Permanent Failure Codes These errors indicate permanent failures that will not be retried: | Error Code | Description | Resolution | | --- | --- | --- | | `UNSUPPORTED_MIME` | File extension is not supported or file is not image/video | Use supported image or video formats only | | `FILE_TOO_LARGE` | File exceeds the size limit for its type | Reduce file size or use a smaller file | | `SECURITY` | Security validation failed | Ensure the file and source URL are safe | | `SOURCE_ERROR` | HTTP 4xx error from source host or too many redirects | Check source URL accessibility and redirect chains | #### Temporary Failure Codes These errors indicate temporary failures that will be automatically retried: | Error Code | Description | Resolution | | --- | --- | --- | | `TIMEOUT` | Socket timeout during download | Wait for automatic retry or check network connectivity | | `UNEXPECTED` | Unexpected error during processing | Wait for automatic retry or contact support if persistent | **Retry Behavior:** Temporary failures are automatically retried with exponential backoff. The system will attempt up to 5 retries before marking the task as permanently failed. ### Webhook Configuration Configure webhook endpoints at [PostPulse Developer Portal](https://post-pulse.com/app/portal/webhooks) to receive these events. You can filter which event types you want to receive for each endpoint. **Security:** All webhook requests include authentication headers to verify the request origin. Always validate webhook signatures before processing events in your application. **Retry Policy:** Failed webhook deliveries are automatically retried with exponential backoff. Ensure your endpoint returns appropriate HTTP status codes (2xx for success, 4xx for permanent failures, 5xx for temporary failures). #### Webhook Headers ``` Content-Type: application/json User-Agent: PostPulse-Webhooks/1.0 X-PostPulse-Event: event.type.name X-PostPulse-Signature: sha256=signature_hash ``` #### Event Types Summary | Category | Event Types | Count | | --- | --- | --- | | Media Import | queued, progress, ready, failed.temporary, failed.permanent | 5 | | Post Events | completed, failed | 2 | | Publication Events | completed, failed, partially_completed | 3 | | Schedule Events | completed, failed, partially_completed | 3 | | **Total** | **All webhook event types** | **13** | --- ## Media & Text Validation Source: https://post-pulse.com/media-validation Title: Media Validation — PostPulse Social Media API Description: Per-platform media rules — size, duration, aspect ratio and formats — validated automatically before publishing so posts never fail at the platform. Last modified: 2026-09-07 Understanding platform-specific validation requirements for media files and text content when using PostPulse API. #### Important Notice PostPulse Web enforces rich, platform-specific validations automatically. However, **API clients must currently validate content themselves**. Server-side validations for API clients are planned for future releases. When using the PostPulse API directly or through n8n integration, you are responsible for ensuring your content meets each platform's requirements. This page provides a comprehensive reference of all validation rules you need to implement. ### Platform Validation Requirements The following table shows validation requirements across all supported platforms: | Validation Rule | PostPulse Web | PostPulse API (Current) | | --- | --- | --- | | **Twitter/X** | | | | Standard users can post up to 280 characters per tweet | UI warning | You must validate | | Supported image formats are JPG, PNG, GIF, and WEBP | Enforced | Enforced | | Image size should be less than or equal 5MB | Enforced | Enforced | | Animated GIF size should be less than or equal 15MB | Enforced | Enforced | | Video size should be less than or equal 512MB | Enforced | Enforced | | Maximum 4 media attachments | Enforced | Enforced | | One post is either up to 4 images, 1 animated GIF, or 1 video | Enforced | Enforced | | Video duration must be between 0.5 sec and 140 sec | Enforced | You must validate | | Media aspect ratio between 1:3 and 3:1 | Enforced | You must validate | | **Threads** | | | | Users can post up to 500 characters | Enforced | Enforced | | Topic tag should be less than 100 characters | Enforced | Enforced | | When no topic tag is specified and content contains a word with # - the first word with # will be used as topic tag (except cases with numbers, like #1) | UI warning | You must validate | | Image size should be less than or equal 8MB | Enforced | Enforced | | Media aspect ratio between 0.01:1 and 10:1 | Enforced | You must validate | | Video duration must be less than 5 min | Enforced | You must validate | | Supported video format is MP4 | Enforced | Enforced | | **YouTube** | | | | Title should be less than 100 characters | Enforced | Enforced | | Description should be less than 5000 characters | Enforced | Enforced | | **TikTok** | | | | Title should be less than 2200 characters for video post | Enforced | Enforced | | Title should be less than 90 characters for image post | Enforced | Enforced | | Description should be less than 4000 characters for image post | Enforced | Enforced | | Image size should be less than or equal 20MB | Enforced | Enforced | | Image picture size must not exceed 1080p (shorter side at most 1080px) | To Do | Enforced | | Supported image formats are JPG, PNG, and WEBP | Enforced | Enforced | | Supported video formats are MP4, MOV, and WebM | Enforced | Enforced | | Video duration as per individual limits (typically 1 hour) | Enforced | You must validate | | One post is either 1 video or up to 10 images | Enforced | Enforced | | Video should have between 360 and 4096 pixels for both height and width | To Do | You must validate | | Video frame rate must be between 23 and 60 fps | To Do | Enforced | | **LinkedIn** | | | | User can post up to 3000 characters | Enforced | Enforced | | One post can contain either 1 video or up to 9 images (or no media at all) | Enforced | Enforced | | Supported video format is MP4 | Enforced | Enforced | | Video size should be less than or equal 500MB | Enforced | Enforced | | Video duration must be between 3 sec and 30 min | Enforced | You must validate | | **Facebook** | | | | User can post up to 63206 characters | Enforced | Enforced | | Supported image formats are JPG and PNG | Enforced | Enforced | | Image size should be less than or equal 10MB | Enforced | Enforced | | A feed post can contain either up to 20 images (in a carousel) or up to 1 video, or no media at all | Enforced | Enforced | | Feed post media aspect ratio between 1.91:1 and 4:5 | Enforced | You must validate | | Supported video formats are MP4 and MOV | Enforced | Enforced | | Video size should be less than or equal 4GB | Enforced | Enforced | | Feed and Story post video duration must be between 3 sec and 15 min | Enforced | You must validate | | Reels video duration must be between 3 sec and 90 sec | Enforced | You must validate | | Reels and Story post media aspect ratio between 0.01:1 and 10:1 | Enforced | You must validate | | Reels and Story recommended aspect ratio is 9:16 | UI Warning | You must validate | | Video should have no more than 1920 horizontal pixels | Enforced | You must validate | | The video should have a bitrate of 25 Mbps or less | To Do | You must validate | | **Instagram** | | | | User can post up to 2200 characters | Enforced | Enforced | | Supported image formats are JPG and PNG | Enforced | Enforced | | Image size should be less than or equal 8MB | Enforced | Enforced | | Feed post can contain up to 10 media (carousel) | Enforced | Enforced | | Feed post media aspect ratio between 1.91:1 and 4:5 | Enforced | You must validate | | Supported video formats are MP4 and MOV | Enforced | Enforced | | Video size should be less than or equal 300MB | Enforced | Enforced | | Feed and Story post video duration must be between 3 sec and 15 min | Enforced | You must validate | | Reels video duration must be between 3 sec and 15 min | Enforced | You must validate | | Reels and Story post media aspect ratio between 0.01:1 and 10:1 | Enforced | You must validate | | Reels and Story recommended aspect ratio is 9:16 | UI Warning | You must validate | | Video should have no more than 1920 horizontal pixels | Enforced | You must validate | | The video should have a bitrate of 25 Mbps or less | To Do | You must validate | | **Bluesky** | | | | Users can post up to 300 characters | Enforced | Enforced | | Post may contain up to 4 images | Enforced | Enforced | | **Telegram** | | | | Users can post up to 4096 characters | Enforced | Enforced | | Standard user can post up to 1024 characters if post contains media as well | Enforced | Enforced | | One post may contain up to 10 media | Enforced | Enforced | | Supported image formats are JPG, PNG, and WEBP | Enforced | Enforced | | Supported video format is MP4 | Enforced | Enforced | ### Implementation Guidelines #### 📝 Text Validation - Always check character limits before posting - Consider platform-specific features (hashtags, mentions) - Account for emoji characters which may count differently - Validate special fields like titles and topic tags #### 🖼️ Image Validation - Check file format compatibility with target platforms - Validate file size limits for each platform - Verify aspect ratio requirements - Ensure image dimensions meet platform standards #### 🎥 Video Validation - Verify video format support (MP4, MOV, WebM) - Check duration limits for each platform - Validate file size restrictions - Ensure resolution meets platform requirements #### 📊 Multi-Media Posts - Respect maximum media count per post - Understand platform-specific media mixing rules - Consider carousel vs. single media requirements - Account for thumbnail requirements where applicable ### Best Practices #### 🔍 Pre-Upload Validation Always validate content before uploading to PostPulse. This saves API calls and prevents failed posts. #### 📋 Platform-Specific Checks Implement validation logic that checks requirements for each target platform in your publication list. #### ⚠️ Error Handling Provide clear error messages when validation fails, indicating which platform requirements weren't met. #### 🔄 Future-Proofing Stay updated with platform changes and monitor PostPulse release notes for validation updates. #### 🚀 Coming Soon We're working on implementing server-side media validations for API clients. This will provide the same robust validation experience as our web application. Follow our [release notes](https://post-pulse.com/releases) for updates. --- ## Model Context Protocol (MCP) Server Source: https://post-pulse.com/mcp-server Title: MCP Server for Social Media — Let AI Agents Post | PostPulse Description: Give Claude, Cursor, and any LLM agent the power to publish to 9 social platforms via the PostPulse MCP server — accounts, media upload and scheduling as tools. Last modified: 2026-09-16 Empower your AI agents with direct access to social media publishing via PostPulse. ### Overview The Model Context Protocol (MCP) allows AI assistants like Claude Desktop, Cursor, and other MCP-compatible clients to interact with external tools and data. By connecting the PostPulse MCP Server, your AI agent can list accounts, upload media, and schedule posts — all directly from your chat interface. #### 🤖 AI-Native Works with Claude Desktop, Cursor, and any MCP-compatible AI client #### 🔐 Secure OAuth2 Full MCP OAuth2 auto-discovery — no API keys needed, just authorize once #### 📱 Multi-Platform Publish to all 9 supported platforms from a single AI conversation #### 🧰 4 Powerful Tools List accounts, get chats, upload media, and schedule posts ![PostPulse MCP Server in the MCP Inspector showing available tools](https://post-pulse.com/static/media/inspector.B5bdSUfx.png) **Open Source:** The PostPulse MCP Server is open source. View the code on [GitHub](https://github.com/PostPulse/mcp-server-postpulse). ### Setup Connect the PostPulse MCP Server to your AI assistant. #### Remote MCP Server (Recommended) **Easiest option!** Just point your MCP-compatible client to our hosted server. OAuth2 auto-discovery handles all authentication automatically. 2 ##### Connect in your AI client Add the remote MCP server URL to your client: ``` https://mcp.post-pulse.com ``` Your client will auto-discover the OAuth endpoints and walk you through authorization. #### Claude Desktop For Claude Desktop, add this to your `claude_desktop_config.json`: ``` { "mcpServers": { "postpulse": { "command": "npx", "args": [ "-y", "mcp-remote", "https://mcp.post-pulse.com" ] } } } ``` ### Available Tools The PostPulse MCP Server exposes 4 tools that your AI agent can call. #### `list_accounts` List all connected social media accounts (Instagram, Facebook, Telegram, etc.) with their IDs and platforms. ##### Parameters: *None — returns all connected accounts.* ##### Returns: Array of account objects with `id`, `platform`, `username`, and `name`. #### `list_chats` List chat threads for a connected social media account. Required for Facebook Pages and Telegram Channels. ##### Parameters: | Name | Type | Description | | --- | --- | --- | | `accountId` | number | The account ID from `list_accounts` | | `platform` | string | Platform name (e.g. INSTAGRAM, FACEBOOK, TELEGRAM) | ##### Returns: Array of available chats (Telegram channels / Facebook pages) with IDs and titles. ![MCP list_accounts and list_chats tools in action](https://post-pulse.com/static/media/list-tools.Cn6YwBPw.png) #### `upload_media` Upload media from a URL or binary data for use in scheduled posts. Returns the media path/key. ##### Parameters: | Name | Type | Description | | --- | --- | --- | | `mediaUrl` | string (optional) | Public URL of the media file to upload | | `mediaData` | string (optional) | Base64-encoded media data | | `mediaType` | string (optional) | MIME type (required if `mediaData` is provided) | | `mediaName` | string (optional) | Name of the media file | ##### Returns: The media path/key to use in `schedule_post`'s `mediaPaths` parameter. #### `schedule_post` Schedule a social media post to one of your connected accounts. Supports Instagram, Facebook, YouTube, TikTok, Threads, LinkedIn, Telegram, X (Twitter), and Bluesky. ##### Parameters: | Name | Type | Description | | --- | --- | --- | | `accountId` | number | The account ID from `list_accounts` | | `platform` | string | Platform name (INSTAGRAM, FACEBOOK, TELEGRAM, etc.) | | `content` | string (optional) | Post content text | | `mediaPaths` | string[] (optional) | Media paths from `upload_media` | | `scheduledTime` | string | ISO-8601 timestamp (e.g., `2025-10-27T10:00:00Z`) | | `publicationType` | string (optional) | FEED, REEL, or STORY (Instagram/Facebook) | | `title` | string (optional) | Video title (YouTube/TikTok) | | `facebookPageId` | string (optional) | Facebook Page ID from `list_chats` | | `telegramChannelId` | string (optional) | Telegram Channel ID from `list_chats` | | `topicTag` | string (optional) | Topic tag for Threads | ##### Returns: Confirmation message with the scheduled post ID. ### Example Workflow Here's a typical AI-driven workflow: ask your agent to create an image, upload it via PostPulse, and schedule a post — all in one conversation. 1 AI generates an image ![AI agent generating content for a social media post](https://post-pulse.com/static/media/create-image-request.D_Qr8da1.png) 2 Upload media via PostPulse MCP ![AI agent calling PostPulse MCP to upload media](https://post-pulse.com/static/media/call-pp-request.COwFDEFF.png) 3 Schedule the post ![AI agent scheduling a post via PostPulse MCP](https://post-pulse.com/static/media/schedule-post.39CuOr3X.png) --- ## n8n Integration Guide Source: https://post-pulse.com/n8n-integration Title: Post to Social Media with n8n — Official PostPulse Node Description: Publish to Instagram, TikTok, YouTube, LinkedIn and more from n8n with the official PostPulse community node. Drag-and-drop multi-platform posting, no code. Last modified: 2026-09-16 Learn how to use the official PostPulse n8n node for automated social media publishing workflows. ### Overview The PostPulse n8n node provides a visual, no-code way to integrate social media publishing into your automation workflows. Perfect for content creators, marketers, and agencies who want to automate their posting process. #### 🎯 Visual Workflows Build publishing workflows using n8n's intuitive drag-and-drop interface #### 🔄 Automation Trigger posts based on schedules, webhooks, or other n8n nodes #### 📱 Multi-Platform Publish to all 8 supported platforms from a single workflow #### 🔧 No Coding Set up complex publishing logic without writing any code ### Installation Install the PostPulse node in your n8n instance. #### Official n8n Node **Great News!** PostPulse is officially verified and available in the official list of n8n nodes. 1 ##### Search for PostPulse In your n8n workflow editor, click the **+** button to add a new node and search for "postpulse" 2 ##### Add PostPulse Node Select the official PostPulse node from the list and add it to your workflow 3 ##### Alternative: NPM Installation For self-hosted instances, you can also install via npm: ``` npm install @postpulse/n8n-nodes-postpulse ``` ### Credentials Setup Configure your PostPulse credentials in n8n to authenticate with the API. **Prerequisites:** You need to create an OAuth application in the [PostPulse app](https://post-pulse.com/app/portal/apps). No need to contact support — you can manage everything yourself! #### Step 1: Create OAuth Application 1 ##### Open the Apps page Go to [PostPulse Developer Portal](https://post-pulse.com/app/portal/apps) and sign in using the email associated with your PostPulse account 2 ##### Create New Application Click **Create Application** and provide a name (e.g., "My n8n Integration") 3 ##### Get OAuth Credentials After creating your application, you'll receive: - **Client ID:** Your unique application identifier - **Client Secret:** Your application's secret key (keep it safe!) #### Step 2: Configure n8n Credentials 1 ##### Add New Credential In n8n, go to **Credentials** and click **Add Credential** 2 ##### Select PostPulse Search for and select "PostPulse OAuth2 API" from the credentials list 3 ##### Enter OAuth Credentials Fill in the credentials from your OAuth app at [PostPulse Developer Portal](https://post-pulse.com/app/portal/apps): - **Client ID:** Copy from your OAuth app - **Client Secret:** Copy from your OAuth app - **OAuth Redirect URL:** Copy this from n8n and add it to your application's callback URLs in [PostPulse Developer Portal](https://post-pulse.com/app/portal/apps) 4 ##### Connect Your Account Click the **"Connect my account"** button in n8n. This will: - Open the PostPulse authorization page - Use the same email address you used for your PostPulse account - Authorize n8n to access your PostPulse account - Automatically handle token refresh (OAuth2) ### Available Operations The PostPulse n8n node provides several operations for managing your social media publishing workflow. #### Accounts: Get Many Retrieve all connected social media accounts from your PostPulse account. ##### Use Case: Get account IDs needed for publishing posts ##### Returns: Array of account objects with IDs, platforms, and usernames #### Accounts: Get Connected Chats For Telegram and Facebook accounts, retrieve available channels/pages where you can publish. ##### Parameters: - **Account ID:** From Accounts - Get Many - **Platform:** From Accounts - Get Many ##### Returns: Array of available Telegram channels / Facebook pages with IDs and titles #### Media: Upload Upload media files to PostPulse before publishing. Two upload methods available: ##### From File (Binary Upload): - **Input:** Binary file data from previous node - **Returns:** `{ path }` - Use this directly in attachment paths ##### From Public URL (Import): - **Input:** Public URL of media file - **Returns:** `{ id, state }` - Use the `id` with "Get Upload Status" - **Note:** Monitor import progress until state is "READY", then use the `s3Key` value in attachment paths #### Media: Get Upload Status Monitor the progress of URL-based media imports. ##### Parameters: - **Import ID:** The `id` returned from "From Public URL" upload ##### Returns: Complete import status including `state`, `s3Key`, `bytesDownloaded`, `totalBytes`, and error details if failed ##### States: QUEUED → DOWNLOADING → VALIDATING → UPLOADING → READY (or FAILED) #### Posts: Schedule (Light) ⭐ Recommended Simplified interface for scheduling a single post to one account. ##### Key Features: - **Platform-specific fields:** UI automatically shows relevant fields based on selected platform - **Auto platform settings:** No need to manually construct JSON - **Smart dropdowns:** Facebook Pages and Telegram Channels loaded automatically - **Simple media paths:** Enter comma-separated paths from Media Upload ##### Perfect For: Simple workflows, testing, and single-account posting #### Posts: Schedule Advanced Full control for complex, multi-account posting scenarios. ##### Parameters: - **Scheduled Time:** When to publish (ISO 8601 format) - **Is Draft:** Whether to save as draft (recommended: false) - **Publications:** Array of publication configurations with manual platform settings ##### Use Cases: Multi-account posting, complex platform settings, Telegram multi-channel posts ##### Returns: Post schedule object with status and IDs ### Video Tutorials Watch our comprehensive video tutorial series on how to use PostPulse in n8n workflows. **📺 YouTube Playlist:** Complete step-by-step tutorials covering everything from initial setup to advanced workflows. #### PostPulse n8n Tutorial Series [Watch Full Playlist on YouTube →](https://youtube.com/playlist?list=PLqI_mBBCtme94H6TwBbqaNZbiJQ6JJFVQ&si=ayexrPSsvmy_Qkyi) ##### Topics Covered: - ✅ **Initial Handshake:** OAuth & n8n Account Connection - ✅ **Text-Only Scheduling:** Simple post workflows - ✅ **TikTok Pipeline:** Handling File Binaries - ✅ **Scalable Uploads:** Posting via Public URLs - ✅ **Facebook Pages:** Chat-based Post Operations - ✅ **Webhooks:** Real-time Status Updates ### Workflow Examples Real n8n workflow examples showing how to use PostPulse nodes to fetch accounts, get Telegram channels, upload media, and schedule posts. #### Complete Publishing Workflow This workflow demonstrates the complete process: fetching accounts, getting Telegram channel details, uploading an image, and scheduling a post. ![Complete n8n workflow showing PostPulse nodes for account fetching, media upload, and post scheduling](https://post-pulse.com/static/media/workflow.qAhib5g9.png) #### Get Connected Chats Step This screenshot shows how to use fields from the "Get Accounts" operation to fetch available Telegram channels in the "Get Connected Chats" step. ![n8n Get Connected Chats node configuration showing how to use account ID from previous step](https://post-pulse.com/static/media/get-connected-chats.sMTGXeLS.png) #### Merge Node Configuration The merge node shows how to combine and rename fields from different steps to prepare data for the final post scheduling. ![n8n Merge node configuration showing field combination and renaming](https://post-pulse.com/static/media/merge.DNEX5hFg.png) #### Schedule Post Configuration This shows how fields from previous workflow steps are used in the final "Schedule Post" operation to publish content to social media platforms. ![n8n Schedule Post node configuration showing how to use fields from previous workflow steps](https://post-pulse.com/static/media/schedule-post.BffPRWQ6.png) ### Troubleshooting Common issues and solutions when using the PostPulse n8n node. #### ❌ Authentication Failed ##### Problem: Getting authentication errors when using PostPulse operations ##### Solutions: - Verify your OAuth client ID and secret are correct - Ensure your PostPulse account email matches the credentials - Check that your OAuth credentials are active - Contact support if credentials were recently issued #### 📁 Media Upload Issues ##### Problem: Media upload operation failing or returning errors ##### Solutions: - Check file size limits for your target platforms - Verify file format is supported by target platforms - Ensure binary data is properly formatted in n8n - Try uploading smaller files first to test #### 🚫 Post Scheduling Errors ##### Problem: Posts failing to schedule or publish ##### Solutions: - Verify account IDs are correct from Accounts Get Many - Check platform settings match the target platform - Ensure required fields are provided for each platform - Validate media paths from upload operation #### 🔧 Node Not Available ##### Problem: PostPulse node doesn't appear in n8n node list ##### Solutions: - Ensure community nodes are enabled in n8n settings - Verify the node was installed correctly - Restart your n8n instance after installation - Check n8n logs for installation errors #### Need More Help? If you're still experiencing issues, don't hesitate to reach out: [Email Support](mailto:support@post-pulse.com) [Join Discord](https://discord.gg/yrMdD4R5) [API Documentation](https://post-pulse.com/api-docs) --- ## Make Integration Guide Source: https://post-pulse.com/make-integration Title: Post to Social Media with Make.com — Official PostPulse App Description: Connect PostPulse to Make.com and publish to 9 social platforms from any scenario with the official app — no per-platform setup, no code. Last modified: 2026-09-16 Learn how to use the official PostPulse Make app for automated social media publishing scenarios. ### Overview The PostPulse Make app provides a visual, no-code way to integrate social media publishing into your automation scenarios. Perfect for content creators, marketers, and agencies who want to automate their posting process. #### 🎯 Visual Scenarios Build publishing scenarios using Make's intuitive drag-and-drop interface #### 🔄 Automation Trigger posts based on schedules, webhooks, or other Make modules #### 📱 Multi-Platform Publish to all 9 supported platforms from a single scenario #### 🔧 No Coding Set up complex publishing logic without writing any code ### Availability **Under Review:** Our Make app is currently under review by the Make team. In the meantime, you can access it via a direct invitation link. #### 🔗 Get Access Now Use the invitation link below to install the PostPulse app in your Make account: [Accept Invitation on Make →](https://www.make.com/en/hq/app-invitation/928d01e376989304eecdd04b68fcb994) ### Prerequisites 1 ##### Create PostPulse Account Sign up at [post-pulse.com/login](https://post-pulse.com/login) 2 ##### Connect Social Accounts Link your social media accounts at [post-pulse.com/app/accounts](https://post-pulse.com/app/accounts) 3 ##### Create OAuth Application Go to [PostPulse Developer Portal](https://post-pulse.com/app/portal/apps) to create an OAuth app and obtain your Client ID and Client Secret. Set the default callback URL for Make: `https://www.make.com/oauth/cb/postpulse` 4 ##### Telegram Only Add the PostPulse bot to your Telegram channels. ### Authentication Configure your PostPulse connection in Make to authenticate with the API. 1 ##### Add any PostPulse module Drag any PostPulse module into your Make scenario. 2 ##### Click "Add connection" Provide: - **Client ID:** From your Developer Portal application - **Client Secret:** From your Developer Portal application - **API Key:** Same as Client ID 3 ##### Authorize the app Authorize the app in the popup. Make will store and refresh tokens automatically. ![Make connection setup showing Client ID, Client Secret, and API Key fields](https://post-pulse.com/static/media/connection.Br82hTOQ.png) ### Modules The PostPulse Make app provides several modules for managing your social media publishing workflow. #### Search Connected Accounts Returns all connected social media accounts from your PostPulse account. Use this to get account IDs needed for publishing posts. #### Search Chats Should be used for Facebook and Telegram accounts. Returns connected Telegram channels or Facebook pages user can publish to. ![Make Search Connected Accounts and Search Chats modules](https://post-pulse.com/static/media/search-nodes.CuKR32CF.png) #### Upload a File Uploads a media file (binary data) to PostPulse and returns a path. That path should be used in the "Create a Post" module in the "Attachment Paths" input field. ![Make Upload a File module with binary data input](https://post-pulse.com/static/media/upload-file-binary.BG2_NfXN.png) #### Create a File Import Accepts a public URL to a media file and schedules an import job. Returns an import job ID (to be used in "Get a File Import") and state. #### Get a File Import Returns an import job status by ID. When the file is **READY**, there will be an `s3Key` field in response — use it in the "Create a Post" module in the "Attachment Paths" input field. ![Make Create a File Import and Get a File Import modules](https://post-pulse.com/static/media/file-import.a_Blcwnv.png) #### Create a Post Simplified single-account scheduling with dynamic fields. The module automatically shows relevant fields based on the selected platform. ![Make Create a Post module with platform-specific fields](https://post-pulse.com/static/media/create-post.46mcArRM.png) --- ## White-Label Integration Source: https://post-pulse.com/white-label Title: White-Label API Integration Guide — Connect (M2M OAuth) | PostPulse Description: Developer guide for the PostPulse white-label Connect integration: machine-to-machine OAuth, provisioning users, generating branded Connect URLs, and publishing to 9 platforms via one REST API. Last modified: 2026-09-16 Embed PostPulse social media publishing inside your own product. Your users never see the PostPulse brand — only your own UX, your own login, and your own pricing. By use case [White-label social media API](https://post-pulse.com/white-label-social-media-api) [For agencies](https://post-pulse.com/social-media-api-for-agencies) [For SaaS products](https://post-pulse.com/social-media-api-for-saas) ### Overview The PostPulse white-label (Connect) integration lets you offer multi-platform social publishing to your users without building any of the OAuth, scheduling, or platform publishing infrastructure yourself. You authenticate as a partner using a single machine-to-machine credential, and you act on behalf of your end-users by passing a lightweight identity header on every request. #### 🏷️ Your Brand Your users never see the PostPulse name — emails are suppressed, billing is yours, and the only PostPulse-hosted UI is the OAuth bridge. #### 🔐 One Credential Auth0 client credentials grant. One `clientId` / `clientSecret` covers all of your users. #### 🆔 Identity Mapping Provision a PostPulse user once with your own `externalUserId`, then impersonate it on every call. #### 📱 9 Platforms Instagram, TikTok, YouTube, Facebook, X, LinkedIn, Threads, Bluesky, Telegram — same API surface as the rest of PostPulse. **No subscription, no seat limits, no email noise.** White-label users are isolated from PostPulse's regular subscription and notification flows. You handle pricing and communication with your end-users; PostPulse handles publishing. ### How It Works Three actors are involved: **your backend** (holds the M2M credential), **your end-user** (clicks "Connect Instagram" inside your product), and **PostPulse** (handles the OAuth dance with the social platform and stores the tokens). 1 Your backend gets an M2M access token from Auth0 Once at startup (and refreshed on expiry), exchange your `clientId` /`clientSecret` for an access token at `https://auth.post-pulse.com/oauth/token`. 2 Provision the PostPulse user for your end-user Call `POST /connect/users` with your stable `externalUserId`. PostPulse returns a `uuid`. Cache it — you'll send it on every subsequent call as `X-Connect-User-Id`. 3 Generate a one-time Connect URL Call `POST /connect/authorize-url` with the target platform and a`redirectUri` (a URL or app deep-link you own). PostPulse returns a short-lived signed URL on `app.post-pulse.com/oauth/connect`. 4 Open the URL in a browser / WebView PostPulse handles the platform OAuth (PKCE, state, scopes, callback). When the user finishes, PostPulse stores the tokens against your end-user and redirects the browser to the `redirectUri` you supplied. 5 Use the rest of the PostPulse API as that user From your backend, call `/accounts`, `/media/upload/import`,`/posts`, etc. with `Authorization: Bearer `and `X-Connect-User-Id: `. Everything works exactly like the standard API — just with partner auth. ### Prerequisites 1 ##### Get partner credentials White-label access is provisioned manually. Reach out at[support@post-pulse.com](mailto:support@post-pulse.com) with a short description of your product. We will issue an Auth0 `clientId` and`clientSecret` scoped for the PostPulse API audience. 2 ##### Pick your redirect URIs Decide where the OAuth bridge should hand the user back when a connection completes — a URL on your site (e.g. `https://yourapp.com/connected`),`http://localhost:/...` while developing, or a custom scheme for mobile (e.g. `myapp://callback`). You don't need to pre-register them with PostPulse. 3 ##### Store credentials server-side The `clientSecret` must never reach a browser or mobile binary that ships to end-users. Hold it in your backend and proxy the calls. **Why no redirect-URI allowlist?** The `redirectUri` you pass to `/connect/authorize-url` is sealed inside a short-lived, HMAC-signed`whitelabel_state` JWT produced by your M2M-authenticated backend — it can't be tampered with mid-flow. The hand-off back to your app happens only *after* PostPulse has exchanged the OAuth `code` for tokens and stored them server-side; no `code`, `state`, or`access_token` is ever appended to that final redirect. The dangerous redirect — the one that actually carries the OAuth `code` from the social platform — is locked down by PostPulse and pre-registered with each platform's developer console. ### Authentication (M2M) All white-label endpoints accept a standard Auth0 *client credentials* bearer token. Issue one token, cache it until it expires, and reuse it across all of your users. #### Request a token ``` POST https://auth.post-pulse.com/oauth/token Content-Type: application/json { "client_id": "YOUR_CLIENT_ID", "client_secret": "YOUR_CLIENT_SECRET", "grant_type": "client_credentials", "audience": "https://api.post-pulse.com" } ``` The response contains an `access_token` and `expires_in` (seconds). Cache the token until shortly before expiry, then refresh. **Security:** Treat the `clientSecret` like a database password. Rotate it via PostPulse support if it leaks. Do not embed it in mobile apps or SPAs. ### Provision a User The first time one of your end-users does anything social-related, provision them. The call is idempotent on `(apiClientId, externalUserId)` — safe to call repeatedly. #### Endpoint `POST https://api.post-pulse.com/v1/connect/users` ``` POST /v1/connect/users Authorization: Bearer Content-Type: application/json { "externalUserId": "user_42", "name": "Jane Doe", "email": "jane@example.com" } ``` #### Response ``` { "uuid": "0fe1b3a2-8b40-4d4c-9bb9-2f0d9dca57ad", "name": "Jane Doe", "email": "jane@example.com" } ``` Persist the returned `uuid` alongside your own user record. From this point forward, send it on every API call as either: - `X-Connect-User-Id: ` — using the PostPulse UUID, or - `X-Connect-External-User-Id: ` — using your own ID directly. Both headers are equivalent; pick whichever fits your data model. **Email is optional but recommended.** White-label users are excluded from PostPulse marketing, posting-success, and posting-failure emails — you own the user relationship. Email is only stored for your reference. ### Connect a Social Account Connecting a social account is the only step that involves a user-visible browser redirect. PostPulse hosts a thin OAuth bridge at `app.post-pulse.com/oauth/connect`that handles the platform-specific OAuth flow on your behalf. #### Step 1: Generate the Connect URL ``` POST /v1/connect/authorize-url Authorization: Bearer x-api-key: YOUR_CLIENT_ID X-Connect-User-Id: Content-Type: application/json { "platform": "INSTAGRAM", "redirectUri": "https://yourapp.com/connected" } ``` Supported `platform` values: `INSTAGRAM`, `FACEBOOK`,`YOUTUBE`, `TIKTOK`, `X_TWITTER`, `LINKEDIN`,`THREADS`. The response body is a single string — a short-lived signed URL such as`https://app.post-pulse.com/oauth/connect?whitelabel_state=eyJhbGc...`. #### Step 2: Open the URL in a browser Open the returned URL in the user's browser (web), an in-app browser, or a system browser tab (mobile). PostPulse will: - Verify the signed state and PKCE parameters. - Redirect the user to the social platform's authorization screen. - Receive the platform callback and exchange it for tokens. - Store the tokens against your end-user. - Redirect the browser to the `redirectUri` you supplied. When you receive the redirect at `redirectUri`, the connection is complete — no extra exchange is required from your side. Refresh your UI / call `/accounts`to reflect the new connection. **Mobile deep-links:** Use a custom URL scheme like `myapp://callback`so the browser hands control back to your native app after the redirect. Make sure the scheme is registered in your iOS `Info.plist` and Android intent filters so the OS routes the hand-off to your app. ### Publishing & Media Once an account is connected, the rest of the PostPulse API is identical to the standard product — just keep sending the partner auth headers. #### List a user's connected accounts ``` GET /v1/accounts Authorization: Bearer x-api-key: YOUR_CLIENT_ID X-Connect-User-Id: ``` #### Asynchronous media import (recommended for large files) For videos and large images, use the asynchronous import endpoint and poll until`status: "READY"`: ``` POST /v1/media/upload/import { "url": "https://cdn.example.com/big-video.mp4", "filenameHint": "promo.mp4" } GET /v1/media/upload/import/{id} # poll: QUEUED -> DOWNLOADING -> READY ``` #### Schedule a post ``` POST /v1/posts Authorization: Bearer x-api-key: YOUR_CLIENT_ID X-Connect-User-Id: Content-Type: application/json { "platform": "INSTAGRAM", "accountId": 12345, "content": "Hello from your app", "mediaPaths": [""], "scheduledTime": "2026-05-10T15:00:00Z", "publicationType": "REEL" } ``` For the full schema of `/posts`, including platform-specific fields, see the [API Documentation](https://post-pulse.com/api-docs). Behaviour is identical to the non-white-label flow. ### Reference: Required Headers Every white-label call takes the same three headers. Memorise these and you know the integration. | Header | Required | Description | | --- | --- | --- | | `Authorization` | Yes | `Bearer ` from the Auth0 client credentials grant. | | `x-api-key` | For `/connect/authorize-url` | Your partner `clientId`. Used to bind the signed Connect state to your account. | | `X-Connect-User-Id` | One of these two | The PostPulse `uuid` returned by `/connect/users`. | | `X-Connect-External-User-Id` | One of these two | The same `externalUserId` you used to provision the user. | Calls to `/connect/users` only need `Authorization` — you don't have a user UUID yet at that point. ### Demo App We maintain an open-source Flutter demo — **VibeStudio Mobile Demo** — that shows the full end-to-end integration: M2M auth, user provisioning, connecting accounts via deep-link, async media import, and scheduling posts. The demo is reference code, not a production starter. It's the fastest way to see every white-label call in context and to estimate the scope of work for your own integration. [View Demo on GitHub →](https://github.com/PostPulse/postpulse-white-label-app-demo) What the demo covers: - Client-credentials token caching with expiry tracking. - Transparent `getOrCreateUser` using `externalUserId`. - OAuth bridge launch with a custom URL scheme (`vibestudio://callback`). - Asynchronous media import with progress polling (`QUEUED` → `DOWNLOADING` → `READY`). - Platform-specific publish settings (Instagram Reels, TikTok privacy level, etc.). ### Get Access White-label access is provisioned per partner. Email[support@post-pulse.com](mailto:support@post-pulse.com) with: - A short description of your product and how social publishing fits in. - Estimated user volume and target launch date. - The redirect URIs (web and / or mobile) you'll be using. We'll issue your Auth0 client credentials and walk you through a sandbox integration. --- ## The white-label *social media API* Source: https://post-pulse.com/white-label-social-media-api Title: White-Label Social Media API — Publish to 9 Platforms Under Your Brand Description: A white-label social media API: let your users connect their own accounts and publish to 9 platforms from one REST API, with no PostPulse UI in your product. No platform audits, tokens handled for you. $200/mo + $1 per active account. Last modified: 2026-09-16 White-label · 9 platforms · your brand Offer social publishing to Instagram, TikTok, YouTube, LinkedIn, X, Threads, Bluesky, Facebook and Telegram inside your own product. There is no PostPulse UI anywhere in your app — provisioning, scheduling and publishing all run through the API, under your brand. **One REST API, no platform audits, and OAuth tokens we maintain forever.** [Talk to the founder →](https://cal.com/alex-pohorelov/30min) [Try the API](https://post-pulse.com/app) No Meta / TikTok / Google app review on your side Idle connected accounts are free No PostPulse UI — all API, under your brand ![Partner Portal dashboard: social publishing across 9 platforms, managed for your users through one API under your brand](https://post-pulse.com/static/media/portal-dashboard.CNcKpT5K.png) The real cost of "just add posting" ### Adding social publishing looks small until you scope it Nine platforms, each with its own OAuth quirks, its own app-review gate, its own media rules, and its own breaking changes. Owning that is a standing engineering team — not a sprint. A white-label social media API lets you ship the feature without ever becoming a social-platform integrator. Branded as you ### See it branded as you — 60-sec demo Watch a reseller app run the full Connect flow end to end: a user connects their own social account from a step inside the app, then publishes — with no PostPulse UI in the product, just the API underneath. The only PostPulse touchpoint is the platform's own permission screen, exactly like every social API. Build in-house · the actual cost ### What you sign up for if you build it in-house Every item below is real, recurring work the native platform APIs hand you — multiplied across 9 networks and every user you onboard. 01 #### 9 separate platform integrations Instagram, TikTok, YouTube, LinkedIn, X, Threads, Bluesky, Facebook and Telegram each ship a different API, auth model, media pipeline and set of edge cases. There is no "social media" API — there are nine. One REST API. Nine platforms behind a single, consistent request shape. 02 #### App audits & review, per platform Meta App Review, TikTok Content Posting access, the YouTube/Google audit — publishing on behalf of other users is gated behind reviews that take weeks to months and get rejected for reasons that are rarely clear. PostPulse owns the verified platform apps. You skip every audit and go live in days. 03 #### OAuth & token lifecycle, forever PKCE, state, scope drift, refresh, rotation, revocation, re-consent prompts — per platform, per user. The first integration is a sprint; keeping all of them alive is a permanent on-call burden. OAuth, refresh and rotation are handled server-side. Integrate once; we keep it working. 04 #### Scheduling, retries & webhooks A publish queue, a scheduler, idempotent retries, and status you can surface back to users. Without callbacks you end up polling every platform to find out whether a post actually landed. Built-in scheduling plus 14 webhook events fire the moment a post lands or fails. 05 #### A connect step that fits your product A clunky, off-brand account-connection step hurts activation. Building a polished connect bridge that lives inside your own UI — and keeps every other surface yours — is its own non-trivial project. The connect entry point is branded as you; there is no PostPulse dashboard or UI in your product. Only the platform's own permission screen names the app — exactly like every social API. 06 #### Ongoing API churn Platforms deprecate endpoints, change scopes, and tighten policy on their schedule, not yours. Every change is unplanned maintenance that competes with your actual roadmap. Tracking and absorbing API changes is our job. Your integration stays stable through them. How PostPulse Connect works ### Your brand on top, our infrastructure underneath PostPulse Connect is the white-label tier of our social media API. You authenticate once as a partner with a single machine-to-machine credential, then act on behalf of each of your users with a lightweight identity header. There is no PostPulse UI in your product — the only PostPulse touchpoint is the standard account-connection step, where the platform's own permission screen names the app requesting access, just like every social API. #### Users connect their own accounts Each of your users authorises their own Instagram, TikTok, YouTube and the rest from a connect step inside your product. Tokens are stored against that user server-side. No credentials ever touch your code. #### No PostPulse UI in your product There is no PostPulse logo or dashboard anywhere in your app — provisioning, scheduling and publishing all happen through the API, under your brand. White-label users are isolated from PostPulse subscriptions, emails and notifications. The one PostPulse touchpoint is the standard connection step, where the platform's own permission screen names the app and the OAuth redirect passes briefly through post-pulse.com. #### One API surface to learn Provision a user, generate a Connect URL, then call /posts, /media and /accounts exactly like the standard API — just with partner auth headers. Same endpoints, same docs. ![Partner Portal: your users' connected social accounts across all 9 platforms, managed through the API](https://post-pulse.com/static/media/portal-accounts.DzAUQgD6.png) Your users' connected accounts, managed through the Connect API — no PostPulse UI in your product. Four calls to live ### Connect a user and publish on their behalf One machine-to-machine token covers all your users. Provision a user, generate a branded Connect URL, then publish to any of the 9 platforms with the same request. ``` # 1. One machine-to-machine token covers ALL of your users curl -X POST https://auth.post-pulse.com/oauth/token \ -H "Content-Type: application/json" \ -d '{ "client_id": "YOUR_CLIENT_ID", "client_secret": "YOUR_CLIENT_SECRET", "grant_type": "client_credentials", "audience": "https://api.post-pulse.com" }' # 2. Provision the end-user once. Idempotent on (client, externalUserId) — # safe to re-send. Persist the returned uuid. (No user-id header yet: the # user doesn't exist until this call returns.) curl -X POST https://api.post-pulse.com/v1/connect/users \ -H "Authorization: Bearer " \ -H "x-api-key: YOUR_CLIENT_ID" \ -H "Content-Type: application/json" \ -d '{ "externalUserId": "your_user_42", "name": "Jane Doe", "email": "jane@example.com" }' # → { "uuid": "..." } # 3. Generate a Connect URL for that user — branded as you. # They authorise their own Instagram/TikTok/… on the standard connect step. curl -X POST https://api.post-pulse.com/v1/connect/authorize-url \ -H "Authorization: Bearer " \ -H "x-api-key: YOUR_CLIENT_ID" \ -H "X-Connect-External-User-Id: your_user_42" \ -H "Content-Type: application/json" \ -d '{ "platform": "INSTAGRAM", "redirectUri": "https://yourapp.com/connected" }' # 4. Publish on that user's behalf — same API, 9 platforms, one request. curl -X POST https://api.post-pulse.com/v1/posts \ -H "Authorization: Bearer " \ -H "x-api-key: YOUR_CLIENT_ID" \ -H "X-Connect-External-User-Id: your_user_42" \ -H "Content-Type: application/json" \ -d '{ "scheduledTime": "2026-06-10T15:00:00Z", "publications": [{ "socialMediaAccountId": 123, "platformSettings": { "type": "INSTAGRAM", "publicationType": "REEL" }, "posts": [{ "content": "Shipped from your product 🚀", "attachmentPaths": ["uuid/reel.mp4"] }] }] }' ``` DIY vs PostPulse ### The same capability, two timelines Both assume a capable team. Only one spends its time on undifferentiated platform plumbing. DIY · build it in-house 1. Register a developer app on all 9 platforms and configure OAuth redirects 2. Pass Meta App Review, TikTok and YouTube audits — weeks to months each 3. Implement OAuth + token refresh and rotation, per platform, per user 4. Build a connect step that lives inside your own UI, not a vendor dashboard 5. Build scheduling, retries, status webhooks and failure alerting 6. Keep all 9 integrations alive through platform API changes — forever PostPulse Connect 1. **Day 0** · Get partner credentials and a sandbox 2. **Day 1** · Provision a user and generate a branded Connect URL 3. **Day 1** · Your user authorises their account — no audit on your side 4. **Day 2** · POST /v1/posts publishes on their behalf to any of 9 platforms 5. **Day 2+** · Build your product, not platform plumbing Security & multi-tenancy ### Isolated per user, secrets that never ship to the client White-label is multi-tenant by design: one partner credential, but every one of your users is a separate, isolated identity with their own tokens. #### Per-user token isolation Each user's OAuth tokens are stored against their own PostPulse identity and only ever used for calls carrying that user's id header. One user can never act on another's connected accounts. #### Secrets stay server-side Your client secret authenticates your backend only — it is never embedded in a browser or mobile binary. The signed Connect state is HMAC-sealed, so a redirect URI can't be tampered with mid-flow. #### GDPR & data processing PostPulse acts as a processor for the social tokens and post content you send. White-label users are excluded from PostPulse marketing and notifications, so there is no shadow relationship with your users. #### Tenant isolation by default A user id header scopes every read and write. Provisioning is idempotent on (your client id, your external user id), so re-syncing a user can never collide with another partner's tenant. ![Partner Portal: each of your users is an isolated tenant with their own connected accounts and tokens](https://post-pulse.com/static/media/portal-users.CoxnZWga.png) Every one of your users is a separate, isolated tenant — provisioned and managed through the API, never a PostPulse login. Publishing to 9 platforms, in production today · [see live stats →](https://post-pulse.com/stats) Build vs. buy ### What nine integrations actually cost to own The honest comparison is not "an API call vs. a few weeks." It is a standing platform-integration capability vs. a flat monthly fee. #### Engineer-months to first post Nine OAuth flows, three to four platform audits (weeks to months each), media pipelines and a scheduler add up to multiple engineer-months before a single user can publish — and reviews can reject and reset the clock. #### Maintenance never reaches zero Once shipped, platform deprecations, scope changes and token-policy updates are permanent on-call load. The cost of social publishing is the maintenance, not the first integration. #### Buy: $200/mo, live in days PostPulse Connect is $200/month plus $1 per active account, and idle accounts are free. You skip every audit, integrate once, and redirect those engineer-months back to your actual product. ### What PostPulse handles vs. building it yourself The line between your product and undifferentiated social plumbing. | Capability | PostPulse white-label | Build in-house | | --- | --- | --- | | Going live with one new platform | ✓ A config flag — the verified app already exists | A fresh integration plus its own app review | | PostPulse UI in your product | ✓ None — provisioning & publishing are all API, under your brand | Build every connect/manage surface yourself | | Who owns platform API churn | ✓ We absorb deprecations and scope changes | Every change is unplanned work on your roadmap | | Platform audits / app review | ✓ Not required — we own the verified apps | ✗ Meta / TikTok / Google review, per platform | | OAuth, token refresh & rotation | ✓ Handled server-side, per user | Build and maintain per platform, forever | | Platforms covered | ✓ 9, one request shape | 9 separate APIs to integrate | | Post status & delivery | ✓ 14 webhook events across the post lifecycle | Build a queue and poll each platform yourself | ![Partner Portal: 14 webhook events delivering post status, retries and failures back to your product](https://post-pulse.com/static/media/portal-webhooks.DkWknMRD.png) Fourteen webhook events deliver post status, retries and failures straight to your product — reflect them in your own UI, no polling. Pricing ### White-label pricing built for products A flat platform fee plus a small per-active-account fee — so your cost tracks usage, not seats. Connected-but-idle accounts cost nothing. White-Label · one pricing model $200 / mo + $1 per active account [Talk to the founder](https://cal.com/alex-pohorelov/30min) #### How it works An **active account** is one that publishes at least one post that month. Connected-but-idle accounts are **not billed** — connect as many as you like and pay only for the ones that actually post. Your cost tracks usage, not seats or profiles. Worked example - 1,000 connected accounts connect freely - 300 active this month 300 × $1 = $300 - $200 + $300 **$500/mo** **Startup support.** Still pre-launch or in beta? We waive fees until you launch — discussed individually, so you can build the integration risk-free. Want the full integration spec first? [Read the white-label developer guide →](https://post-pulse.com/white-label) ### Frequently asked questions ### 9 platforms, 9 integrations you never build Your users connect any of these from one connect step in your product — and you maintain none of them. [Instagram](https://post-pulse.com/platforms/instagram) [TikTok](https://post-pulse.com/platforms/tiktok) [YouTube](https://post-pulse.com/platforms/youtube) [LinkedIn](https://post-pulse.com/platforms/linkedin) [X (Twitter)](https://post-pulse.com/platforms/twitter) [Threads](https://post-pulse.com/platforms/threads) [Bluesky](https://post-pulse.com/platforms/bluesky) [Facebook](https://post-pulse.com/platforms/facebook) [Telegram](https://post-pulse.com/platforms/telegram) --- ## A social media API *for agencies* Source: https://post-pulse.com/social-media-api-for-agencies Title: Social Media API for Agencies — Publish for Every Client From One API Description: A social media API built for agencies: manage and resell social publishing for many clients across 9 platforms from one integration. No PostPulse UI in your portal — all under your brand, no platform audits, pay only for accounts that post. Last modified: 2026-09-16 For agencies · many clients, one API Publish and schedule for every client across Instagram, TikTok, YouTube, LinkedIn, X, Threads, Bluesky, Facebook and Telegram from one integration. There is no PostPulse UI in your portal — provisioning, scheduling and publishing all run through the API, under your agency's brand. Resell publishing as your own product. **One REST API across all clients and platforms. No per-platform audits, no token juggling.** [Talk to the founder →](https://cal.com/alex-pohorelov/30min) [Try the API](https://post-pulse.com/app) One credential covers every client Only accounts that post that month are billable No PostPulse UI — all API, under your brand ![Partner Portal dashboard: social publishing across 9 platforms, managed for your users through one API under your brand](https://post-pulse.com/static/media/portal-dashboard.CNcKpT5K.png) The agency multiplier problem ### Every client multiplies the integration work A single client already means nine platform integrations. Twenty clients means the same OAuth, token and media plumbing repeated across dozens of accounts — plus reconnect fire-drills whenever a platform expires a token mid-campaign. Buying tooling per seat or per client erodes your margin; building it in-house ties up engineers you would rather bill out. Branded as you ### See it branded as you — 60-sec demo Watch a reseller app run the full Connect flow end to end: a user connects their own social account from a step inside the app, then publishes — with no PostPulse UI in the product, just the API underneath. The only PostPulse touchpoint is the platform's own permission screen, exactly like every social API. Build in-house · the actual cost ### What managing it yourself actually costs an agency These are the recurring, unbillable costs of owning social plumbing across a growing client roster. 01 #### 9 platforms × every client Each client brings the full matrix — Instagram, TikTok, YouTube, LinkedIn, X, Threads, Bluesky, Facebook, Telegram — and every one is a distinct API with its own rules. The work does not amortise; it repeats per account. One REST API covers all 9 platforms for every client you onboard. 02 #### App audits block new platforms Want to add TikTok or Reels publishing for a client this week? Native access means Meta App Review and TikTok approval first — weeks of waiting while the campaign window closes. PostPulse owns the verified apps, so every client is publish-ready on day one. 03 #### Token expiry = reconnect fire-drills Multiply OAuth refresh and re-consent across dozens of client accounts and a token expiry becomes a recurring "please reconnect your Instagram" scramble — usually discovered when a post silently fails. Tokens are refreshed and rotated server-side; 14 webhooks tell you the instant something needs attention. 04 #### Per-seat tools crush margin Most agency schedulers charge per seat or per connected profile, so your software cost scales linearly with your client base and eats directly into retainer margin. Usage-based pricing: you only pay for accounts that actually publish in a given month. 05 #### No clean way to resell or report Off-the-shelf tools put someone else's brand in front of your clients and lock reporting inside a dashboard you can't embed in your own client portal. White-label OAuth and a clean REST API let you resell publishing — and surface status — as your own product. 06 #### Platform changes hit mid-campaign A deprecated endpoint or a tightened scope can break posting across every client at once, turning an external platform change into your emergency. We absorb API churn so a platform change never becomes your client-facing outage. How PostPulse works for agencies ### One integration, every client, your brand Authenticate once with a single partner credential, then represent each client with their own identity header. Each client connects their own social accounts from a step inside your product — you publish, schedule and track on their behalf through the API, under your agency's brand, and the work never multiplies per platform. #### One credential, every client A single machine-to-machine credential authenticates your backend for all clients. You isolate each client with their own user id — no separate login or app per client. #### Resell under your agency brand There is no PostPulse UI in your client portal — provisioning, scheduling and publishing all run through the API, under your agency's brand. Clients connect their accounts from a step inside your product; only the platform's own permission screen names the app, as with any social API. Bill them on your terms. #### Pay for what posts A flat platform fee plus a small fee per active account — and an account is only billable in a month where it actually publishes. Dormant client accounts cost nothing. ![Partner Portal: your users' connected social accounts across all 9 platforms, managed through the API](https://post-pulse.com/static/media/portal-accounts.DzAUQgD6.png) Your users' connected accounts, managed through the Connect API — no PostPulse UI in your product. Four calls to live ### Onboard a client and publish on their behalf One partner credential covers every client. Provision a client, send a branded Connect URL, then publish and schedule across all 9 platforms with the same request — per client, no new integration. ``` # 1. One machine-to-machine token covers ALL of your users curl -X POST https://auth.post-pulse.com/oauth/token \ -H "Content-Type: application/json" \ -d '{ "client_id": "YOUR_CLIENT_ID", "client_secret": "YOUR_CLIENT_SECRET", "grant_type": "client_credentials", "audience": "https://api.post-pulse.com" }' # 2. Provision the end-user once. Idempotent on (client, externalUserId) — # safe to re-send. Persist the returned uuid. (No user-id header yet: the # user doesn't exist until this call returns.) curl -X POST https://api.post-pulse.com/v1/connect/users \ -H "Authorization: Bearer " \ -H "x-api-key: YOUR_CLIENT_ID" \ -H "Content-Type: application/json" \ -d '{ "externalUserId": "your_user_42", "name": "Jane Doe", "email": "jane@example.com" }' # → { "uuid": "..." } # 3. Generate a Connect URL for that user — branded as you. # They authorise their own Instagram/TikTok/… on the standard connect step. curl -X POST https://api.post-pulse.com/v1/connect/authorize-url \ -H "Authorization: Bearer " \ -H "x-api-key: YOUR_CLIENT_ID" \ -H "X-Connect-External-User-Id: your_user_42" \ -H "Content-Type: application/json" \ -d '{ "platform": "INSTAGRAM", "redirectUri": "https://yourapp.com/connected" }' # 4. Publish on that user's behalf — same API, 9 platforms, one request. curl -X POST https://api.post-pulse.com/v1/posts \ -H "Authorization: Bearer " \ -H "x-api-key: YOUR_CLIENT_ID" \ -H "X-Connect-External-User-Id: your_user_42" \ -H "Content-Type: application/json" \ -d '{ "scheduledTime": "2026-06-10T15:00:00Z", "publications": [{ "socialMediaAccountId": 123, "platformSettings": { "type": "INSTAGRAM", "publicationType": "REEL" }, "posts": [{ "content": "Shipped from your product 🚀", "attachmentPaths": ["uuid/reel.mp4"] }] }] }' ``` DIY vs PostPulse ### Per-client plumbing, or one integration Both serve the same roster. Only one re-does OAuth, tokens and reconnect drills for every client you sign. DIY · per-client plumbing 1. Register and audit a developer app on 9 platforms — before client one 2. Re-run OAuth, scopes and media handling for every new client account 3. Track and refresh tokens across dozens of accounts, per platform 4. Build scheduling, retries and status reporting for your portal 5. Field "please reconnect" scrambles whenever a token expires 6. Patch every client integration each time a platform changes its API PostPulse for agencies 1. **Day 0** · One partner credential for your whole agency 2. **Day 1** · Onboard a client and send a branded Connect URL 3. **Day 1** · The client authorises their accounts — no audit, no wait 4. **Day 2** · Publish and schedule for that client across 9 platforms 5. **Ongoing** · Add clients and platforms without new integration work Security & multi-tenancy ### Every client is an isolated tenant One partner credential represents your whole agency, but each client is a separate identity with their own tokens — so client data never crosses wires. #### Per-client token isolation Each client's OAuth tokens live against their own PostPulse identity and are only used on calls carrying that client's id header. One client can never publish to or read another client's accounts. #### Secrets stay in your backend Your client secret authenticates your agency's backend only and never reaches a browser or a client's device. The signed Connect state is HMAC-sealed, so redirect URIs can't be tampered with mid-flow. #### GDPR & data processing For the tokens and content you send on a client's behalf, PostPulse acts as a processor. Clients are excluded from PostPulse emails and marketing, so you remain the only brand they deal with. #### Tenant isolation by default A client id header scopes every read and write, and provisioning is idempotent on (your client id, your external id) — so re-syncing a client can never collide with another client's data. ![Partner Portal: each of your users is an isolated tenant with their own connected accounts and tokens](https://post-pulse.com/static/media/portal-users.CoxnZWga.png) Every one of your users is a separate, isolated tenant — provisioned and managed through the API, never a PostPulse login. Publishing to 9 platforms, in production today · [see live stats →](https://post-pulse.com/stats) Build vs. buy ### Billable hours, not platform plumbing For an agency the comparison is engineers you could bill out versus a flat fee that protects the retainer. #### Engineer-months you don't bill Nine OAuth flows, three to four platform audits (weeks to months each) and a scheduler are multiple engineer-months — and that capacity is unbillable overhead, not client work. #### Per-seat tools erode margin Off-the-shelf schedulers charge per seat or per connected profile, so your software cost climbs with every client and eats directly into retainer margin. #### Buy: $200/mo, margin intact PostPulse Connect is $200/month plus $1 per active account, idle accounts free. Your cost tracks publishing volume, not headcount, and your engineers stay on billable work. ### What PostPulse handles vs. building it per client Where your retainer margin leaks when you own the plumbing yourself. | Capability | PostPulse white-label | Build in-house | | --- | --- | --- | | Onboarding client number twenty | ✓ Same call as client one — one credential, a new id | Re-run OAuth and media handling for every account | | Software cost as you grow | ✓ Pay only for accounts that publish that month | Per-seat / per-profile fees scale with the roster | | A token expires mid-campaign | ✓ A webhook tells you the instant a reconnect is needed | A silent failure and a "please reconnect" scramble | | Platform audits / app review | ✓ Not required — we own the verified apps | ✗ Meta / TikTok / Google review, per platform | | OAuth, token refresh & rotation | ✓ Handled server-side, per user | Build and maintain per platform, forever | | Platforms covered | ✓ 9, one request shape | 9 separate APIs to integrate | | Post status & delivery | ✓ 14 webhook events across the post lifecycle | Build a queue and poll each platform yourself | ![Partner Portal: 14 webhook events delivering post status, retries and failures back to your product](https://post-pulse.com/static/media/portal-webhooks.DkWknMRD.png) Fourteen webhook events deliver post status, retries and failures straight to your product — reflect them in your own UI, no polling. Pricing ### Pricing that protects your margin A flat platform fee plus a small fee per active account — you pay for accounts that publish, not for every seat or dormant profile on your roster. White-Label · one pricing model $200 / mo + $1 per active account [Talk to the founder](https://cal.com/alex-pohorelov/30min) #### How it works An **active account** is one that publishes at least one post that month. Connected-but-idle accounts are **not billed** — connect as many as you like and pay only for the ones that actually post. Your cost tracks usage, not seats or profiles. Worked example - 1,000 connected accounts connect freely - 300 active this month 300 × $1 = $300 - $200 + $300 **$500/mo** **Startup support.** Still pre-launch or in beta? We waive fees until you launch — discussed individually, so you can build the integration risk-free. Want the full integration spec first? [Read the white-label developer guide →](https://post-pulse.com/white-label) ### Frequently asked questions ### 9 platforms across every client, none to maintain Each client connects any of these from one connect step in your product — and your agency maintains none of them. [Instagram](https://post-pulse.com/platforms/instagram) [TikTok](https://post-pulse.com/platforms/tiktok) [YouTube](https://post-pulse.com/platforms/youtube) [LinkedIn](https://post-pulse.com/platforms/linkedin) [X (Twitter)](https://post-pulse.com/platforms/twitter) [Threads](https://post-pulse.com/platforms/threads) [Bluesky](https://post-pulse.com/platforms/bluesky) [Facebook](https://post-pulse.com/platforms/facebook) [Telegram](https://post-pulse.com/platforms/telegram) --- ## Embed social media publishing *in your SaaS* Source: https://post-pulse.com/social-media-api-for-saas Title: Social Media API for SaaS — Embed Posting to 9 Platforms in Your App Description: Embed social publishing natively in your SaaS: your users post to 9 platforms without leaving your product, with no PostPulse UI in your app. One REST API, no platform audits, tokens handled for you, usage-based pricing that scales per user. Last modified: 2026-09-16 For SaaS · embed social publishing Embed social publishing in your SaaS so your users can post to Instagram, TikTok, YouTube, LinkedIn, X, Threads, Bluesky, Facebook and Telegram without leaving your product. There is no PostPulse UI in your app — provisioning, scheduling and publishing all run through the API, under your brand. **Ship the feature in days with one REST API — not a multi-month platform-integration project.** [Talk to the founder →](https://cal.com/alex-pohorelov/30min) [Try the API](https://post-pulse.com/app) No PostPulse UI — all API, in your product No Meta / TikTok / Google review on your side Idle connected accounts are free ![Partner Portal dashboard: social publishing across 9 platforms, managed for your users through one API under your brand](https://post-pulse.com/static/media/portal-dashboard.CNcKpT5K.png) Build vs. buy, for a feature you don't sell ### "Let users post from our app" is a multi-month project Social publishing is rarely your core product — but users keep asking for it, and competitors keep shipping it. Building it natively means owning nine platform integrations, multiple app-review processes, and an OAuth/token system for every user, indefinitely. That is a team's worth of work spent on a feature that isn't your differentiator. Branded as you ### See it branded as you — 60-sec demo Watch a reseller app run the full Connect flow end to end: a user connects their own social account from a step inside the app, then publishes — with no PostPulse UI in the product, just the API underneath. The only PostPulse touchpoint is the platform's own permission screen, exactly like every social API. Build in-house · the actual cost ### What it costs to build social publishing into your product Every line item is undifferentiated platform work — effort that does not move your core product forward. 01 #### 9 platform integrations to own Instagram, TikTok, YouTube, LinkedIn, X, Threads, Bluesky, Facebook and Telegram are nine separate APIs with nine auth models and nine media pipelines. "Social posting" is not one integration — it is nine, plus their interactions. One REST API covers all 9 platforms behind a single request shape. 02 #### App reviews you can't schedule around Publishing on behalf of your users requires Meta App Review, TikTok Content Posting access and a Google/YouTube audit — gates measured in weeks to months and outside your sprint planning entirely. PostPulse owns the verified apps, so your feature ships on your timeline, not a reviewer's. 03 #### Per-user OAuth & token management Every user who connects an account adds OAuth flows, token refresh, rotation and re-consent handling — per platform. This scales with your user base and never stops needing maintenance. OAuth and the full token lifecycle are handled server-side for every one of your users. 04 #### Scheduling, retries & status Users expect "schedule for later" and clear success/failure feedback. That means a durable queue, idempotent retries, and status surfaced into your UI — infrastructure you build and operate yourself. Scheduling is built in, and 14 webhook events let you reflect post status natively in your UI. 05 #### A connect step that fits your UX A clunky or off-brand "connect your account" step hurts activation. Building a polished connect step that lives inside your own UI — with no vendor dashboard anywhere else — is real product work on top of the API plumbing. The connect entry point is branded as you and lives in your app; there is no PostPulse UI in your product. Only the platform's own permission screen names the app, exactly like every social API. 06 #### Maintenance that competes with your roadmap Once shipped, you own it: every platform deprecation, scope change and policy update becomes unplanned work that pulls engineers off your actual product. We track and absorb API changes so your roadmap isn't hostage to platform churn. How PostPulse works inside your SaaS ### Add publishing as a feature, not a department PostPulse Connect lets your SaaS offer social publishing as a native feature. Authenticate once as a partner, then represent each of your users with their own identity header. There is no PostPulse UI in your app — your users connect their own accounts from a step inside your product, and you publish on their behalf through one REST API, the same one documented for every other PostPulse integration. #### Native to your product Users connect and publish without leaving your app — there is no PostPulse logo or dashboard anywhere in your product. The one PostPulse touchpoint is the standard account-connection step, where the platform's own permission screen names the app, just as it does for any social API. #### Scales per user automatically One partner credential plus a per-user identity header means onboarding the ten-thousandth user is the same call as the first. No per-user setup, no per-user app. #### Webhooks into your UI Fourteen webhook events cover the post lifecycle, so you can show users real publish status, retries and failures inside your own interface instead of polling platforms. ![Partner Portal: your users' connected social accounts across all 9 platforms, managed through the API](https://post-pulse.com/static/media/portal-accounts.DzAUQgD6.png) Your users' connected accounts, managed through the Connect API — no PostPulse UI in your product. Four calls to live ### Connect a user and publish from your app One machine-to-machine token covers every user in your product. Provision a user, drop a branded Connect step into onboarding, then publish to any of the 9 platforms with the same request. ``` # 1. One machine-to-machine token covers ALL of your users curl -X POST https://auth.post-pulse.com/oauth/token \ -H "Content-Type: application/json" \ -d '{ "client_id": "YOUR_CLIENT_ID", "client_secret": "YOUR_CLIENT_SECRET", "grant_type": "client_credentials", "audience": "https://api.post-pulse.com" }' # 2. Provision the end-user once. Idempotent on (client, externalUserId) — # safe to re-send. Persist the returned uuid. (No user-id header yet: the # user doesn't exist until this call returns.) curl -X POST https://api.post-pulse.com/v1/connect/users \ -H "Authorization: Bearer " \ -H "x-api-key: YOUR_CLIENT_ID" \ -H "Content-Type: application/json" \ -d '{ "externalUserId": "your_user_42", "name": "Jane Doe", "email": "jane@example.com" }' # → { "uuid": "..." } # 3. Generate a Connect URL for that user — branded as you. # They authorise their own Instagram/TikTok/… on the standard connect step. curl -X POST https://api.post-pulse.com/v1/connect/authorize-url \ -H "Authorization: Bearer " \ -H "x-api-key: YOUR_CLIENT_ID" \ -H "X-Connect-External-User-Id: your_user_42" \ -H "Content-Type: application/json" \ -d '{ "platform": "INSTAGRAM", "redirectUri": "https://yourapp.com/connected" }' # 4. Publish on that user's behalf — same API, 9 platforms, one request. curl -X POST https://api.post-pulse.com/v1/posts \ -H "Authorization: Bearer " \ -H "x-api-key: YOUR_CLIENT_ID" \ -H "X-Connect-External-User-Id: your_user_42" \ -H "Content-Type: application/json" \ -d '{ "scheduledTime": "2026-06-10T15:00:00Z", "publications": [{ "socialMediaAccountId": 123, "platformSettings": { "type": "INSTAGRAM", "publicationType": "REEL" }, "posts": [{ "content": "Shipped from your product 🚀", "attachmentPaths": ["uuid/reel.mp4"] }] }] }' ``` DIY vs PostPulse ### A multi-month project, or a feature you ship this week Both reach the same feature. Only one spends a team's quarter on integrations that aren't your differentiator. DIY · build it into your app 1. Register and audit developer apps across 9 platforms 2. Pass Meta, TikTok and Google reviews before you can ship 3. Build per-user OAuth, token refresh and rotation for every platform 4. Build a branded connect flow that fits your product's UX 5. Build scheduling, retries and status surfaced into your UI 6. Own platform-API maintenance indefinitely, off your roadmap PostPulse inside your SaaS 1. **Day 0** · Get partner credentials and a sandbox 2. **Day 1** · Drop a branded Connect step into your onboarding 3. **Day 1** · Your user authorises their accounts — no audit on your side 4. **Day 2** · POST /v1/posts publishes from your app to any of 9 platforms 5. **Day 2+** · Ship your actual roadmap, not platform plumbing Security & multi-tenancy ### Multi-tenant by design, secrets off the client Your SaaS stays multi-tenant: one partner credential, but every user is an isolated identity with their own tokens — nothing leaks across accounts. #### Per-user token isolation Each user's OAuth tokens are stored against their own PostPulse identity and used only on calls carrying that user's id header — so one tenant in your product can never act on another's connected accounts. #### Secrets stay server-side Your client secret authenticates your backend only and never ships in your web or mobile client. The signed Connect state is HMAC-sealed, so a redirect URI can't be tampered with mid-flow. #### GDPR & data processing PostPulse acts as a processor for the social tokens and post content your app sends. White-label users are excluded from PostPulse emails and notifications, so the experience stays entirely yours. #### Tenant isolation by default A user id header scopes every read and write, and provisioning is idempotent on (your client id, your external user id) — so syncing the same user twice never collides with another tenant. ![Partner Portal: each of your users is an isolated tenant with their own connected accounts and tokens](https://post-pulse.com/static/media/portal-users.CoxnZWga.png) Every one of your users is a separate, isolated tenant — provisioned and managed through the API, never a PostPulse login. Publishing to 9 platforms, in production today · [see live stats →](https://post-pulse.com/stats) Build vs. buy ### A team's quarter, or a line item For a feature that isn't your core product, the comparison is roadmap time spent on plumbing versus a flat monthly fee. #### Engineer-months off your roadmap Nine OAuth flows, three to four platform audits (weeks to months each), media pipelines and a scheduler are multiple engineer-months — spent on a feature that does not differentiate your product. #### Maintenance competes forever After launch, every platform deprecation and scope change is unplanned work that pulls engineers off your roadmap. The ongoing cost is the maintenance, not the first ship. #### Buy: $200/mo, ship in days PostPulse Connect is $200/month plus $1 per active account, idle accounts free. You add the feature in days and keep your engineers on what actually makes your SaaS different. ### What PostPulse handles vs. building it into your app Which of this is your product, and which is undifferentiated platform work. | Capability | PostPulse white-label | Build in-house | | --- | --- | --- | | Onboarding your 10,000th user | ✓ The same API call as your first — no per-user setup | Per-user OAuth and token state for every platform | | Time to ship the feature | ✓ Days — your feature ships on your sprint | A multi-month project gated on platform reviews | | Post status inside your UI | ✓ 14 webhook events you reflect natively | Build a queue and poll each platform yourself | | Platform audits / app review | ✓ Not required — we own the verified apps | ✗ Meta / TikTok / Google review, per platform | | OAuth, token refresh & rotation | ✓ Handled server-side, per user | Build and maintain per platform, forever | | Platforms covered | ✓ 9, one request shape | 9 separate APIs to integrate | | Post status & delivery | ✓ 14 webhook events across the post lifecycle | Build a queue and poll each platform yourself | ![Partner Portal: 14 webhook events delivering post status, retries and failures back to your product](https://post-pulse.com/static/media/portal-webhooks.DkWknMRD.png) Fourteen webhook events deliver post status, retries and failures straight to your product — reflect them in your own UI, no polling. Pricing ### Usage-based pricing that fits a product A flat platform fee plus a small fee per active account — your cost grows with publishing usage, not with every user who merely connects an account. White-Label · one pricing model $200 / mo + $1 per active account [Talk to the founder](https://cal.com/alex-pohorelov/30min) #### How it works An **active account** is one that publishes at least one post that month. Connected-but-idle accounts are **not billed** — connect as many as you like and pay only for the ones that actually post. Your cost tracks usage, not seats or profiles. Worked example - 1,000 connected accounts connect freely - 300 active this month 300 × $1 = $300 - $200 + $300 **$500/mo** **Startup support.** Still pre-launch or in beta? We waive fees until you launch — discussed individually, so you can build the integration risk-free. Want the full integration spec first? [Read the white-label developer guide →](https://post-pulse.com/white-label) ### Frequently asked questions ### 9 platforms in your product, none to maintain Your users connect any of these from one connect step inside your app — and you maintain none of them. [Instagram](https://post-pulse.com/platforms/instagram) [TikTok](https://post-pulse.com/platforms/tiktok) [YouTube](https://post-pulse.com/platforms/youtube) [LinkedIn](https://post-pulse.com/platforms/linkedin) [X (Twitter)](https://post-pulse.com/platforms/twitter) [Threads](https://post-pulse.com/platforms/threads) [Bluesky](https://post-pulse.com/platforms/bluesky) [Facebook](https://post-pulse.com/platforms/facebook) [Telegram](https://post-pulse.com/platforms/telegram) --- ## 9 Platforms. One API. No Audit Required. Source: https://post-pulse.com/platforms Title: Social Media API Platforms — PostPulse Description: PostPulse supports 9 social media platforms via a single REST API: Instagram, TikTok, YouTube, LinkedIn, Facebook, Twitter/X, Threads, Telegram, and Bluesky. No platform audit required. Last modified: 2026-09-16 PostPulse gives developers a single REST endpoint to publish, schedule, and automate content across all major social media platforms — without going through each platform's audit process. [Instagram Schedule Feed posts, Reels, and Stories to Instagram via API Feed Posts Reels Stories Carousels](https://post-pulse.com/platforms/instagram) [TikTok Publish videos and images to TikTok programmatically — no audit required Videos Image Carousels](https://post-pulse.com/platforms/tiktok) [YouTube Upload videos and Shorts to YouTube automatically via REST API Videos YouTube Shorts](https://post-pulse.com/platforms/youtube) [LinkedIn Post text, images, and videos to LinkedIn Pages and Profiles via API Text Posts Image Posts Video Posts Document Posts](https://post-pulse.com/platforms/linkedin) [Facebook Schedule Facebook posts, Reels, and Stories for Pages via API Feed Posts Reels Stories Carousels](https://post-pulse.com/platforms/facebook) [Twitter / X Post tweets and threads to X (Twitter) via REST API with full scheduling Tweets Threads Image Posts Video Posts](https://post-pulse.com/platforms/twitter) [Threads Publish text posts and media to Threads via the official API Text Posts Image Posts Video Posts](https://post-pulse.com/platforms/threads) [Telegram Post to Telegram channels and groups programmatically via API Text Posts Image Posts Video Posts Media Groups](https://post-pulse.com/platforms/telegram) [Bluesky Schedule and publish posts to Bluesky via the AT Protocol API Text Posts Image Posts](https://post-pulse.com/platforms/bluesky) --- ## The *Bluesky* publishing API for developers Source: https://post-pulse.com/platforms/bluesky Title: Bluesky API for Developers — PostPulse Description: Publish to Bluesky programmatically. No audit required. PostPulse's unified API lets you schedule posts, upload media, and manage Bluesky content with a single REST endpoint. Last modified: 2026-09-16 Bluesky API · Text Posts · Image Posts Schedule and publish posts to Bluesky via the AT Protocol API. **PostPulse owns the platform access, so you ship on day one — no audit, no token plumbing.** [Get started free →](https://post-pulse.com/app) [Read the API docs](https://post-pulse.com/api-docs) No platform audit on your side No tokens to babysit No credit card to test Native Bluesky API · the actual cost ### What you'd build and maintain yourself Every item below is real friction the native Bluesky API hands you. PostPulse handles all of them. 01 #### AT Protocol complexity AT Protocol (atproto) is complex — requires understanding DIDs, PLCs, and CARs PostPulse speaks atproto — post via one REST call. 02 #### Separate blob upload Image blobs must be uploaded separately via a "blob upload" endpoint before posting Pass a URL or file; blob upload handled for you. 03 #### JWT session rotation Session management requires handling access JWT + refresh JWT rotation manually PostPulse manages access + refresh tokens automatically. 04 #### No native scheduling No native scheduling — you need external queue infrastructure Schedule with one field — PostPulse owns the queue. 05 #### Manual rich-text facets Rich text facets (links, mentions, hashtags) must be manually annotated with byte offsets Links and mentions are annotated automatically. Minutes to your first post ### Schedule a Bluesky post in two API calls Import your media, then schedule the post with your Bluesky settings. PostPulse does the rest. ``` # Step 1: Import media from a public URL curl -X POST https://api.post-pulse.com/v1/media/upload/import \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "url": "https://your-cdn.com/media/video.mp4" }' # Response: { "path": "uuid/video.mp4" } # Step 2: Schedule a post using the publications array curl -X POST https://api.post-pulse.com/v1/posts \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "scheduledTime": "2026-06-01T10:00:00Z", "isDraft": false, "publications": [ { "socialMediaAccountId": 123, "platformSettings": { "type": "BLUE_SKY" }, "posts": [ { "content": "Check out our latest content! #developer #api", "attachmentPaths": ["uuid/video.mp4"] } ] } ] }' ``` What you ship on day one ### What you can build with the Bluesky API Every capability maps to a real field in the API. Click through for the exact request shape. [Bluesky Image Posting Post single images or photo collections to social media platforms via REST API.](https://post-pulse.com/platforms/bluesky/image-posting) [Bluesky Scheduling Schedule any post type — text, image, video, or carousel — to publish at a precise future timestamp.](https://post-pulse.com/platforms/bluesky/scheduling-api) [Bluesky Auto-Publish Trigger immediate publication to social media platforms from your backend or automation workflow.](https://post-pulse.com/platforms/bluesky/auto-publish) [Bluesky Media Upload Upload images and videos via direct binary upload, presigned URL, or remote URL import — then reference the media path in attachmentPaths.](https://post-pulse.com/platforms/bluesky/media-upload) [Bluesky Webhooks Receive real-time webhook events for post completion, failure, and media import status across all platforms.](https://post-pulse.com/platforms/bluesky/webhook-notifications) [Bluesky White-Label Let your users connect their own social accounts via a seamless OAuth flow that never exposes PostPulse branding.](https://post-pulse.com/platforms/bluesky/white-label) [Bluesky n8n Use the official PostPulse n8n node to build no-code automation workflows for social media publishing.](https://post-pulse.com/platforms/bluesky/n8n-integration) [Bluesky AI Agents Enable AI agents (Claude, GPT, Cursor) to publish directly to social media using the PostPulse MCP Server.](https://post-pulse.com/platforms/bluesky/ai-agents) DIY vs PostPulse ### The same Bluesky integration, two timelines Both columns assume you know your stack. Only one has you doing undifferentiated platform plumbing. DIY · native Bluesky API 1. Register a developer app and configure OAuth redirect URLs 2. Implement the OAuth flow plus token refresh and rotation 3. Build the media-upload and publish flow around Bluesky's quirks 4. Clear access requirements — review, quota, or partner approval where required 5. Build scheduling, retries, and failure alerting yourself 6. Keep up with API version changes — forever PostPulse 1. **Minute 0** · Sign up free 2. **Minute 3** · Connect a Bluesky account via OAuth 3. **Minute 6** · `POST /v1/posts` — first post live 4. **Minute 7** · A webhook calls your URL the second it lands 5. **Day 2+** · Build your product, not platform plumbing ### Bluesky-specific API settings Control Bluesky publishing options via the `platformSettings` object in your publication entry. | Field | Description | Accepted Values | | --- | --- | --- | | `type` | Publication type | `POST` | ### Bluesky media requirements PostPulse validates your media before publishing to Bluesky to prevent platform rejections. #### Image Formats - JPG - PNG - WEBP Max size: 1 MB per image #### Max Attachments 4 files per post ### PostPulse vs. the native Bluesky API What PostPulse handles vs. what you'd build yourself. | Capability | PostPulse | Native Bluesky API | | --- | --- | --- | | Platform audit / App Review | ✓ Not required | ✗ Required (weeks to months) | | Auth token management | ✓ Handled by PostPulse | Implement OAuth + token refresh | | Media upload workflow | ✓ Single endpoint | Multi-step async upload | | Post scheduling | ✓ Built-in scheduledTime | Build your own cron queue | | Failure notifications | ✓ 14 webhook events | Poll for status manually | | Multi-platform publishing | ✓ 9 platforms, same request | Separate API per platform | | White-label OAuth for your users | ✓ Included | Build your own OAuth bridge | | AI agent integration (MCP) | ✓ Claude, Cursor | ✗ Not available | ### Bluesky API — Frequently Asked Questions ### Publish to 9 platforms with the same API Add more platforms to your integration with a single configuration change. [Instagram](https://post-pulse.com/platforms/instagram) [TikTok](https://post-pulse.com/platforms/tiktok) [YouTube](https://post-pulse.com/platforms/youtube) [LinkedIn](https://post-pulse.com/platforms/linkedin) [Facebook](https://post-pulse.com/platforms/facebook) [Twitter / X](https://post-pulse.com/platforms/twitter) [Threads](https://post-pulse.com/platforms/threads) [Telegram](https://post-pulse.com/platforms/telegram) [Bluesky](https://post-pulse.com/platforms/bluesky) --- ## The *Facebook* publishing API for developers Source: https://post-pulse.com/platforms/facebook Title: Facebook API for Developers — PostPulse Description: Publish to Facebook programmatically. No audit required. PostPulse's unified API lets you schedule posts, upload media, and manage Facebook content with a single REST endpoint. Last modified: 2026-09-16 Facebook API · Feed Posts · Reels · Stories · Carousels Schedule Facebook posts, Reels, and Stories for Pages via API. **PostPulse owns the platform access, so you ship on day one — no audit, no token plumbing.** [Get started free →](https://post-pulse.com/app) [Read the API docs](https://post-pulse.com/api-docs) No platform audit on your side No tokens to babysit No credit card to test Native Facebook API · the actual cost ### What you'd build and maintain yourself Every item below is real friction the native Facebook API hands you. PostPulse handles all of them. 01 #### Meta App Review Meta App Review is required before you can publish to pages you do not own PostPulse is the audited app — no review on your side. 02 #### Business verification The "pages_manage_posts" permission requires a business verification and full app review Inherit PostPulse's granted permissions instantly. 03 #### Permission revocation risk Permissions may be revoked during periodic app reviews if compliance issues are found PostPulse maintains compliance so posting never stops. 04 #### Graph API version churn Graph API versions are deprecated on a regular cycle, requiring ongoing migration work One stable contract — we absorb the Graph churn. 05 #### Feed/Reels/Stories split Separate endpoints and permission sets for Feed, Reels, and Stories publishing Switch publicationType — one endpoint for all three. Minutes to your first post ### Schedule a Facebook post in two API calls Import your media, then schedule the post with your Facebook settings. PostPulse does the rest. ``` # Step 1: Import media from a public URL curl -X POST https://api.post-pulse.com/v1/media/upload/import \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "url": "https://your-cdn.com/media/video.mp4" }' # Response: { "path": "uuid/video.mp4" } # Step 2: Schedule a post using the publications array curl -X POST https://api.post-pulse.com/v1/posts \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "scheduledTime": "2026-06-01T10:00:00Z", "isDraft": false, "publications": [ { "socialMediaAccountId": 123, "platformSettings": { "type": "FACEBOOK", "publicationType": "FEED" }, "posts": [ { "content": "Check out our latest content! #developer #api", "attachmentPaths": ["uuid/video.mp4"] } ] } ] }' ``` What you ship on day one ### What you can build with the Facebook API Every capability maps to a real field in the API. Click through for the exact request shape. [Facebook Reels Publish short-form vertical videos as Reels to Instagram and Facebook with a single API call.](https://post-pulse.com/platforms/facebook/reels-api) [Facebook Stories Post ephemeral 24-hour Stories to Instagram and Facebook programmatically.](https://post-pulse.com/platforms/facebook/stories-api) [Facebook Video Scheduling Schedule video posts to publish at a specific future date and time across multiple platforms.](https://post-pulse.com/platforms/facebook/video-scheduling) [Facebook Image Posting Post single images or photo collections to social media platforms via REST API.](https://post-pulse.com/platforms/facebook/image-posting) [Facebook Carousel Publish multi-image carousel posts (up to 10 images) to Instagram, LinkedIn, Facebook, TikTok, and Threads.](https://post-pulse.com/platforms/facebook/carousel-api) [Facebook Scheduling Schedule any post type — text, image, video, or carousel — to publish at a precise future timestamp.](https://post-pulse.com/platforms/facebook/scheduling-api) [Facebook Auto-Publish Trigger immediate publication to social media platforms from your backend or automation workflow.](https://post-pulse.com/platforms/facebook/auto-publish) [Facebook Media Upload Upload images and videos via direct binary upload, presigned URL, or remote URL import — then reference the media path in attachmentPaths.](https://post-pulse.com/platforms/facebook/media-upload) DIY vs PostPulse ### The same Facebook integration, two timelines Both columns assume you know your stack. Only one has you doing undifferentiated platform plumbing. DIY · native Facebook API 1. Register a developer app and configure OAuth redirect URLs 2. Implement the OAuth flow plus token refresh and rotation 3. Build the media-upload and publish flow around Facebook's quirks 4. Clear access requirements — review, quota, or partner approval where required 5. Build scheduling, retries, and failure alerting yourself 6. Keep up with API version changes — forever PostPulse 1. **Minute 0** · Sign up free 2. **Minute 3** · Connect a Facebook account via OAuth 3. **Minute 6** · `POST /v1/posts` — first post live 4. **Minute 7** · A webhook calls your URL the second it lands 5. **Day 2+** · Build your product, not platform plumbing ### Facebook-specific API settings Control Facebook publishing options via the `platformSettings` object in your publication entry. | Field | Description | Accepted Values | | --- | --- | --- | | `publicationType` | Publication format | `FEED` `REELS` `STORY` | ### Facebook media requirements PostPulse validates your media before publishing to Facebook to prevent platform rejections. #### Image Formats - JPG - PNG Max size: 30 MB #### Video Formats - MP4 - MOV Max size: 4 GB #### Video Duration 15 min (Feed/Story); 90 sec (Reels) #### Aspect Ratio 1.91:1 to 4:5 (Feed); 9:16 recommended (Reels/Story) #### Max Attachments 20 files per post ### PostPulse vs. the native Facebook API What PostPulse handles vs. what you'd build yourself. | Capability | PostPulse | Native Facebook API | | --- | --- | --- | | Platform audit / App Review | ✓ Not required | ✗ Required (weeks to months) | | Auth token management | ✓ Handled by PostPulse | Implement OAuth + token refresh | | Media upload workflow | ✓ Single endpoint | Multi-step async upload | | Post scheduling | ✓ Built-in scheduledTime | Build your own cron queue | | Failure notifications | ✓ 14 webhook events | Poll for status manually | | Multi-platform publishing | ✓ 9 platforms, same request | Separate API per platform | | White-label OAuth for your users | ✓ Included | Build your own OAuth bridge | | AI agent integration (MCP) | ✓ Claude, Cursor | ✗ Not available | ### Facebook API — Frequently Asked Questions ### Publish to 9 platforms with the same API Add more platforms to your integration with a single configuration change. [Instagram](https://post-pulse.com/platforms/instagram) [TikTok](https://post-pulse.com/platforms/tiktok) [YouTube](https://post-pulse.com/platforms/youtube) [LinkedIn](https://post-pulse.com/platforms/linkedin) [Facebook](https://post-pulse.com/platforms/facebook) [Twitter / X](https://post-pulse.com/platforms/twitter) [Threads](https://post-pulse.com/platforms/threads) [Telegram](https://post-pulse.com/platforms/telegram) [Bluesky](https://post-pulse.com/platforms/bluesky) --- ## Ship Instagram publishing without the *Meta App Review*. Source: https://post-pulse.com/platforms/instagram Title: Instagram API for Developers — Reels, Feed, Stories, Carousels | PostPulse Description: Publish Reels, Feed posts, Carousels, and Stories to Instagram via a single REST API. PostPulse owns the Meta App Review — you ship on day one. 10 free publications on signup, no card. Last modified: 2026-09-16 Instagram API · Reels · Feed · Stories · Carousels One REST call posts Reels, Feed, Carousels, and Stories to Instagram. PostPulse owns the Meta audit, so you skip the months of paperwork and rejections. **10 free publications on signup. No card.** [Get 10 Free Publications →](https://post-pulse.com/app) [Read the docs](https://post-pulse.com/api-docs) No Meta audit on your side No tokens to babysit No credit card to test Welcome — pick your camp ### Two kinds of people land on this page. You spent months wrestling with Meta for Developers. Or you're about to. Either way, we've seen this movie. Pick the panel that fits. Native Instagram API · the actual cost ### The 6 things you'd build yourself Every line below is a real ticket the native Graph API hands to you on day one. PostPulse handles all of them. 01 #### Meta App Review `pages_manage_posts`, `instagram_content_publish`, business verification, screencasts, privacy URLs, data deletion endpoints. Reviews routinely take 4–8 weeks and rejection feedback is famously sparse. ✓ PostPulse is the audited app. You inherit the access. 02 #### Long-lived token rotation User tokens expire at 60 days. You implement the refresh flow, store the refresh state, handle revocation, replay failed posts after re-auth. Every connected user. ✓ Token lifecycle handled server-side by PostPulse. 03 #### The container API Reels, Feed, and Stories use container creation → status polling → publish. Containers can return ERROR or EXPIRED at any step. You write the retry/backoff. ✓ PostPulse polls and retries with exponential backoff and surface the final result via webhook. 04 #### Format chaos 8 MB images, 300 MB video, JPG/PNG only for images, MP4/MOV for video, captions ≤ 2,200 chars, carousel ≤ 10 media, feed aspect 1.91:1 → 4:5, Reels/Story 0.01:1 → 10:1. Miss one and Instagram throws the error after you've already promised the user the post is queued. ✓ PostPulse validates these the moment you call our schedule API — no surprises later. 05 #### Graph API version churn Meta deprecates Graph versions on a fixed cadence. Every couple of quarters you're migrating endpoints, scopes, and request shapes — even when nothing on your side changed. ✓ One PostPulse contract. We absorb the platform churn. 06 #### Scheduling and observability Instagram has no native "publish at" parameter. You build a queue, a cron, a retry ladder, alerting for failures, and a dashboard so you know what shipped. ✓ `scheduledTime` is a field. 14 webhook events cover the rest. Minutes to your first Reel ### One API call. That's it. Drop a public video URL into `attachmentPaths`. PostPulse downloads it, hands it to Instagram, and publishes it at the time you set. Prefer to upload bytes? Use a binary upload or a presigned URL — both work the same way. ``` curl -X POST https://api.post-pulse.com/v1/posts \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "scheduledTime": "2026-06-01T10:00:00Z", "isDraft": false, "publications": [{ "socialMediaAccountId": 123, "platformSettings": { "type": "INSTAGRAM", "publicationType": "REELS" }, "posts": [{ "content": "Shipped via API. No App Review. #buildinpublic", "attachmentPaths": ["https://your-cdn.com/reel.mp4"] }] }] }' ``` Posting a Feed, Story, or Carousel? Switch `publicationType` to `FEED` / `STORY`, or attach up to 10 URLs for a carousel. What you ship on day one ### Everything Instagram lets developers do — actually shipped. Each capability below maps to a real field in the API. Click through to the API reference for the exact request shape. [Reels Vertical short-form video. Set `publicationType: REELS`. Pass an optional `cover_url` to pin a specific cover frame; otherwise Instagram chooses its own.](https://post-pulse.com/platforms/instagram/reels-api) [Feed (single + carousel) One image, one video, or up to 10 mixed media in a carousel. Set `publicationType: FEED` and put the paths in `attachmentPaths` in the order you want them rendered.](https://post-pulse.com/platforms/instagram/carousel-api) [Stories 24-hour ephemeral image or video. Set `publicationType: STORY`. Schedule them weeks ahead — PostPulse fires at the timestamp you set.](https://post-pulse.com/platforms/instagram/stories-api) Insights API Pull likes, comments, shares, total interactions, profile visits, reach, and views. Metric set varies by post type — Reels and Stories return their platform-native metrics. Pre-flight validation Image > 8 MB? Caption > 2,200 chars? Carousel > 10 items? PostPulse rejects the request with a clear error before Instagram ever sees it. See the [Media Validation guide](https://post-pulse.com/media-validation). [14 webhook events Per-post, per-publication, and per-schedule outcomes — plus media-import lifecycle events — fired straight to your URL the moment they happen. See the [Webhooks reference](https://post-pulse.com/webhooks).](https://post-pulse.com/platforms/instagram/webhook-notifications) DIY vs PostPulse · in time ### What you ship over six weeks Side-by-side, both columns assume you know your stack. Only one column has you doing undifferentiated platform plumbing. DIY · Meta Graph API 1. **Day 1–3** · Register Meta developer account · configure app · wire OAuth redirect URLs 2. **Week 1** · Implement OAuth code exchange · long-lived token swap · 60-day refresh 3. **Week 2** · Build container API flow · poll for status · handle ERROR / EXPIRED 4. **Week 2–3** · Submit App Review · Business Verification · privacy / data-deletion URLs 5. **Week 4–6** · First rejection. Re-record screencast. Resubmit. Wait again. 6. **Week 6+** · Approved. Ship a queue, retry, scheduling, webhook receiver, alerts. PostPulse 1. **Minute 0** · Sign up 2. **Minute 2** · 10 free credits land in your account 3. **Minute 5** · Connect an Instagram account via OAuth 4. **Minute 8** · First Reel live · webhook calls your URL the second it lands 5. **Day 2+** · Build the actual product. Stop thinking about Instagram. ### Capability matrix · PostPulse vs. native Instagram Graph API What you'd build yourself vs. what's already shipped. | Capability | PostPulse | Native Instagram Graph API | | --- | --- | --- | | Meta App Review | ✓ Done by us | ✗ 4–8 weeks · resubmits common | | OAuth + 60-day token refresh | ✓ Handled server-side | Implement + monitor per user | | Reels / Feed / Stories | ✓ One endpoint, `publicationType` switch | Different flows + scopes per format | | Carousels (up to 10 media) | ✓ Built-in | Multi-step container API | | Pre-flight media validation | ✓ Size · format · aspect · caption · count | Errors only after you've taken the user's request | | Scheduling | ✓ `scheduledTime` field | Build your own queue + cron | | Real-time post status | ✓ 14 webhook events | Poll yourself | | Instagram Insights | ✓ Likes / comments / shares / reach / views | Available — your own implementation | | White-label / Connect for end users | ✓ Included | Build your own OAuth bridge | | Same API for 8 other platforms | ✓ TikTok · YouTube · LinkedIn · X · Threads · FB · Telegram · Bluesky | 9 separate integrations | ### Instagram API · FAQ --- ## The *LinkedIn* publishing API for developers Source: https://post-pulse.com/platforms/linkedin Title: LinkedIn API for Developers — PostPulse Description: Publish to LinkedIn programmatically. No audit required. PostPulse's unified API lets you schedule posts, upload media, and manage LinkedIn content with a single REST endpoint. Last modified: 2026-09-16 LinkedIn API · Text Posts · Image Posts · Video Posts · Document Posts Post text, images, and videos to LinkedIn Pages and Profiles via API. **PostPulse owns the platform access, so you ship on day one — no audit, no token plumbing.** [Get started free →](https://post-pulse.com/app) [Read the API docs](https://post-pulse.com/api-docs) No platform audit on your side No tokens to babysit No credit card to test Native LinkedIn API · the actual cost ### What you'd build and maintain yourself Every item below is real friction the native LinkedIn API hands you. PostPulse handles all of them. 01 #### Partner approval gate LinkedIn Marketing Developer Platform (MDP) requires a partner application approval PostPulse holds the partner access — you inherit it. 02 #### Restricted APIs Community Management API is restricted — most developers cannot access it without a formal partnership Post to Pages and profiles with no partnership needed. 03 #### 60-day token expiry Token refresh logic is complex: access tokens expire after 60 days requiring user re-auth PostPulse manages refresh and re-auth for every user. 04 #### Org vs member endpoints Organization vs. member posting uses completely different API endpoints and OAuth scopes One endpoint posts to both — scopes mapped for you. 05 #### Multi-step video upload Video upload requires a separate "upload registration" step before the actual upload Pass a URL or file; PostPulse runs the upload handshake. Minutes to your first post ### Schedule a LinkedIn post in two API calls Import your media, then schedule the post with your LinkedIn settings. PostPulse does the rest. ``` # Step 1: Import media from a public URL curl -X POST https://api.post-pulse.com/v1/media/upload/import \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "url": "https://your-cdn.com/media/video.mp4" }' # Response: { "path": "uuid/video.mp4" } # Step 2: Schedule a post using the publications array curl -X POST https://api.post-pulse.com/v1/posts \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "scheduledTime": "2026-06-01T10:00:00Z", "isDraft": false, "publications": [ { "socialMediaAccountId": 123, "platformSettings": { "type": "LINKEDIN", "visibility": "PUBLIC" }, "posts": [ { "content": "Check out our latest content! #developer #api", "attachmentPaths": ["uuid/video.mp4"] } ] } ] }' ``` What you ship on day one ### What you can build with the LinkedIn API Every capability maps to a real field in the API. Click through for the exact request shape. [LinkedIn Video Scheduling Schedule video posts to publish at a specific future date and time across multiple platforms.](https://post-pulse.com/platforms/linkedin/video-scheduling) [LinkedIn Image Posting Post single images or photo collections to social media platforms via REST API.](https://post-pulse.com/platforms/linkedin/image-posting) [LinkedIn Carousel Publish multi-image carousel posts (up to 10 images) to Instagram, LinkedIn, Facebook, TikTok, and Threads.](https://post-pulse.com/platforms/linkedin/carousel-api) [LinkedIn Scheduling Schedule any post type — text, image, video, or carousel — to publish at a precise future timestamp.](https://post-pulse.com/platforms/linkedin/scheduling-api) [LinkedIn Auto-Publish Trigger immediate publication to social media platforms from your backend or automation workflow.](https://post-pulse.com/platforms/linkedin/auto-publish) [LinkedIn Media Upload Upload images and videos via direct binary upload, presigned URL, or remote URL import — then reference the media path in attachmentPaths.](https://post-pulse.com/platforms/linkedin/media-upload) [LinkedIn Privacy Controls Set per-post privacy levels, audience visibility, and content controls programmatically.](https://post-pulse.com/platforms/linkedin/privacy-controls) [LinkedIn Webhooks Receive real-time webhook events for post completion, failure, and media import status across all platforms.](https://post-pulse.com/platforms/linkedin/webhook-notifications) DIY vs PostPulse ### The same LinkedIn integration, two timelines Both columns assume you know your stack. Only one has you doing undifferentiated platform plumbing. DIY · native LinkedIn API 1. Register a developer app and configure OAuth redirect URLs 2. Implement the OAuth flow plus token refresh and rotation 3. Build the media-upload and publish flow around LinkedIn's quirks 4. Clear access requirements — review, quota, or partner approval where required 5. Build scheduling, retries, and failure alerting yourself 6. Keep up with API version changes — forever PostPulse 1. **Minute 0** · Sign up free 2. **Minute 3** · Connect a LinkedIn account via OAuth 3. **Minute 6** · `POST /v1/posts` — first post live 4. **Minute 7** · A webhook calls your URL the second it lands 5. **Day 2+** · Build your product, not platform plumbing ### LinkedIn-specific API settings Control LinkedIn publishing options via the `platformSettings` object in your publication entry. | Field | Description | Accepted Values | | --- | --- | --- | | `visibility` | Post audience | `PUBLIC` `CONNECTIONS` `GROUP` | ### LinkedIn media requirements PostPulse validates your media before publishing to LinkedIn to prevent platform rejections. #### Image Formats - JPG - PNG - GIF #### Video Formats - MP4 Max size: 500 MB #### Video Duration 30 min #### Aspect Ratio Any (16:9 recommended for video) #### Max Attachments 9 files per post ### PostPulse vs. the native LinkedIn API What PostPulse handles vs. what you'd build yourself. | Capability | PostPulse | Native LinkedIn API | | --- | --- | --- | | Platform audit / App Review | ✓ Not required | ✗ Required (weeks to months) | | Auth token management | ✓ Handled by PostPulse | Implement OAuth + token refresh | | Media upload workflow | ✓ Single endpoint | Multi-step async upload | | Post scheduling | ✓ Built-in scheduledTime | Build your own cron queue | | Failure notifications | ✓ 14 webhook events | Poll for status manually | | Multi-platform publishing | ✓ 9 platforms, same request | Separate API per platform | | White-label OAuth for your users | ✓ Included | Build your own OAuth bridge | | AI agent integration (MCP) | ✓ Claude, Cursor | ✗ Not available | ### LinkedIn API — Frequently Asked Questions ### Publish to 9 platforms with the same API Add more platforms to your integration with a single configuration change. [Instagram](https://post-pulse.com/platforms/instagram) [TikTok](https://post-pulse.com/platforms/tiktok) [YouTube](https://post-pulse.com/platforms/youtube) [LinkedIn](https://post-pulse.com/platforms/linkedin) [Facebook](https://post-pulse.com/platforms/facebook) [Twitter / X](https://post-pulse.com/platforms/twitter) [Threads](https://post-pulse.com/platforms/threads) [Telegram](https://post-pulse.com/platforms/telegram) [Bluesky](https://post-pulse.com/platforms/bluesky) --- ## The *Telegram* publishing API for developers Source: https://post-pulse.com/platforms/telegram Title: Telegram API for Developers — PostPulse Description: Publish to Telegram programmatically. No audit required. PostPulse's unified API lets you schedule posts, upload media, and manage Telegram content with a single REST endpoint. Last modified: 2026-09-16 Telegram API · Text Posts · Image Posts · Video Posts · Media Groups Post to Telegram channels and groups programmatically via API. **PostPulse owns the platform access, so you ship on day one — no audit, no token plumbing.** [Get started free →](https://post-pulse.com/app) [Read the API docs](https://post-pulse.com/api-docs) No platform audit on your side No tokens to babysit No credit card to test Native Telegram API · the actual cost ### What you'd build and maintain yourself Every item below is real friction the native Telegram API hands you. PostPulse handles all of them. 01 #### Manual bot tokens Telegram Bot API requires creating and managing a bot token manually Connect a channel — no bot-token wrangling. 02 #### Admin-rights setup Channel posts require the bot to have admin rights — setup is error-prone at scale PostPulse manages posting rights at connection. 03 #### No native scheduling No official scheduling: you must build your own cron job and retry logic scheduledTime is a field; PostPulse runs the queue + retries. 04 #### Album ID ordering Media groups (albums) require separate sendMediaGroup calls with strict ID ordering Attach multiple media; group ordering handled for you. 05 #### Multi-tenant bot pain Bot tokens are per-user, making multi-tenant apps complex to manage White-label Connect manages many channels under your brand. Minutes to your first post ### Schedule a Telegram post in two API calls Import your media, then schedule the post with your Telegram settings. PostPulse does the rest. ``` # Step 1: Import media from a public URL curl -X POST https://api.post-pulse.com/v1/media/upload/import \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "url": "https://your-cdn.com/media/video.mp4" }' # Response: { "path": "uuid/video.mp4" } # Step 2: Schedule a post using the publications array curl -X POST https://api.post-pulse.com/v1/posts \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "scheduledTime": "2026-06-01T10:00:00Z", "isDraft": false, "publications": [ { "socialMediaAccountId": 123, "platformSettings": { "type": "TELEGRAM" }, "posts": [ { "content": "Check out our latest content! #developer #api", "chatId": "-1001234567890", "attachmentPaths": ["uuid/video.mp4"] } ] } ] }' ``` What you ship on day one ### What you can build with the Telegram API Every capability maps to a real field in the API. Click through for the exact request shape. [Telegram Video Scheduling Schedule video posts to publish at a specific future date and time across multiple platforms.](https://post-pulse.com/platforms/telegram/video-scheduling) [Telegram Image Posting Post single images or photo collections to social media platforms via REST API.](https://post-pulse.com/platforms/telegram/image-posting) [Telegram Scheduling Schedule any post type — text, image, video, or carousel — to publish at a precise future timestamp.](https://post-pulse.com/platforms/telegram/scheduling-api) [Telegram Auto-Publish Trigger immediate publication to social media platforms from your backend or automation workflow.](https://post-pulse.com/platforms/telegram/auto-publish) [Telegram Media Upload Upload images and videos via direct binary upload, presigned URL, or remote URL import — then reference the media path in attachmentPaths.](https://post-pulse.com/platforms/telegram/media-upload) [Telegram Webhooks Receive real-time webhook events for post completion, failure, and media import status across all platforms.](https://post-pulse.com/platforms/telegram/webhook-notifications) [Telegram White-Label Let your users connect their own social accounts via a seamless OAuth flow that never exposes PostPulse branding.](https://post-pulse.com/platforms/telegram/white-label) [Telegram n8n Use the official PostPulse n8n node to build no-code automation workflows for social media publishing.](https://post-pulse.com/platforms/telegram/n8n-integration) DIY vs PostPulse ### The same Telegram integration, two timelines Both columns assume you know your stack. Only one has you doing undifferentiated platform plumbing. DIY · native Telegram API 1. Register a developer app and configure OAuth redirect URLs 2. Implement the OAuth flow plus token refresh and rotation 3. Build the media-upload and publish flow around Telegram's quirks 4. Clear access requirements — review, quota, or partner approval where required 5. Build scheduling, retries, and failure alerting yourself 6. Keep up with API version changes — forever PostPulse 1. **Minute 0** · Sign up free 2. **Minute 3** · Connect a Telegram account via OAuth 3. **Minute 6** · `POST /v1/posts` — first post live 4. **Minute 7** · A webhook calls your URL the second it lands 5. **Day 2+** · Build your product, not platform plumbing ### Telegram-specific API settings Control Telegram publishing options via the `platformSettings` object in your publication entry. | Field | Description | Accepted Values | | --- | --- | --- | | `type` | Publication type | `POST` | ### Telegram media requirements PostPulse validates your media before publishing to Telegram to prevent platform rejections. #### Image Formats - JPG - PNG - WEBP Max size: Up to 10 MB #### Video Formats - MP4 Max size: Up to 50 MB (Bot API); larger via streaming #### Max Attachments 10 files per post ### PostPulse vs. the native Telegram API What PostPulse handles vs. what you'd build yourself. | Capability | PostPulse | Native Telegram API | | --- | --- | --- | | Platform audit / App Review | ✓ Not required | ✗ Required (weeks to months) | | Auth token management | ✓ Handled by PostPulse | Implement OAuth + token refresh | | Media upload workflow | ✓ Single endpoint | Multi-step async upload | | Post scheduling | ✓ Built-in scheduledTime | Build your own cron queue | | Failure notifications | ✓ 14 webhook events | Poll for status manually | | Multi-platform publishing | ✓ 9 platforms, same request | Separate API per platform | | White-label OAuth for your users | ✓ Included | Build your own OAuth bridge | | AI agent integration (MCP) | ✓ Claude, Cursor | ✗ Not available | ### Telegram API — Frequently Asked Questions ### Publish to 9 platforms with the same API Add more platforms to your integration with a single configuration change. [Instagram](https://post-pulse.com/platforms/instagram) [TikTok](https://post-pulse.com/platforms/tiktok) [YouTube](https://post-pulse.com/platforms/youtube) [LinkedIn](https://post-pulse.com/platforms/linkedin) [Facebook](https://post-pulse.com/platforms/facebook) [Twitter / X](https://post-pulse.com/platforms/twitter) [Threads](https://post-pulse.com/platforms/threads) [Telegram](https://post-pulse.com/platforms/telegram) [Bluesky](https://post-pulse.com/platforms/bluesky) --- ## Ship to Threads *before* the Meta App Review queue moves. Source: https://post-pulse.com/platforms/threads Title: Threads API for Developers — Text, Image, Video, Carousels | PostPulse Description: Publish text, images, videos, and carousels to Threads via a single REST API. PostPulse owns the Meta App Review — you ship on day one. 10 free publications on signup, no card. Last modified: 2026-09-16 Threads API · Text · Images · Videos · Carousels One REST call posts text, images, videos, and carousels to Threads. PostPulse owns the Meta audit, manages the 60-day token, and adds scheduling Meta's API doesn't have. **10 free publications on signup. No card.** [Get 10 Free Publications →](https://post-pulse.com/app) [Read the docs](https://post-pulse.com/api-docs) No Meta audit on your side Scheduling built in No credit card to test Welcome — pick your camp ### Two kinds of people land on this page. The Threads API only opened up in mid-2024 and it still rides on Meta's developer platform. You either tried it already, or you're about to. Pick the panel that fits. Native Threads API · the actual cost ### The 6 things you'd build yourself Each line below is a real ticket the Threads API hands you on day one. PostPulse handles all of them. 01 #### Meta App Review The `threads_basic` and `threads_content_publish` scopes both require manual review. Use-case justification, screencasts, privacy policy URLs, data-deletion endpoints. Multi-day reviews, and over-requesting permissions can get your app flagged. ✓ PostPulse is the audited Meta app. You inherit the access. 02 #### Tester-only sandbox Until App Review approves you, you can only publish to your own account and accounts manually registered as testers in your Meta developer app. You can't onboard real users yet. ✓ PostPulse runs as a fully audited app. Real users from day one. 03 #### The 250 / 24h ceiling Meta caps Threads at 250 posts and 1,000 replies per user every rolling 24 hours, plus a per-app call budget that scales with your impressions. You build the tracking, the back-pressure, the user-facing error. ✓ PostPulse manages the limit and surfaces clean errors back to your code. 04 #### The container API Every Threads post goes through container creation → status polling → publish. Carousels add a per-item container step. You write the polling, the status switch, the carousel ordering. ✓ PostPulse polls and emits the result via webhook. 05 #### Long-lived token rotation Threads access tokens expire after 60 days. You implement the short-lived → long-lived exchange, the refresh endpoint, the storage, and the replay logic for posts that landed during a refresh window. ✓ Token lifecycle handled server-side by PostPulse. 06 #### Scheduling and observability Threads has no native "publish at" parameter. You build a queue, a cron, a retry ladder, alerting for failures, and a dashboard so you know what shipped. ✓ `scheduledTime` is a field. 14 webhook events for the rest. Minutes to your first Threads post ### One API call. That's it. Drop a public image or video URL into `attachmentPaths` (or skip it for a text-only post). PostPulse downloads, hands it to Threads, and publishes at the time you set. Prefer to upload bytes? Use a binary upload or a presigned URL — both work the same way. ``` curl -X POST https://api.post-pulse.com/v1/posts \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "scheduledTime": "2026-06-01T10:00:00Z", "isDraft": false, "publications": [{ "socialMediaAccountId": 123, "platformSettings": { "type": "THREADS", "topicTag": "buildinpublic" }, "posts": [{ "content": "Day 47. Shipped via API. No Meta App Review on my side.", "attachmentPaths": ["https://your-cdn.com/screenshot.png"] }] }] }' ``` Carousel? Attach up to several image / MP4 URLs in `attachmentPaths` — the same request publishes them as one Threads carousel post. What you ship on day one ### Everything Threads lets you publish — actually shipped. Each capability below maps to a real field on a real request. No roadmap items. [Text, image & video posts Up to 500 characters of text. Single image (JPG / PNG, ≤ 8 MB) or single MP4 video (≤ 5 min). Same `/v1/posts` request shape as every other platform.](https://post-pulse.com/platforms/threads/image-posting) Carousels in one post Attach multiple images and / or MP4 videos in `attachmentPaths` and PostPulse stitches them into a single Threads carousel container automatically. Smart topic tags Set `topicTag` explicitly (up to 100 chars) or leave it empty — PostPulse falls back to the first non-numeric hashtag in your text, matching the native Threads behaviour. [Scheduling Pass an ISO-8601 `scheduledTime` and PostPulse fires the publish at the exact second you ask for. The native Threads API has no scheduling — that's all logic you'd otherwise own.](https://post-pulse.com/platforms/threads/scheduling-api) Insights API Pull views, likes, replies, reposts, quotes, and shares per published post. We map Meta's metric IDs to a clean schema across every PostPulse-supported platform. [14 webhook events Per-post, per-publication, and per-schedule outcomes — plus media-import lifecycle events — fired straight to your URL the moment they happen. See the [Webhooks reference](https://post-pulse.com/webhooks).](https://post-pulse.com/platforms/threads/webhook-notifications) DIY vs PostPulse · in time ### What you ship over six weeks Both columns assume you know your stack. Only one has you doing undifferentiated platform plumbing. DIY · Threads API 1. **Day 1–3** · Register Meta developer account · configure app · set OAuth redirect URLs 2. **Week 1** · Implement OAuth · short-lived → long-lived token swap · 60-day refresh 3. **Week 2** · Build the container API flow · status polling · carousel ordering 4. **Week 2–3** · Submit App Review for `threads_content_publish` · justify use case · wait 5. **Week 4–6** · Iterate on rejection. Resubmit. Wait again. 6. **Week 6+** · Approved. Now ship a queue, retry, scheduling, webhook receiver, alerts. PostPulse 1. **Minute 0** · Sign up 2. **Minute 2** · 10 free credits 3. **Minute 5** · Connect a Threads account via OAuth 4. **Minute 8** · First post live · webhook calls your URL the second it lands 5. **Day 2+** · Build the actual product. Stop thinking about Threads. ### Capability matrix · PostPulse vs. native Threads API What you'd build yourself vs. what's already shipped. | Capability | PostPulse | Native Threads / Meta API | | --- | --- | --- | | Meta App Review | ✓ Done by us | ✗ Manual review · resubmits common | | Real-user posting | ✓ Day one | Tester accounts only until approved | | Token refresh (60-day) | ✓ Handled server-side | Implement + monitor per user | | Text · image · video · carousel | ✓ One endpoint | Container API · per-item polling | | Topic tag handling | ✓ Auto-pick or explicit | Explicit only — you build the fallback | | Pre-flight validation | ✓ Size · format · char · tag | Errors only after you've taken the user's request | | Scheduling | ✓ `scheduledTime` field | Build your own queue + cron | | Real-time post status | ✓ 14 webhook events | Poll yourself | | Threads Insights | ✓ Views · likes · replies · reposts · quotes · shares | Available — your own implementation | | White-label / Connect for end users | ✓ Included | Build your own OAuth bridge | | Same API for 8 other platforms | ✓ Instagram · TikTok · YouTube · LinkedIn · X · FB · Telegram · Bluesky | 9 separate integrations | ### Threads API · FAQ --- ## Publish to TikTok without the developer audit. Source: https://post-pulse.com/platforms/tiktok Title: TikTok API for Developers — Videos, Image Carousels, Scheduling | PostPulse Description: Publish TikTok videos and image carousels (up to 10 images) via a single REST API. PostPulse holds the audited TikTok client — you skip the developer-app review entirely. 10 free publications on signup, no card. Last modified: 2026-09-16 TikTok API · Videos · Image Carousels · Scheduling One REST call posts videos and image carousels (up to 10 images) to TikTok. PostPulse owns the TikTok audit, so you skip the developer review entirely. **10 free publications on signup. No card.** [Get 10 Free Publications →](https://post-pulse.com/app) [Read the docs](https://post-pulse.com/api-docs) No TikTok audit on your side Scheduling built in No credit card to test Welcome — pick your camp ### Two kinds of people land on this page. You spent months wrestling with TikTok for Developers. Or you're about to. Either way, we've seen this movie. Pick the panel that fits. Native TikTok API · the actual cost ### The 6 things you'd build yourself Each line below is a real ticket the TikTok for Developers platform hands you on day one. PostPulse handles all of them. 01 #### Two separate approvals Login Kit gives you OAuth. The Content Posting API gives you publishing. Each has its own review. Most teams get stuck on the second one for weeks. ✓ PostPulse holds both audited capabilities. 02 #### The DIRECT_POST scope Sandbox apps can only publish to private accounts of authorised testers. To post on behalf of real users you need DIRECT_POST — a separate gating step. ✓ PostPulse runs as a fully audited client, not in sandbox. 03 #### Two upload flows for one product Video posts and image carousels use different endpoints, different mode strings, and different request shapes. You implement and test both. ✓ One PostPulse publication. We route by attachment type. 04 #### Format & policy validation 360–4,096 px on each axis, 23–60 fps, ≤ 20 MB images, JPG/PNG/WEBP and MP4/MOV/WebM, 90-char title cap on image posts vs. 2,200 on video. Miss one and TikTok's API returns the error after you've already promised the user the post is queued. ✓ PostPulse validates these the moment you call our schedule API — no surprises later. 05 #### Migrations land on you TikTok deprecated the Share Video API in 2023 and required everyone to migrate to the Content Posting API. Display API responses lost fields. In 2025 the access bar tightened again. None of that work is your product — but all of it is your problem. ✓ One stable PostPulse contract. We absorb the migrations. 06 #### Scheduling and observability TikTok has no native "publish at" parameter. You build the queue, the cron, the retry, the alerting, and the dashboard yourself. ✓ `scheduledTime` field. 14 webhook events for the rest. Minutes to your first TikTok post ### One API call. That's it. Drop a public video URL into `attachmentPaths`. PostPulse downloads it, hands it to TikTok, and publishes at the time you set. Prefer to upload bytes? Use a binary upload or a presigned URL — both work the same way. ``` curl -X POST https://api.post-pulse.com/v1/posts \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "scheduledTime": "2026-06-01T10:00:00Z", "isDraft": false, "publications": [{ "socialMediaAccountId": 123, "platformSettings": { "type": "TIK_TOK", "title": "Day 47 of building in public.", "privacyLevel": "PUBLIC_TO_EVERYONE" }, "posts": [{ "content": "Day 47 of building in public.", "attachmentPaths": ["https://your-cdn.com/video.mp4"] }] }] }' ``` Image carousel? Swap the video URL for up to 10 image URLs and PostPulse routes to TikTok's image flow automatically. What you ship on day one ### Everything TikTok lets developers do — actually shipped. Each capability below maps to a real field on a real request. No roadmap items. [Single-video posts Vertical or horizontal. Title up to 2,200 chars. PostPulse handles the upload, hands the video to TikTok, and tells your webhook the moment it lands.](https://post-pulse.com/platforms/tiktok/video-scheduling) [Image carousels (up to 10) Up to 10 images in one post. Title up to 90 chars, description up to 4,000 chars. Optional `autoAddMusic` flag. Same `/v1/posts` request shape as videos.](https://post-pulse.com/platforms/tiktok/carousel-api) [Privacy & interaction controls `privacyLevel` across PUBLIC_TO_EVERYONE, FOLLOWER_OF_CREATOR, MUTUAL_FOLLOW_FRIENDS, SELF_ONLY. Toggle Duet, Stitch, and comments per post.](https://post-pulse.com/platforms/tiktok/privacy-controls) Branded content flags `brandContent` for paid partnership disclosure, `brandOrganic` for "your brand" — both supported and forwarded to TikTok's content disclosure. Pre-flight validation Format, size, frame rate, resolution, caption length, attachment count — checked before TikTok ever sees the request. See the [Media Validation guide](https://post-pulse.com/media-validation). [14 webhook events Per-post, per-publication, and per-schedule outcomes — plus media-import lifecycle events — fired straight to your URL the moment they happen. See the [Webhooks reference](https://post-pulse.com/webhooks).](https://post-pulse.com/platforms/tiktok/webhook-notifications) DIY vs PostPulse · in time ### What you ship over six weeks Both columns assume you know your stack. Only one has you doing undifferentiated platform plumbing. DIY · TikTok for Developers 1. **Day 1–3** · Register TikTok developer account · configure app · set OAuth redirect URLs 2. **Week 1** · Implement Login Kit · PKCE · token refresh 3. **Week 2** · Build the Content Posting API flow · video upload · status polling 4. **Week 2–3** · Submit for DIRECT_POST scope · provide compliance evidence · wait 5. **Week 4–6** · Iterate on rejection. Re-scope. Resubmit. Wait. 6. **Week 6+** · Approved. Now ship a queue, retry, scheduling, webhook receiver, alerts. PostPulse 1. **Minute 0** · Sign up 2. **Minute 2** · 10 free credits 3. **Minute 5** · Connect a TikTok account via OAuth 4. **Minute 8** · First post live · webhook calls your URL the second it lands 5. **Day 2+** · Build the actual product. Stop thinking about TikTok. ### Capability matrix · PostPulse vs. native TikTok API What you'd build yourself vs. what's already shipped. | Capability | PostPulse | Native TikTok for Developers | | --- | --- | --- | | App audit / Content Posting review | ✓ Done by us | ✗ Multi-week, multi-step | | DIRECT_POST scope | ✓ Audited client | Sandbox-only until approved | | OAuth + token refresh | ✓ Handled server-side | PKCE + refresh per user | | Video posts | ✓ Single endpoint | Separate upload + publish flow | | Image carousels (up to 10) | ✓ Same endpoint, attach images | Different mode + endpoint | | Privacy + interaction controls | ✓ All flags, one object | Available — your wiring | | Branded content flags | ✓ `brandContent` + `brandOrganic` | Available — your wiring | | Pre-flight validation | ✓ Size · format · FPS · resolution · caption | Errors only after you've taken the user's request | | Scheduling | ✓ `scheduledTime` field | Build your own queue + cron | | Real-time post status | ✓ 14 webhook events | Poll yourself | | White-label / Connect for end users | ✓ Included | Build your own OAuth bridge | | Same API for 8 other platforms | ✓ Instagram · YouTube · LinkedIn · X · Threads · FB · Telegram · Bluesky | 9 separate integrations | ### TikTok API · FAQ --- ## The *Twitter / X* publishing API for developers Source: https://post-pulse.com/platforms/twitter Title: Twitter / X API for Developers — PostPulse Description: Publish to Twitter / X programmatically. No audit required. PostPulse's unified API lets you schedule posts, upload media, and manage Twitter / X content with a single REST endpoint. Last modified: 2026-09-16 Twitter / X API · Tweets · Threads · Image Posts · Video Posts Post tweets and threads to X (Twitter) via REST API with full scheduling. **PostPulse owns the platform access, so you ship on day one — no audit, no token plumbing.** [Get started free →](https://post-pulse.com/app) [Read the API docs](https://post-pulse.com/api-docs) No platform audit on your side No tokens to babysit No credit card to test Native Twitter / X API · the actual cost ### What you'd build and maintain yourself Every item below is real friction the native Twitter / X API hands you. PostPulse handles all of them. 01 #### Capped free tier X/Twitter API v2 Free tier has a limited post volume (1,500 posts/month) that may not scale PostPulse manages X API access behind one endpoint. 02 #### $100/mo Basic tier Basic tier ($100/month) is required for any meaningful posting volume PostPulse abstracts the X API tiers for you. 03 #### OAuth 1.0a vs 2.0 OAuth 1.0a and OAuth 2.0 both exist; choosing the wrong one for your use case breaks posting PostPulse selects and manages the right auth flow. 04 #### Manual thread chaining Thread creation requires sequential post chaining with reply IDs — complex to implement Post threads without wiring reply-ID chains. 05 #### Split media endpoints Media upload is a separate v1.1 endpoint that was not migrated to v2 One media flow — no v1.1/v2 juggling. Minutes to your first post ### Schedule a Twitter / X post in two API calls Import your media, then schedule the post with your Twitter / X settings. PostPulse does the rest. ``` # Step 1: Import media from a public URL curl -X POST https://api.post-pulse.com/v1/media/upload/import \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "url": "https://your-cdn.com/media/video.mp4" }' # Response: { "path": "uuid/video.mp4" } # Step 2: Schedule a post using the publications array curl -X POST https://api.post-pulse.com/v1/posts \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "scheduledTime": "2026-06-01T10:00:00Z", "isDraft": false, "publications": [ { "socialMediaAccountId": 123, "platformSettings": { "type": "TWITTER" }, "posts": [ { "content": "Check out our latest content! #developer #api", "attachmentPaths": ["uuid/video.mp4"] } ] } ] }' ``` What you ship on day one ### What you can build with the Twitter / X API Every capability maps to a real field in the API. Click through for the exact request shape. [Twitter / X Video Scheduling Schedule video posts to publish at a specific future date and time across multiple platforms.](https://post-pulse.com/platforms/twitter/video-scheduling) [Twitter / X Image Posting Post single images or photo collections to social media platforms via REST API.](https://post-pulse.com/platforms/twitter/image-posting) [Twitter / X Scheduling Schedule any post type — text, image, video, or carousel — to publish at a precise future timestamp.](https://post-pulse.com/platforms/twitter/scheduling-api) [Twitter / X Auto-Publish Trigger immediate publication to social media platforms from your backend or automation workflow.](https://post-pulse.com/platforms/twitter/auto-publish) [Twitter / X Media Upload Upload images and videos via direct binary upload, presigned URL, or remote URL import — then reference the media path in attachmentPaths.](https://post-pulse.com/platforms/twitter/media-upload) [Twitter / X Threads Publish multi-part thread sequences to Twitter/X and Threads with a single API call.](https://post-pulse.com/platforms/twitter/thread-posting) [Twitter / X Webhooks Receive real-time webhook events for post completion, failure, and media import status across all platforms.](https://post-pulse.com/platforms/twitter/webhook-notifications) [Twitter / X White-Label Let your users connect their own social accounts via a seamless OAuth flow that never exposes PostPulse branding.](https://post-pulse.com/platforms/twitter/white-label) DIY vs PostPulse ### The same Twitter / X integration, two timelines Both columns assume you know your stack. Only one has you doing undifferentiated platform plumbing. DIY · native Twitter / X API 1. Register a developer app and configure OAuth redirect URLs 2. Implement the OAuth flow plus token refresh and rotation 3. Build the media-upload and publish flow around Twitter / X's quirks 4. Clear access requirements — review, quota, or partner approval where required 5. Build scheduling, retries, and failure alerting yourself 6. Keep up with API version changes — forever PostPulse 1. **Minute 0** · Sign up free 2. **Minute 3** · Connect a Twitter / X account via OAuth 3. **Minute 6** · `POST /v1/posts` — first post live 4. **Minute 7** · A webhook calls your URL the second it lands 5. **Day 2+** · Build your product, not platform plumbing ### Twitter / X-specific API settings Control Twitter / X publishing options via the `platformSettings` object in your publication entry. | Field | Description | Accepted Values | | --- | --- | --- | | `type` | Publication type | `POST` | ### Twitter / X media requirements PostPulse validates your media before publishing to Twitter / X to prevent platform rejections. #### Image Formats - JPG - PNG - GIF - WEBP Max size: 5 MB (animated GIF 15 MB) #### Video Formats - MP4 Max size: 512 MB #### Video Duration 140 seconds #### Aspect Ratio 1:3 to 3:1 #### Max Attachments 4 files per post ### PostPulse vs. the native Twitter / X API What PostPulse handles vs. what you'd build yourself. | Capability | PostPulse | Native Twitter / X API | | --- | --- | --- | | Platform audit / App Review | ✓ Not required | ✗ Required (weeks to months) | | Auth token management | ✓ Handled by PostPulse | Implement OAuth + token refresh | | Media upload workflow | ✓ Single endpoint | Multi-step async upload | | Post scheduling | ✓ Built-in scheduledTime | Build your own cron queue | | Failure notifications | ✓ 14 webhook events | Poll for status manually | | Multi-platform publishing | ✓ 9 platforms, same request | Separate API per platform | | White-label OAuth for your users | ✓ Included | Build your own OAuth bridge | | AI agent integration (MCP) | ✓ Claude, Cursor | ✗ Not available | ### Twitter / X API — Frequently Asked Questions ### Publish to 9 platforms with the same API Add more platforms to your integration with a single configuration change. [Instagram](https://post-pulse.com/platforms/instagram) [TikTok](https://post-pulse.com/platforms/tiktok) [YouTube](https://post-pulse.com/platforms/youtube) [LinkedIn](https://post-pulse.com/platforms/linkedin) [Facebook](https://post-pulse.com/platforms/facebook) [Twitter / X](https://post-pulse.com/platforms/twitter) [Threads](https://post-pulse.com/platforms/threads) [Telegram](https://post-pulse.com/platforms/telegram) [Bluesky](https://post-pulse.com/platforms/bluesky) --- ## The *YouTube* publishing API for developers Source: https://post-pulse.com/platforms/youtube Title: YouTube API for Developers — PostPulse Description: Publish to YouTube programmatically. No audit required. PostPulse's unified API lets you schedule posts, upload media, and manage YouTube content with a single REST endpoint. Last modified: 2026-09-16 YouTube API · Videos · YouTube Shorts Upload videos and Shorts to YouTube automatically via REST API. **PostPulse owns the platform access, so you ship on day one — no audit, no token plumbing.** [Get started free →](https://post-pulse.com/app) [Read the API docs](https://post-pulse.com/api-docs) No platform audit on your side No tokens to babysit No credit card to test Native YouTube API · the actual cost ### What you'd build and maintain yourself Every item below is real friction the native YouTube API hands you. PostPulse handles all of them. 01 #### Strict OAuth + quotas YouTube Data API v3 has strict OAuth 2.0 requirements and quota limits PostPulse handles OAuth and token lifecycle for you. 02 #### ~6 uploads/day quota Default quota is only 10,000 units/day — each video upload costs 1,600 units Publish at scale on PostPulse's managed quota — no unit math. 03 #### GCP project + consent screen Requires Google Cloud project setup, consent screen configuration, and App Verification Skip the Cloud project and consent screen — just connect and post. 04 #### Months-long App Verification App Verification for YouTube access requires a security assessment and can take months PostPulse is already verified — you ship on day one. 05 #### Videos vs Shorts handling Separate handling required for regular videos vs. Shorts (no flag — detected by aspect ratio and length) Upload either format; PostPulse sorts out the rest. Minutes to your first post ### Schedule a YouTube post in two API calls Import your media, then schedule the post with your YouTube settings. PostPulse does the rest. ``` # Step 1: Import media from a public URL curl -X POST https://api.post-pulse.com/v1/media/upload/import \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "url": "https://your-cdn.com/media/video.mp4" }' # Response: { "path": "uuid/video.mp4" } # Step 2: Schedule a post using the publications array curl -X POST https://api.post-pulse.com/v1/posts \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "scheduledTime": "2026-06-01T10:00:00Z", "isDraft": false, "publications": [ { "socialMediaAccountId": 123, "platformSettings": { "type": "YOUTUBE", "title": "Your video title", "privacyStatus": "PUBLIC", "category": "SCIENCE_TECHNOLOGY" }, "posts": [ { "content": "Check out our latest content! #developer #api", "attachmentPaths": ["uuid/video.mp4"] } ] } ] }' ``` What you ship on day one ### What you can build with the YouTube API Every capability maps to a real field in the API. Click through for the exact request shape. [YouTube Video Scheduling Schedule video posts to publish at a specific future date and time across multiple platforms.](https://post-pulse.com/platforms/youtube/video-scheduling) [YouTube Scheduling Schedule any post type — text, image, video, or carousel — to publish at a precise future timestamp.](https://post-pulse.com/platforms/youtube/scheduling-api) [YouTube Auto-Publish Trigger immediate publication to social media platforms from your backend or automation workflow.](https://post-pulse.com/platforms/youtube/auto-publish) [YouTube Media Upload Upload images and videos via direct binary upload, presigned URL, or remote URL import — then reference the media path in attachmentPaths.](https://post-pulse.com/platforms/youtube/media-upload) [YouTube Shorts Upload vertical short-form videos to YouTube Shorts automatically via the PostPulse API.](https://post-pulse.com/platforms/youtube/shorts-api) [YouTube Privacy Controls Set per-post privacy levels, audience visibility, and content controls programmatically.](https://post-pulse.com/platforms/youtube/privacy-controls) [YouTube Webhooks Receive real-time webhook events for post completion, failure, and media import status across all platforms.](https://post-pulse.com/platforms/youtube/webhook-notifications) [YouTube White-Label Let your users connect their own social accounts via a seamless OAuth flow that never exposes PostPulse branding.](https://post-pulse.com/platforms/youtube/white-label) DIY vs PostPulse ### The same YouTube integration, two timelines Both columns assume you know your stack. Only one has you doing undifferentiated platform plumbing. DIY · native YouTube API 1. Register a developer app and configure OAuth redirect URLs 2. Implement the OAuth flow plus token refresh and rotation 3. Build the media-upload and publish flow around YouTube's quirks 4. Clear access requirements — review, quota, or partner approval where required 5. Build scheduling, retries, and failure alerting yourself 6. Keep up with API version changes — forever PostPulse 1. **Minute 0** · Sign up free 2. **Minute 3** · Connect a YouTube account via OAuth 3. **Minute 6** · `POST /v1/posts` — first post live 4. **Minute 7** · A webhook calls your URL the second it lands 5. **Day 2+** · Build your product, not platform plumbing ### YouTube-specific API settings Control YouTube publishing options via the `platformSettings` object in your publication entry. | Field | Description | Accepted Values | | --- | --- | --- | | `title` | Video title (up to 100 characters) | string | | `privacyStatus` | Visibility setting | `PUBLIC` `UNLISTED` `PRIVATE` | | `category` | YouTube category | `FILM_ANIMATION` `AUTOS_VEHICLES` `MUSIC` `PETS_ANIMALS` `SPORTS` `TRAVEL_EVENTS` `GAMING` `PEOPLE_BLOGS` `COMEDY` `ENTERTAINMENT` `NEWS_POLITICS` `HOWTO_STYLE` `EDUCATION` `SCIENCE_TECHNOLOGY` | ### YouTube media requirements PostPulse validates your media before publishing to YouTube to prevent platform rejections. #### Video Formats - MP4 - MOV - AVI - MKV Max size: 256 GB #### Video Duration Up to 12 hours (verified account) #### Aspect Ratio 16:9 recommended; 9:16 for Shorts ### PostPulse vs. the native YouTube API What PostPulse handles vs. what you'd build yourself. | Capability | PostPulse | Native YouTube API | | --- | --- | --- | | Platform audit / App Review | ✓ Not required | ✗ Required (weeks to months) | | Auth token management | ✓ Handled by PostPulse | Implement OAuth + token refresh | | Media upload workflow | ✓ Single endpoint | Multi-step async upload | | Post scheduling | ✓ Built-in scheduledTime | Build your own cron queue | | Failure notifications | ✓ 14 webhook events | Poll for status manually | | Multi-platform publishing | ✓ 9 platforms, same request | Separate API per platform | | White-label OAuth for your users | ✓ Included | Build your own OAuth bridge | | AI agent integration (MCP) | ✓ Claude, Cursor | ✗ Not available | ### YouTube API — Frequently Asked Questions ### Publish to 9 platforms with the same API Add more platforms to your integration with a single configuration change. [Instagram](https://post-pulse.com/platforms/instagram) [TikTok](https://post-pulse.com/platforms/tiktok) [YouTube](https://post-pulse.com/platforms/youtube) [LinkedIn](https://post-pulse.com/platforms/linkedin) [Facebook](https://post-pulse.com/platforms/facebook) [Twitter / X](https://post-pulse.com/platforms/twitter) [Threads](https://post-pulse.com/platforms/threads) [Telegram](https://post-pulse.com/platforms/telegram) [Bluesky](https://post-pulse.com/platforms/bluesky) --- ## PostPulse vs. the alternatives Source: https://post-pulse.com/compare Title: PostPulse vs. Competitors — Social Media API Comparison Description: Compare PostPulse with Ayrshare, Buffer, Later, Hootsuite, SocialPilot, Blotato, Upload-Post, and more. Side-by-side API features, pricing, and platform support. Last modified: 2026-06-04 Comparisons See how PostPulse's publishing API stacks up against the 10 tools developers evaluate — side-by-side pricing, platforms, features, and developer experience. - [Ayrshare Direct API PostPulse: More affordable, cleaner API, no permission overreach 4 fewer platforms Compare →](https://post-pulse.com/compare/ayrshare) - [Buffer Consumer tool PostPulse: Production-ready API with TikTok, edit/delete, and analytics — Buffer's API is still in beta 1 fewer platform Compare →](https://post-pulse.com/compare/buffer) - [Later Consumer tool PostPulse: Has an API (Later does not), has a free tier, built for developers same platforms Compare →](https://post-pulse.com/compare/later) - [Upload-Post Direct API PostPulse: No annual billing lock-in, MCP server for AI agents, more generous free tier 2 fewer platforms Compare →](https://post-pulse.com/compare/upload-post) - [Blotato Consumer tool PostPulse: Real REST API with no rate cap, no TikTok daily limits, no bundled AI credits +2 platforms Compare →](https://post-pulse.com/compare/blotato) - [SocialPilot Consumer tool PostPulse: Public API available to all developers — SocialPilot's API is enterprise-only 1 fewer platform Compare →](https://post-pulse.com/compare/socialpilot) - [Hootsuite Enterprise PostPulse: Public API, 100x cheaper, instant access vs. Hootsuite's enterprise sales process 1 fewer platform Compare →](https://post-pulse.com/compare/hootsuite) - [Sprout Social Enterprise PostPulse: Public API at $5/account vs. Sprout Social's $249/seat with no public API same platforms Compare →](https://post-pulse.com/compare/sprout-social) - [Zernio Direct API PostPulse: official n8n + Make automations and 14-event webhooks for hands-off publishing — Zernio is broader on platforms and cheaper at scale. 6 fewer platforms Compare →](https://post-pulse.com/compare/zernio) - [Postiz Open source PostPulse: Managed service with guaranteed uptime, support, and no infrastructure overhead 2 fewer platforms Compare →](https://post-pulse.com/compare/postiz) --- ## PostPulse vs. Ayrshare Source: https://post-pulse.com/compare/ayrshare Title: Ayrshare Alternative — PostPulse Social Media API Description: PostPulse vs Ayrshare: publish to 9 social platforms via one API — no platform audit, white-label OAuth, and an MCP server for AI agents. See pricing & features. Last modified: 2026-09-16 PostPulse Publishing API Ayrshare Direct API Ayrshare charges $149/month to access their API and requires excessive social account permissions. PostPulse gives developers instant API access at $5/account/month with no platform audit required. Our take PostPulse: More affordable, cleaner API, no permission overreach [Start free →](https://post-pulse.com/app) [See the comparison](https://post-pulse.com/compare/ayrshare#scoreboard) At a glance ### How PostPulse and Ayrshare stack up PostPulse Ayrshare API entry price $5/acct·mo winner $149/month App audit required No winner Yes (limitation) Public REST API Yes REST API Platforms 9 13 winner Figures from each provider's public docs & pricing. [Full feature table ↓](https://post-pulse.com/compare/ayrshare#features) Feature by feature ### Where PostPulse and Ayrshare differ | Capability | PostPulse | Ayrshare | | --- | --- | --- | | Platforms supported | 9 platforms | 13 platforms | | API entry price | $5/account/month (better) | $149/month (no video below this) | | Free tier (with video) | ✓ Available (better) | ✗ Images only on free | | Platform audit required | ✗ Not required (better) | ✓ Required for some platforms | | White-label OAuth | ✓ Included | ✓ Available | | Real-time webhooks | ✓ 14 event types | ✓ Available | | MCP server (AI agents) | ✓ Claude, Cursor (better) | ✗ Not available | | n8n integration | ✓ Official node (better) | ✗ No official node | | TikTok support | ✓ Full support | ✓ Available | | API design quality | Clean, consistent (better) | Inconsistent response structures (per G2 reviews) | Why developers switch ### Reasons teams move from Ayrshare to PostPulse #### Ayrshare charges $149/month before you can post a single video Ayrshare's free tier is severely limited — only 20 posts/month and images only. If you need video (which most social media apps do), you have to jump straight to their $149/month Premium plan. This is a steep price for a startup or individual developer building an MVP. PostPulse gives you full API access including video at $5 per connected social account, with no minimum commitment. #### PostPulse offers consistent REST API conventions When building on top of a social media API, predictable response formats and structured error handling are essential for production reliability. PostPulse follows consistent REST conventions with typed error codes across all endpoints, making it easier to build robust integrations. #### Transparent pricing with no minimum commitment PostPulse charges $5 per connected social account per month with no annual contracts or minimum plans. You can scale up or down as your application grows, without worrying about being locked into a high-tier plan. #### PostPulse has the MCP Server that Ayrshare lacks The PostPulse MCP Server integrates directly with Claude Desktop, Cursor, and other AI agent frameworks — letting AI agents publish to social media natively. This is a capability Ayrshare does not offer. If you're building AI-powered content agents, PostPulse is the only unified social media API with native AI agent support. What you get ### Everything PostPulse ships out of the box - No platform audit required — start publishing to all 9 platforms from day one - $5/account/month — pay only for connected social accounts - Production-ready REST API with consistent response schemas - Real-time webhooks with 14 event types for post lifecycle tracking - White-label OAuth — your users connect accounts under your brand - MCP Server for AI agents (Claude Desktop, Cursor, and others) - Official n8n node and Make app for no-code automation - Automatic media validation against all platform format requirements Migration ### Switching from Ayrshare to PostPulse #### Create a PostPulse account and connect your social accounts Sign up at post-pulse.com. Connect the same social accounts you used with Ayrshare. The OAuth flow takes less than a minute per account. #### Create an OAuth app in the PostPulse app Go to post-pulse.com/app/portal/apps, create a new OAuth app, and get your client credentials. The API base URL is https://api.post-pulse.com. #### Replace Ayrshare API calls with PostPulse equivalents PostPulse uses a similar REST structure. Replace POST /api/post with POST /v1/posts and map your Ayrshare platform keys to PostPulse platform settings. ``` // Before (Ayrshare) fetch('https://app.ayrshare.com/api/post', { method: 'POST', headers: { 'Authorization': 'Bearer AYRSHARE_KEY' }, body: JSON.stringify({ post: 'Your caption here', platforms: ['instagram', 'tiktok'], mediaUrls: ['https://example.com/video.mp4'], }) }); // After (PostPulse) // Step 1: Import media const media = await fetch('https://api.post-pulse.com/v1/media/upload/import', { method: 'POST', headers: { 'Authorization': 'Bearer TOKEN', 'Content-Type': 'application/json' }, body: JSON.stringify({ url: 'https://example.com/video.mp4' }) }).then(r => r.json()); // Step 2: Create post with publications array fetch('https://api.post-pulse.com/v1/posts', { method: 'POST', headers: { 'Authorization': 'Bearer TOKEN', 'Content-Type': 'application/json' }, body: JSON.stringify({ scheduledTime: '2025-06-01T10:00:00Z', isDraft: false, publications: [ { socialMediaAccountId: 123, platformSettings: { type: 'INSTAGRAM', publicationType: 'FEED' }, posts: [{ content: 'Your caption here', attachmentPaths: [media.path] }] }, { socialMediaAccountId: 456, platformSettings: { type: 'TIK_TOK', privacyLevel: 'PUBLIC_TO_EVERYONE' }, posts: [{ content: 'Your caption here', attachmentPaths: [media.path] }] } ] }) }); ``` ### PostPulse vs. Ayrshare — FAQ --- ## PostPulse vs. Blotato Source: https://post-pulse.com/compare/blotato Title: Blotato Alternative — PostPulse Social Media API Description: PostPulse vs Blotato: publish to 9 social platforms via one API — no platform audit, white-label OAuth, and an MCP server for AI agents. See pricing & features. Last modified: 2026-09-16 PostPulse Publishing API Blotato Consumer tool Blotato is an AI content workspace — not a true REST API. Posting requires routing through Zapier or n8n, the rate limit is 30 req/min, and TikTok is capped at 3 posts per 24 hours. PostPulse gives developers a real API without workarounds. Our take PostPulse: Real REST API with no rate cap, no TikTok daily limits, no bundled AI credits [Start free →](https://post-pulse.com/app) [See the comparison](https://post-pulse.com/compare/blotato#scoreboard) At a glance ### How PostPulse and Blotato stack up PostPulse Blotato API entry price $5/acct·mo winner $29/month (requires routing through Zapier/n8n) App audit required No No Public REST API Yes winner No (limitation) Platforms 9 winner 7 Figures from each provider's public docs & pricing. [Full feature table ↓](https://post-pulse.com/compare/blotato#features) Feature by feature ### Where PostPulse and Blotato differ | Capability | PostPulse | Blotato | | --- | --- | --- | | Direct REST API | ✓ Production-ready (better) | ✗ Must use Zapier/n8n/Make | | Rate limits | High (not artificially capped) (better) | 30 requests/minute | | TikTok daily posting | No cap (better) | 3 accounts/day (even on paid plans) | | API entry price | $5/account/month (better) | $29/month (Starter) | | Free tier with API | ✓ Available (better) | ✗ Trial does not include API | | Webhooks | ✓ 14 event types (better) | ✗ None | | White-label OAuth | ✓ Included (better) | ✗ Not available | | No bundled AI credits | ✓ Pay only for publishing (better) | ✗ AI credits bundled in pricing | | MCP server | ✓ Claude, Cursor (better) | ✗ None | | Platforms supported | 9 platforms (better) | 7 platforms | Why developers switch ### Reasons teams move from Blotato to PostPulse #### Blotato is not a real API — you must route through Zapier or n8n Blotato does not expose a direct REST API. To post programmatically, you have to build a workflow through Zapier, n8n, or Make — adding latency, complexity, and cost from third-party services. PostPulse is a proper REST API you call directly from your backend with a single HTTP request. #### TikTok is limited to 3 posts per 24 hours — even on paid plans Blotato caps TikTok publishing at 3 accounts per 24 hours across all paid tiers. This is an artificial platform limit that Blotato has not overcome. For any application doing meaningful TikTok publishing, this cap is immediately broken. PostPulse has no equivalent artificial cap on TikTok publishing. #### 30 req/min rate limit blocks production use cases Blotato's API-via-integrations rate limit of 30 requests per minute is extremely constraining. A platform with 100 active users trying to schedule content simultaneously would saturate this limit immediately. PostPulse's architecture is designed for multi-tenant scale. #### You pay for AI credits you may not need Blotato bundles AI image and video generation credits into their pricing. If you just need social media publishing and don't need AI content generation, you're paying for features you don't use. PostPulse charges only for what you actually use: social account connections. What you get ### Everything PostPulse ships out of the box - No platform audit required — start publishing to all 9 platforms from day one - $5/account/month — pay only for connected social accounts - Production-ready REST API with consistent response schemas - Real-time webhooks with 14 event types for post lifecycle tracking - White-label OAuth — your users connect accounts under your brand - MCP Server for AI agents (Claude Desktop, Cursor, and others) - Official n8n node and Make app for no-code automation - Automatic media validation against all platform format requirements Migration ### Switching from Blotato to PostPulse #### Sign up for PostPulse Sign up at post-pulse.com/app and complete the onboarding to connect your social accounts. Then create an OAuth app at post-pulse.com/app/portal/apps to get your API credentials. #### Remove the Zapier/n8n middleware Instead of calling Blotato via an integration platform, call PostPulse's REST API directly from your backend. This reduces latency and eliminates the third-party dependency. #### Make direct API calls to PostPulse Replace your Blotato integration workflow with direct HTTP calls. ``` // No more Zapier/n8n middleware needed // Call PostPulse directly from your backend: const response = await fetch('https://api.post-pulse.com/v1/posts', { method: 'POST', headers: { 'Authorization': 'Bearer ' + accessToken, 'Content-Type': 'application/json', }, body: JSON.stringify({ scheduledTime: '2025-06-01T10:00:00Z', isDraft: false, publications: [{ socialMediaAccountId: 456, platformSettings: { type: 'TIK_TOK', privacyLevel: 'PUBLIC_TO_EVERYONE' }, posts: [{ content: 'No middleware needed — direct API call!', attachmentPaths: ['uuid/video.mp4'] }] }] }) }); ``` ### PostPulse vs. Blotato — FAQ --- ## PostPulse vs. Buffer Source: https://post-pulse.com/compare/buffer Title: Buffer Alternative — PostPulse Social Media API Description: PostPulse vs Buffer: publish to 9 social platforms via one API — no platform audit, white-label OAuth, and an MCP server for AI agents. See pricing & features. Last modified: 2026-09-16 PostPulse Publishing API Buffer Consumer tool Buffer's API is in beta: no TikTok support, can't edit or delete posts, 60 req/min rate limit, and no analytics. PostPulse delivers a production-ready social media API with full TikTok support and 14 webhook event types from day one. Our take PostPulse: Production-ready API with TikTok, edit/delete, and analytics — Buffer's API is still in beta [Start free →](https://post-pulse.com/app) [See the comparison](https://post-pulse.com/compare/buffer#scoreboard) At a glance ### How PostPulse and Buffer stack up PostPulse Buffer API entry price $5/acct·mo winner Unclear — may require higher tier (~$99/month) App audit required No No Public REST API Yes GraphQL (beta) Platforms 9 10 winner Figures from each provider's public docs & pricing. [Full feature table ↓](https://post-pulse.com/compare/buffer#features) Feature by feature ### Where PostPulse and Buffer differ | Capability | PostPulse | Buffer | | --- | --- | --- | | API status | Production-ready (better) | Beta (limited functionality) | | TikTok support via API | ✓ Full support (better) | ✗ Not supported | | Edit posts via API | ✓ Supported (better) | ✗ Not yet supported | | Delete posts via API | ✓ Supported (better) | ✗ Not yet supported | | Analytics via API | ✓ Supported (better) | ✗ Not available | | Rate limits | High (not published) (better) | 60 requests/minute | | Real-time webhooks | ✓ 14 event types (better) | ✗ Not available | | White-label OAuth | ✓ Included (better) | ✗ Not available | | MCP server (AI agents) | ✓ Claude, Cursor (better) | ✗ Not available | | API type | REST (better) | GraphQL (beta) | Why developers switch ### Reasons teams move from Buffer to PostPulse #### Buffer's API is in beta — missing critical features like TikTok, edit, and delete Buffer only recently launched their API (currently in beta), and it has significant gaps: no TikTok support, no ability to edit or delete posts, and no analytics via API. These are not edge cases — they are fundamental features for any production social media application. PostPulse was built API-first from day one and all these features are available in production. #### 60 requests/minute may limit production applications Buffer's API is capped at 60 requests per minute. For any application with multiple users or high-frequency publishing, this limit will be hit quickly. PostPulse does not publish artificial rate limits on top of platform limits, meaning your throughput is only constrained by the underlying social platforms. #### Buffer is a consumer tool trying to add an API — PostPulse is API-first Buffer was built for individual creators and small teams to manage their own social accounts. Adding an API on top of a consumer product often results in an afterthought — and Buffer's beta API shows this. PostPulse was designed from the ground up for developers building applications for other people's social accounts, with white-label OAuth, webhook infrastructure, and structured error handling baked in. #### PostPulse offers API stability and versioning guarantees When building a long-term product on top of a social media API, stability matters. PostPulse versions all endpoints and provides migration windows before any deprecation, so you can plan ahead without worrying about sudden breaking changes. What you get ### Everything PostPulse ships out of the box - No platform audit required — start publishing to all 9 platforms from day one - $5/account/month — pay only for connected social accounts - Production-ready REST API with consistent response schemas - Real-time webhooks with 14 event types for post lifecycle tracking - White-label OAuth — your users connect accounts under your brand - MCP Server for AI agents (Claude Desktop, Cursor, and others) - Official n8n node and Make app for no-code automation - Automatic media validation against all platform format requirements Migration ### Switching from Buffer to PostPulse #### Sign up for PostPulse and connect social accounts Create an account at post-pulse.com. PostPulse supports all platforms Buffer supports plus TikTok. The OAuth connection flow takes under a minute per platform. #### Get API credentials from the PostPulse app Visit post-pulse.com/app/portal/apps, create an OAuth app, and retrieve your client ID and secret. Authenticate with OAuth 2.0 to get an access token. #### Migrate from Buffer's GraphQL API to PostPulse's REST API Replace Buffer's GraphQL mutations with PostPulse REST endpoints. The semantic mapping is straightforward. ``` // Buffer GraphQL (beta) const CREATE_POST = gql` mutation CreatePost($input: CreatePostInput!) { createPost(input: $input) { id status } } `; // Pass to Apollo client with channel ID and text... // PostPulse REST — simple and production-ready fetch('https://api.post-pulse.com/v1/posts', { method: 'POST', headers: { 'Authorization': 'Bearer TOKEN', 'Content-Type': 'application/json', }, body: JSON.stringify({ scheduledTime: '2025-06-01T10:00:00Z', // optional — omit for immediate isDraft: false, publications: [ { socialMediaAccountId: 123, platformSettings: { type: 'INSTAGRAM', publicationType: 'FEED' }, posts: [{ content: 'Your post content here' }] }, { socialMediaAccountId: 456, platformSettings: { type: 'TWITTER' }, posts: [{ content: 'Your post content here' }] } ] }) }); ``` ### PostPulse vs. Buffer — FAQ --- ## PostPulse vs. Hootsuite Source: https://post-pulse.com/compare/hootsuite Title: Hootsuite Alternative — PostPulse Social Media API Description: PostPulse vs Hootsuite: publish to 9 social platforms via one API — no platform audit, white-label OAuth, and an MCP server for AI agents. See pricing & features. Last modified: 2026-09-16 PostPulse Publishing API Hootsuite Enterprise suite Hootsuite starts at $99/month and requires an enterprise contract for API access. PostPulse provides a public REST API at $5/account/month with no sales conversation, no enterprise commitment, and no platform audit. Our take PostPulse: Public API, 100x cheaper, instant access vs. Hootsuite's enterprise sales process [Start free →](https://post-pulse.com/app) [See the comparison](https://post-pulse.com/compare/hootsuite#scoreboard) At a glance ### How PostPulse and Hootsuite stack up PostPulse Hootsuite API entry price $5/acct·mo winner Enterprise — requires contract and custom pricing App audit required No No Public REST API Yes winner No (limitation) Platforms 9 10 winner Figures from each provider's public docs & pricing. [Full feature table ↓](https://post-pulse.com/compare/hootsuite#features) Feature by feature ### Where PostPulse and Hootsuite differ | Capability | PostPulse | Hootsuite | | --- | --- | --- | | Public REST API | ✓ Self-service (better) | ✗ Enterprise partner program only | | Entry price | $5/account/month (better) | $99/month (no API on this tier) | | API access without sales | ✓ Instant (better) | ✗ Requires enterprise contract | | Free tier | ✓ Available (better) | ✗ None | | Real-time webhooks | ✓ 14 event types (better) | ✗ Not publicly available | | White-label OAuth | ✓ Included (better) | ✗ Enterprise only | | MCP server (AI agents) | ✓ Claude, Cursor (better) | ✗ None | | Developer documentation | ✓ Full public docs (better) | ✗ Partner program only | | TikTok API support | ✓ Full support (better) | ? Not clearly documented | | Setup time | Minutes (better) | Weeks (sales + legal + procurement) | Why developers switch ### Reasons teams move from Hootsuite to PostPulse #### Hootsuite's API requires a formal enterprise partner application Hootsuite does not offer a public API. To access their publishing API, you must apply to the Hootsuite App Directory partner program, which involves a formal review, legal agreements, and custom pricing negotiations. This process takes weeks to months. PostPulse gives every developer immediate API access from the moment they create an account. #### $99/month just to get started — and that doesn't even include API access Hootsuite's cheapest plan is $99/month and it does not include API access. Their API is reserved for enterprise partners. PostPulse starts at $5 per connected social account — a fraction of the cost — with full API access included. #### Hootsuite is designed for social media managers, not developers Hootsuite is a feature-rich platform built for marketing teams and social media managers. The developer API is an afterthought, not a core product. PostPulse is built developer-first: everything from the OAuth flow to the webhook schema is designed for programmatic use, not for a marketing dashboard. What you get ### Everything PostPulse ships out of the box - No platform audit required — start publishing to all 9 platforms from day one - $5/account/month — pay only for connected social accounts - Production-ready REST API with consistent response schemas - Real-time webhooks with 14 event types for post lifecycle tracking - White-label OAuth — your users connect accounts under your brand - MCP Server for AI agents (Claude Desktop, Cursor, and others) - Official n8n node and Make app for no-code automation - Automatic media validation against all platform format requirements Migration ### Switching from Hootsuite to PostPulse #### Sign up for PostPulse — no enterprise contract needed Create an account at post-pulse.com. Unlike Hootsuite's partner program, PostPulse is self-service. Connect your social accounts and get API access in minutes. #### Get API credentials from the PostPulse app Visit post-pulse.com/app/portal/apps to create an OAuth app and get your credentials. The entire API reference is publicly available at post-pulse.com/api-docs. #### Start publishing via the PostPulse REST API PostPulse's REST API is straightforward and well-documented. No partner application, no legal review, no waiting. ``` // PostPulse — no partner application required fetch('https://api.post-pulse.com/v1/posts', { method: 'POST', headers: { 'Authorization': 'Bearer TOKEN', 'Content-Type': 'application/json' }, body: JSON.stringify({ isDraft: false, publications: [ { socialMediaAccountId: 123, platformSettings: { type: 'INSTAGRAM', publicationType: 'FEED' }, posts: [{ content: 'Publishing without enterprise contracts!' }] }, { socialMediaAccountId: 456, platformSettings: { type: 'LINKEDIN', visibility: 'PUBLIC' }, posts: [{ content: 'Publishing without enterprise contracts!' }] }, { socialMediaAccountId: 789, platformSettings: { type: 'TWITTER' }, posts: [{ content: 'Publishing without enterprise contracts!' }] } ] }) }); ``` ### PostPulse vs. Hootsuite — FAQ --- ## PostPulse vs. Later Source: https://post-pulse.com/compare/later Title: Later Alternative — PostPulse Social Media API Description: PostPulse vs Later: publish to 9 social platforms via one API — no platform audit, white-label OAuth, and an MCP server for AI agents. See pricing & features. Last modified: 2026-09-16 PostPulse Publishing API Later Consumer tool Later has no public API — it is a consumer scheduling tool with no developer access. PostPulse is an API-first platform built for developers who need to publish to social media programmatically. Our take PostPulse: Has an API (Later does not), has a free tier, built for developers [Start free →](https://post-pulse.com/app) [See the comparison](https://post-pulse.com/compare/later#scoreboard) At a glance ### How PostPulse and Later stack up PostPulse Later API entry price $5/acct·mo winner N/A — no API available App audit required No No Public REST API Yes winner No (limitation) Platforms 9 9 Figures from each provider's public docs & pricing. [Full feature table ↓](https://post-pulse.com/compare/later#features) Feature by feature ### Where PostPulse and Later differ | Capability | PostPulse | Later | | --- | --- | --- | | Public API available | ✓ Production-ready REST API (better) | ✗ No API whatsoever | | Free tier | ✓ Available (better) | ✗ No free plan (trial only) | | Programmatic publishing | ✓ Full REST API (better) | ✗ Manual or visual only | | TikTok support | ✓ Full support (better) | ✓ Via UI only | | Webhooks | ✓ 14 event types (better) | ✗ None | | White-label OAuth | ✓ Included (better) | ✗ Not available | | n8n & Make integrations | ✓ Official nodes (better) | ✗ None | | MCP server (AI agents) | ✓ Claude, Cursor (better) | ✗ None | | Developer documentation | ✓ Full API reference (better) | ✗ No developer docs | | Pricing entry point | $5/account/month (better) | $25/month (no API) | Why developers switch ### Reasons teams move from Later to PostPulse #### Later has no API — it is not a developer product If you are a developer searching for a "Later API", you will not find one. Later does not offer any public API, webhooks, or programmatic access to their scheduling engine. It is a visual consumer tool for manually scheduling posts. If you need to integrate social media publishing into your application or automation workflow, Later is simply not an option. #### Later eliminated their free plan — PostPulse still has one In 2025, Later removed their free plan entirely. The only way to try Later is a 14-day trial that requires a credit card. PostPulse offers a free tier with actual API access so you can test and build without time pressure. #### "Social set" pricing forces you to pay for platforms you don't use Later's pricing model bundles platforms into "social sets" (one account per platform per set). If you only use Instagram and TikTok, you still pay for Twitter, LinkedIn, and Pinterest. PostPulse charges per connected social account — you only pay for what you use. What you get ### Everything PostPulse ships out of the box - No platform audit required — start publishing to all 9 platforms from day one - $5/account/month — pay only for connected social accounts - Production-ready REST API with consistent response schemas - Real-time webhooks with 14 event types for post lifecycle tracking - White-label OAuth — your users connect accounts under your brand - MCP Server for AI agents (Claude Desktop, Cursor, and others) - Official n8n node and Make app for no-code automation - Automatic media validation against all platform format requirements Migration ### Switching from Later to PostPulse #### Create a PostPulse developer account Sign up at post-pulse.com and connect your social accounts. Unlike Later, you immediately get API access — no upgrade required. #### Get credentials from the PostPulse app Visit post-pulse.com/app/portal/apps, create an OAuth app, and get your API credentials. Read the Getting Started guide to make your first API call in minutes. #### Build your publishing workflow with the PostPulse API Use the REST API, n8n node, Make app, or MCP server to automate publishing — something Later cannot offer at all. ``` // PostPulse — programmatic publishing (Later has no API) fetch('https://api.post-pulse.com/v1/posts', { method: 'POST', headers: { 'Authorization': 'Bearer TOKEN', 'Content-Type': 'application/json', }, body: JSON.stringify({ scheduledTime: '2025-06-15T14:00:00Z', isDraft: false, publications: [{ socialMediaAccountId: 123, platformSettings: { type: 'INSTAGRAM', publicationType: 'FEED' }, posts: [{ content: 'Scheduled from code — no manual UI needed!', attachmentPaths: ['uuid/media-file.jpg'] }] }] }) }); ``` ### PostPulse vs. Later — FAQ --- ## PostPulse vs. Postiz Source: https://post-pulse.com/compare/postiz Title: Postiz Alternative — PostPulse Social Media API Description: PostPulse vs Postiz: publish to 9 social platforms via one API — no platform audit, white-label OAuth, and an MCP server for AI agents. See pricing & features. Last modified: 2026-09-16 PostPulse Publishing API Postiz Open source Postiz requires you to host and maintain your own infrastructure. PostPulse is a fully managed service: no servers to run, no updates to apply, no debugging production outages at 2am. Our take PostPulse: Managed service with guaranteed uptime, support, and no infrastructure overhead [Start free →](https://post-pulse.com/app) [See the comparison](https://post-pulse.com/compare/postiz#scoreboard) At a glance ### How PostPulse and Postiz stack up PostPulse Postiz API entry price $5/acct·mo winner $0 self-hosted / $29/month cloud App audit required No No Public REST API Yes REST API (self-hosted) Platforms 9 11 winner Figures from each provider's public docs & pricing. [Full feature table ↓](https://post-pulse.com/compare/postiz#features) Feature by feature ### Where PostPulse and Postiz differ | Capability | PostPulse | Postiz | | --- | --- | --- | | Hosting | Fully managed (zero ops) (better) | Self-hosted (requires server, DB, Redis) | | Uptime SLA | ✓ Guaranteed (better) | ✗ Your responsibility | | Maintenance burden | ✓ None (better) | Regular updates, security patches required | | Platform API updates | ✓ PostPulse handles all changes (better) | ✗ You must update when platforms change | | Professional support | ✓ Email + Discord (better) | ✗ Community only (open-source) | | Cost at scale | $5/account/month (predictable) (better) | Infrastructure + engineering time (unpredictable) | | Setup time | Under 10 minutes (better) | Hours to days (Docker, env vars, migrations) | | White-label | ✓ Included | ✓ Possible (self-managed) | | MCP server | ✓ Hosted and managed (better) | ? Community plugin only | | Platform count | 9 platforms | 11 platforms | Why developers switch ### Reasons teams move from Postiz to PostPulse #### Self-hosting is not free — it costs infrastructure and engineering time Postiz advertises a free self-hosted option, but running it in production requires a VPS or cloud instance, a PostgreSQL database, Redis for queues, regular security patching, monitoring, and someone to debug failures. For most teams, the engineering time alone costs more than a managed service subscription. PostPulse handles all of this for you. #### Social platform APIs change frequently — you'll be stuck maintaining integrations Instagram, TikTok, and other platforms update their APIs regularly, often with breaking changes and deprecations. With Postiz, every platform API change means updating your self-hosted installation. PostPulse's engineering team handles all platform API changes, so your application keeps working without any action on your part. #### No professional support — only GitHub issues and community forums When something breaks in production with Postiz, your options are filing a GitHub issue (and waiting for community volunteers to respond) or debugging it yourself. PostPulse provides professional email and Discord support with response time commitments. When your publishing pipeline fails, you need help quickly. What you get ### Everything PostPulse ships out of the box - No platform audit required — start publishing to all 9 platforms from day one - $5/account/month — pay only for connected social accounts - Production-ready REST API with consistent response schemas - Real-time webhooks with 14 event types for post lifecycle tracking - White-label OAuth — your users connect accounts under your brand - MCP Server for AI agents (Claude Desktop, Cursor, and others) - Official n8n node and Make app for no-code automation - Automatic media validation against all platform format requirements Migration ### Switching from Postiz to PostPulse #### Create a PostPulse account — no infrastructure needed Sign up at post-pulse.com. No Docker, no PostgreSQL, no Redis. Connect your social accounts in minutes. #### Get credentials from the PostPulse app Visit post-pulse.com/app/portal/apps to create an OAuth app and get your credentials. PostPulse's REST API has the same publishing capabilities as Postiz's self-hosted API. #### Replace self-hosted API calls with PostPulse The migration is a URL replacement and auth swap. PostPulse uses OAuth 2.0 bearer tokens. ``` // Before: calling your self-hosted Postiz instance fetch('https://your-postiz-instance.com/api/posts', { method: 'POST', headers: { 'x-api-key': 'YOUR_POSTIZ_KEY' }, body: JSON.stringify({ /* your payload */ }) }); // After: PostPulse managed API — no server to maintain fetch('https://api.post-pulse.com/v1/posts', { method: 'POST', headers: { 'Authorization': 'Bearer TOKEN', 'Content-Type': 'application/json' }, body: JSON.stringify({ isDraft: false, publications: [{ socialMediaAccountId: 123, platformSettings: { type: 'INSTAGRAM', publicationType: 'FEED' }, posts: [{ content: 'Managed publishing — no infrastructure overhead' }] }] }) }); ``` ### PostPulse vs. Postiz — FAQ --- ## PostPulse vs. SocialPilot Source: https://post-pulse.com/compare/socialpilot Title: SocialPilot Alternative — PostPulse Social Media API Description: PostPulse vs SocialPilot: publish to 9 social platforms via one API — no platform audit, white-label OAuth, and an MCP server for AI agents. See pricing & features. Last modified: 2026-09-16 PostPulse Publishing API SocialPilot Consumer tool SocialPilot's API is gated behind enterprise plans requiring a sales conversation. PostPulse gives all developers immediate API access with transparent per-account pricing and no gatekeeping. Our take PostPulse: Public API available to all developers — SocialPilot's API is enterprise-only [Start free →](https://post-pulse.com/app) [See the comparison](https://post-pulse.com/compare/socialpilot#scoreboard) At a glance ### How PostPulse and SocialPilot stack up PostPulse SocialPilot API entry price $5/acct·mo winner Enterprise plan — requires sales call App audit required No No Public REST API Yes winner No (limitation) Platforms 9 10 winner Figures from each provider's public docs & pricing. [Full feature table ↓](https://post-pulse.com/compare/socialpilot#features) Feature by feature ### Where PostPulse and SocialPilot differ | Capability | PostPulse | SocialPilot | | --- | --- | --- | | Public API access | ✓ Self-service, instant (better) | ✗ Enterprise-only, requires sales | | Developer documentation | ✓ Full public docs (better) | ✗ No public API docs | | Free tier with API | ✓ Available (better) | ✗ No API on free plans | | API entry price | $5/account/month (better) | Enterprise pricing (undisclosed) | | Real-time webhooks | ✓ 14 event types (better) | ✗ None documented | | Customer support rating | Developer-focused support (better) | 2.4/5 Trustpilot | | Failed post alerts | ✓ Via webhooks (better) | ✗ No failure alerts | | White-label OAuth | ✓ Included | ✓ On Agency+ plan | | TikTok support | ✓ Full API support (better) | ✓ Via UI only | | MCP server (AI agents) | ✓ Claude, Cursor (better) | ✗ None | Why developers switch ### Reasons teams move from SocialPilot to PostPulse #### SocialPilot's API requires an enterprise sales conversation If you search for SocialPilot's API documentation, you won't find a public API reference. Their API is available only on Enterprise plans, which means contacting sales, negotiating pricing, and waiting for access. PostPulse gives every developer immediate API access with transparent per-account pricing — no sales calls required. #### SocialPilot has a 2.4/5 Trustpilot rating with no customer response SocialPilot's Trustpilot profile has a 2.4/5 rating with hundreds of negative reviews citing poor customer support and features not working as advertised. More concerningly, the company does not respond to reviews. For a platform handling your social media publishing, support quality is critical — especially when posts fail. #### No failed post alerts — you'll miss publishing failures SocialPilot does not alert you when a scheduled post fails. In production, post failures happen — network issues, token expiry, platform API errors. PostPulse's 14-event webhook system sends real-time notifications for publication.failed and post.failed events, so you can build retry logic and user notifications. What you get ### Everything PostPulse ships out of the box - No platform audit required — start publishing to all 9 platforms from day one - $5/account/month — pay only for connected social accounts - Production-ready REST API with consistent response schemas - Real-time webhooks with 14 event types for post lifecycle tracking - White-label OAuth — your users connect accounts under your brand - MCP Server for AI agents (Claude Desktop, Cursor, and others) - Official n8n node and Make app for no-code automation - Automatic media validation against all platform format requirements Migration ### Switching from SocialPilot to PostPulse #### Sign up for PostPulse Create an account at post-pulse.com — no sales call required. Connect your social accounts in minutes. #### Create an OAuth app in the PostPulse app Go to post-pulse.com/app/portal/apps and create an OAuth app to get your API credentials immediately. #### Use the PostPulse API Unlike SocialPilot's enterprise API, PostPulse's full API documentation is public at post-pulse.com/api-docs. ``` // PostPulse — available to all developers without enterprise contract fetch('https://api.post-pulse.com/v1/posts', { method: 'POST', headers: { 'Authorization': 'Bearer TOKEN', 'Content-Type': 'application/json' }, body: JSON.stringify({ scheduledTime: '2025-07-01T09:00:00Z', isDraft: false, publications: [ { socialMediaAccountId: 123, platformSettings: { type: 'LINKEDIN', visibility: 'PUBLIC' }, posts: [{ content: 'Posted via PostPulse — no enterprise plan needed' }] }, { socialMediaAccountId: 456, platformSettings: { type: 'TWITTER' }, posts: [{ content: 'Posted via PostPulse — no enterprise plan needed' }] } ] }) }); ``` ### PostPulse vs. SocialPilot — FAQ --- ## PostPulse vs. Sprout Social Source: https://post-pulse.com/compare/sprout-social Title: Sprout Social Alternative — PostPulse Social Media API Description: PostPulse vs Sprout Social: publish to 9 social platforms via one API — no platform audit, white-label OAuth, and an MCP server for AI agents. See pricing & features. Last modified: 2026-09-16 PostPulse Publishing API Sprout Social Enterprise suite Sprout Social starts at $249 per user per month and does not offer a public publishing API. PostPulse gives developers direct programmatic social media publishing at $5/account/month with instant API access. Our take PostPulse: Public API at $5/account vs. Sprout Social's $249/seat with no public API [Start free →](https://post-pulse.com/app) [See the comparison](https://post-pulse.com/compare/sprout-social#scoreboard) At a glance ### How PostPulse and Sprout Social stack up PostPulse Sprout Social API entry price $5/acct·mo winner N/A — no public publishing API App audit required No No Public REST API Yes winner No (limitation) Platforms 9 9 Figures from each provider's public docs & pricing. [Full feature table ↓](https://post-pulse.com/compare/sprout-social#features) Feature by feature ### Where PostPulse and Sprout Social differ | Capability | PostPulse | Sprout Social | | --- | --- | --- | | Public publishing API | ✓ Production-ready (better) | ✗ Not available | | Entry price | $5/account/month (better) | $249/seat/month | | Developer access | ✓ Instant self-service (better) | ✗ Enterprise sales only | | Free tier | ✓ Available (better) | ✗ None | | Real-time webhooks | ✓ 14 event types (better) | ✗ Not for publishing | | White-label OAuth | ✓ Included (better) | ✗ Not available | | MCP server (AI agents) | ✓ Claude, Cursor (better) | ✗ None | | TikTok publishing via API | ✓ Full support (better) | ✗ Not via API | | Developer documentation | ✓ Full public docs (better) | ✗ No publishing API docs | | Setup time to first API call | Under 10 minutes (better) | Weeks (enterprise procurement) | Why developers switch ### Reasons teams move from Sprout Social to PostPulse #### $249 per user per month — and still no publishing API Sprout Social charges $249 per seat per month, making it one of the most expensive social media tools on the market. Despite this price point, they do not offer a public content publishing API for developers. Their API is focused on analytics and data retrieval, not programmatic posting. PostPulse gives you everything Sprout Social's API lacks — at 50x lower cost. #### Sprout Social is an analytics platform masquerading as a developer tool While Sprout Social has an API, it is primarily focused on reading analytics data, not publishing content. If you want to post, schedule, or automate social media publishing programmatically, Sprout Social does not have the tools you need. PostPulse is built specifically for the publishing use case. #### Enterprise procurement adds weeks of delay before you can build Getting Sprout Social API access requires going through an enterprise sales process involving legal review, security questionnaires, and custom contract negotiation. PostPulse is self-service: create an account, get credentials, and make your first API call in under 10 minutes. What you get ### Everything PostPulse ships out of the box - No platform audit required — start publishing to all 9 platforms from day one - $5/account/month — pay only for connected social accounts - Production-ready REST API with consistent response schemas - Real-time webhooks with 14 event types for post lifecycle tracking - White-label OAuth — your users connect accounts under your brand - MCP Server for AI agents (Claude Desktop, Cursor, and others) - Official n8n node and Make app for no-code automation - Automatic media validation against all platform format requirements Migration ### Switching from Sprout Social to PostPulse #### Sign up for PostPulse Create an account at post-pulse.com. No enterprise contract, no sales call. Connect your social accounts immediately. #### Create an OAuth app in the PostPulse app Visit post-pulse.com/app/portal/apps to create an OAuth app and get credentials. Full documentation is at post-pulse.com. #### Make your first publishing API call Unlike Sprout Social, PostPulse has a full publishing REST API available immediately. ``` // This is what Sprout Social's API cannot do for developers // PostPulse lets you publish programmatically without an enterprise contract: fetch('https://api.post-pulse.com/v1/posts', { method: 'POST', headers: { 'Authorization': 'Bearer TOKEN', 'Content-Type': 'application/json' }, body: JSON.stringify({ scheduledTime: '2025-08-01T08:00:00Z', isDraft: false, publications: [ { socialMediaAccountId: 123, platformSettings: { type: 'INSTAGRAM', publicationType: 'FEED' }, posts: [{ content: 'Automated publishing — no enterprise contract required.' }] }, { socialMediaAccountId: 456, platformSettings: { type: 'FACEBOOK', publicationType: 'FEED' }, posts: [{ content: 'Automated publishing — no enterprise contract required.' }] }, { socialMediaAccountId: 789, platformSettings: { type: 'LINKEDIN', visibility: 'PUBLIC' }, posts: [{ content: 'Automated publishing — no enterprise contract required.' }] } ] }) }); ``` ### PostPulse vs. Sprout Social — FAQ --- ## PostPulse vs. Upload-Post Source: https://post-pulse.com/compare/upload-post Title: Upload-Post Alternative — PostPulse Social Media API Description: PostPulse vs Upload-Post: publish to 9 social platforms via one API — no platform audit, white-label OAuth, and an MCP server for AI agents. See pricing & features. Last modified: 2026-09-16 PostPulse Publishing API Upload-Post Direct API Upload-Post locks accounts to a single user, requires annual billing for their best price, and has no AI agent integration. PostPulse is more flexible: multi-user white-label OAuth, month-to-month pricing, and a native MCP Server for AI workflows. Our take PostPulse: No annual billing lock-in, MCP server for AI agents, more generous free tier [Start free →](https://post-pulse.com/app) [See the comparison](https://post-pulse.com/compare/upload-post#scoreboard) At a glance ### How PostPulse and Upload-Post stack up PostPulse Upload-Post API entry price $5/acct·mo winner $16/month (annual) or higher monthly rate App audit required No No Public REST API Yes REST API Platforms 9 11 winner Figures from each provider's public docs & pricing. [Full feature table ↓](https://post-pulse.com/compare/upload-post#features) Feature by feature ### Where PostPulse and Upload-Post differ | Capability | PostPulse | Upload-Post | | --- | --- | --- | | Platforms supported | 9 platforms | 11 platforms (incl. Pinterest, Reddit) | | Free tier uploads | More generous (better) | 10 uploads/month | | Monthly billing | ✓ Month-to-month (better) | ✗ Annual required for best price | | Multi-user accounts | ✓ White-label multi-tenant (better) | ✗ Social accounts locked to one user | | MCP server (AI agents) | ✓ Claude, Cursor (better) | ✗ Not available | | n8n integration | ✓ Official node | ✓ Available | | White-label OAuth | ✓ Full white-label | ✓ Available | | Real-time webhooks | ✓ 14 event types | ✓ Available | | Platform audit required | ✗ Not required | ✗ Not required | | AI agent integration | ✓ Native MCP Server (better) | ✗ None | Why developers switch ### Reasons teams move from Upload-Post to PostPulse #### Upload-Post locks social accounts to a single user A significant limitation of Upload-Post is that a social media account can only be connected to one Upload-Post account. This is a major problem for agencies managing multiple clients, or for platforms where users might want to move between tools. PostPulse's white-label OAuth model allows multiple applications to work with the same social accounts in a controlled, permissioned way. #### Annual billing is required for the $16/month price Upload-Post advertises $16/month but this requires an annual subscription — you pay upfront for 12 months. If your project changes direction or you need to cancel, you're locked in. PostPulse uses flexible per-account billing with no long-term commitment required. #### PostPulse has a native MCP Server — Upload-Post does not As AI agents become core to content workflows, the PostPulse MCP Server enables Claude, Cursor, and other AI tools to publish directly to social media as part of agentic pipelines. Upload-Post has no equivalent. If you're building AI-powered content applications, this is a meaningful differentiator. What you get ### Everything PostPulse ships out of the box - No platform audit required — start publishing to all 9 platforms from day one - $5/account/month — pay only for connected social accounts - Production-ready REST API with consistent response schemas - Real-time webhooks with 14 event types for post lifecycle tracking - White-label OAuth — your users connect accounts under your brand - MCP Server for AI agents (Claude Desktop, Cursor, and others) - Official n8n node and Make app for no-code automation - Automatic media validation against all platform format requirements Migration ### Switching from Upload-Post to PostPulse #### Create a PostPulse account and reconnect social accounts Sign up at post-pulse.com. Re-authorize your social accounts — the OAuth flow takes about a minute per account. #### Get credentials from the PostPulse app Go to post-pulse.com/app/portal/apps, create an OAuth app, and get your API client ID and secret. #### Migrate Upload-Post API calls to PostPulse Both are REST APIs with similar semantics. The main difference is how you specify platforms and media. ``` // Upload-Post (typical request) fetch('https://api.upload-post.com/upload', { method: 'POST', headers: { 'x-api-key': 'YOUR_KEY' }, body: JSON.stringify({ platforms: { instagram: { video_url: 'https://...', caption: 'Hello' } } }) }); // PostPulse equivalent // Step 1: Import media from URL const media = await fetch('https://api.post-pulse.com/v1/media/upload/import', { method: 'POST', headers: { 'Authorization': 'Bearer TOKEN', 'Content-Type': 'application/json' }, body: JSON.stringify({ url: 'https://...' }) }).then(r => r.json()); // Step 2: Create post with the publications array fetch('https://api.post-pulse.com/v1/posts', { method: 'POST', headers: { 'Authorization': 'Bearer TOKEN', 'Content-Type': 'application/json' }, body: JSON.stringify({ scheduledTime: '2025-06-01T10:00:00Z', isDraft: false, publications: [{ socialMediaAccountId: 123, platformSettings: { type: 'INSTAGRAM', publicationType: 'FEED' }, posts: [{ content: 'Hello', attachmentPaths: [media.path] }] }] }) }); ``` ### PostPulse vs. Upload-Post — FAQ --- ## PostPulse vs. Zernio Source: https://post-pulse.com/compare/zernio Title: Zernio Alternative — PostPulse Social Media API Description: PostPulse vs Zernio: publish to 9 social platforms via one API — no platform audit, white-label OAuth, and an MCP server for AI agents. See pricing & features. Last modified: 2026-09-16 PostPulse Publishing API Zernio Direct API Zernio (formerly Late / getlate.dev) is a strong developer-first API — REST, a hosted MCP server, 15+ platforms, and aggressive per-account pricing at scale. The two are close. PostPulse competes on the automation layer: an official n8n node, a Make.com app, and 14 webhook events for event-driven publishing, plus a white-label Connect flow for reselling under your own brand. Our take PostPulse: official n8n + Make automations and 14-event webhooks for hands-off publishing — Zernio is broader on platforms and cheaper at scale. [Start free →](https://post-pulse.com/app) [See the comparison](https://post-pulse.com/compare/zernio#scoreboard) At a glance ### How PostPulse and Zernio stack up PostPulse Zernio API entry price $5/acct·mo Free up to 2, then $6/acct App audit required No No Public REST API Yes REST API Platforms 9 15 winner Figures from each provider's public docs & pricing. [Full feature table ↓](https://post-pulse.com/compare/zernio#features) Feature by feature ### Where PostPulse and Zernio differ | Capability | PostPulse | Zernio | | --- | --- | --- | | Public REST API | ✓ REST | ✓ REST (OpenAPI 3.1) | | Hosted MCP server (AI agents) | ✓ Claude, Cursor | ✓ Hosted MCP | | Official n8n node | ✓ Official (better) | ✗ Not offered | | Make.com app | ✓ Official (better) | ✗ Not offered | | Lifecycle webhooks | ✓ 14 event types (better) | Not documented | | White-label Connect (your-branded end-user OAuth) | ✓ Built-in (better) | OAuth 2.1; multi-tenant branding unclear | | Platforms | 9 core | 15+ | | Paid-ads publishing | ✗ Organic only | ✓ 6 ad networks | | Free tier | 10 free publications | 2 accounts free | | Price at scale | $5/account flat | $1/account (101+) | Why developers switch ### Reasons teams move from Zernio to PostPulse #### No-code automation built in — not just an API to wire yourself PostPulse ships an official n8n community node and a Make.com app, so your team can build multi-platform publishing workflows without writing glue code. Zernio is a capable REST + MCP API, but doesn't offer official n8n or Make integrations — you build and host that layer yourself. #### Event-driven delivery with 14 webhook events PostPulse pushes post, publication, schedule, and media-import lifecycle events to your endpoint, so you know the instant a post lands or fails instead of polling. Zernio's public docs don't describe a webhook system, so you'd reconcile status yourself. #### A white-label Connect flow purpose-built for reselling If you're embedding publishing in your own product, PostPulse's Connect bridges your end-users to a branded OAuth — they authorize under your brand and never see PostPulse. Zernio exposes OAuth 2.1 for third-party apps, but doesn't document a fully white-labeled, multi-tenant end-user flow. What you get ### Everything PostPulse ships out of the box - No platform audit required — start publishing to all 9 platforms from day one - $5/account/month — pay only for connected social accounts - Production-ready REST API with consistent response schemas - Real-time webhooks with 14 event types for post lifecycle tracking - White-label OAuth — your users connect accounts under your brand - MCP Server for AI agents (Claude Desktop, Cursor, and others) - Official n8n node and Make app for no-code automation - Automatic media validation against all platform format requirements Migration ### Switching from Zernio to PostPulse #### Sign up for PostPulse Create an account at post-pulse.com and connect your social accounts. Onboarding is similar to Zernio. #### Get API credentials from the PostPulse app Go to post-pulse.com/app/portal/apps and create an OAuth app. Both are REST APIs with a similar request shape. #### Point your calls at PostPulse and layer in n8n / Make / webhooks Map Zernio's post payload to PostPulse's publications array, then add the official n8n node, the Make app, or webhook subscriptions for the automation Zernio leaves to you. ``` // PostPulse — one request fans out to many platforms; subscribe to webhooks for status fetch('https://api.post-pulse.com/v1/posts', { method: 'POST', headers: { 'Authorization': 'Bearer TOKEN', 'Content-Type': 'application/json' }, body: JSON.stringify({ scheduledTime: '2026-09-01T10:00:00Z', isDraft: false, publications: [ { socialMediaAccountId: 123, platformSettings: { type: 'INSTAGRAM', publicationType: 'REELS' }, posts: [{ content: 'Migrated from Zernio — now automating via n8n + webhooks', attachmentPaths: ['uuid/video.mp4'] }] }, { socialMediaAccountId: 456, platformSettings: { type: 'TIK_TOK', privacyLevel: 'PUBLIC_TO_EVERYONE' }, posts: [{ content: 'Migrated from Zernio — now automating via n8n + webhooks', attachmentPaths: ['uuid/video.mp4'] }] } ] }) }); ``` ### PostPulse vs. Zernio — FAQ