Post to Instagram from n8n
n8n has no official Instagram node. Call ShortSync's API from the HTTP Request node instead: upload a video or image from a link, then post or schedule it as a Reel, photo, carousel or Story, with collaborators and a first comment, and send it to TikTok, YouTube Shorts and 14 more platforms in the same request.
n8n HTTP Request node · Free plan · Official Instagram API
The Graph API node or ShortSync?
n8n on its own
- n8n has no Instagram node. You can call Instagram's API with the Facebook Graph API node or an HTTP Request node.
- That needs your own Meta developer app with the Instagram publishing permission and a long-lived access token.
- Every post takes two calls: create a media container, wait until Instagram has processed the video, then publish it. Carousels need a container per item first.
- Scheduling is up to you: the workflow has to run the publish step at the right time.
n8n with ShortSync
- Connect Instagram to ShortSync once with Instagram Login. No Meta app, no Facebook Page.
- One request creates the post. ShortSync waits for processing and publishes.
- Schedule the time in the request; ShortSync posts it then, even if n8n is off.
- Post the same video to TikTok, YouTube Shorts and 14 more platforms in one request, and get a webhook when it's live.
Set it up in n8n
Connect Instagram to ShortSync once, then two HTTP requests per post. Publish now, schedule it, or save a draft to check first.
- 1
Create a ShortSync API key
In ShortSync, connect the account once, then open Settings → API & MCP, click Create API key and pick the workspace. In n8n, add a Header Auth credential with the name Authorization and the value Bearer followed by your key.
- 2
Find your Instagram connection id
Run an HTTP Request node once with GET on the connections endpoint and copy the id of your Instagram account.
GET https://api.shortsync.app/v1/connections
- 3
Upload the video
Add an HTTP Request node: method POST, the uploads URL, Header Auth credential. Send source_url as a public direct-download link, for example {{ $json.video_url }} from an earlier node. Add an Idempotency-Key header so a retry doesn't import the file twice. If the file is already binary data in n8n, call POST /uploads with an empty body and PUT the file to the returned presigned_url instead.
POST https://api.shortsync.app/v1/uploads { "source_url": "https://example-bucket.s3.amazonaws.com/clips/recipe.mp4" } - 4
Create the Instagram post
Add a second HTTP Request node with POST on the posts URL. Map the upload_id, write the caption (up to 2,200 characters) and set Instagram's options in the target. A video posts as a Reel and an image as a photo post. Use publish_mode immediate, scheduled with scheduled_for, or draft.
POST https://api.shortsync.app/v1/posts { "upload_id": "{{ $json.upload_id }}", "publish_mode": "scheduled", "scheduled_for": "2026-11-10T16:00:00Z", "caption": "5-minute miso soup. Save it for later #recipe", "first_comment": "Full recipe: link in bio", "targets": [ { "connection_id": "<Instagram connection id>", "platform_options": { "instagram": { "share_to_feed": true, "share_to_story": true, "collaborators": ["partner_account"] } } } ] } - 5
React when it's live
Start a second workflow with a Webhook node (POST), add its Production URL as a webhook in Settings → API & MCP with post.published and post.failed, and click Send test event. The event carries data.post.url, the post's Instagram link, and data.post.error when it fails.
Instagram settings you can send
Put these in platform_options.instagram on the Instagram target.
| Field | What it does |
|---|---|
| share_to_feed | Show the Reel in the main feed too (default on). |
| share_to_story | Also post it as a Story. Reels and single images. |
| story_only | Post only as a Story: a video up to 60 seconds or an image. |
| trial_reel | Post as a Trial Reel, shown to non-followers first. |
| collaborators | Usernames to invite as collaborators. |
| user_tags | Usernames to tag in the post. |
| location_id | Location to tag. |
| is_paid_partnership | Show the Paid partnership label. |
| is_ai_generated | Add Instagram's AI info label. |
| alt_text, alt_texts | Alt text for an image, or per image in a carousel. |
| audio_name | Rename the Reel's original audio. |
Instagram workflows to build
Schedule a month of Reels from a Google Sheet
Google Sheets trigger on a new row with a video link, caption and date, then the upload and post requests with publish_mode scheduled.
Post a carousel from a folder of images
Upload each image, group them with POST /uploads/carousel-group (up to 10 for Instagram), then post the group with one caption.
Write captions with AI, approve in ShortSync
Send the topic to an OpenAI or Anthropic node, use its answer as the caption, and create the post as a draft to check before it goes out.
Cross-post Reels to TikTok and YouTube Shorts
Add TikTok and YouTube targets to the same request so one workflow posts the vertical video everywhere, each with its own caption.
Good to know
- Instagram's API only posts to professional accounts (Business or Creator). Switching is free in the Instagram app.
- ShortSync posts up to 50 Instagram posts a day per workspace by default, under Meta's limit for API posts.
- A first comment works on Instagram (first_comment in the request).
- Works the same on n8n Cloud and self-hosted n8n. Webhooks need n8n reachable over https.
Frequently asked questions
Post to Instagram from n8n
Free plan, API key in a minute, official platform APIs.
Official APIs and approved publishing partners
Prefer a walkthrough? Book a demo with Hilma