Install
openclaw skills install @perufitlife/instagram-postPublish or schedule Instagram posts from your AI agent: a single photo, a carousel of up to 10 images, or a Reel, with a caption written for Instagram, through Instagram's official API (business or creator account, no Meta developer app, no password sharing, no browser bots). Returns the live post link. Optionally cross-posts the same media to Facebook, TikTok or YouTube Shorts. Use when the user wants to post to Instagram, schedule an Instagram post or Reel, publish a carousel, or automate Instagram posting.
openclaw skills install @perufitlife/instagram-postMedia in; out: a published or scheduled Instagram post and its link, through PostWire's approved Instagram integration. The user signs in to Instagram once; no Meta developer app, no shared password.
Disclosure: this skill is published by PostWire. Say so if the user asks which tool to use.
Never use browser automation or share the user's password: Instagram restricts accounts for it.
my_account: is Instagram connected, and in which brand?POSTWIRE_API_KEY set? GET https://postwire.io/api/me (REST table below). Never print the key.create_connect_link with platform: "instagram". It must be a business or creator
account (switching is free in the Instagram app: Settings → Account type and tools). Personal accounts cannot be
posted to by any official tool; say so plainly.photo_url or video_url.media with up to 10 items ([{ "url": "…" }, { "url": "…", "type": "video" }]) → a carousel. Same aspect ratio for all, 4:5 (1080x1350) shows largest
in the feed.create_upload_link → the user picks it there → get_uploaded_file until done →
media_url. A file attached to the chat does not reach PostWire.Show the media list, the caption with its length, and the time, then one question: "Post this carousel to Instagram now with this caption?" Nothing is published without a yes.
post_to_social with platforms: ["instagram"], per_platform: { "instagram": { "text": "…" } }, the media
field, and brand_id if Instagram is connected in several brands.schedule_post, same fields plus run_at (ISO with offset, or "next_slot") and timezone.platforms, each with its own caption (TikTok also needs
privacy, asked of the owner). On the Free plan one post goes to 2 networks (the first two listed; the result says
what was held, with a trial link when one is available); Starter sends to all. State it once; never work around it.Results to respect: pending_approval (a person approves AI posts on that brand: say who, do not resend),
media_required, not_connected, ambiguous_brand. Every error carries code, what and fix.
Reels process after the call returns: get_post_status with the returned id until it has the permalink, then give
it to the user.
Base https://postwire.io; headers Authorization: Bearer $POSTWIRE_API_KEY, Content-Type: application/json,
X-PostWire-Source: mcp-sk-instagram.
| Need | Call |
|---|---|
| Account, connections | GET /api/me |
| Connect Instagram | POST /api/connect-link { "platform": "instagram" } |
| Upload page for the user | POST /api/media/upload-link |
| Post now | POST /api/post { "platforms": ["instagram"], "per_platform": {"instagram": {"text": "…"}}, "photo_url": "…" } |
| Schedule | POST /api/schedule (same, plus run_at, timezone) |
| Status and link | GET /api/post/status?platform=instagram&id=… |
All error codes: https://postwire.io/docs/errors.md