blackdark
Automation

Claude uploads your trial reels to Instagram through the official API: upload, test, measure, improve

Trial reels are shown first to people who don’t follow you and don’t appear on your profile. How to upload them through the Instagram API with Instagram Login (IGAA token, trial_params), read the skip rate every morning and build a loop with Claude Code that tests hooks without burning out your account.

By Updated on 6 min read
Jump straight to the prompt

Tested by us

On 12-Nov-2026 we uploaded a reel as a trial reel this way and it went out as one (is_shared_to_feed=false, it didn’t appear on the grid). Meta changes things often: check each reel after publishing, as explained in step 2.

Trial reels are an official Instagram feature: the reel is shown first to people who don’t follow you and doesn’t appear on your profile or to your followers. Perfect for testing hooks without burning out your account.

What few people know: you can upload them through the official Instagram API. And if an API can upload them, Claude can upload them.

The loop

  1. Upload

    Claude publishes one version of the video as a trial reel. One a day.

  2. Test

    Instagram shows it to people who don’t follow you. Your profile never knows.

  3. Measure

    Every morning Claude reads the skip rate, watch time, views and reach.

  4. Improve

    It tells you which hook won and suggests changes to your skills. You decide.

What you need

  • A professional Instagram account (creator or business).
  • A Meta developer account (free) at developers.facebook.com.
  • Claude Code (or any Claude that can run code on your computer).
  • Somewhere to put your MP4 at a public URL for a few minutes: your website, a bucket, a server… (step 3).

The Instagram API is free. The only thing you pay for is your Claude plan.

Step 1: the Meta app with Instagram Login

  1. On developers.facebook.com → My Apps → Create App → “Business” type.
  2. Add the Instagram product and choose Instagram API with Instagram Login.
  3. In the API settings, add your Instagram account as a tester, accept it from the Instagram app (Settings → Apps and websites) and generate the access token. It starts with IGAA.
  4. Permissions: instagram_business_basic, instagram_business_content_publish and instagram_business_manage_insights.
  5. Save the token in a .env file in your project. Never paste it into a chat, a screenshot or GitHub.

Meta renames its menus from time to time; if you can’t find one, look for the closest equivalent.

It has to be THIS API variant

There are two ways to use the Instagram API. With the Facebook Login one (tokens starting with EAA, graph.facebook.com) we tried sending trial reels and Meta ignored the parameter without throwing an error: the reel went out as NORMAL, on the grid. Use the Instagram Login one: IGAA token and graph.instagram.com.

To check the token works, request your user: GET https://graph.instagram.com/v23.0/me?fields=user_id,username with the token as access_token.

Step 2: upload a video as a trial reel

It’s three calls, all to https://graph.instagram.com/v23.0:

1. Create the container with trial_params:

POST /<IG_USER_ID>/media
{
  "media_type": "REELS",
  "video_url": "https://your-site.com/temp/random.mp4",
  "caption": "Your caption…",
  "trial_params": { "graduation_strategy": "MANUAL" }
}
graduation_strategyWhat happens
MANUALThe reel stays as a trial. If you want to move it to your profile, you “graduate” it by hand from the app.
SS_PERFORMANCEInstagram moves it to your profile only if it performs well.

2. Wait for processing: GET /<CONTAINER_ID>?fields=status_code until it says FINISHED.

3. Publish: POST /<IG_USER_ID>/media_publish with { "creation_id": "<CONTAINER_ID>" }.

ALWAYS check it right afterwards:

GET /<REEL_ID>?fields=permalink,is_shared_to_feed

If is_shared_to_feed is false, it’s a trial reel. If it’s true or the reel shows up on your grid, it went out as a normal reel: archive it and make sure you’re using the IGAA token and graph.instagram.com.

Step 3: the MP4 has to be at a public URL (for a moment)

For reels, graph.instagram.com doesn’t accept a direct file upload: it requires video_url and Instagram downloads the video from that address.

  1. Upload the MP4 to your website, server or bucket with a random name.
  2. Check that the URL actually returns the MP4 (not an error page or a login).
  3. Create the container, wait for FINISHED and delete the file.

Step 4: read the numbers every morning

GET /<REEL_ID>/insights?metric=reels_skip_rate,ig_reels_avg_watch_time,views,reach
MetricWhat it tells you
reels_skip_rateThe % of people who skip your reel in the first 3 seconds. It’s the “gone in 3 s” number: the one that tells you whether the hook works. Meta labels it as estimated and in development: use it to compare your hooks against each other, not as an exact number.
ig_reels_avg_watch_timeThe average time people watch it.
viewsViews.
reachAccounts reached.

Wait at least 24 h before comparing one trial reel with another.

Step 5: the loop with Claude Code

The idea: from each video you make 5 versions with different hooks (same content; change the first line, the first shot and the cover) and Claude uploads one a day as a trial reel. Every morning it reads the numbers and notes which hook won. With that you tune your skills: the one that writes scripts and the one that edits.

Open Claude Code in your project folder (with the token already in .env) and paste this:

Prompt · Build my trial reels loop
Let's build a trial reels loop on Instagram with the Instagram API with Instagram Login.
The token is in .env (INSTAGRAM_TOKEN, it starts with IGAA). Don't ask me to paste it into the chat. Always use https://graph.instagram.com/v23.0.

1. Create an "upload-trial" script that takes an MP4 and a caption, puts it at a temporary public URL with a random name (I'll tell you where), checks that the URL returns the MP4, creates the container with media_type=REELS and trial_params {"graduation_strategy":"MANUAL"}, waits for FINISHED, publishes, deletes the temporary MP4 and checks is_shared_to_feed. If it comes back true, warn me and stop.
 Log each reel in trials.csv (date, file, hook, reel id, permalink).
2. Create a "read-numbers" script that, for each reel in trials.csv older than 24 h, requests reels_skip_rate, ig_reels_avg_watch_time, views and reach, and saves them in the same CSV.
3. Every morning: run read-numbers, tell me which hook won (lowest skip rate and longest watch time) and why you think it won. Propose one concrete change to my scripting skill and another to my editing skill. Don't change the skills without showing me the change first.
4. Then upload the next pending version with upload-trial. One a day at most.

You can make the 5 versions by hand or ask Claude for them:

Prompt · 5 hooks for the same script
Give me 5 different hooks for this script, one of each type: result, curiosity, mistake, contradiction and story. For each one: the first line, what's shown in the first shot and the cover text.

Notes

  • Start slow: one trial a day. Mass publishing through the API can run into Meta’s limits and policies. You can see your quota with GET /<IG_USER_ID>/content_publishing_limit.
  • Check each reel after publishing (step 2). If Meta changes something, it might go out as a normal reel.
  • “Improves on its own” means Claude proposes the changes with data; you have the final say.
  • Your token is yours: only in the .env, never in the chat, in screenshots or on GitHub. If it leaks, revoke it in the Meta console.
  • It’s not a paid or third-party tool: it’s the official Instagram API + Claude.

Checklist

  • Professional Instagram account.
  • Meta app with “Instagram API with Instagram Login” and your account as a tester.
  • IGAA token in .env with the 3 permissions.
  • Somewhere to put the MP4 at a public URL for a moment.
  • First trial reel uploaded and is_shared_to_feed = false.
  • Loop built with Claude Code: one trial a day and a reading every morning.

FAQ

An official Instagram feature (Trial Reels) for professional accounts: the reel is shown first to people who don’t follow you and doesn’t appear on your grid or to your followers. It lets you test hooks without your account noticing.

The Instagram API is free. The only thing you pay for is your Claude plan, plus somewhere to host the MP4 for a moment if you don’t already have one.

Most likely you’re using the other API variant (Facebook Login, tokens starting with EAA, graph.facebook.com). We tried it that way and Meta ignored trial_params without throwing an error. Use the IGAA token and graph.instagram.com, and archive the reel if it already landed on your grid.

Because for reels graph.instagram.com doesn’t accept a direct file upload: it requires video_url and downloads the video from there. Upload it with a random name, publish, and delete it once the container says FINISHED.

The percentage of people who skip your reel in the first 3 seconds: the metric that tells you whether the hook works. Meta labels it as estimated and in development, so use it to compare your hooks against each other, not as an exact number.

We don’t recommend it: start with one trial a day. Mass publishing through the API can run into Meta’s limits and policies. You can see your quota with the content_publishing_limit endpoint.

With the prompt in this guide, no: Claude proposes the changes with data and you decide. You have the final say.

Keep digging into the same topic.

Share
Newsletter

Get the next guides in your inbox

AI and marketing ideas and resources, no filler. What works and how to apply it.

Ideas and resources, no spam. Unsubscribe anytime.

Finding this guide useful?

Subscribe