Aether

Node.js SDK

Official Aether client library for Node.js and TypeScript.

The official Node.js SDK (aether on npm) provides typed access to the Aether REST API.

Installation

npm install aether

Configuration

import { Aether } from "aether";

const client = new Aether({
  apiKey: process.env.AETHER_API_KEY!,
  // baseUrl: "https://api.aetherhq.dev/v1", // optional override
});

Reads AETHER_API_KEY from the environment when passed to the constructor.

Paginated lists

posts.list(), inbox.list(), and webhooks.listDeliveries() return a PaginatedList<T>:

import type { PaginatedList } from "aether";

const { items, total, hasMore } = await client.posts.list({ perPage: 20 });

Resources

ResourceMethodsGuide
client.profileslist, get, disconnectConnect Links
client.postslist, create, get, update, cancelPublishing
client.queueslist, create, get, update, delete, peekNextSlotQueues
client.automationslistCommentToDm, createCommentToDm, getCommentToDm, updateCommentToDm, deleteCommentToDm, testCommentToDmAutomations
client.inboxlist, reply, markAsRead, sendPrivateReplyInbox
client.analyticsgetPostMetrics, getAccountMetrics, getBestPostingTimesAnalytics
client.webhookslist, create, update, delete, deliveriesWebhooks
client.connectLinkslist, createConnect Links

Error handling

import { AetherError } from "aether";

try {
  await client.posts.create({ text: "Hi", profileIds: ["bad_id"] });
} catch (err) {
  if (err instanceof AetherError) {
    console.error(err.code, err.message, err.httpStatus);
  }
}

Idempotency

Pass Idempotency-Key on post creation via request options. The SDK automatically retries on 409 IDEMPOTENCY_IN_PROGRESS.

Not yet in SDK

These API areas are available via REST but not yet wrapped in the Node SDK:

  • API keys (/v1/api-keys)
  • Organization and team (/v1/organization)
  • Media presign (/v1/media/presign)

Use fetch or extend the client for these endpoints until SDK support ships.

Threads (V1)

Threads is supported for connect and publish via the Node SDK. Other language SDKs (Python, Go, Java, etc.) are not generated yet — use REST or the Node SDK until they ship.

Connect

const link = await client.connectLinks.create({
  platform: "threads",
  redirectUrl: "https://yourapp.com/settings/social",
});
// Send link.url to your user; after OAuth, list profiles to get the profileId

Publish and schedule

await client.posts.create({
  text: "Hello Threads",
  profileIds: ["<threads-profile-id>"],
  scheduledFor: "2026-06-15T12:00:00Z", // omit to publish immediately
  overrides: {
    threads: {
      topicTag: "productlaunch",
      threadItems: [
        { text: "First post in the thread" },
        { text: "Second post — published as a reply" },
      ],
    },
  },
});

Cross-post in one call by including multiple profileIds (e.g. Instagram + Threads).

TypeScript types

The hand-maintained PlatformOverride type in the SDK currently exposes text and mediaUrls. Threads-specific fields (topicTag, threadItems) are fully supported by the REST API and work at runtime — use a type assertion or pass overrides through fetch if strict typing blocks you until the SDK is regenerated from OpenAPI.

Not available for Threads yet

  • client.inbox.* — Instagram and Facebook only
  • client.analytics.* — Instagram and Facebook only
  • client.automations.* — Instagram and Facebook only

See Threads platform guide for Meta developer setup and content types.

TikTok (V1)

TikTok is supported for connect and publish via the Node SDK. Posts require at least one mediaUrl (video or images for Photo Mode).

Connect

const link = await client.connectLinks.create({
  platform: "tiktok",
  redirectUrl: "https://yourapp.com/settings/social",
});

Publish and schedule

await client.posts.create({
  text: "POV: shipped in minutes 👀",
  profileIds: ["<tiktok-profile-id>"],
  mediaUrls: ["https://cdn.example.com/clip.mp4"],
  scheduledFor: "2026-06-15T18:00:00Z", // omit to publish immediately
});

Not available for TikTok yet

  • client.inbox.* — Instagram and Facebook only
  • client.analytics.* — Instagram and Facebook only
  • client.automations.* — Instagram and Facebook only

See TikTok platform guide for content types and rate limits.

LinkedIn (V1)

LinkedIn is supported for connect and publish on personal profiles via the Node SDK — text posts, images, and PDF documents.

Connect

const link = await client.connectLinks.create({
  platform: "linkedin",
  redirectUrl: "https://yourapp.com/settings/social",
});

Publish and schedule

// Text post
await client.posts.create({
  text: "Thoughts on shipping faster with a unified API",
  profileIds: ["<linkedin-profile-id>"],
});

// PDF document post
await client.posts.create({
  text: "Our Q1 report is live",
  profileIds: ["<linkedin-profile-id>"],
  mediaUrls: ["https://cdn.example.com/report.pdf"],
  overrides: {
    linkedin: { documentTitle: "Q1 Report" },
  },
  scheduledFor: "2026-07-15T08:00:00Z", // omit to publish immediately
});

Not available for LinkedIn yet

  • Company page posting — Community Management API approval required (coming soon)
  • client.inbox.* — Instagram and Facebook only
  • client.analytics.* — Instagram and Facebook only
  • client.automations.* — Instagram and Facebook only

See LinkedIn platform guide for overrides, first comment, and rate limits.

OpenAPI

The SDK is maintained alongside packages/openapi/openapi.yaml. See API Reference for full request/response schemas.

On this page