LinkedIn API
LinkedIn's Marketing API requires a formal partner program application, a 500-member organization requirement, and weeks of review. Aether is already approved — connect your Company Page and post in under 15 minutes.
One call for text posts, images, and scheduled content. Aether handles token management, content type validation, and retry logic.
import Aether from "aether";
const aether = new Aether({ apiKey: process.env.AETHER_API_KEY });
// Post to a LinkedIn Company Page
const post = await aether.posts.create({
text: "We just crossed 1,000 developers on Aether 🚀\n\nHere's what we learned building the API layer for social media...",
profileIds: ["li_company789"],
overrides: {
linkedin: { visibility: "PUBLIC" },
},
scheduledFor: "2026-06-15T08:00:00Z",
});
// Post with an image
const imagePost = await aether.posts.create({
text: "Behind the scenes of our engineering team 📸",
profileIds: ["li_company789"],
mediaUrls: ["https://your-cdn.com/team-photo.jpg"],
overrides: {
linkedin: { visibility: "PUBLIC" },
},
});Free tier · 3 accounts · no credit card
Get your free API keyimport os
import aether
client = aether.Aether(api_key=os.environ["AETHER_API_KEY"])
# Post to a LinkedIn Company Page
post = client.posts.create(
text="We just crossed 1,000 developers on Aether 🚀\n\nHere's what we learned...",
profile_ids=["li_company789"],
overrides={"linkedin": {"visibility": "PUBLIC"}},
scheduled_for="2026-06-15T08:00:00Z",
)
# Post with an image
image_post = client.posts.create(
text="Behind the scenes of our engineering team 📸",
profile_ids=["li_company789"],
media_urls=["https://your-cdn.com/team-photo.jpg"],
overrides={"linkedin": {"visibility": "PUBLIC"}},
)curl -X POST https://api.aetherhq.dev/v1/posts \
-H "Authorization: Bearer $AETHER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "We just crossed 1,000 developers on Aether 🚀",
"profileIds": ["li_company789"],
"scheduledFor": "2026-06-15T08:00:00Z",
"overrides": {
"linkedin": { "visibility": "PUBLIC" }
}
}'Aether returns a normalized post object immediately. Once published, publishResults includes the LinkedIn UGC post ID and publish timestamp.
{
"success": true,
"data": {
"id": "post_4n6oq1z",
"status": "scheduled",
"text": "We just crossed 1,000 developers on Aether 🚀",
"profileIds": ["li_company789"],
"mediaUrls": [],
"mediaKeys": [],
"scheduledFor": "2026-06-15T08:00:00.000Z",
"publishResults": [],
"publishedAt": null,
"failedAt": null,
"createdAt": "2026-06-08T14:23:11.000Z"
}
}Getting direct LinkedIn Marketing API access means: applying for the partner program with a 500-member org, waiting for LinkedIn to review your application, then managing OAuth 2.0 token refresh every 60 days.
Aether's Connect Link removes all of that. Call one endpoint, get a URL, send it to your user. They click, LinkedIn authenticates them, and their Page or profile appears in your dashboard automatically.
// Generate a Connect Link for your user to authenticate LinkedIn
const link = await aether.connectLinks.create({
platform: "linkedin",
redirectUrl: "https://yourapp.com/settings/social",
});
// Send link.url to your user — they click, authorize on LinkedIn,
// and the Company Page or profile appears in your dashboard automatically.
// No LinkedIn partner program setup needed on your end.
console.log(link.url); // "https://connect.aetherhq.dev/link/cl_li9q4r..."
console.log(link.expiresAt); // "2026-06-15T14:23:11.000Z"LinkedIn's Marketing API requires partner program approval with a 500-member org requirement. Aether holds the platform approvals — connect your Page instantly.
Post on behalf of Company Pages and personal profiles. Each account is a separate connected profile — manage multiple organizations and team members.
Text posts, images, native videos, documents (PDF as document posts), articles, and polls. Each type has its own optional fields via the overrides object.
Publish LinkedIn Articles with title, body, and cover image. Long-form content with full markdown support — ideal for thought leadership content pipelines.
Pass scheduledFor and Aether queues the post for the right time. Works across all LinkedIn content types, including articles and native videos.
LinkedIn access tokens expire after 60 days. Aether tracks expiry per account and refreshes before they lapse — no manual re-auth logic needed.
Impressions, clicks, engagement rate, follower gains, and demographic breakdowns per Company Page post. Powered by Tinybird for sub-second queries.
Every LinkedIn endpoint is an MCP tool. Claude, Cursor, and any MCP-compatible agent can draft, schedule, and monitor LinkedIn posts natively.
The LinkedIn Marketing API is powerful but gated. Here is what you take on when building directly versus using Aether.
| Feature | Aether | LinkedIn API directly |
|---|---|---|
| Partner access | ✓No approval needed — Aether is pre-approved | ✗LinkedIn Marketing Partner application required |
| Token refresh | ✓Automatic before 60-day expiry | ✗Manual refresh every 60 days |
| Authentication | ✓One API key | ✗OAuth 2.0 + organization URN management |
| Content types | ✓Posts, articles, images, videos, documents | ✗Varies by approval tier |
| API maintenance | ✓We absorb all breaking changes | ✗Your team's responsibility |
| Platform compliance | Official API, fully compliant | Official API, fully compliant |
Platform-level limits set by LinkedIn. Aether queues and retries automatically — your integration does not need backoff logic.
| Operation | Limit | HTTP status | Note |
|---|---|---|---|
| Member share | 150 requests / day | 429 | Per member access token |
| Organization post | 100 posts / day | 429 | Per org token |
| API calls | 500 calls / day / app | 429 | Across all endpoints |
| Token expiry | 60 days | 401 | Aether auto-refreshes |
| Video upload | 5 GB max / 10 min | 400 | MP4 / H.264 |
| Text post length | 3,000 characters | 422 | UTF-8 |
| Status | Meaning | How Aether handles it |
|---|---|---|
| 401 | Invalid or expired access token | Aether auto-refreshes — reconnect via Connect Link if it persists |
| 403 | Operation not permitted for this member/org | Re-connect via Connect Link to re-request permissions |
| 422 | Content policy violation | Review post content for LinkedIn community standards violations |
| 429 | Rate limit exceeded | Aether queues and retries after the window resets |
| 400 | Invalid request payload or field | Aether validates the request; check input fields and content type |
| 404 | Organization or member not found | Verify profileId is correct and account is still connected |
AI-Native
Aether ships an MCP server that exposes every LinkedIn endpoint as a callable tool. Claude Desktop, Cursor, Windsurf, and any MCP-compatible agent can draft, schedule, and pull analytics — with no additional integration code.
# Add to ~/.claude/claude_desktop_config.json
{
"mcpServers": {
"aether": {
"command": "npx",
"args": ["-y", "aether-mcp"],
"env": { "AETHER_API_KEY": "sk_live_..." }
}
}
}
# Claude can now post to LinkedIn:
# "Draft and schedule a LinkedIn post about our Q2 results for Monday 9am"
# "What's our LinkedIn engagement rate this month?"
# "Post our latest case study to the company page now"No. Aether holds the necessary platform approvals. You connect your LinkedIn Company Page through our connect link flow and start posting immediately — no separate LinkedIn developer application required.
Yes. Both Company Pages and personal profiles are supported. Personal profile posting uses the same connect link flow — the profile owner authorizes access, and you can post on their behalf programmatically.
LinkedIn access tokens expire after 60 days. Aether tracks expiry for every connected account and automatically initiates refresh before they lapse. If manual re-auth is ever needed, we fire a webhook so you can prompt the user.
Yes. Use contentType: 'article' in the overrides object. You can also post rich media posts, documents (PDFs as native document posts), and native videos. Each content type has its own set of optional fields.
LinkedIn is one of the best platforms for AI-assisted content publishing. Aether's MCP server exposes LinkedIn posting as a callable tool, so Claude can draft, schedule, and monitor LinkedIn posts in a single agent workflow.
Free tier · 3 accounts · full API access · MCP server · no credit card.
Get your free API key →