The Instagram scheduling API

Create an Instagram post with one HTTP call. It joins the same queue the dashboard uses, retries on failure, and reports back what actually went out.

Publish to Instagram

# POST a text-and-media post to your connected Instagram channel
curl -X POST https://api.postwharf.com/v1/posts \
  -H "Authorization: Bearer $POSTWHARF_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Shipping today.",
    "channels": ["ch_your_instagram_channel"],
    "media": ["med_optional"]
  }'

Schedule it instead

curl -X POST https://api.postwharf.com/v1/posts \
  -H "Authorization: Bearer $POSTWHARF_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Tuesday drop","channels":["ch_your_instagram_channel"],"publish_at":"2026-09-01T09:00:00Z"}'

Find your Instagram channel id

curl https://api.postwharf.com/v1/channels \
  -H "Authorization: Bearer $POSTWHARF_KEY"

Each connected account is a channel. The one you want has "platform": "instagram".

Check what happened

curl https://api.postwharf.com/v1/posts/post_xxx \
  -H "Authorization: Bearer $POSTWHARF_KEY"

The response carries one delivery per channel with its status, the live URL once published, and the error text if it failed. Deliveries are re-checked after publishing, so an Instagram post removed later stops reporting as live.

What Instagram accepts

2,200 characters, counting the caption. Up to 10 images or 10 videos per post — and the two can travel together.

Read from the table the API enforces, so a post over 2,200 is refused when you create it rather than truncated on the way to Instagram.

Worth knowing about Instagram

Requires a Business or Creator account linked to a Facebook Page.

Every other network

TikTok · X · LinkedIn · YouTube · Facebook · Threads · Pinterest · Bluesky · Reddit · Telegram · Discord · Snapchat · WordPress