Facebook API
Facebook's Graph API requires separate app registration from Instagram, complex permission scopes, and manual token lifecycle management. Aether wraps all of that — post to Pages, cross-post to Instagram, and manage Reels with one API key.
One call for posts, photos, and cross-platform publishing. Pass multiple profileIds and Aether handles both Facebook and Instagram in parallel.
import Aether from "aether";
const aether = new Aether({ apiKey: process.env.AETHER_API_KEY });
// Post to Facebook Page
const post = await aether.posts.create({
text: "Big announcement from the team 📢\n\nWe just launched...",
profileIds: ["fb_page456"],
mediaUrls: ["https://your-cdn.com/banner.jpg"],
overrides: {
facebook: { contentType: "post" },
},
});
// Cross-post to Facebook + Instagram simultaneously
const crossPost = await aether.posts.create({
text: "Launching something big today 🚀",
profileIds: ["fb_page456", "ig_abc123"],
mediaUrls: ["https://your-cdn.com/launch.jpg"],
overrides: {
facebook: { contentType: "post" },
instagram: { contentType: "reel" },
},
scheduledFor: "2026-06-15T10:00:00Z",
});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 Facebook Page
post = client.posts.create(
text="Big announcement from the team 📢",
profile_ids=["fb_page456"],
media_urls=["https://your-cdn.com/banner.jpg"],
overrides={"facebook": {"content_type": "post"}},
)
# Cross-post to Facebook + Instagram
cross_post = client.posts.create(
text="Launching something big today 🚀",
profile_ids=["fb_page456", "ig_abc123"],
media_urls=["https://your-cdn.com/launch.jpg"],
scheduled_for="2026-06-15T10:00:00Z",
)curl -X POST https://api.aetherhq.dev/v1/posts \
-H "Authorization: Bearer $AETHER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "Launching something big today 🚀",
"profileIds": ["fb_page456", "ig_abc123"],
"mediaUrls": ["https://your-cdn.com/launch.jpg"],
"scheduledFor": "2026-06-15T10:00:00Z",
"overrides": {
"facebook": { "contentType": "post" },
"instagram": { "contentType": "reel" }
}
}'Aether returns a normalized post object immediately. Once published, publishResults includes the native Facebook post ID for each Page.
{
"success": true,
"data": {
"id": "post_5p7rq2a",
"status": "scheduled",
"text": "Launching something big today 🚀",
"profileIds": ["fb_page456", "ig_abc123"],
"mediaUrls": ["https://cdn.aetherhq.dev/org_9p2qrs/launch.jpg"],
"mediaKeys": ["org_9p2qrs/launch.jpg"],
"scheduledFor": "2026-06-15T10:00:00.000Z",
"publishResults": [],
"publishedAt": null,
"failedAt": null,
"createdAt": "2026-06-08T14:23:11.000Z"
}
}Getting direct Facebook API access means: registering a separate Meta developer app from your Instagram app, requesting the right combination of Page permissions, and submitting for Meta app review.
Aether's Connect Link removes all of that. Call one endpoint, get a URL, send it to your user. They authorize their Facebook Page, and it appears in your dashboard immediately.
// Generate a Connect Link for your user to authenticate Facebook
const link = await aether.connectLinks.create({
platform: "facebook",
redirectUrl: "https://yourapp.com/settings/social",
});
// Send link.url to your user — they click, authorize their Facebook Page,
// and it appears in your dashboard automatically.
// No Meta developer portal setup needed on your end.
console.log(link.url); // "https://connect.aetherhq.dev/link/cl_fb2r5s..."
console.log(link.expiresAt); // "2026-06-15T14:23:11.000Z"Facebook's permission scopes and app review process are handled by Aether. Connect your Page through our Connect Link flow and start publishing immediately.
If your Facebook Page is linked to an Instagram Business account, post to both simultaneously with one API call and multiple profileIds.
Single images and multi-photo posts. Pass media URLs and Aether handles Facebook's multi-upload API internally. Your code stays the same.
Upload MP4 videos up to 4 GB or pass a URL. Facebook Reels use the same call with contentType: 'reel'. Aether handles the resumable upload protocol.
Pass scheduledFor and Aether queues the post for up to 6 months in advance. Works for all content types — posts, photos, videos, and Reels.
Facebook Page access tokens for live apps never expire, but Aether rotates and manages them automatically. No token lifecycle code on your end.
Reach, impressions, engagement, and fan growth per Page and per post. Historical data with custom date ranges via the Analytics API.
Every Facebook endpoint is an MCP tool. Claude, Cursor, and any MCP-compatible agent can post, schedule, and pull analytics without extra code.
Facebook and Instagram require separate Meta developer apps with distinct permission sets. Here's what you take on directly versus using Aether.
| Feature | Aether | Meta Graph API directly |
|---|---|---|
| Permission scopes | ✓Handled by Aether's connect flow | ✗Complex scope management your team owns |
| Token refresh | ✓Automatic — tokens never expire on your end | ✗Manual refresh every 60 days |
| Cross-posting | ✓Facebook + Instagram in one API call | ✗Two separate Meta API integrations |
| Authentication | ✓One API key | ✗App Review + OAuth 2.0 |
| 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 Meta. Aether queues and retries automatically — your integration does not need backoff logic.
| Operation | Limit | Error code | Note |
|---|---|---|---|
| API calls | 200 calls / hr / token | 32 | Per access token |
| Page posts | 200 posts / day | 341 | Per Facebook Page |
| Video upload | 4 GB / 120 min | 352 | MP4 recommended |
| Photo upload | 4 MB per image | 352 | JPEG / PNG |
| Caption length | 63,206 characters | 100 | UTF-8 |
| Scheduled post window | 6 months ahead | — | Min 10 min from now |
| Code | Meaning | How Aether handles it |
|---|---|---|
| 190 | Invalid or expired access token | Aether auto-refreshes — reconnect via Connect Link if it persists |
| 10 | Permission not granted or removed | Re-connect via Connect Link; all scopes are requested upfront |
| 100 | Invalid request parameter | Aether validates the request; check your input fields |
| 200 | Permission denied for this operation | Ensure account has Page admin role and correct permission |
| 341 | Daily post limit reached | Aether queues excess posts for the next available window |
| 368 | Account temporarily blocked (spam) | Content policy review required before resubmitting |
AI-Native
Aether ships an MCP server that exposes every Facebook endpoint as a callable tool. Claude Desktop, Cursor, Windsurf, and any MCP-compatible agent can post, schedule, cross-post with Instagram, 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 Facebook:
# "Post our product update to the Facebook Page and Instagram"
# "Schedule next week's Facebook posts for 10am daily"
# "What's our Facebook reach this month?"No — Meta's API policy restricts posting to Pages and Groups only. Personal profiles cannot be connected to third-party apps. You need a Facebook Page to use the API, which is free to create from your personal account.
If your Facebook Page is linked to an Instagram Business account via Meta Business Suite, you can post to both simultaneously with one API call using multiple profileIds. Aether handles the platform-specific formatting for each automatically.
No. Aether automatically manages Facebook Page access tokens. For live apps, page tokens don't expire — but Aether still handles rotation and monitors for any revocation events.
Yes. Each Page is a separate connected profile with its own profileId. Pass multiple profileIds in one API call to post to all of them simultaneously with identical or per-platform customized content.
Yes. Use contentType: 'reel' in the overrides.facebook object and provide a video file. Facebook Reels requires a minimum 3-second video and follows similar format requirements to Instagram Reels.
Free tier · 3 accounts · full API access · MCP server · no credit card.
Get your free API key →