← Back to Skills Marketplace
tarasshyn

AdaptlyPost

by Taras Shynkarenko · GitHub ↗ · v1.0.4 · MIT-0
cross-platform ✓ Security Clean
1515
Downloads
3
Stars
5
Active Installs
4
Versions
Install in OpenClaw
/install adaptlypost
Description
Schedule and manage social media posts across Instagram, X (Twitter), Bluesky, TikTok, Threads, LinkedIn, Facebook, Pinterest, and YouTube using the AdaptlyP...
README (SKILL.md)

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:
    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

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:

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

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:

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:

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:

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:

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

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

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:

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:

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 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
LinkedIn No config object, uses linkedinConnectionIds only

Example with TikTok config:

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": ["TIKTOK"],
    "contentType": "VIDEO",
    "text": "Check out this clip!",
    "mediaUrls": ["https://cdn.adaptlypost.com/social-media-posts/uuid/video.mp4"],
    "timezone": "America/New_York",
    "scheduledAt": "2026-06-15T18:00:00.000Z",
    "tiktokConnectionIds": ["TIKTOK_ID"],
    "tiktokConfigs": [{
      "connectionId": "TIKTOK_ID",
      "privacyLevel": "PUBLIC_TO_EVERYONE",
      "allowComments": true,
      "allowDuet": false,
      "allowStitch": true
    }]
  }'

Supported File Types for Upload

MIME Type Extension Use For
image/jpeg .jpg, .jpeg Images
image/png .png Images
image/webp .webp Images
video/mp4 .mp4 Videos
video/quicktime .mov Videos

Upload 1-20 files per request.

Media Specs Quick Reference

Platform Images Video Carousel
TikTok Carousels only MP4/MOV, ≤250MB, 3s-10min 2-35 images
Instagram JPEG/PNG ≤1GB, 3-90s (Reels) Up to 10
Facebook ≤30MB, JPG/PNG 1 per post Up to 10 images
YouTube Shorts ≤3min, H.264
LinkedIn Up to 9 ≤10min Up to 9
X (Twitter) Up to 4
Pinterest 2:3 ratio ideal Supported 2-5 images
Bluesky Up to 4 Not supported
Threads Supported Supported Up to 10

Tips for the Agent

CRITICAL — Always ask before posting

  • NEVER assume whether the user wants to post now, schedule for later, or save as draft. ALWAYS ask the user: "Do you want to post this now, schedule it for a specific time, or save it as a draft?" Wait for their answer before making the API call.
  • If the user says "post now", "publish now", or "right away": completely omit scheduledAt from the request body — do NOT set it to a time in the near future. The API publishes immediately when scheduledAt is absent.
  • If the user says "schedule": ask for the date and time, then set scheduledAt to an ISO 8601 timestamp.
  • If the user says "draft": set saveAsDraft: true and omit scheduledAt.

Timezone handling

  • The timezone field is required on every post creation request.
  • On the first interaction, ask the user: "What timezone are you in? (e.g., Europe/Berlin, America/New_York)". Once they answer, remember it for all future posts in this conversation — do not ask again.
  • If the user has previously told you their timezone in this conversation, reuse it silently.
  • Common timezones: Europe/London, Europe/Berlin, Europe/Paris, America/New_York, America/Chicago, America/Los_Angeles, Asia/Tokyo, Australia/Sydney.

API workflow

  • Always call /social-accounts first to get valid connection IDs for each platform.
  • For media posts, complete the full 3-step upload flow (get upload URL → PUT file → create post with mediaUrls).
  • scheduledAt must be ISO 8601 and in the future. Omit it when using saveAsDraft: true.
  • Each platform needs its connection IDs: twitterConnectionIds, instagramConnectionIds, blueskyConnectionIds, linkedinConnectionIds, tiktokConnectionIds, threadsConnectionIds, pinterestConnectionIds, youtubeConnectionIds. Facebook uses pageIds.
  • TikTok configs require privacyLevel — always set it (e.g., PUBLIC_TO_EVERYONE).
  • Pinterest configs require boardId — there is no way to fetch boards via this API currently, so ask the user which board to use.
  • For carousels, upload multiple files and include all public URLs in mediaUrls.
  • Use platformTexts to customize text per platform when cross-posting.
  • Content types: TEXT (no media), IMAGE (single image), VIDEO (single video), CAROUSEL (multiple images/videos).
  • Check skippedPlatforms in the response — it tells you if any platform was skipped and why.
Usage Guidance
This skill appears internally consistent with its stated purpose. Before installing: (1) Verify adaptlypost.com is the legitimate service you expect and that the API token you create has only the permissions needed for posting; (2) Treat ADAPTLYPOST_API_KEY as sensitive — revoke it if compromised; (3) Be aware the workflow requires uploading local media files to presigned URLs (these uploads become accessible at the provided publicUrl), so avoid uploading highly sensitive material; (4) Monitor account and API usage after enabling the skill and revoke the token if you observe unexpected activity; (5) If you want stricter control, create a limited-scope token on AdaptlyPost (if supported) rather than using a full-account token.
Capability Analysis
Type: OpenClaw Skill Name: adaptlypost Version: 1.0.4 The adaptlypost skill bundle is a legitimate integration for a social media management SaaS. It provides comprehensive documentation and API references for scheduling posts across multiple platforms (Instagram, X, TikTok, etc.) using the AdaptlyPost API (post.adaptlypost.com). The instructions in SKILL.md include proactive safety measures, explicitly directing the AI agent to always seek user confirmation before publishing any content and to handle timezones transparently. No evidence of data exfiltration, malicious execution, or harmful prompt injection was found.
Capability Assessment
Purpose & Capability
Name/description match the behavior in SKILL.md: all examples call the AdaptlyPost API at post.adaptlypost.com and operate on social accounts, posts, uploads, and scheduling. The single required env var (ADAPTLYPOST_API_KEY) is appropriate for a SaaS API wrapper.
Instruction Scope
SKILL.md contains concrete curl examples against the documented base URL and upload workflow (get presigned URLs, PUT file, then create post). Referencing local files for media upload is expected for this use case; there are no instructions to read unrelated files, other environment variables, or to exfiltrate unrelated data.
Install Mechanism
No install spec or code files are present (instruction-only), so nothing is written to disk or downloaded during install. This is the lowest-risk install model.
Credentials
Only ADAPTLYPOST_API_KEY is required and declared as the primary credential. That aligns with the described API usage; no unrelated secrets, config paths, or broad credential access are requested.
Persistence & Privilege
The skill does not request always:true and does not modify other skills or system-wide settings. The default allowance for autonomous invocation is present but not combined with other red flags.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install adaptlypost
  3. After installation, invoke the skill by name or use /adaptlypost
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.4
- Add POST /social-posts/bulk - Add two levels of config for bulk schedules
v1.0.3
- Updated signup link in the setup instructions from https://app.adaptlypost.com/register to https://adaptlypost.com/signup. - No functional or API changes; documentation improvement only.
v1.0.1
Improved the reliability of the skill.
v1.0.0
AdaptlyPost 1.0.0 — Initial Release - Schedule, publish, and draft posts across 9 social platforms including Instagram, X (Twitter), Bluesky, TikTok, Threads, LinkedIn, Facebook, Pinterest, and YouTube. - Upload and attach media to posts using a secure 3-step workflow. - Manage and list connected social accounts; check status of scheduled or published posts. - Support for cross-posting content to multiple platforms in one request. - Fine-tune post content for each platform via per-platform overrides and platform-specific configuration options. - No self-hosting required—adaptlypost provides a fully managed SaaS API.
Metadata
Slug adaptlypost
Version 1.0.4
License MIT-0
All-time Installs 5
Active Installs 5
Total Versions 4
Frequently Asked Questions

What is AdaptlyPost?

Schedule and manage social media posts across Instagram, X (Twitter), Bluesky, TikTok, Threads, LinkedIn, Facebook, Pinterest, and YouTube using the AdaptlyP... It is an AI Agent Skill for Claude Code / OpenClaw, with 1515 downloads so far.

How do I install AdaptlyPost?

Run "/install adaptlypost" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is AdaptlyPost free?

Yes, AdaptlyPost is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does AdaptlyPost support?

AdaptlyPost is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created AdaptlyPost?

It is built and maintained by Taras Shynkarenko (@tarasshyn); the current version is v1.0.4.

💬 Comments