App Logo
instagram.com

Create Instagram post

Publish a single-image Instagram feed post from an image URL, inline base64 bytes, or a local file path (image_path, which needs a CLI-run device). Drives the web composer (New post → crop → edit → caption → Share) and returns code, pk, url, caption. Supersedes create_post_from_file.

Input

caption optional

Post caption; empty for none. Max 2200 chars.

Default: ""
image_url optional

Direct URL of a single image to post (jpeg/png/gif/webp). Fetched by the browser itself, so it works on devices with no outbound network of their own. No size ceiling and no device requirement. Equivalent to passing a 1-item image_urls.

image_path optional

Path to a single local image file, attached straight from disk by the browser's own low-level file-attach mechanism — no encoding, no size ceiling. Resolved on the machine running the browser, and only works on a device whose browser permits attaching local files directly. An extension-paired browser does not: it refuses with "Not allowed", and nothing gets around that. Absolute paths only. Equivalent to a 1-item images_path.

image_urls optional

1-10 direct image URLs, in order. A single URL publishes a normal post; 2 or more publish a carousel. Each is fetched by the browser itself, so this works on devices with no outbound network of their own. No size ceiling and no device requirement — the general answer, and the only practical route for a carousel of real photos.

images_path optional

1-10 paths to local images, in order, attached straight from disk by the browser's own low-level file-attach mechanism — no encoding, no size ceiling. Resolved on the machine running the browser, and only works on a device whose browser permits attaching local files directly. An extension-paired browser does not. Absolute paths only. Takes precedence over image_urls.

image_base64 optional

A single image's bytes as base64 (a bare payload or a full data: URL), decoded in-page — needs no network and no local file access, so it is the only local-file route on an extension-paired device. Capped at ~96KB of base64, i.e. about a 72KB file: the MCP endpoint answers `Payload Too Large` above that. Line-wrapped output, base64url and missing padding are all accepted. Equivalent to a 1-item images_base64.

images_base64 optional

1-10 images as base64 (bare payloads or full data: URLs), in order, decoded in-page — needs no network and no local file access. Capped across all images combined at ~96KB of base64 total. Real photos will not fit for more than one — use image_urls for a real carousel. Takes precedence over images_path and image_urls.

Output

url required

Permalink of the new post.

code required

Shortcode of the new post.

caption_applied required

True when a caption was requested and Instagram recorded it; false when one was requested but the published post carries none. Always true when no caption was requested.

pk optional

Media pk.

caption optional

The caption Instagram actually recorded on the published post (read back from configure/configure_sidecar), NOT an echo of the input. Empty when none was requested or none landed.

image_bytes optional

Total size in bytes of the image(s) injected into the composer. null when attached via a *_path field, where the browser opens the file(s) itself and the bytes never cross the driver boundary.

carousel_count optional

carousel_media_count as Instagram reported it on configure_sidecar — the authoritative count of slides actually published. null for a single-image post, which uses a different endpoint that has no such field.

FAQ

Publish a single-image Instagram feed post from an image URL, inline base64 bytes, or a local file path (image_path, which needs a CLI-run device). Drives the web composer (New post → crop → edit → caption → Share) and returns code, pk, url, caption. Supersedes create_post_from_file.
Optional: caption, image_url, image_path, image_urls, images_path, image_base64, images_base64.
It returns pk, url, code, caption, image_bytes, carousel_count, caption_applied.
Yes. It acts as you on instagram.com: on your own Chrome it reuses your session, and on a Reduck-hosted browser it loads the instagram.com cookies saved by the Reduck extension.
It makes changes on instagram.com, like sending, posting or booking something.
Ask an AI agent connected to Reduck to run reduck/instagram.com/create_post, or run it from a terminal with the Reduck CLI: npx @reduck-ai/cli@latest run --script reduck/instagram.com/create_post
It is part of Reduck's official curated catalogue.

Start building not clicking