{
  "schemaVersion": "1.0",
  "item": {
    "slug": "adaptlypost",
    "name": "AdaptlyPost",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/TarasShyn/adaptlypost",
    "canonicalUrl": "https://clawhub.ai/TarasShyn/adaptlypost",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/adaptlypost",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=adaptlypost",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "references/platform-configs.md",
      "references/api-reference.md",
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/adaptlypost"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/adaptlypost",
    "agentPageUrl": "https://openagent3.xyz/skills/adaptlypost/agent",
    "manifestUrl": "https://openagent3.xyz/skills/adaptlypost/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/adaptlypost/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "AdaptlyPost",
        "body": "Schedule social media posts across 9 platforms from one API. SaaS — no self-hosting needed."
      },
      {
        "title": "Setup",
        "body": "Sign up at https://adaptlypost.com/signup\nGo to Settings → API Tokens → generate an API token\nSet the environment variable:\nexport ADAPTLYPOST_API_KEY=\"adaptly_your-token-here\"\n\nBase URL: https://post.adaptlypost.com/post/api/v1\nAuth header: Authorization: Bearer $ADAPTLYPOST_API_KEY"
      },
      {
        "title": "1. List connected accounts",
        "body": "curl -s -H \"Authorization: Bearer $ADAPTLYPOST_API_KEY\" \\\n  https://post.adaptlypost.com/post/api/v1/social-accounts\n\nReturns { \"accounts\": [{ \"id\", \"platform\", \"displayName\", \"username\", \"avatarUrl\" }] }. Save the id — you'll use it as a connection ID when creating posts."
      },
      {
        "title": "2. Publish a post immediately (no scheduling)",
        "body": "To publish right away, simply omit scheduledAt entirely and do NOT set saveAsDraft:\n\ncurl -X POST https://post.adaptlypost.com/post/api/v1/social-posts \\\n  -H \"Authorization: Bearer $ADAPTLYPOST_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"platforms\": [\"TWITTER\"],\n    \"contentType\": \"TEXT\",\n    \"text\": \"This goes live right now!\",\n    \"timezone\": \"America/New_York\",\n    \"twitterConnectionIds\": [\"CONNECTION_ID_HERE\"]\n  }'\n\nIMPORTANT: Do NOT set scheduledAt to a time in the near future as a workaround. Omitting scheduledAt is the correct way to publish immediately.\n\nReturns { \"postId\", \"queuedPlatforms\", \"skippedPlatforms\", \"isScheduled\", \"scheduledAt\" }.\n\nImportant: 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."
      },
      {
        "title": "3. Schedule a text post for later",
        "body": "curl -X POST https://post.adaptlypost.com/post/api/v1/social-posts \\\n  -H \"Authorization: Bearer $ADAPTLYPOST_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"platforms\": [\"TWITTER\"],\n    \"contentType\": \"TEXT\",\n    \"text\": \"Your post text here\",\n    \"timezone\": \"America/New_York\",\n    \"scheduledAt\": \"2026-06-15T10:00:00.000Z\",\n    \"twitterConnectionIds\": [\"CONNECTION_ID_HERE\"]\n  }'"
      },
      {
        "title": "4. Save a post as draft (no scheduling)",
        "body": "Same as scheduling, but set saveAsDraft: true and omit scheduledAt:\n\ncurl -X POST https://post.adaptlypost.com/post/api/v1/social-posts \\\n  -H \"Authorization: Bearer $ADAPTLYPOST_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"platforms\": [\"INSTAGRAM\"],\n    \"contentType\": \"TEXT\",\n    \"text\": \"Draft post to review later\",\n    \"timezone\": \"Europe/London\",\n    \"saveAsDraft\": true,\n    \"instagramConnectionIds\": [\"CONNECTION_ID_HERE\"]\n  }'"
      },
      {
        "title": "5. Schedule a post with media (3-step flow)",
        "body": "Step A — Get presigned upload URLs:\n\ncurl -X POST https://post.adaptlypost.com/post/api/v1/upload-urls \\\n  -H \"Authorization: Bearer $ADAPTLYPOST_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{ \"files\": [{ \"fileName\": \"photo.jpg\", \"mimeType\": \"image/jpeg\" }] }'\n\nReturns { \"urls\": [{ \"fileName\", \"uploadUrl\", \"publicUrl\", \"key\", \"expiresAt\" }] }.\n\nStep B — Upload file to storage:\n\ncurl -X PUT \"UPLOAD_URL_HERE\" \\\n  -H \"Content-Type: image/jpeg\" \\\n  --data-binary @/path/to/photo.jpg\n\nStep C — Create post with the public URL:\n\ncurl -X POST https://post.adaptlypost.com/post/api/v1/social-posts \\\n  -H \"Authorization: Bearer $ADAPTLYPOST_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"platforms\": [\"INSTAGRAM\"],\n    \"contentType\": \"IMAGE\",\n    \"text\": \"Post with image!\",\n    \"mediaUrls\": [\"PUBLIC_URL_FROM_STEP_A\"],\n    \"timezone\": \"America/New_York\",\n    \"scheduledAt\": \"2026-06-15T10:00:00.000Z\",\n    \"instagramConnectionIds\": [\"CONNECTION_ID_HERE\"]\n  }'\n\nFor video: use mimeType: \"video/mp4\", contentType: \"VIDEO\".\nFor carousel: upload multiple files, include all public URLs in mediaUrls, use contentType: \"CAROUSEL\"."
      },
      {
        "title": "6. List posts",
        "body": "curl -s -H \"Authorization: Bearer $ADAPTLYPOST_API_KEY\" \\\n  \"https://post.adaptlypost.com/post/api/v1/social-posts?limit=20&offset=0\"\n\nReturns { \"posts\": [...], \"total\": 25, \"hasMore\": true }. Use limit (1-100, default 20) and offset (default 0) for pagination."
      },
      {
        "title": "7. Get post details",
        "body": "curl -s -H \"Authorization: Bearer $ADAPTLYPOST_API_KEY\" \\\n  https://post.adaptlypost.com/post/api/v1/social-posts/POST_ID\n\nReturns full post object with platform-specific status for each target platform."
      },
      {
        "title": "8. Cross-post to multiple platforms",
        "body": "Include multiple platforms and their connection IDs in a single request:\n\ncurl -X POST https://post.adaptlypost.com/post/api/v1/social-posts \\\n  -H \"Authorization: Bearer $ADAPTLYPOST_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"platforms\": [\"TWITTER\", \"BLUESKY\", \"LINKEDIN\"],\n    \"contentType\": \"TEXT\",\n    \"text\": \"Same post across 3 platforms!\",\n    \"timezone\": \"America/New_York\",\n    \"scheduledAt\": \"2026-06-15T10:00:00.000Z\",\n    \"twitterConnectionIds\": [\"TWITTER_ID\"],\n    \"blueskyConnectionIds\": [\"BLUESKY_ID\"],\n    \"linkedinConnectionIds\": [\"LINKEDIN_ID\"]\n  }'"
      },
      {
        "title": "9. Use per-platform text",
        "body": "Override the default text for specific platforms:\n\ncurl -X POST https://post.adaptlypost.com/post/api/v1/social-posts \\\n  -H \"Authorization: Bearer $ADAPTLYPOST_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"platforms\": [\"TWITTER\", \"LINKEDIN\"],\n    \"contentType\": \"TEXT\",\n    \"text\": \"Default text for all platforms\",\n    \"platformTexts\": [\n      { \"platform\": \"TWITTER\", \"text\": \"Short version for X #shortform\" },\n      { \"platform\": \"LINKEDIN\", \"text\": \"Longer professional version with more detail for LinkedIn audience.\" }\n    ],\n    \"timezone\": \"America/New_York\",\n    \"scheduledAt\": \"2026-06-15T10:00:00.000Z\",\n    \"twitterConnectionIds\": [\"TWITTER_ID\"],\n    \"linkedinConnectionIds\": [\"LINKEDIN_ID\"]\n  }'"
      },
      {
        "title": "Platform-Specific Configs",
        "body": "Pass these as config arrays in the request body. See references/platform-configs.md for full details.\n\nPlatformConfig FieldKey OptionsTikToktiktokConfigsprivacyLevel (required), allowComments, allowDuet, allowStitch, sendAsDraft, brandedContent, autoAddMusicInstagraminstagramConfigspostType (FEED/REEL/STORY)FacebookfacebookConfigspostType (FEED/REEL/STORY), videoTitleYouTubeyoutubeConfigspostType (VIDEO/SHORTS), videoTitle, tags, privacyStatus, madeForKids, playlistIdPinterestpinterestConfigsboardId (required), title, linkX (Twitter)—No config object, uses twitterConnectionIds onlyBluesky—No config object, uses blueskyConnectionIds onlyThreads—No config object, uses threadsConnectionIds onlyLinkedIn—No config object, uses linkedinConnectionIds only\n\nExample with TikTok config:\n\ncurl -X POST https://post.adaptlypost.com/post/api/v1/social-posts \\\n  -H \"Authorization: Bearer $ADAPTLYPOST_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"platforms\": [\"TIKTOK\"],\n    \"contentType\": \"VIDEO\",\n    \"text\": \"Check out this clip!\",\n    \"mediaUrls\": [\"https://cdn.adaptlypost.com/social-media-posts/uuid/video.mp4\"],\n    \"timezone\": \"America/New_York\",\n    \"scheduledAt\": \"2026-06-15T18:00:00.000Z\",\n    \"tiktokConnectionIds\": [\"TIKTOK_ID\"],\n    \"tiktokConfigs\": [{\n      \"connectionId\": \"TIKTOK_ID\",\n      \"privacyLevel\": \"PUBLIC_TO_EVERYONE\",\n      \"allowComments\": true,\n      \"allowDuet\": false,\n      \"allowStitch\": true\n    }]\n  }'"
      },
      {
        "title": "Supported File Types for Upload",
        "body": "MIME TypeExtensionUse Forimage/jpeg.jpg, .jpegImagesimage/png.pngImagesimage/webp.webpImagesvideo/mp4.mp4Videosvideo/quicktime.movVideos\n\nUpload 1-20 files per request."
      },
      {
        "title": "Media Specs Quick Reference",
        "body": "PlatformImagesVideoCarouselTikTokCarousels onlyMP4/MOV, ≤250MB, 3s-10min2-35 imagesInstagramJPEG/PNG≤1GB, 3-90s (Reels)Up to 10Facebook≤30MB, JPG/PNG1 per postUp to 10 imagesYouTube—Shorts ≤3min, H.264—LinkedInUp to 9≤10minUp to 9X (Twitter)Up to 4——Pinterest2:3 ratio idealSupported2-5 imagesBlueskyUp to 4Not supported—ThreadsSupportedSupportedUp to 10"
      },
      {
        "title": "CRITICAL — Always ask before posting",
        "body": "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.\nIf 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.\nIf the user says \"schedule\": ask for the date and time, then set scheduledAt to an ISO 8601 timestamp.\nIf the user says \"draft\": set saveAsDraft: true and omit scheduledAt."
      },
      {
        "title": "Timezone handling",
        "body": "The timezone field is required on every post creation request.\nOn 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.\nIf the user has previously told you their timezone in this conversation, reuse it silently.\nCommon timezones: Europe/London, Europe/Berlin, Europe/Paris, America/New_York, America/Chicago, America/Los_Angeles, Asia/Tokyo, Australia/Sydney."
      },
      {
        "title": "API workflow",
        "body": "Always call /social-accounts first to get valid connection IDs for each platform.\nFor media posts, complete the full 3-step upload flow (get upload URL → PUT file → create post with mediaUrls).\nscheduledAt must be ISO 8601 and in the future. Omit it when using saveAsDraft: true.\nEach platform needs its connection IDs: twitterConnectionIds, instagramConnectionIds, blueskyConnectionIds, linkedinConnectionIds, tiktokConnectionIds, threadsConnectionIds, pinterestConnectionIds, youtubeConnectionIds. Facebook uses pageIds.\nTikTok configs require privacyLevel — always set it (e.g., PUBLIC_TO_EVERYONE).\nPinterest configs require boardId — there is no way to fetch boards via this API currently, so ask the user which board to use.\nFor carousels, upload multiple files and include all public URLs in mediaUrls.\nUse platformTexts to customize text per platform when cross-posting.\nContent types: TEXT (no media), IMAGE (single image), VIDEO (single video), CAROUSEL (multiple images/videos).\nCheck skippedPlatforms in the response — it tells you if any platform was skipped and why."
      }
    ],
    "body": "AdaptlyPost\n\nSchedule social media posts across 9 platforms from one API. SaaS — no self-hosting needed.\n\nSetup\nSign up at https://adaptlypost.com/signup\nGo to Settings → API Tokens → generate an API token\nSet the environment variable:\nexport ADAPTLYPOST_API_KEY=\"adaptly_your-token-here\"\n\n\nBase URL: https://post.adaptlypost.com/post/api/v1 Auth header: Authorization: Bearer $ADAPTLYPOST_API_KEY\n\nCore Workflow\n1. List connected accounts\ncurl -s -H \"Authorization: Bearer $ADAPTLYPOST_API_KEY\" \\\n  https://post.adaptlypost.com/post/api/v1/social-accounts\n\n\nReturns { \"accounts\": [{ \"id\", \"platform\", \"displayName\", \"username\", \"avatarUrl\" }] }. Save the id — you'll use it as a connection ID when creating posts.\n\n2. Publish a post immediately (no scheduling)\n\nTo publish right away, simply omit scheduledAt entirely and do NOT set saveAsDraft:\n\ncurl -X POST https://post.adaptlypost.com/post/api/v1/social-posts \\\n  -H \"Authorization: Bearer $ADAPTLYPOST_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"platforms\": [\"TWITTER\"],\n    \"contentType\": \"TEXT\",\n    \"text\": \"This goes live right now!\",\n    \"timezone\": \"America/New_York\",\n    \"twitterConnectionIds\": [\"CONNECTION_ID_HERE\"]\n  }'\n\n\nIMPORTANT: Do NOT set scheduledAt to a time in the near future as a workaround. Omitting scheduledAt is the correct way to publish immediately.\n\nReturns { \"postId\", \"queuedPlatforms\", \"skippedPlatforms\", \"isScheduled\", \"scheduledAt\" }.\n\nImportant: 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.\n\n3. Schedule a text post for later\ncurl -X POST https://post.adaptlypost.com/post/api/v1/social-posts \\\n  -H \"Authorization: Bearer $ADAPTLYPOST_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"platforms\": [\"TWITTER\"],\n    \"contentType\": \"TEXT\",\n    \"text\": \"Your post text here\",\n    \"timezone\": \"America/New_York\",\n    \"scheduledAt\": \"2026-06-15T10:00:00.000Z\",\n    \"twitterConnectionIds\": [\"CONNECTION_ID_HERE\"]\n  }'\n\n4. Save a post as draft (no scheduling)\n\nSame as scheduling, but set saveAsDraft: true and omit scheduledAt:\n\ncurl -X POST https://post.adaptlypost.com/post/api/v1/social-posts \\\n  -H \"Authorization: Bearer $ADAPTLYPOST_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"platforms\": [\"INSTAGRAM\"],\n    \"contentType\": \"TEXT\",\n    \"text\": \"Draft post to review later\",\n    \"timezone\": \"Europe/London\",\n    \"saveAsDraft\": true,\n    \"instagramConnectionIds\": [\"CONNECTION_ID_HERE\"]\n  }'\n\n5. Schedule a post with media (3-step flow)\n\nStep A — Get presigned upload URLs:\n\ncurl -X POST https://post.adaptlypost.com/post/api/v1/upload-urls \\\n  -H \"Authorization: Bearer $ADAPTLYPOST_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{ \"files\": [{ \"fileName\": \"photo.jpg\", \"mimeType\": \"image/jpeg\" }] }'\n\n\nReturns { \"urls\": [{ \"fileName\", \"uploadUrl\", \"publicUrl\", \"key\", \"expiresAt\" }] }.\n\nStep B — Upload file to storage:\n\ncurl -X PUT \"UPLOAD_URL_HERE\" \\\n  -H \"Content-Type: image/jpeg\" \\\n  --data-binary @/path/to/photo.jpg\n\n\nStep C — Create post with the public URL:\n\ncurl -X POST https://post.adaptlypost.com/post/api/v1/social-posts \\\n  -H \"Authorization: Bearer $ADAPTLYPOST_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"platforms\": [\"INSTAGRAM\"],\n    \"contentType\": \"IMAGE\",\n    \"text\": \"Post with image!\",\n    \"mediaUrls\": [\"PUBLIC_URL_FROM_STEP_A\"],\n    \"timezone\": \"America/New_York\",\n    \"scheduledAt\": \"2026-06-15T10:00:00.000Z\",\n    \"instagramConnectionIds\": [\"CONNECTION_ID_HERE\"]\n  }'\n\n\nFor video: use mimeType: \"video/mp4\", contentType: \"VIDEO\". For carousel: upload multiple files, include all public URLs in mediaUrls, use contentType: \"CAROUSEL\".\n\n6. List posts\ncurl -s -H \"Authorization: Bearer $ADAPTLYPOST_API_KEY\" \\\n  \"https://post.adaptlypost.com/post/api/v1/social-posts?limit=20&offset=0\"\n\n\nReturns { \"posts\": [...], \"total\": 25, \"hasMore\": true }. Use limit (1-100, default 20) and offset (default 0) for pagination.\n\n7. Get post details\ncurl -s -H \"Authorization: Bearer $ADAPTLYPOST_API_KEY\" \\\n  https://post.adaptlypost.com/post/api/v1/social-posts/POST_ID\n\n\nReturns full post object with platform-specific status for each target platform.\n\n8. Cross-post to multiple platforms\n\nInclude multiple platforms and their connection IDs in a single request:\n\ncurl -X POST https://post.adaptlypost.com/post/api/v1/social-posts \\\n  -H \"Authorization: Bearer $ADAPTLYPOST_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"platforms\": [\"TWITTER\", \"BLUESKY\", \"LINKEDIN\"],\n    \"contentType\": \"TEXT\",\n    \"text\": \"Same post across 3 platforms!\",\n    \"timezone\": \"America/New_York\",\n    \"scheduledAt\": \"2026-06-15T10:00:00.000Z\",\n    \"twitterConnectionIds\": [\"TWITTER_ID\"],\n    \"blueskyConnectionIds\": [\"BLUESKY_ID\"],\n    \"linkedinConnectionIds\": [\"LINKEDIN_ID\"]\n  }'\n\n9. Use per-platform text\n\nOverride the default text for specific platforms:\n\ncurl -X POST https://post.adaptlypost.com/post/api/v1/social-posts \\\n  -H \"Authorization: Bearer $ADAPTLYPOST_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"platforms\": [\"TWITTER\", \"LINKEDIN\"],\n    \"contentType\": \"TEXT\",\n    \"text\": \"Default text for all platforms\",\n    \"platformTexts\": [\n      { \"platform\": \"TWITTER\", \"text\": \"Short version for X #shortform\" },\n      { \"platform\": \"LINKEDIN\", \"text\": \"Longer professional version with more detail for LinkedIn audience.\" }\n    ],\n    \"timezone\": \"America/New_York\",\n    \"scheduledAt\": \"2026-06-15T10:00:00.000Z\",\n    \"twitterConnectionIds\": [\"TWITTER_ID\"],\n    \"linkedinConnectionIds\": [\"LINKEDIN_ID\"]\n  }'\n\nPlatform-Specific Configs\n\nPass these as config arrays in the request body. See references/platform-configs.md for full details.\n\nPlatform\tConfig Field\tKey Options\nTikTok\ttiktokConfigs\tprivacyLevel (required), allowComments, allowDuet, allowStitch, sendAsDraft, brandedContent, autoAddMusic\nInstagram\tinstagramConfigs\tpostType (FEED/REEL/STORY)\nFacebook\tfacebookConfigs\tpostType (FEED/REEL/STORY), videoTitle\nYouTube\tyoutubeConfigs\tpostType (VIDEO/SHORTS), videoTitle, tags, privacyStatus, madeForKids, playlistId\nPinterest\tpinterestConfigs\tboardId (required), title, link\nX (Twitter)\t—\tNo config object, uses twitterConnectionIds only\nBluesky\t—\tNo config object, uses blueskyConnectionIds only\nThreads\t—\tNo config object, uses threadsConnectionIds only\nLinkedIn\t—\tNo config object, uses linkedinConnectionIds only\n\nExample with TikTok config:\n\ncurl -X POST https://post.adaptlypost.com/post/api/v1/social-posts \\\n  -H \"Authorization: Bearer $ADAPTLYPOST_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"platforms\": [\"TIKTOK\"],\n    \"contentType\": \"VIDEO\",\n    \"text\": \"Check out this clip!\",\n    \"mediaUrls\": [\"https://cdn.adaptlypost.com/social-media-posts/uuid/video.mp4\"],\n    \"timezone\": \"America/New_York\",\n    \"scheduledAt\": \"2026-06-15T18:00:00.000Z\",\n    \"tiktokConnectionIds\": [\"TIKTOK_ID\"],\n    \"tiktokConfigs\": [{\n      \"connectionId\": \"TIKTOK_ID\",\n      \"privacyLevel\": \"PUBLIC_TO_EVERYONE\",\n      \"allowComments\": true,\n      \"allowDuet\": false,\n      \"allowStitch\": true\n    }]\n  }'\n\nSupported File Types for Upload\nMIME Type\tExtension\tUse For\nimage/jpeg\t.jpg, .jpeg\tImages\nimage/png\t.png\tImages\nimage/webp\t.webp\tImages\nvideo/mp4\t.mp4\tVideos\nvideo/quicktime\t.mov\tVideos\n\nUpload 1-20 files per request.\n\nMedia Specs Quick Reference\nPlatform\tImages\tVideo\tCarousel\nTikTok\tCarousels only\tMP4/MOV, ≤250MB, 3s-10min\t2-35 images\nInstagram\tJPEG/PNG\t≤1GB, 3-90s (Reels)\tUp to 10\nFacebook\t≤30MB, JPG/PNG\t1 per post\tUp to 10 images\nYouTube\t—\tShorts ≤3min, H.264\t—\nLinkedIn\tUp to 9\t≤10min\tUp to 9\nX (Twitter)\tUp to 4\t—\t—\nPinterest\t2:3 ratio ideal\tSupported\t2-5 images\nBluesky\tUp to 4\tNot supported\t—\nThreads\tSupported\tSupported\tUp to 10\nTips for the Agent\nCRITICAL — Always ask before posting\nNEVER 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.\nIf 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.\nIf the user says \"schedule\": ask for the date and time, then set scheduledAt to an ISO 8601 timestamp.\nIf the user says \"draft\": set saveAsDraft: true and omit scheduledAt.\nTimezone handling\nThe timezone field is required on every post creation request.\nOn 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.\nIf the user has previously told you their timezone in this conversation, reuse it silently.\nCommon timezones: Europe/London, Europe/Berlin, Europe/Paris, America/New_York, America/Chicago, America/Los_Angeles, Asia/Tokyo, Australia/Sydney.\nAPI workflow\nAlways call /social-accounts first to get valid connection IDs for each platform.\nFor media posts, complete the full 3-step upload flow (get upload URL → PUT file → create post with mediaUrls).\nscheduledAt must be ISO 8601 and in the future. Omit it when using saveAsDraft: true.\nEach platform needs its connection IDs: twitterConnectionIds, instagramConnectionIds, blueskyConnectionIds, linkedinConnectionIds, tiktokConnectionIds, threadsConnectionIds, pinterestConnectionIds, youtubeConnectionIds. Facebook uses pageIds.\nTikTok configs require privacyLevel — always set it (e.g., PUBLIC_TO_EVERYONE).\nPinterest configs require boardId — there is no way to fetch boards via this API currently, so ask the user which board to use.\nFor carousels, upload multiple files and include all public URLs in mediaUrls.\nUse platformTexts to customize text per platform when cross-posting.\nContent types: TEXT (no media), IMAGE (single image), VIDEO (single video), CAROUSEL (multiple images/videos).\nCheck skippedPlatforms in the response — it tells you if any platform was skipped and why."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/TarasShyn/adaptlypost",
    "publisherUrl": "https://clawhub.ai/TarasShyn/adaptlypost",
    "owner": "TarasShyn",
    "version": "1.0.3",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/adaptlypost",
    "downloadUrl": "https://openagent3.xyz/downloads/adaptlypost",
    "agentUrl": "https://openagent3.xyz/skills/adaptlypost/agent",
    "manifestUrl": "https://openagent3.xyz/skills/adaptlypost/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/adaptlypost/agent.md"
  }
}