Design & media

Instagram

Manage Instagram profiles, posts, media publishing, and comments through the Instagram Graph API.

What it does

View profile details, list posts, inspect post metrics, and read comment threads through the Instagram Graph API. Publish local or URL-based images, carousels, videos, and Reels after confirming captions, then receive the result ID and permalink. Comment and reply text is also confirmed before posting.

When to use it

  • Reviewing an account profile and recent posts
  • Publishing an image or video carousel
  • Posting a Reel with a cover and feed option
  • Reading, posting, or replying to comments

The skill document

Instagram API Skill

A skill for managing an Instagram account via the Instagram Graph API. Supports profile viewing, post management, image publishing, video/Reels publishing, and comment operations.

Prerequisites

  • A .env file with credentials must be configured.
    • Required: INSTAGRAM_ACCESS_TOKEN
    • Recommended (for comment/reply via Facebook Graph): FACEBOOK_USER_ACCESS_TOKEN
    • Required for FB token refresh: FACEBOOK_APP_ID, FACEBOOK_APP_SECRET
  • cloudflared must be installed for local image/video posting.
  • If the user specifies a .env file path, append --env to every command.
    • Example: node scripts/get-profile.js --env /home/user/.instagram-env
  • All scripts must be run with this project root as the working directory.

Available Commands

All commands automatically refresh the token before execution. No manual refresh needed.

Refresh Token

# Instagram token refresh
node scripts/refresh-token.js

# Facebook user token refresh (for comments/replies flow)
node scripts/refresh-facebook-token.js

Manually refreshes token(s) and returns expiration info.

View Profile

node scripts/get-profile.js

Returns profile info (name, username, account type, media count).

List Posts

node scripts/get-posts.js [--limit 10]

Returns the user's post list. Use --limit to set the count (default: 10).

View Post Detail

node scripts/get-post.js 

Returns post detail including like count and comment count.

Publish Image

# Single image (URL)
node scripts/post-image.js --caption "Caption" https://example.com/photo.jpg

# Single image (local file)
node scripts/post-image.js --caption "Caption" ./photos/image.png

# Carousel — multiple images (URL)
node scripts/post-image.js --caption "Caption" https://example.com/a.jpg https://example.com/b.jpg

# Carousel — multiple images (local files)
node scripts/post-image.js --caption "Caption" ./img1.png ./img2.png ./img3.jpg
  • 1 image → single post, 2+ images → automatically posted as carousel (max 10).
  • Both URLs (http://, https://) and local file paths are supported, but mixing is not allowed.
  • Supported local file formats: jpg, jpeg, png, gif, webp, heic/heif (HEIC is automatically converted to JPEG).

Publish Video (Reels)

# Single video (URL)
node scripts/post-video.js --caption "Caption" https://example.com/video.mp4

# Single video (local file)
node scripts/post-video.js --caption "Caption" ./videos/clip.mp4

# With cover image and options
node scripts/post-video.js --caption "Caption" --cover https://example.com/cover.jpg --thumb-offset 5000 --share-to-feed true https://example.com/video.mp4

# Video carousel — multiple videos (URL)
node scripts/post-video.js --caption "Caption" https://example.com/a.mp4 https://example.com/b.mp4

# Video carousel — multiple videos (local files)
node scripts/post-video.js --caption "Caption" ./clip1.mp4 ./clip2.mov
  • 1 video → Reels post, 2+ videos → automatically posted as carousel (max 10).
  • Both URLs and local file paths are supported, but mixing is not allowed.
  • Supported formats: mp4, mov (max 100MB per file).
  • --cover, --thumb-offset, --share-to-feed options are only available for single video posts (not carousels).
  • Video processing takes longer than images; the script waits up to 10 minutes.

View Comments

node scripts/get-comments.js 

Returns comments and replies for a specific post.

Post Comment

node scripts/post-comment.js  --text "Comment text"

Reply to Comment

node scripts/reply-comment.js  --text "Reply text"

Workflow Guidelines

  • When publishing images or videos, always confirm the caption with the user before executing.
  • After publishing, report the result ID and permalink to the user (both are included in the output).
  • Video processing takes longer than images. Inform the user that it may take a few minutes.
  • When writing comments/replies, confirm the content with the user before executing.
  • All command outputs are in JSON format.

Error Handling

If the output contains an error field, an error has occurred. Explain the cause to the user and suggest a resolution.

{ "error": "error message" }

Security

Token storage

  • refreshIgToken() and refreshFbToken() overwrite tokens in the .env file in plaintext. Do not commit .env to version control.
  • Create a dedicated Meta app with minimum required permissions (see below).

Local file upload

  • Local image/video posting starts a temporary cloudflared Quick Tunnel to expose files so Instagram servers can download them.
  • The tunnel is active only during the upload and is shut down immediately after.
  • Only provide file paths you are comfortable briefly exposing to the internet.

Minimum required permissions

When creating your Meta app, grant only these permissions:

  • instagram_business_basic — profile and media read
  • instagram_content_publish — image/video publishing
  • instagram_manage_comments — comment read/write
  • pages_read_engagement — required for comment API via Facebook Graph
  • pages_show_list — required for page-linked Instagram accounts

Questions people ask

What media can it publish?
It publishes one image as a standard post or 2–10 images as a carousel. It also publishes one MP4 or MOV video as a Reel, or 2–10 videos as a carousel; each video can be up to 100 MB.
Can it upload files from the local machine?
Yes. Local images and videos are exposed temporarily through a cloudflared Quick Tunnel so Instagram can download them; the tunnel closes after upload. URL and local inputs are supported, but they cannot be mixed in one post.
What setup and permissions are required?
An INSTAGRAM_ACCESS_TOKEN and cloudflared are required; Facebook credentials are recommended or required for comment flows and token refresh. The Meta app needs the documented profile/media read, content publishing, comment management, page engagement, and page-list permissions.

Related skills

Schedule, publish, draft, and track posts across nine social platforms through one API.

97 installs3 stars

Create Reels, TikToks, carousels, Stories, and posts from prompts with automated production.

160 installs20 stars

Schedule and manage posts across 11 social platforms through one API.

117 installs8 stars

Access LinkedIn profiles, posts, media uploads, public libraries, and advertising APIs through managed OAuth.

410 installs45 stars

Publish and schedule X posts, threads, media, and Markdown-based Articles through a REST API.

84 installs2 stars