Create Instagram reel
Input
caption optionalReel caption; empty for none. Max 2200 chars.
Default: ""dry_run optionalWhen true, the whole flow runs — the video is fetched and attached, the crop and edit steps are passed, the cover is accepted and the caption typed — and then the run stops on the step before Share. Nothing is published: shared comes back false, code/url are null and dry_run is true. Use it to verify a video and caption are accepted without spending a real, irreversible public reel.
video_url optionalDirect URL of the mp4 to post as a reel; fetched by the browser and capped at 25MB because the bytes cross the browser boundary in one piece. To post a local file, serve it over localhost (e.g. `python3 -m http.server 8765 --bind 127.0.0.1` in its directory) and pass that URL, or use the `attachment` input, which has no such cap.
attachment optionalThe mp4 to post, bound through the platform's own file channel and handed straight to the composer's file input. Preferred over video_url: it carries the bytes outside the argument payload, is not subject to the 25MB video_url ceiling, and works on every device.
Output
url requiredPermalink of the new reel. Null on a dry run, where nothing was published.
shared requiredTrue when the reel was actually published. Always false on a dry run.
caption_applied requiredTrue when a caption was requested and Instagram recorded it; false when one was requested but the published reel carries none. Always true when no caption was requested. Always false on a dry run, where Instagram recorded nothing.
pk optionalMedia pk. Null on a dry run.
code optionalShortcode of the new reel. Null on a dry run, where nothing was published.
caption optionalThe caption Instagram actually recorded on the published reel (read back after publish), NOT an echo of the input. Empty when none was requested, none landed, or the run was a dry run.
dry_run optionalTrue when this run stopped before Share and published nothing. The video was still attached and the caption still typed — only the final publish was skipped.
video_bytes optionalSize in bytes of the video injected into the composer. null for video_path, where the browser opens the file itself and the bytes never cross the driver boundary.
