Skip to content
MentionBird.ai
Browse the documentation

Get Brand Visibility

How often the brand appears in AI answers, plus prominence score, average rank and sentiment. Group overall, by day, by platform or by tag.

GET /visibility

Query parameters

Name Type Description
brand required string Tracked brand name, exactly as returned by listTrackedBrands.
group_by string
default overall
Grouping granularity.
One of: overall day provider query_tag
start_date string ISO start date (YYYY-MM-DD). Defaults to 30 days ago.
end_date string ISO end date (YYYY-MM-DD). Defaults to today.
brand_prompt_id string Limit to one prompt — token from listQueries.
query_tag string Filter to one tag slug.
llm_provider string Filter to one AI platform.
One of: openai claude gemini perplexity grok

Example request

curl -H "Authorization: Bearer $MENTIONBIRD_API_KEY" \
  "https://app.mentionbird.ai/api/v1/visibility?brand=Acme"

Example response

Recorded from a live call against a demo workspace, so the shape is exactly what the endpoint returns.

{
  "date_range": {
    "days": 30,
    "end": "2026-09-24",
    "start": "2026-08-26"
  },
  "filters_applied": {
    "brand": "Acme",
    "brand_prompt_id": null,
    "end_date": "2026-09-24",
    "group_by": "overall",
    "llm_provider": null,
    "query_tag": null,
    "start_date": "2026-08-26"
  },
  "metrics": {
    "avg_rank": 1.0,
    "mention_runs": 1,
    "net_sentiment": 100.0,
    "prominence_pct": 100.0,
    "sentiment_coverage_pct": 100.0,
    "total_runs": 1,
    "visibility_pct": 100.0
  }
}

Responses

200
Visibility metrics. net_sentiment is -100..+100: how the AI platforms talk about the brand, not how often they name it. +100 = every labeled mention recommends it, -100 = every one criticizes it, 0 = balanced or uniformly neutral. It is computed over labeled mentions ONLY. sentiment_coverage_pct is what share of mentions carry a label; anything crawled before sentiment tracking began is unlabeled and counts toward neither side. Read the two together - net_sentiment 0 with coverage 0 means no data, not neutral, and must never be reported as neutral.
400
Validation error — check the message in `error.message`.
401
Unauthorized — missing, invalid or revoked bearer token.
403
Forbidden — plan lacks API access, or key is read-only.
404
Not found — the brand, prompt or resource does not exist.
405
Method not allowed.
500
Internal error — logged; retry is safe for reads.