Use case

Post to all social media at once via API

One API call. Seven platforms. Instagram, TikTok, LinkedIn, Facebook, YouTube, Threads, and Reddit — simultaneously, with per-platform content overrides and real-time publish status webhooks.

Supported platforms

PlatformExample profileIdPost limitNotes
Instagramig_abc12350 posts/dayBusiness/Creator accounts only
TikToktt_xyz7894 videos/dayVideo posts require mp4 upload
LinkedInli_comp789150 API calls/dayCompany page or personal profile
Facebookfb_page456200 posts/dayPage posts — not personal profiles
YouTubeyt_ch12310,000 quota units/dayCommunity posts or video upload
Threadsth_user456250 posts/dayText + image posts supported
Redditrd_user789100 req/minPost to any connected subreddit

Post to all 7 platforms at once

Pass all your profile IDs in a single profileIds array. Aether publishes (or schedules) to each platform independently:

import Aether from "aether";

const aether = new Aether({ apiKey: process.env.AETHER_API_KEY });

// Post to all 7 platforms with one call
const post = await aether.posts.create({
  text: "Big news — our product just crossed 10,000 users 🎉",
  profileIds: [
    "ig_abc123",   // Instagram
    "tt_xyz789",   // TikTok
    "li_comp789",  // LinkedIn Company Page
    "fb_page456",  // Facebook Page
    "yt_ch123",    // YouTube Community Post
    "th_user456",  // Threads
    "rd_user789",  // Reddit
  ],
  mediaUrls: ["https://your-cdn.com/milestone-graphic.jpg"],
  scheduledFor: "2026-07-15T09:00:00Z", // optional — omit to publish immediately
});

console.log(post.data.id);     // unified post ID
console.log(post.data.status); // "scheduled" | "publishing" | "published"

Per-platform content overrides

Different platforms need different tones. The overrides field lets you customize text (and media) per profile ID without making separate API calls:

// Per-platform overrides — one call, tailored content per platform
const post = await aether.posts.create({
  // Default text — used for any platform not listed in overrides
  text: "Big news: 10,000 users. Thank you for the support.",
  profileIds: ["ig_abc123", "tt_xyz789", "li_comp789", "fb_page456", "th_user456", "rd_user789"],

  overrides: {
    // Instagram: shorter, punchy, heavy hashtags
    "ig_abc123": {
      text: "We hit 10k users 🎉🎉🎉 #milestone #saas #buildinpublic #startuplife",
    },
    // TikTok: hook-first format
    "tt_xyz789": {
      text: "POV: you just hit 10,000 users and you don't know how to feel about it 😅",
    },
    // LinkedIn: professional, narrative tone
    "li_comp789": {
      text: "Today we crossed 10,000 users. 18 months ago this product was a weekend project. Here's what we learned building it:",
    },
    // Threads: conversational, no hashtags
    "th_user456": {
      text: "10k users. Wild. Thanks for building with us.",
    },
    // Reddit: title + body (post to a specific subreddit via profileId)
    "rd_user789": {
      text: "We just hit 10,000 users — AMA about what it took to get here",
    },
  },
});

Real-time status per platform

Each platform publishes independently. Aether fires a webhook for each one — so you know exactly which platforms succeeded and which failed, with error details:

// Register a webhook to track every platform's publish status
const webhook = await aether.webhooks.create({
  url: "https://your-app.com/hooks/aether",
  events: ["post.published", "post.failed"],
});

// Your handler receives one event per platform:
// {
//   event: "post.published",
//   data: {
//     postId: "post_abc",
//     platform: "instagram",
//     platformPostId: "17841...",
//     platformPostUrl: "https://www.instagram.com/p/abc123/",
//     publishedAt: "2026-07-15T09:00:05Z"
//   }
// }
//
// {
//   event: "post.failed",
//   data: {
//     postId: "post_abc",
//     platform: "linkedin",
//     error: { code: "RATE_LIMITED", message: "UGC Post daily limit reached" }
//   }
// }

Python SDK

import os
from aether import Aether

client = Aether(api_key=os.environ["AETHER_API_KEY"])

post = client.posts.create(
    text="Big news — 10,000 users 🎉",
    profile_ids=[
        "ig_abc123",
        "tt_xyz789",
        "li_comp789",
        "fb_page456",
        "th_user456",
    ],
    media_urls=["https://your-cdn.com/milestone.jpg"],
    scheduled_for="2026-07-15T09:00:00Z",
)
print(post.data.status)  # "scheduled"

How cross-platform posting works

1
Connect profiles
Generate a Connect Link per platform. Your users (or you) authenticate on the platform's native screen. OAuth tokens are stored and refreshed automatically — you never handle credentials.
2
Call posts.create()
Pass all profile IDs in one call. Set scheduledFor for future publishing, or omit it to publish immediately. Add per-platform overrides for tailored content.
3
Aether queues and publishes
Each platform post enters an independent queue worker. Rate limits are validated before submission. Transient errors are retried with exponential backoff. You get one post ID that tracks the whole job.
4
Webhooks confirm each platform
As each platform publishes, a post.published webhook fires with the platform post ID and URL. If a platform fails after all retries, post.failed fires with the error details for that platform only.

Frequently asked questions

Can I post to all social media platforms at once via API?
Yes. Aether's posts.create endpoint accepts an array of profileIds — one per platform. Pass Instagram, TikTok, LinkedIn, Facebook, YouTube, Threads, and Reddit profile IDs in a single call, and Aether publishes to all of them simultaneously (or schedules them for a future time). You get a unified post ID and webhooks for each platform's publish status.
Can I customize the post text per platform?
Yes. The overrides field accepts a profileId-keyed object where you can customize text, media, and other fields per platform. For example, you can use #hashtags on Instagram, a professional tone on LinkedIn, and a casual hook on TikTok — all from a single API call.
How do I know when a post publishes on each platform?
Register a webhook endpoint with aether.webhooks.create(). Aether fires a post.published event for each platform as soon as the post goes live, including the platform-native post URL and post ID. If a platform fails, you get a post.failed event with the error details.
What happens if one platform fails but others succeed?
Each platform is published independently. If Instagram succeeds but LinkedIn fails (e.g., rate limit or token issue), the Instagram publish completes and you receive a post.published webhook for Instagram and a post.failed webhook for LinkedIn. No all-or-nothing behavior — partial success is handled gracefully.
Does Aether handle rate limits when posting to multiple platforms?
Yes. Aether validates against platform rate limits before submitting to the queue, retries transient errors with exponential backoff, and handles token refresh automatically. You don't write per-platform retry logic.

One call. Seven platforms.

Free tier: 3 connected accounts, full cross-platform posting, webhooks, and per-platform overrides. No credit card required.