x402 Instagram API: views, likes, comments for $0.01

Two endpoints cover the Instagram surface most builders actually need: the stats of a specific post, and the public profile of a specific account. Both cost $0.01 per request, paid inline in USDC on Base through the x402 protocol. No API key, no Meta developer app, no app review, no monthly plan. This post is the complete working reference for both.

Setup: sixty seconds, one wallet

The only prerequisite is a wallet holding USDC on Base. It does not need ETH, because payments are EIP-3009 authorizations that the facilitator submits for you. Wrap your fetch once and every call after that pays for itself:

import { wrapFetchWithPaymentFromConfig } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm";
import { privateKeyToAccount } from "viem/accounts";

const account = privateKeyToAccount(process.env.AGENT_PRIVATE_KEY);

const payFetch = wrapFetchWithPaymentFromConfig(fetch, {
  schemes: [{ network: "eip155:8453", client: new ExactEvmScheme(account) }],
});

If you skip the wrapper and call the endpoints raw, you get an HTTP 402 with the exact payment terms in JSON. That challenge is free and it is a useful smoke test; the quickstart shows it with curl.

Endpoint 1: Instagram post stats

GET /api/v1/instagram/post takes either a full post URL or a bare shortcode:

// By URL: any link containing /p/, /reel/, /reels/, or /tv/
const byUrl = await payFetch(
  "https://x402.findclout.com/api/v1/instagram/post?url=" +
    encodeURIComponent("https://www.instagram.com/reel/DLmR4kXtQ2a/")
);

// By shortcode, if you already parsed it out
const byCode = await payFetch(
  "https://x402.findclout.com/api/v1/instagram/post?code=DLmR4kXtQ2a"
);

Both return the same shape:

{
  "success": true,
  "platform": "instagram",
  "fetchedAt": "2026-07-19T14:03:27.000Z",
  "url": "https://www.instagram.com/reel/DLmR4kXtQ2a/",
  "username": "houseofhighlights",
  "views": 2841903,
  "likes": 193412,
  "comments": 2874,
  "shares": 0
}

Field semantics you should code against

  • views: real play counts for reels and videos. Photo posts return null, not zero, because Instagram does not expose photo view counts. Treat null as "not applicable," never as "zero views."
  • likes: the public like count. If the author hides like counts, this can be null.
  • comments: the public comment count.
  • shares: always 0 on Instagram. Share counts are not public on the platform, and we return a constant rather than guessing.
  • fetchedAt: the ISO 8601 timestamp of the lookup. Stats are read live at request time, so this is your data's freshness guarantee.

Endpoint 2: Instagram profile stats

GET /api/v1/instagram/user returns the full public profile for a handle:

const res = await payFetch(
  "https://x402.findclout.com/api/v1/instagram/user?username=nba"
);
const profile = await res.json();
{
  "success": true,
  "platform": "instagram",
  "fetchedAt": "2026-07-19T14:04:41.000Z",
  "username": "nba",
  "fullName": "NBA",
  "followers": 89214553,
  "following": 1042,
  "posts": 51230,
  "isVerified": true,
  "isPrivate": false,
  "biography": "The official Instagram of the National Basketball Association.",
  "profilePicUrl": "https://x402.findclout.com/cdn/avatars/nba.jpg"
}

The two endpoints compose naturally. Post stats tell you how a piece of content performed; the profile tells you the size of the account behind it. Views divided by followers is the crudest useful virality signal there is, and it costs two cents to compute:

const post = await (await payFetch(POST_URL_ENDPOINT)).json();
const user = await (await payFetch(
  "https://x402.findclout.com/api/v1/instagram/user?username=" + post.username
)).json();

const viralityRatio = post.views / user.followers;
// 2841903 / 89214553 = 0.032 for a big account,
// but a 3.0 on a small account is the interesting signal

Errors, charges, and edge cases

The billing rule is strict and simple: 4xx responses are never charged, 5xx responses are never charged, and 200 responses are charged one cent. In practice:

  • Missing or unparseable URL, no shortcode found: HTTP 400, free. Validate cheaply, retry never.
  • Post deleted, account deleted, or private: HTTP 200 with {"success": false, "error": "not_found"}, charged. The lookup ran; the answer is that the thing is not publicly visible. Cache these.
  • Our data infrastructure timed out or failed: HTTP 502, free. Retry with backoff.

One practical tip for bulk work: dedupe your URLs and cache by shortcode. Instagram shortcodes are stable identifiers, so DLmR4kXtQ2a today is DLmR4kXtQ2a forever, and re-fetching a post more often than your reporting cadence requires is just donating cents to us. We will take them, but you have better uses for the money.

What people build on these two endpoints

Campaign verification. Take the list of post URLs an influencer delivered, pull live stats, compare against the contracted numbers. The full pattern, with a runnable script and CPM math, is in how agents verify influencer campaign results automatically.

Creator vetting. Before paying a creator, an agent checks follower count, verification, and the view performance of recent posts. The isPrivate and isVerified flags plus a virality ratio filter out most junk in one pass.

Trend monitoring. Poll a set of shortcodes hourly and watch the deltas. At a cent per poll, tracking 100 posts hourly for a full day costs $24, which is less than most vendors charge for logging in.

Agent tools. Because there is no API key, you can hand this endpoint to an LLM agent as a tool definition and let it pay from its own wallet. The agent wallet tutorial has copy-paste tool definitions for Claude and LangChain.

Payout automation. If you pay creators against performance, the pair of endpoints closes the loop end to end: verify the deliverable's stats with the post endpoint, sanity check the account with the profile endpoint, and compute the payout from numbers you fetched yourself rather than numbers the payee screenshotted. At a cent per check, verifying every single payout costs less than the payment processing fees on the payouts themselves.

If your URLs are mixed across platforms, skip the platform specific endpoints and use GET /api/v1/post, which auto detects Instagram, TikTok, and X from the hostname. TikTok specifics live in the TikTok views API guide, and the broader comparison of access models is in how to check Instagram post views with an API.

Want the views, not just the numbers?

FindClout runs the biggest independently owned American meme page network, with sports, finance, entrepreneurship, movie, TV, and music pages reaching real American audiences. We place brands natively inside viral clips people already love: not ads next to content, your product inside it.

Book a call at findclout.com