Instagram · Guide

How to run a Instagram reels search

TL;DR
To run a Instagram reels search, sign up for a free Captapi key, then send one GET request to /v1/instagram/reels-search with your input. You get clean JSON back in seconds for 2 credits per call — no OAuth, scraping or platform SDKs. Native tag feed first, slower fallback paths on a miss. Max 50. Flat 2 credits.

How to run a Instagram reels search (step by step)

  1. 1

    Get a free API key

    Create a free Captapi account (100 credits, no card) and generate an API key from the dashboard.

  2. 2

    Call the Instagram Reels Search API

    Send an authenticated GET request to /v1/instagram/reels-search with your input. No OAuth, no scraping setup.

  3. 3

    Read the JSON response

    Parse the clean JSON response. Pass cache=true for a free 24h cache hit; default is always fresh.

Code example

curl "https://api.captapi.com/v1/instagram/reels-search?q=travel" \
  -H "Authorization: Bearer capt_live_..."
# or: -H "x-api-key: capt_live_..."

What the response looks like

{
  "success": true,
  "data": {
    "query": "travel",
    "totalReturned": 2,
    "results": [
      {
        "platform": "instagram",
        "url": "https://www.instagram.com/p/DayDvvttHtI/",
        "id": "3941229099090213704",
        "postType": "Video",
        "productType": "clips",
        "caption": "🌊 Kıbrıs’ın en yeni aquaparkını keşfettim! 😍\nKaydıraklar, çocuk alanı ve yazın serinlemek için tam bir kaçış noktası. 💦☀️\n\nAquaparkın giriş ücreti, konumu için yoruma \"BİLGİ\" yazman yeterli! 📩💦\n\n📍 Kıbrıs’taki en güzel mekanlar ve keşifler için takip etmeyi unutma. \n\n#reels #viral #fyp #travel #travelreels",
        "description": "🌊 Kıbrıs’ın en yeni aquaparkını keşfettim! 😍\nKaydıraklar, çocuk alanı ve yazın serinlemek için tam bir kaçış noktası. 💦☀️\n\nAquaparkın giriş ücreti, konumu için yoruma \"BİLGİ\" yazman yeterli! 📩💦\n\n📍 Kıbrıs’taki en güzel mekanlar ve keşifler için takip etmeyi unutma. \n\n#reels #viral #fyp #travel #travelreels",
        "publishedAt": "2026-07-14T17:47:27.000Z",
        "durationSeconds": 12.333,
        "thumbnailUrl": "https://scontent-cph2-1.cdninstagram.com/v/t51.82787-15/746421066_18088964012323578_1371556212593119396_n.jpg?...",
        "videoUrl": "https://scontent-cph2-1.cdninstagram.com/o1/v/t2/f2/m86/AQPRKXt1G6vrSNMtCD3y4roRhkZUU-SMO5R75U3-eAFEbtFGU6IzDJptEbfwWLTINTa9ZX5y-KO_OvBo4mp57r_n0PDYo7Wj368K6KU.mp4?...",
        "author": {
          "username": "bencekibris",
          "displayName": "Melisa Yıldırım",
          "url": "https://instagram.com/bencekibris"
        },
        "engagement": {
          "views": 37937,
          "likes": 297,
          "comments": 641,
          "viewsInstagram": 30350,
          "viewsFacebook": 7587
        },
        "hashtags": [
          "reels",
          "viral"
        ],
        "mentions": [],
        "isPaidPartnership": false,
        "isAd": false,
        "isAffiliate": false
      },
      {
        "platform": "instagram",
        "url": "https://www.instagram.com/p/DazJr5PBcC3/",
        "id": "3941536697690734775",
        "postType": "Video",
        "productType": "clips",
        "caption": "It’s officially Hot summer night in mid July just like miss #lanadelray said #hotsummernights #midjuly #travel",
        "description": "It’s officially Hot summer night in mid July just like miss #lanadelray said #hotsummernights #midjuly #travel",
        "publishedAt": "2026-07-15T03:58:01.000Z",
        "durationSeconds": 16.972,
        "thumbnailUrl": "https://scontent-cph2-1.cdninstagram.com/v/t51.82787-15/746042012_18609462409002256_3222197168337217329_n.jpg?...",
        "videoUrl": "https://scontent-cph2-1.cdninstagram.com/o1/v/t2/f2/m86/AQNjviBRPVEuheQRRrMOf2adQ6sKXUyWQeRvrbuKRr3QVWU2sUiizNhM7M5gYgXUSNGk-cDMur_ViWKTYaYps7oQxcxCqohZg4xAuzw.mp4?...",
        "author": {
          "username": "rammyun",
          "displayName": "⠀⠀⠀✨Ram | 람 Lam 🌎",
          "url": "https://instagram.com/rammyun"
        },
        "engagement": {
          "views": 5572,
          "likes": 378,
          "comments": 12,
          "viewsInstagram": 4458,
          "viewsFacebook": 1114
        },
        "hashtags": [
          "lanadelray",
          "hotsummernights"
        ],
        "mentions": [],
        "isPaidPartnership": false,
        "isAd": false,
        "isAffiliate": false
      }
    ]
  }
}

Billing metadata (credits charged, cache hit/miss) is returned in the X-Captapi-Credits and X-Captapi-Cache response headers.

Request parameters

NameTypeRequiredDescription
qstring YesHashtag without the # (min 2 characters). One token — spaces are 400 HASHTAG_HAS_SPACES.
limitintegerNoMax items to return (default 20, max 50). Flat 2 credits per call.
datePostedstringNolast_24_hours | last_week | last_month | last_year (aliases: today, this_week, this_month, this_year).
cachebooleanNoSet true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh.

Frequently asked questions

What does the Instagram Reels Search API do?

The Instagram Reels Search API lets you search and return matching results from a public Instagram query using one GET request to /v1/instagram/reels-search. It returns clean JSON — no OAuth or infrastructure setup required.

How many credits does the Instagram Reels Search API cost?

Each successful call costs 2 credits. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Failed or empty results are never charged.

Do I need a Instagram API key or OAuth?

No. A single Captapi key works across every platform Captapi supports — YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Threads, Bluesky, Pinterest, LinkedIn, Rumble, Spotify, Kwai, and more. We handle access, rate limits, retries, and authentication for you.

I sent "travel blog" and got 400 HASHTAG_HAS_SPACES. Is that a scrape miss?

No — Instagram hashtags are a single token. A space means this is not a tag page, so we reject it immediately (0 credits). Nothing is fetched. Use travel or #travel.

Why did Playground sit on Fetching… for 110 seconds and return a timeout 502?

One slow stage used to consume the whole 110s ceiling, so later stages never started. Native is first, intermediate stages are capped at 12s, and the fallback listing runs last. A hang with a last-good grid is 200 stale at 0 credits; 502 timeout only when there is no snapshot.

I asked for 30 Reels and got 25. Were 5 lost?

Read hydrateFailures and hydrateSkipped. listingHits is the winning path's count (not a promise that native listed 20 and the fallback still ran). hydrateFailures did not become a row (TLS / login wall / not a video); hydrateSkipped were queued but the deadline cut them. requested / listingHits / hydrateFailures / hydrateSkipped / totalReturned is the identity.

Is reels-search a pipeline? Why does source say extended next to a nativeMs timing?

Cascade, not pipeline. The native tier runs first (nativeMs is its attempt time even when it came up short); the extended path finishes the page on a native miss. source names who served the body — native | extended | cache — and timings only carries path, nativeMs, totalMs. listingHits is the winning path's count. A wall with a last-good grid is 200 stale at 0 credits.

Is the Instagram Reels Search API suitable for production use?

Yes. It is a stable REST endpoint with predictable JSON and automatic retries. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Use it for analytics, monitoring, and content automation.

Ready to run a Instagram reels search?

Start free with 100 credits — no credit card required.

Get your free API key