If you run a creator marketplace, an agency roster, or a discovery product, the hard part is never fetching the profile — it is *labelling* it. A handle like @natgeo is obvious, but the other 40,000 in your database are not. Which ones are fitness creators versus fitness *brands*? Who is a real person open to paid deals versus a media account that will never reply? Doing this by hand does not scale past a few hundred rows, and a keyword match on the bio is wrong more often than it is right.

The Intelligence API runs a language model over a public Instagram account and hands back one structured object: entity type, account role, content niche and sub-niches, inferred demographics, a brand-fit summary, a commercial-intent read, and any emails it finds. One request, one flat cost, ready to write straight into your creator table. This guide covers the fields, the two model tiers, caching, and how to tag a whole roster in a loop.

What one request gives you

GET /v1/intelligence/profile takes a single q (username, @handle, or instagram.com/... URL) and returns a { data, meta } envelope. The data object is the classification bundle — everything you would otherwise pay a human to tag:

FieldWhat it holdsExample
entity_typeperson, brand, or organization"person"
account_rolecreator, business, media, public figure"creator"
content_tagsprimary niche + sub_niches[] per tagphotography -> travel, wildlife
gender / age_rangeinferred demographics"female", "25-34"
country / cityinferred location"US", "Austin"
primary_languagemain posting language"en"
tagline / bio_summaryone-liner + normalized bioclean, deduped copy
content_summarywhat they actually post aboutparagraph
brand_fit_summarywhich brands and categories suit themparagraph
niche_authorityhow established they are in the nicheread of depth + credibility
commercial_intenthow open they are to paid partnershipshigh / medium / low signal
emails / social_accountscontact + cross-platform links found[...]

Same input, richer output

You already point q at a handle for the raw profile endpoint. Intelligence takes the exact same q and adds a reasoning layer on top — so you can enrich accounts you have already discovered without changing how you reference them.

Call it in three lines

Authenticate with Authorization: Bearer $VIREV_API_KEY. Every response carries a meta block — cost, balance, and request_id — so you can log spend per call. Start with curl:

shell
curl "https://api.virev.ai/v1/intelligence/profile?q=natgeo" \
  -H "Authorization: Bearer $VIREV_API_KEY"
classify.js
const res = await fetch(
  "https://api.virev.ai/v1/intelligence/profile?q=natgeo",
  { headers: { Authorization: "Bearer kb_live_..." } },
);
const { data, meta } = await res.json();

console.log(data.entity_type);       // "person" | "brand" | "organization"
console.log(data.account_role);      // "creator"
console.log(data.content_tags);      // [{ primary: "photography", sub_niches: [...] }]
console.log(data.brand_fit_summary); // a paragraph on which brands suit them
console.log(meta.cost);              // "$0.05"

This endpoint runs a model — plan for latency

A cold handle can take seconds to minutes because a language model reads the account before answering. Call it from a background worker or queue with a generous timeout, never inside a synchronous request handler. And you are only billed on a 200 — a 404, 502, or 504 costs you nothing, so a raised-for-status client never overcharges you.

Choose your model: gpt-5.4-mini vs gpt-5.4

The endpoint defaults to gpt-5.4-mini at $0.05 per call — the right tool for bulk tagging, where you want a consistent niche and role across tens of thousands of rows. When you need sharper judgment — vetting a headline creator, resolving an ambiguous brand-versus-person account, writing a brand-fit read a human will actually trust — pass model=gpt-5.4 for $0.10.

ModelParamCostReach for it when
gpt-5.4-minidefault (omit model)$0.05Bulk-tagging thousands of creators
gpt-5.4model=gpt-5.4$0.10Nuanced brand-fit and top-tier vetting
+ force_refresh=trueon either modeldoubles ($0.10 / $0.20)Re-classifying after a profile pivot
shell
# Higher-reasoning pass on a single high-value account
curl "https://api.virev.ai/v1/intelligence/profile?q=mkbhd&model=gpt-5.4" \
  -H "Authorization: Bearer $VIREV_API_KEY"

Caching and force_refresh

Because the model run is the expensive, slow part, the result is cached per handle. The first request pays the latency; a repeat request for the same account comes back fast instead of re-running the model. That makes re-reads cheap in time — enrich once, then reference the stored classification whenever your UI needs it.

When a creator has genuinely changed — rebranded, switched niches, went from personal to business — pass force_refresh=true to re-run the model against fresh profile data. That bypasses the cache and doubles the cost ($0.10 on mini, $0.20 on gpt-5.4), so trigger it deliberately rather than on every read.

Auto-tag a whole roster

The batch pattern is a plain loop: pull your handles, classify each, and write the fields straight onto your creator records. Use a long timeout to absorb cold-handle latency, and raise_for_status() so failed calls surface loudly instead of silently — remember, they were never billed.

tag_roster.py
import requests

HEADERS = {"Authorization": "Bearer kb_live_..."}
ROSTER = ["natgeo", "mkbhd", "hormozi", "gymshark"]

def classify(handle: str) -> dict:
    r = requests.get(
        "https://api.virev.ai/v1/intelligence/profile",
        params={"q": handle},   # model defaults to gpt-5.4-mini ($0.05)
        headers=HEADERS,
        timeout=300,            # a cold handle runs an LLM — allow minutes
    )
    r.raise_for_status()        # 404 / 502 / 504 cost you nothing
    return r.json()

for handle in ROSTER:
    body = classify(handle)
    d, m = body["data"], body["meta"]
    tag = d["content_tags"][0]
    print(handle, "->", d["account_role"], "|", tag["primary"], tag["sub_niches"])
    print("   commercial_intent:", d["commercial_intent"], "| spent:", m["cost"])

The emails and social_accounts fields come back on the same call, so tagging and first-pass contact discovery happen together. When you need higher recall on outreach details specifically, follow up with the dedicated email finder endpoint — and if you are assembling the full pipeline, see how it fits in build an influencer discovery tool.

Budget math

At $0.05 each, 1,000 creators is $50 on gpt-5.4-mini; $100 on gpt-5.4. The $1 starter deposit becomes a $5 balance — 100 classifications — with no subscription and no expiry. Default rate limit is 100 requests/min, surfaced in the X-RateLimit-* headers, with Retry-After on any 429.

Tag your first creator in one call

Pay $1, get a $5 balance, and start auto-classifying accounts — no subscription.

Get your API key →