
The fastest way to post to Instagram, LinkedIn, and other platforms programmatically in 2026 is a unified social media API, not the raw platform APIs. Wiring up each platform yourself means a separate OAuth flow, app review, and rate-limit model for every network. A single abstraction layer collapses all of that into one auth token and one set of commands.
If you’ve ever tried to publish a single Instagram photo through the Instagram Graph API, you know the pain. You needed a Meta app, a Business or Creator account, a connected Facebook Page, a permissions review, and a two-step media container flow before a single pixel hit the feed. Then you wanted LinkedIn too, so you did it all again with a different app, different scopes, and different JSON.
This guide shows you both paths. We’ll walk through what the raw APIs actually demand, then show a working alternative using simplified-cli, an open-source CLI built for exactly this. By the end, you’ll be able to install it, set a key, list accounts, post with media, schedule, and pull analytics, all from your terminal or a script.
Key Takeaways
- A social media API lets you publish, schedule, and measure posts programmatically instead of clicking through each platform’s web app.
- Raw platform APIs (Instagram Graph API, LinkedIn API) each require their own app, OAuth scopes, review process, and rate limits, which multiplies your integration work per network.
simplified-cliis an open-source, agent-native CLI that wraps 10 platforms behind one API key and outputs JSON, so one command set covers Instagram, LinkedIn, TikTok, and more.- Install with
npm install -g simplified-cli(Node 22+), setSIMPLIFIED_API_KEY, then useaccounts:listandposts:createto publish.- Use raw APIs when you need a platform-specific feature; use a unified API when you need breadth, scheduling, and speed across many networks.
What a Social media API Actually Does
A social media API is an interface that lets your code create, schedule, read, update, and delete posts on social platforms without touching the web app. Instead of logging in and clicking “Publish,” you send a request and the post goes live (or enters a queue). That’s it at the core. The complexity lives in how each platform exposes that interface.
Developers reach for a social media API for a few concrete reasons:
- Automation: Trigger posts from a CMS, a CI pipeline, or an AI agent.
- Scheduling: Queue content in advance through a social media scheduling API instead of staying up to hit a posting time.
- Scale: Manage dozens of accounts or client brands from one script.
- Measurement: Pull analytics into your own dashboards instead of exporting CSVs by hand. If you’d rather not build this yourself, a hosted social media management tool covers the same ground.
The question isn’t whether to use an API. It’s whether you wire each platform yourself or use a social media management API that already did the wiring for you.
Why Posting via Raw Platform APIs is Painful
Here’s the honest version. Each platform treats “let an app post on a user’s behalf” as a high-trust action, so each one gates it heavily. The work doesn’t add up linearly. It multiplies.
The Instagram Graph API setup tax
To post to Instagram through the Instagram Graph API, you need a Meta Developer app, an Instagram Business or Creator account, and that account linked to a Facebook Page. Then you request permissions like instagram_basic and instagram_content_publish, and you submit your app for App Review before those permissions work for anyone outside your own test users.
Publishing itself is a two-step container flow. You create a media container, then publish it. Roughly:
# Step 1: create a media container (Instagram Graph API)
curl -X POST "https://graph.facebook.com/v21.0/<IG_USER_ID>/media" \
-d "image_url=https://example.com/photo.jpg" \
-d "caption=New drop is live" \
-d "access_token=<LONG_LIVED_TOKEN>"
# -> returns { "id": "<CREATION_ID>" }
# Step 2: publish the container
curl -X POST "https://graph.facebook.com/v21.0/<IG_USER_ID>/media_publish" \
-d "creation_id=<CREATION_ID>" \
-d "access_token=<LONG_LIVED_TOKEN>"
That looks manageable until you add the parts the snippet hides: the token has to be long-lived and refreshed, the image must be hosted at a public URL, there’s a daily publishing limit per account, and video uploads need status polling because they process asynchronously. None of that is hard once. It’s the “once per platform, forever” part that wears you down.
The LinkedIn API post problem looks similar (but different)
A LinkedIn API post follows the same overall shape with completely different details. You register a LinkedIn app, request the right products and OAuth scopes (w_member_social for posting), run a three-legged OAuth flow to get a member token, and then post to a different endpoint with a different payload structure. The LinkedIn developer docs spell out each product, scope, and version header.
# LinkedIn API post (UGC / Posts endpoint)
curl -X POST "https://api.linkedin.com/rest/posts" \
-H "Authorization: Bearer <ACCESS_TOKEN>" \
-H "LinkedIn-Version: 202506" \
-H "Content-Type: application/json" \
-d '{
"author": "urn:li:person:<MEMBER_ID>",
"commentary": "Shipping notes from this week.",
"visibility": "PUBLIC",
"distribution": { "feedDistribution": "MAIN_FEED" },
"lifecycleState": "PUBLISHED"
}'
Now multiply this by every network you care about. TikTok has its own content posting API and audit. YouTube uses the Data API with OAuth consent screens. Pinterest, Threads, Bluesky, and Google Business each bring their own auth model, their own field names, and their own quirks. You’re not building one integration. You’re building 10, and then maintaining 10 as each platform versions its API.
That’s the tradeoff a unified social media API is built to remove.
The Unified API approach (and where simplified-cli fits)
A unified social media API gives you one authentication step and one consistent command set that fans out to many platforms. You authenticate once, and the abstraction handles each platform’s container flows, token refreshes, and field mapping behind the scenes.
simplified-cli is an open-source, agent-native CLI that does exactly this for Simplified. It wraps 10 platforms (Instagram, Facebook, LinkedIn, TikTok, YouTube, Pinterest, Threads, Google Business, Bluesky, and TikTok Business) behind a single API key. Every command returns JSON, which makes it easy to script, pipe, or hand to an AI agent. It’s built on Node 22+ and installs as a global npm package.
The honest tradeoff: a unified layer won’t expose every niche, platform-specific feature the moment a network ships it. If you need a brand-new Instagram feature on day one, the raw Graph API is your path. For the common case, post, schedule, list, measure across many networks, the unified approach saves you days of OAuth plumbing. For a wider view of the automation side, see our social media automation guide.
Hands-on walkthrough: Post to Instagram and LinkedIn via a social media API
Let’s build the thing. Here’s the full path from install to a published, scheduled post with analytics.
Step 1: Install and authenticate
Install the CLI globally. You’ll need Node 22 or higher.
npm install -g simplified-cli
Grab an API key from Simplified.com under Settings → API Keys, then export it. One key covers every connected platform, so this is the only credential you manage.
export SIMPLIFIED_API_KEY="your_api_key_here"
You can also run it as a Claude Code plugin if you want an AI agent driving the commands:
/plugin marketplace add celeryhq/simplified-cli
That second path pairs nicely with the workflow in our guide on how to automate social media with Claude Code.
Step 2: List your accounts to get IDs
Every post needs to know which account it’s going to. List your connected Instagram accounts and grab the account ID.
simplified-cli accounts:list --network instagram
Sample JSON response:
[
{
"id": "acct_8f2c91",
"network": "instagram",
"username": "yourbrand",
"status": "connected"
}
]
Copy the id value. You’ll pass it to every publishing command. Drop the --network flag to list accounts across all 10 platforms at once.
Step 3: Create a post with media
Now publish. This is the command that replaces the entire two-step Instagram container flow and the LinkedIn OAuth dance from earlier. One line, with media attached and the post sent to your queue.
simplified-cli posts:create \
-c "New feature just shipped. Here's how it works." \
-a "acct_8f2c91" \
--action add_to_queue \
--media "https://cdn.yoursite.com/launch.jpg"
The --action add_to_queue flag drops the post into your scheduling queue instead of publishing immediately. Want it live now? Swap in the publish action. Want it on LinkedIn instead? Change the account ID to your LinkedIn account from accounts:list. Same command, different target. That’s the whole point.
If your media lives on disk rather than a public URL, upload it first:
# Upload a local file, then reference the returned asset
simplified-cli assets:upload --file ./launch.jpg
# Or import from an existing URL
simplified-cli assets:import --url "https://cdn.yoursite.com/launch.jpg"
Step 4: Schedule, then manage the queue
Because publishing returns JSON, you can script the full lifecycle. List your scheduled posts, update one, or delete it, all without opening a browser tab.
# See what's queued
simplified-cli posts:list
# Update a caption before it goes out
simplified-cli posts:update --id "post_4471" -c "Updated caption copy"
# Remove a post from the queue
simplified-cli posts:delete --id "post_4471"
This is your social media scheduling API in practice. Queue a week of content from a CSV, a spreadsheet export, or an AI agent that drafts captions, and let the queue handle timing. If you’d rather compare hosted scheduling products before going the API route, our roundup of the Best social media scheduling tools is a good starting point.
Step 5: Read analytic
Posting is half the job. Measuring is the other half. Pull aggregated performance, per-post numbers, or audience data, again as JSON you can feed into a dashboard.
# Account-level rollups
simplified-cli analytics:aggregated -a "acct_8f2c91"
# Per-post performance
simplified-cli analytics:posts -a "acct_8f2c91"
# Audience demographics and growth
simplified-cli analytics:audience -a "acct_8f2c91"
No separate Insights API, no per-platform metrics endpoints to learn. The same JSON shape comes back whether you’re measuring Instagram, TikTok, or LinkedIn, so your parsing code stays the same across networks.
When to Use raw APIs vs a Unified Social Media API
Both approaches are valid. The right call depends on what you’re building.
Reach for the raw platform API when:
- You need a platform-specific feature the moment it ships (a new Instagram media type, a beta LinkedIn endpoint).
- You’re building deep, single-platform tooling where that one network is your entire product.
- You require fine-grained control over fields the abstraction doesn’t expose yet.
Reach for a unified social media management API like simplified-cli when:
- You’re posting across several networks and don’t want to maintain N separate OAuth integrations.
- You want scheduling, listing, and analytics with one consistent JSON contract.
- You’re wiring social posting into an automation, a CMS, or an AI agent and value speed over platform-specific depth.
- You’re a small team that can’t afford to spend a sprint per platform on app review and token refresh logic.
For most teams shipping content across many platforms, the math is simple: one API key and one command set beats 10 app reviews. If your roadmap includes autonomous posting, our piece on AI agents for social media shows how a JSON-first CLI becomes the hands for an agent.
Frequently asked questions
Can I post to Instagram via API without a Business account?
Not through the raw Instagram Graph API. Instagram requires a Business or Creator account linked to a Facebook Page, plus an approved Meta app with the instagram_content_publish permission, before you can publish programmatically. A unified social media API still relies on a connected account behind the scenes, but it handles the app, the review-gated permissions, and the two-step container flow for you, so you skip building that yourself.
What’s the difference between the Instagram Graph API and a social media API like simplified-cli?
The Instagram Graph API is Meta’s raw, Instagram-and-Facebook-only interface with its own OAuth, scopes, and media flows. A social media API like simplified-cli is an abstraction over many platforms at once. With one API key, the same posts:create command publishes to Instagram, LinkedIn, TikTok, and seven other networks, instead of forcing you to learn and maintain each platform’s API separately.
How do I make a LinkedIn API post programmatically?
Through the raw LinkedIn API, you register an app, request the w_member_social scope, complete a three-legged OAuth flow for a member token, and POST to the Posts endpoint with a specific JSON payload. With simplified-cli, you run accounts:list --network linkedin to get your account ID, then posts:create with that ID and your caption. The CLI handles the OAuth and payload formatting.
Is there a social media scheduling API I can use from the command line?
Yes. simplified-cli includes scheduling through the --action add_to_queue flag on posts:create, plus posts:list, posts:update, and posts:delete to manage the queue. Because every command returns JSON, you can schedule in bulk from a script, a CSV, or an AI agent and manage timing without opening a web app.
Which platforms does simplified-cli support?
simplified-cli covers 10 platforms: Instagram, Facebook, LinkedIn, TikTok, YouTube, Pinterest, Threads, Google Business, Bluesky, and TikTok Business. One API key works across all of them, and each accounts:list, posts:create, and analytics:* command uses the same syntax regardless of the target network.
Start posting through one API
Posting to Instagram, LinkedIn, and more through a social media API doesn’t have to mean a separate app, OAuth flow, and rate-limit model for every network. That’s the work a unified API removes. You wire up auth once, learn one command set, and let the abstraction handle each platform’s container flows and token refreshes.
Here’s the short version:
- Raw platform APIs give you maximum control at the cost of per-platform setup, review, and maintenance.
- A unified social media API like
simplified-clitrades some bleeding-edge depth for one key, one JSON contract, and 10 platforms. - Install with
npm install -g simplified-cli, exportSIMPLIFIED_API_KEY, then runaccounts:listandposts:createto publish.
If you’re building automation or handing posting to an AI agent, the JSON-first CLI is the fastest path from script to published post. Grab an API key from Simplified.com Settings, install the CLI, and ship your first programmatic post today.













![200+ Book Name Ideas for Your Next Masterpiece [2026] 200+ Book Name Ideas for Your Next Masterpiece [2026]](https://siteimages.simplified.com/blog/Awesome-Book-Name-Ideas-01.png?auto=compress&fm=png)







