adaptlypost

TotalClaw 作者 totalclaw

使用 AdaptlyPost API 安排和管理 Instagram、X (Twitter)、Bluesky、TikTok、Threads、LinkedIn、Facebook、Pinterest 和 YouTube 上的社交媒体帖子。当用户想要安排社交媒体帖子、管理社交媒体内容、上传社交帖子媒体、列出连接的社交帐户、检查帖子状态、将内容交叉发布到多个平台或自动化其社交媒体工作流程时使用。 AdaptlyPost 是一款 SaaS 工具——无需自托管。

安装 / 下载方式

TotalClaw CLI推荐
totalclaw install totalclaw:totalclaw~tarasshyn-adaptlypost
cURL直接下载,无需登录
curl -fsSL https://skills.taituai.com/api/skills/totalclaw%3Atotalclaw~tarasshyn-adaptlypost/file -o tarasshyn-adaptlypost.md
## 概述(中文)

使用 AdaptlyPost API 安排和管理 Instagram、X (Twitter)、Bluesky、TikTok、Threads、LinkedIn、Facebook、Pinterest 和 YouTube 上的社交媒体帖子。当用户想要安排社交媒体帖子、管理社交媒体内容、上传社交帖子媒体、列出连接的社交帐户、检查帖子状态、将内容交叉发布到多个平台或自动化其社交媒体工作流程时使用。 AdaptlyPost 是一款 SaaS 工具——无需自托管。

## 原文

# AdaptlyPost

Schedule social media posts across 9 platforms from one API. SaaS — no self-hosting needed.

## Setup

1. Sign up at https://adaptlypost.com/signup
2. Go to Settings → API Tokens → generate an API token
3. Set the environment variable:
   ```bash
   export ADAPTLYPOST_API_KEY="adaptly_your-token-here"
   ```

Base URL: `https://post.adaptlypost.com/post/api/v1`
Auth header: `Authorization: Bearer $ADAPTLYPOST_API_KEY`

## Core Workflow

### 1. List connected accounts

```bash
curl -s -H "Authorization: Bearer $ADAPTLYPOST_API_KEY" \
  https://post.adaptlypost.com/post/api/v1/social-accounts
```

Returns `{ "accounts": [{ "id", "platform", "displayName", "username", "avatarUrl" }] }`. Save the `id` — you'll use it as a connection ID when creating posts.

### 2. Publish a post immediately (no scheduling)

To publish right away, simply **omit `scheduledAt` entirely** and do NOT set `saveAsDraft`:

```bash
curl -X POST https://post.adaptlypost.com/post/api/v1/social-posts \
  -H "Authorization: Bearer $ADAPTLYPOST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "platforms": ["TWITTER"],
    "contentType": "TEXT",
    "text": "This goes live right now!",
    "timezone": "America/New_York",
    "twitterConnectionIds": ["CONNECTION_ID_HERE"]
  }'
```

**IMPORTANT**: Do NOT set `scheduledAt` to a time in the near future as a workaround. Omitting `scheduledAt` is the correct way to publish immediately.

Returns `{ "postId", "queuedPlatforms", "skippedPlatforms", "isScheduled", "scheduledAt" }`.

**Important**: You must include the correct `*ConnectionIds` array for each platform in `platforms`. For example, if posting to Instagram and Twitter, include both `instagramConnectionIds` and `twitterConnectionIds`. For Facebook, use `pageIds` instead.

### 3. Schedule a text post for later

```bash
curl -X POST https://post.adaptlypost.com/post/api/v1/social-posts \
  -H "Authorization: Bearer $ADAPTLYPOST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "platforms": ["TWITTER"],
    "contentType": "TEXT",
    "text": "Your post text here",
    "timezone": "America/New_York",
    "scheduledAt": "2026-06-15T10:00:00.000Z",
    "twitterConnectionIds": ["CONNECTION_ID_HERE"]
  }'
```

### 4. Save a post as draft (no scheduling)

Same as scheduling, but set `saveAsDraft: true` and omit `scheduledAt`:

```bash
curl -X POST https://post.adaptlypost.com/post/api/v1/social-posts \
  -H "Authorization: Bearer $ADAPTLYPOST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "platforms": ["INSTAGRAM"],
    "contentType": "TEXT",
    "text": "Draft post to review later",
    "timezone": "Europe/London",
    "saveAsDraft": true,
    "instagramConnectionIds": ["CONNECTION_ID_HERE"]
  }'
```

### 5. Schedule a post with media (3-step flow)

**Step A** — Get presigned upload URLs:

```bash
curl -X POST https://post.adaptlypost.com/post/api/v1/upload-urls \
  -H "Authorization: Bearer $ADAPTLYPOST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "files": [{ "fileName": "photo.jpg", "mimeType": "image/jpeg" }] }'
```

Returns `{ "urls": [{ "fileName", "uploadUrl", "publicUrl", "key", "expiresAt" }] }`.

**Step B** — Upload file to storage:

```bash
curl -X PUT "UPLOAD_URL_HERE" \
  -H "Content-Type: image/jpeg" \
  --data-binary @/path/to/photo.jpg
```

**Step C** — Create post with the public URL:

```bash
curl -X POST https://post.adaptlypost.com/post/api/v1/social-posts \
  -H "Authorization: Bearer $ADAPTLYPOST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "platforms": ["INSTAGRAM"],
    "contentType": "IMAGE",
    "text": "Post with image!",
    "mediaUrls": ["PUBLIC_URL_FROM_STEP_A"],
    "timezone": "America/New_York",
    "scheduledAt": "2026-06-15T10:00:00.000Z",
    "instagramConnectionIds": ["CONNECTION_ID_HERE"]
  }'
```

For video: use `mimeType: "video/mp4"`, `contentType: "VIDEO"`.
For carousel: upload multiple files, include all public URLs in `mediaUrls`, use `contentType: "CAROUSEL"`.

### 6. List posts

```bash
curl -s -H "Authorization: Bearer $ADAPTLYPOST_API_KEY" \
  "https://post.adaptlypost.com/post/api/v1/social-posts?limit=20&offset=0"
```

Returns `{ "posts": [...], "total": 25, "hasMore": true }`. Use `limit` (1-100, default 20) and `offset` (default 0) for pagination.

### 7. Get post details

```bash
curl -s -H "Authorization: Bearer $ADAPTLYPOST_API_KEY" \
  https://post.adaptlypost.com/post/api/v1/social-posts/POST_ID
```

Returns full post object with platform-specific status for each target platform.

### 8. Cross-post to multiple platforms

Include multiple platforms and their connection IDs in a single request:

```bash
curl -X POST https://post.adaptlypost.com/post/api/v1/social-posts \
  -H "Authorization: Bearer $ADAPTLYPOST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "platforms": ["TWITTER", "BLUESKY", "LINKEDIN"],
    "contentType": "TEXT",
    "text": "Same post across 3 platforms!",
    "timezone": "America/New_York",
    "scheduledAt": "2026-06-15T10:00:00.000Z",
    "twitterConnectionIds": ["TWITTER_ID"],
    "blueskyConnectionIds": ["BLUESKY_ID"],
    "linkedinConnectionIds": ["LINKEDIN_ID"]
  }'
```

### 9. Use per-platform text

Override the default text for specific platforms:

```bash
curl -X POST https://post.adaptlypost.com/post/api/v1/social-posts \
  -H "Authorization: Bearer $ADAPTLYPOST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "platforms": ["TWITTER", "LINKEDIN"],
    "contentType": "TEXT",
    "text": "Default text for all platforms",
    "platformTexts": [
      { "platform": "TWITTER", "text": "Short version for X #shortform" },
      { "platform": "LINKEDIN", "text": "Longer professional version with more detail for LinkedIn audience." }
    ],
    "timezone": "America/New_York",
    "scheduledAt": "2026-06-15T10:00:00.000Z",
    "twitterConnectionIds": ["TWITTER_ID"],
    "linkedinConnectionIds": ["LINKEDIN_ID"]
  }'
```

## Platform-Specific Configs

Pass these as config arrays in the request body. See [references/platform-configs.md](references/platform-configs.md) for full details.

| Platform        | Config Field       | Key Options                                                                                                             |
| --------------- | ------------------ | ----------------------------------------------------------------------------------------------------------------------- |
| **TikTok**      | `tiktokConfigs`    | `privacyLevel` (required), `allowComments`, `allowDuet`, `allowStitch`, `sendAsDraft`, `brandedContent`, `autoAddMusic` |
| **Instagram**   | `instagramConfigs` | `postType` (FEED/REEL/STORY)                                                                                            |
| **Facebook**    | `facebookConfigs`  | `postType` (FEED/REEL/STORY), `videoTitle`                                                                              |
| **YouTube**     | `youtubeConfigs`   | `postType` (VIDEO/SHORTS), `videoTitle`, `tags`, `privacyStatus`, `madeForKids`, `playlistId`                           |
| **Pinterest**   | `pinterestConfigs` | `boardId` (required), `title`, `link`                                                                                   |
| **X (Twitter)** | —                  | No config object, uses `twitterConnectionIds` only                                                                      |
| **Bluesky**     | —                  | No config object, uses `blueskyConnectionIds` only                                                                      |
| **Threads**     | —                  | No config object, uses `threadsConnectionIds` only