Skip to content
looot docs
Esc
↑↓navigate↵open⌘Jpreview
On this page

AnyAPI / Instagram Post

AnyAPI tool anyapi-run-instagram-post on looot: input fields, $0.0015 per call, output shape, and code to run it with curl, JavaScript or Python.

Fetch a single Instagram post or reel by URL (media URLs, like count, owner, type) as normalized JSON. Turn on hostVideo to also get the post’s video on a hosted MP4 link that plays without an Instagram session, charged as an extra on top of the price. If you want the spoken words as well, instagram.reel_transcript transcribes the same reel. Price: $0.50 per 1,000 requests (flat per request - same cost regardless of results returned). Routing: 5 independent lanes are available in execution order. A failed attempt uses the next lane only when the request’s payment authorizes that lane’s price; the normalized schema stays the same. Catalog: Instagram Post pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every Instagram endpoint.

  • Tool id: anyapi-run-instagram-post
  • Provider: AnyAPI
  • Job: Get an Instagram post and its metrics (instagram.post.get)
  • Price: $0.0015 per call. A call that fails at the provider costs $0.

Inputs

Name Type Required Description
hostVideo boolean no Set true to also get the post’s video on a hosted MP4 link that plays without an Instagram session. The file is downloaded and stored for you, and the response adds hostedUrl, expiresUtc and bytes. It is charged as an extra on top of the price, and it never changes which source serves you: every source offers it at the same price. A post with no video, or a post that does not exist, is refused with no charge rather than billed for a file that cannot exist. Omit it and nothing is downloa…
requirePlayCount boolean no Deprecated; send requireFields: ["plays"] instead, which does exactly the same thing. Set true to be served only by a source that reports a reel’s play count. Omit it and routing is unchanged, with the cheapest source serving, which does not carry play counts, so plays is absent from its responses. This can raise your price: opting in routes to a source that reports the count, and you are quoted and charged its price. It stays accepted so callers that already send it keep working.
url string yes Full Instagram post or reel URL, carrying the media shortcode: /p/, /reel/, /reels/, or /tv/. A profile URL such as https://www.instagram.com/username names no post, so it is rejected instead of charged for an empty result - send that account’s handle to instagram.profile, or its posts to instagram.user_posts.

Output

The run’s result holds the provider’s answer. Signed in, looot inspect anyapi-run-instagram-post prints its fields.

Run it

Every call needs your API token in LOOOT_TOKEN; Sign in shows how to get one. Each run also needs a new idempotency key, so a retry never pays twice. With wait: 30 the answer comes back inline when the run ends within 30 seconds. Otherwise you get the running run back: poll GET /v1/runs/<runId>.

Example input with placeholder values:

curl -X POST "https://api.looot.ai/v1/runs" \
  -H "Authorization: Bearer $LOOOT_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"endpointId":"anyapi-run-instagram-post","input":{"url":"https://example.com"},"wait":30}'
const response = await fetch("https://api.looot.ai/v1/runs", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.LOOOT_TOKEN}`,
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify({
    endpointId: "anyapi-run-instagram-post",
    input: {
      url: "https://example.com",
    },
    wait: 30,
  }),
});
const run = await response.json();
console.log(run.status, run.result);
import os
import uuid

import requests

response = requests.post(
    "https://api.looot.ai/v1/runs",
    headers={
        "Authorization": f"Bearer {os.environ['LOOOT_TOKEN']}",
        "Idempotency-Key": str(uuid.uuid4()),
    },
    json={
        "endpointId": "anyapi-run-instagram-post",
        "input": {
            "url": "https://example.com",
        },
        "wait": 30,
    },
    timeout=90,
)
run = response.json()
print(run["status"], run.get("result"))

To let looot pick among every provider of this job instead, send job:instagram.post.get as endpointId; see the job page.

Was this page helpful?