Panorama API

Share of voice

Compare 2–5 brands over bounded native social search samples. Mention shares use sources that answered for every brand; engagement shares also require observed counters on common sources. Fractions, evidence, source coverage and null denominators are explicit. Select supported sources with platforms; this is not total market share.

Read as Markdown · Use with an AI agent

Endpoint

GET/v1/panorama/share-of-voicelive · provenUp to 5 credits
Try in Playground

Parameters

Query parameters

NameRequiredDescriptionExample
brandsyes2–5 comma-separated brand or product names to comparedeno,bun
platformsnoCSV of supported sources: reddit,hackernews,bluesky,github,x,tiktok,instagram,youtube,linkedin,threads,pinterest. Default the six example sources. Each remains subject to eligibility, funding, deadlines and limits.reddit,hackernews,x,tiktok,instagram,youtube
date_modenoranked (default) retains date-labelled matches; strict excludes unknown and out-of-window dates.strict
per_source_limitnoInteger 1–50, default25. Bounded sample per source; no full-platform count.25
lookback_daysnoInteger1–366, default30.30
contextnoOptional subject context, at most1000 characters. Adds a bounded hint from the caller’s positive context to native search and prioritises returned candidates; inspect query_plan and source queries. Also guides optional Jev classification where supported. No inferred aliases or identity guarantee.Mercury, the business banking service; not the planet.
relevancenonone (default) or jev. Optional funded classification on at most20 candidates per brand, balanced across sources within relevance tiers. All original evidence and sampled arithmetic remain available. Inspect selection and classified counts; capacity and funding can leave records unclassified.none
dry_runnoRead a zero-credit estimate without fetching sources, running AI, or reserving credits. Cache status is a snapshot, not a guarantee at execution.1

Examples

Make the request

curl
curl "https://www.monocrawl.com/v1/panorama/share-of-voice?brands=deno%2Cbun" \
  -H "x-api-key: mn_your_key_here"
TypeScript
typescript
const key = process.env.MONOCRAWL_API_KEY;
if (!key) throw new Error('Set MONOCRAWL_API_KEY on your server.');
const res = await fetch(
  "https://www.monocrawl.com/v1/panorama/share-of-voice?brands=deno%2Cbun",
  { headers: { "x-api-key": key } },
);
const body = await res.json();

if (!body.success) {
  // one error shape for every endpoint — see /docs/errors
  throw new Error(`${body.error.type}: ${body.error.message}`);
}

console.log(body.data, "credits left:", body.credits_remaining);
Python
python
import os
import requests

res = requests.get(
    "https://www.monocrawl.com/v1/panorama/share-of-voice?brands=deno%2Cbun",
    headers={"x-api-key": os.environ["MONOCRAWL_API_KEY"]},
    timeout=60,
)
body = res.json()

if not body["success"]:
    # one error shape for every endpoint — see /docs/errors
    raise RuntimeError(f"{body['error']['type']}: {body['error']['message']}")

print(body["data"], "credits left:", body["credits_remaining"])

Response

Response fields and example

This example is illustrative, not a captured live response. Variable-cost operations may settle a charge different from the list price below. A successful response puts the platform payload in data and reports the exact credits used, remaining balance, request id and cache status beside it.

200 · application/json
{
  "success": true,
  "platform": "panorama",
  "endpoint": "/v1/panorama/share-of-voice",
  "data": {
    "schema_version": "social-evidence-v2",
    "scope": "native_social_search_sample",
    "comparison": {
      "sources": [
        "hackernews"
      ]
    },
    "totals": {
      "comparable_mentions": 2,
      "comparable_engagement": 16
    },
    "brands": [
      {
        "brand": "My Brand",
        "mentions": 1,
        "comparable_mentions": 1,
        "share_of_mentions": 0.5,
        "share_of_engagement": 0.75,
        "evidence": [
          {
            "id": "101",
            "platform": "hackernews",
            "source": "hackernews",
            "title": "Using My Brand",
            "text": null,
            "url": "https://news.ycombinator.com/item?id=101",
            "canonical_url": "https://news.ycombinator.com/item?id=101",
            "author": {
              "id": null,
              "handle": "example_reader",
              "name": null,
              "url": null
            },
            "metrics": {
              "likes": null,
              "score": 10,
              "comments": 2,
              "reshares": null,
              "views": null,
              "interactions": 12,
              "complete_interactions": false
            },
            "engagement": 12,
            "created_at": "2026-09-18T12:00:00.000Z",
            "fetched_at": "2026-09-19T12:00:00.000Z",
            "date_status": "within_window",
            "relevance": {
              "method": "literal_subject_match",
              "classification": "keyword_match",
              "entity_verified": false
            },
            "provenance": [
              {
                "platform": "hackernews",
                "endpoint": "search",
                "query": "My Brand",
                "params": {
                  "query": "My Brand"
                }
              }
            ]
          }
        ],
        "coverage": {
          "hackernews": {
            "status": "answered",
            "fetched": 1,
            "examined": 1,
            "returned": 1,
            "deduplicated": 0,
            "within_window": 1,
            "undated": 0,
            "outside_window": 0,
            "sample_cap": 25,
            "has_more": false,
            "date_mode": "strict"
          }
        },
        "query_plan": {
          "version": "panorama-context-query-v1",
          "subject": "My Brand",
          "query": "My Brand",
          "mode": "subject",
          "context_terms": [],
          "source_order": [
            "hackernews"
          ],
          "lanes": [
            {
              "platform": "hackernews",
              "query": "My Brand",
              "mode": "subject"
            }
          ],
          "literal_sources": [
            "hackernews"
          ],
          "context_sources": [],
          "max_requests_per_source": 1,
          "policy": "One bounded native search per source. Original subject remains the identity target; lexical matching is not proof of identity."
        },
        "matched_items": [],
        "candidate_items": [
          {
            "id": "101",
            "platform": "hackernews",
            "source": "hackernews",
            "title": "Using My Brand",
            "text": null,
            "url": "https://news.ycombinator.com/item?id=101",
            "canonical_url": "https://news.ycombinator.com/item?id=101",
            "author": {
              "id": null,
              "handle": "example_reader",
              "name": null,
              "url": null
            },
            "metrics": {
              "likes": null,
              "score": 10,
              "comments": 2,
              "reshares": null,
              "views": null,
              "interactions": 12,
              "complete_interactions": false
            },
            "engagement": 12,
            "created_at": "2026-09-18T12:00:00.000Z",
            "fetched_at": "2026-09-19T12:00:00.000Z",
            "date_status": "within_window",
            "relevance": {
              "method": "literal_subject_match",
              "classification": "keyword_match",
              "entity_verified": false
            },
            "provenance": [
              {
                "platform": "hackernews",
                "endpoint": "search",
                "query": "My Brand",
                "params": {
                  "query": "My Brand"
                }
              }
            ]
          }
        ],
        "match_summary": {
          "status": "candidates_only",
          "collected_records": 1,
          "supported_matches": 0,
          "supported_useful_matches": 0,
          "lexical_candidates": 1,
          "unresolved_records": 0,
          "unrelated_records": 0,
          "scope": "returned_sample",
          "entity_verified": false,
          "policy": "No completed relevance classification in this illustration. The original records remain available; these are lexical candidates, not verified matches."
        }
      },
      {
        "brand": "Other Brand",
        "mentions": 1,
        "comparable_mentions": 1,
        "share_of_mentions": 0.5,
        "share_of_engagement": 0.25,
        "evidence": [
          {
            "id": "102",
            "platform": "hackernews",
            "source": "hackernews",
            "title": "Using Other Brand",
            "text": null,
            "url": "https://news.ycombinator.com/item?id=102",
            "canonical_url": "https://news.ycombinator.com/item?id=102",
            "author": {
              "id": null,
              "handle": "example_reader",
              "name": null,
              "url": null
            },
            "metrics": {
              "likes": null,
              "score": 2,
              "comments": 2,
              "reshares": null,
              "views": null,
              "interactions": 4,
              "complete_interactions": false
            },
            "engagement": 4,
            "created_at": "2026-09-18T12:00:00.000Z",
            "fetched_at": "2026-09-19T12:00:00.000Z",
            "date_status": "within_window",
            "relevance": {
              "method": "literal_subject_match",
              "classification": "keyword_match",
              "entity_verified": false
            },
            "provenance": [
              {
                "platform": "hackernews",
                "endpoint": "search",
                "query": "Other Brand",
                "params": {
                  "query": "Other Brand"
                }
              }
            ]
          }
        ],
        "coverage": {
          "hackernews": {
            "status": "answered",
            "fetched": 1,
            "examined": 1,
            "returned": 1,
            "deduplicated": 0,
            "within_window": 1,
            "undated": 0,
            "outside_window": 0,
            "sample_cap": 25,
            "has_more": false,
            "date_mode": "strict"
          }
        },
        "query_plan": {
          "version": "panorama-context-query-v1",
          "subject": "Other Brand",
          "query": "Other Brand",
          "mode": "subject",
          "context_terms": [],
          "source_order": [
            "hackernews"
          ],
          "lanes": [
            {
              "platform": "hackernews",
              "query": "Other Brand",
              "mode": "subject"
            }
          ],
          "literal_sources": [
            "hackernews"
          ],
          "context_sources": [],
          "max_requests_per_source": 1,
          "policy": "One bounded native search per source. Original subject remains the identity target; lexical matching is not proof of identity."
        },
        "matched_items": [],
        "candidate_items": [
          {
            "id": "102",
            "platform": "hackernews",
            "source": "hackernews",
            "title": "Using Other Brand",
            "text": null,
            "url": "https://news.ycombinator.com/item?id=102",
            "canonical_url": "https://news.ycombinator.com/item?id=102",
            "author": {
              "id": null,
              "handle": "example_reader",
              "name": null,
              "url": null
            },
            "metrics": {
              "likes": null,
              "score": 2,
              "comments": 2,
              "reshares": null,
              "views": null,
              "interactions": 4,
              "complete_interactions": false
            },
            "engagement": 4,
            "created_at": "2026-09-18T12:00:00.000Z",
            "fetched_at": "2026-09-19T12:00:00.000Z",
            "date_status": "within_window",
            "relevance": {
              "method": "literal_subject_match",
              "classification": "keyword_match",
              "entity_verified": false
            },
            "provenance": [
              {
                "platform": "hackernews",
                "endpoint": "search",
                "query": "Other Brand",
                "params": {
                  "query": "Other Brand"
                }
              }
            ]
          }
        ],
        "match_summary": {
          "status": "candidates_only",
          "collected_records": 1,
          "supported_matches": 0,
          "supported_useful_matches": 0,
          "lexical_candidates": 1,
          "unresolved_records": 0,
          "unrelated_records": 0,
          "scope": "returned_sample",
          "entity_verified": false,
          "policy": "No completed relevance classification in this illustration. The original records remain available; these are lexical candidates, not verified matches."
        }
      }
    ]
  },
  "credits_used": 5,
  "credits_remaining": 99,
  "request_id": "req_…",
  "cached": false
}

The example uses fictional values and shows a documented subset of data. The fields below are optional across supported sources; nullable fields can also be absent. Preserve unknown values and accept additional fields.

Download the data JSON Schema. Validate response.data, not the whole envelope. A valid shape does not establish that every field or source record was returned.

Field inside dataTypeMeaning
schema_versionstring | nullsocial-evidence-v2.
scopestring | nullnative_social_search_sample, not a full platform mention count.
windowobjectNested response fields; optional unless explicitly documented.
window.fromstring | nullWindow start.
window.tostring | nullWindow end.
window.date_modestring | nullranked retains date-labelled results; strict excludes undated and out-of-window rows.
coverageobjectNested response fields; optional unless explicitly documented.
brandsarrayNested response fields; optional unless explicitly documented.
brands[].brandstring | nullCompared name.
brands[].mentionsnumber | nullBounded observed sample count.
brands[].comparable_mentionsnumber | nullSample mentions on common sources.
brands[].share_of_mentionsnumber | nullBrand common-source mentions / all compared brand common-source mentions; 0–1 fraction, null if unavailable.
brands[].share_of_engagementnumber | nullObserved interaction share, 0–1 fraction; missing inputs excluded and views separate.
brands[].evidencearrayNested response fields; optional unless explicitly documented.
brands[].evidence[].idstring | nullNative record identifier; preserve exact case and value.
brands[].evidence[].platformstring | nullPlatform id.
brands[].evidence[].sourcestring | nullCollection lane.
brands[].evidence[].titlestring | nullOriginal title.
brands[].evidence[].textstring | nullOriginal text.
brands[].evidence[].urlstring | nullOriginal link.
brands[].evidence[].canonical_urlstring | nullDeduplication URL preserving source identity.
brands[].evidence[].authorobjectNested response fields; optional unless explicitly documented.
brands[].evidence[].author.idstring | nullAuthor id.
brands[].evidence[].author.handlestring | nullPublic username.
brands[].evidence[].author.namestring | nullDisplay name.
brands[].evidence[].author.urlstring | nullAuthor link.
brands[].evidence[].metricsobjectNested response fields; optional unless explicitly documented.
brands[].evidence[].metrics.likesnumber | nullNative likes or null.
brands[].evidence[].metrics.scorenumber | nullNative net score; can be negative.
brands[].evidence[].metrics.commentsnumber | nullNative comments or replies.
brands[].evidence[].metrics.resharesnumber | nullNative reposts/reshares.
brands[].evidence[].metrics.viewsnumber | nullNative views; separate from interactions.
brands[].evidence[].metrics.interactionsnumber | nullDocumented interaction total when available.
brands[].evidence[].metrics.complete_interactionsboolean | nullAll inputs for the interaction total are known.
brands[].evidence[].engagementnumber | nullObserved interaction sum; inspect metrics for original counters. This value is not a cross-platform ranking score.
brands[].evidence[].created_atstring | nullPublication timestamp or null.
brands[].evidence[].fetched_atstring | nullCollection timestamp.
brands[].evidence[].date_statusstring | nullwithin_window, outside_window or undated.
brands[].evidence[].relevanceobjectNested response fields; optional unless explicitly documented.
brands[].evidence[].relevance.methodstring | nullliteral_subject_match or jev.
brands[].evidence[].relevance.classificationstring | nullkeyword_match, subject_match, unrelated or needs_review. Lexical matching is not identity verification.
brands[].evidence[].relevance.entity_verifiedboolean | nullFalse for keyword-only matching.
brands[].evidence[].relevance.modelstring | nullModel identifier when classified.
brands[].evidence[].relevance.versionstring | nullClassifier version.
brands[].evidence[].relevance.statusstring | nullclassified or unavailable for optional Jev analysis.
brands[].evidence[].relevance.reasonstring | nullReason analysis was unavailable.
brands[].evidence[].relevance.identitystring | nullyes, no or uncertain.
brands[].evidence[].relevance.identity_supportnumber | nullModel support0–1, not a calibrated correctness probability.
brands[].evidence[].relevance.discussionstring | nullsubstantive, incidental, adjacent, unrelated or uncertain.
brands[].evidence[].relevance.discussion_supportnumber | nullModel support0–1.
brands[].evidence[].relevance.usefulnessstring | nullevidence, question, capability, passing or unclear.
brands[].evidence[].relevance.usefulness_supportnumber | nullModel support0–1.
brands[].evidence[].relevance.evidence_scopestring | nullreturned_title_and_text; attached context is separate reading evidence.
brands[].evidence[].provenancearrayNested response fields; optional unless explicitly documented.
brands[].evidence[].provenance[].platformstring | nullOriginal platform.
brands[].evidence[].provenance[].endpointstring | nullOriginal endpoint.
brands[].evidence[].provenance[].querystring | nullQuery used.
brands[].evidence[].provenance[].paramsobjectNested response fields; optional unless explicitly documented.
brands[].evidence[].context_evidenceobjectNested response fields; optional unless explicitly documented.
brands[].evidence[].context_evidence.kindstring | nullcomments or transcripts.
brands[].evidence[].context_evidence.statusstring | nullanswered, unavailable or invalid_response.
brands[].evidence[].context_evidence.itemsarrayNested response fields; optional unless explicitly documented.
brands[].evidence[].context_evidence.items[].idstring | nullOriginal comment identifier.
brands[].evidence[].context_evidence.items[].textstring | nullReadable comment text; YouTube HTML formatting is converted to plain text.
brands[].evidence[].context_evidence.items[].urlstring | nullOriginal comment URL.
brands[].evidence[].context_evidence.items[].created_atstring | nullOriginal publication timestamp or null.
brands[].evidence[].context_evidence.items[].date_statusstring | nullwithin_window or outside_window against the disclosed context window; undated without a publication timestamp; not_evaluated if no valid window was supplied.
brands[].evidence[].context_evidence.windowobject | nullNested response fields; optional unless explicitly documented.
brands[].evidence[].context_evidence.window.fromstring | nullExplicit parent query-window start.
brands[].evidence[].context_evidence.window.tostring | nullExplicit parent query-window end.
brands[].evidence[].context_evidence.excluded_parent_recordsnumber | nullX records excluded because native ID or canonical URL matched the parent post, not actual replies.
brands[].evidence[].context_evidence.counted_as_mentionsboolean | nullFalse: contextual comments do not add mentions to the search sample.
brands[].evidence[].context_evidence.sample_capnumber | nullAt most 10 returned comments per selected parent.
brands[].evidence[].source_ranknumber | nullOne-based original source page position before non-content filtering and deduplication; null for legacy evidence or separately attached context.
brands[].coverageobjectNested response fields; optional unless explicitly documented.
brands[].comparable_engagementnumber | nullObserved interactions on the common engagement sources, or null when unavailable.
brands[].rankingobjectNested response fields; optional unless explicitly documented.
brands[].ranking.versionstring | nullpanorama-source-diverse-v2.
brands[].ranking.orderstring | nullRelevance tier, authored-content priority, balanced source lanes, context overlap, then native source rank.
brands[].ranking.relevance_tiersarrayNested response fields; optional unless explicitly documented.
brands[].ranking.source_orderarrayNested response fields; optional unless explicitly documented.
brands[].ranking.recordsnumber | nullNumber of records ordered, before any top-evidence preview limit.
brands[].ranking.per_sourceobjectNested response fields; optional unless explicitly documented.
brands[].ranking.per_tierobjectNested response fields; optional unless explicitly documented.
brands[].ranking.source_rank_basisobjectNested response fields; optional unless explicitly documented.
brands[].ranking.source_rank_basis.record_source_ranknumber | nullRecords with original one-based page rank.
brands[].ranking.source_rank_basis.input_source_ordernumber | nullLegacy records using encounter order within their source.
brands[].ranking.accounting_policystring | nullOrdering leaves collected evidence, sample counts and billing unchanged.
brands[].ranking.relevance_policystring | nullLexical cues are candidates, not entity verification.
brands[].ranking.repeated_text_recordsnumber | nullRepeated long authored text deferred within a relevance tier, not deleted or counted as an independent opinion.
brands[].relevance_analysisobjectNested response fields; optional unless explicitly documented.
brands[].relevance_analysis.methodstring | nulljev.
brands[].relevance_analysis.modelstring | nullConfigured model identifier.
brands[].relevance_analysis.versionstring | nullClassification prompt version.
brands[].relevance_analysis.examinednumber | nullSelected records, including those whose analysis was unavailable.
brands[].relevance_analysis.classifiednumber | nullRecords with complete valid classification answers.
brands[].relevance_analysis.batchesnumber | nullAttempted bounded classification batches.
brands[].relevance_analysis.statusstring | nullcomplete, partial, unavailable or no_candidates; complete means all selected candidates were classified, not the full pool.
brands[].relevance_analysis.unavailablenumber | nullSelected records whose classification did not complete.
brands[].relevance_analysis.remaining_unclassifiednumber | nullAll collected records without completed classification, including failed selected candidates.
brands[].relevance_analysis.selectionobjectNested response fields; optional unless explicitly documented.
brands[].relevance_analysis.selection.versionstring | nullRanking version.
brands[].relevance_analysis.selection.limitnumber | nullMaximum candidates; Jev at most20 per brand, enrichment at most3.
brands[].relevance_analysis.selection.collectednumber | nullCollected records supplied to selection.
brands[].relevance_analysis.selection.eligiblenumber | nullRecords not explicitly classified unrelated.
brands[].relevance_analysis.selection.selectednumber | nullRecords selected for attempted interpretation.
brands[].relevance_analysis.selection.remaining_eligiblenumber | nullEligible records outside the selection allowance.
brands[].relevance_analysis.selection.explicitly_unrelated_not_selectednumber | nullUnrelated records retained in the response without using interpretation slots.
brands[].relevance_analysis.selection.per_sourceobjectNested response fields; optional unless explicitly documented.
brands[].relevance_analysis.selection.per_tierobjectNested response fields; optional unless explicitly documented.
brands[].relevance_analysis.selection.orderstring | nullSelection ordering policy.
brands[].relevance_analysis.selection.evidence_preservedboolean | nullTrue; candidate selection does not filter the evidence response.
brands[].relevance_analysis.metrics_policystring | nullLabels are additive; sample arithmetic is unchanged.
brands[].top_evidencearrayNested response fields; optional unless explicitly documented.
brands[].top_evidence[].idstring | nullNative record identifier; preserve exact case and value.
brands[].top_evidence[].platformstring | nullPlatform id.
brands[].top_evidence[].sourcestring | nullCollection lane.
brands[].top_evidence[].titlestring | nullOriginal title.
brands[].top_evidence[].textstring | nullOriginal text.
brands[].top_evidence[].urlstring | nullOriginal link.
brands[].top_evidence[].canonical_urlstring | nullDeduplication URL preserving source identity.
brands[].top_evidence[].authorobjectNested response fields; optional unless explicitly documented.
brands[].top_evidence[].author.idstring | nullAuthor id.
brands[].top_evidence[].author.handlestring | nullPublic username.
brands[].top_evidence[].author.namestring | nullDisplay name.
brands[].top_evidence[].author.urlstring | nullAuthor link.
brands[].top_evidence[].metricsobjectNested response fields; optional unless explicitly documented.
brands[].top_evidence[].metrics.likesnumber | nullNative likes or null.
brands[].top_evidence[].metrics.scorenumber | nullNative net score; can be negative.
brands[].top_evidence[].metrics.commentsnumber | nullNative comments or replies.
brands[].top_evidence[].metrics.resharesnumber | nullNative reposts/reshares.
brands[].top_evidence[].metrics.viewsnumber | nullNative views; separate from interactions.
brands[].top_evidence[].metrics.interactionsnumber | nullDocumented interaction total when available.
brands[].top_evidence[].metrics.complete_interactionsboolean | nullAll inputs for the interaction total are known.
brands[].top_evidence[].engagementnumber | nullObserved interaction sum; inspect metrics for original counters. This value is not a cross-platform ranking score.
brands[].top_evidence[].created_atstring | nullPublication timestamp or null.
brands[].top_evidence[].fetched_atstring | nullCollection timestamp.
brands[].top_evidence[].date_statusstring | nullwithin_window, outside_window or undated.
brands[].top_evidence[].relevanceobjectNested response fields; optional unless explicitly documented.
brands[].top_evidence[].relevance.methodstring | nullliteral_subject_match or jev.
brands[].top_evidence[].relevance.classificationstring | nullkeyword_match, subject_match, unrelated or needs_review. Lexical matching is not identity verification.
brands[].top_evidence[].relevance.entity_verifiedboolean | nullFalse for keyword-only matching.
brands[].top_evidence[].relevance.modelstring | nullModel identifier when classified.
brands[].top_evidence[].relevance.versionstring | nullClassifier version.
brands[].top_evidence[].relevance.statusstring | nullclassified or unavailable for optional Jev analysis.
brands[].top_evidence[].relevance.reasonstring | nullReason analysis was unavailable.
brands[].top_evidence[].relevance.identitystring | nullyes, no or uncertain.
brands[].top_evidence[].relevance.identity_supportnumber | nullModel support0–1, not a calibrated correctness probability.
brands[].top_evidence[].relevance.discussionstring | nullsubstantive, incidental, adjacent, unrelated or uncertain.
brands[].top_evidence[].relevance.discussion_supportnumber | nullModel support0–1.
brands[].top_evidence[].relevance.usefulnessstring | nullevidence, question, capability, passing or unclear.
brands[].top_evidence[].relevance.usefulness_supportnumber | nullModel support0–1.
brands[].top_evidence[].relevance.evidence_scopestring | nullreturned_title_and_text; attached context is separate reading evidence.
brands[].top_evidence[].provenancearrayNested response fields; optional unless explicitly documented.
brands[].top_evidence[].provenance[].platformstring | nullOriginal platform.
brands[].top_evidence[].provenance[].endpointstring | nullOriginal endpoint.
brands[].top_evidence[].provenance[].querystring | nullQuery used.
brands[].top_evidence[].provenance[].paramsobjectNested response fields; optional unless explicitly documented.
brands[].top_evidence[].context_evidenceobjectNested response fields; optional unless explicitly documented.
brands[].top_evidence[].context_evidence.kindstring | nullcomments or transcripts.
brands[].top_evidence[].context_evidence.statusstring | nullanswered, unavailable or invalid_response.
brands[].top_evidence[].context_evidence.itemsarrayNested response fields; optional unless explicitly documented.
brands[].top_evidence[].context_evidence.items[].idstring | nullOriginal comment identifier.
brands[].top_evidence[].context_evidence.items[].textstring | nullReadable comment text; YouTube HTML formatting is converted to plain text.
brands[].top_evidence[].context_evidence.items[].urlstring | nullOriginal comment URL.
brands[].top_evidence[].context_evidence.items[].created_atstring | nullOriginal publication timestamp or null.
brands[].top_evidence[].context_evidence.items[].date_statusstring | nullwithin_window or outside_window against the disclosed context window; undated without a publication timestamp; not_evaluated if no valid window was supplied.
brands[].top_evidence[].context_evidence.windowobject | nullNested response fields; optional unless explicitly documented.
brands[].top_evidence[].context_evidence.window.fromstring | nullExplicit parent query-window start.
brands[].top_evidence[].context_evidence.window.tostring | nullExplicit parent query-window end.
brands[].top_evidence[].context_evidence.excluded_parent_recordsnumber | nullX records excluded because native ID or canonical URL matched the parent post, not actual replies.
brands[].top_evidence[].context_evidence.counted_as_mentionsboolean | nullFalse: contextual comments do not add mentions to the search sample.
brands[].top_evidence[].context_evidence.sample_capnumber | nullAt most 10 returned comments per selected parent.
brands[].top_evidence[].source_ranknumber | nullOne-based original source page position before non-content filtering and deduplication; null for legacy evidence or separately attached context.
brands[].query_planobjectNested response fields; optional unless explicitly documented.
brands[].query_plan.versionstring | nullpanorama-context-query-v1.
brands[].query_plan.subjectstring | nullOriginal identity target.
brands[].query_plan.querystring | nullBounded expanded query template; actual source queries are listed in lanes.
brands[].query_plan.modestring | nullsubject, subject_with_context or mixed_subject_and_context.
brands[].query_plan.context_termsarrayNested response fields; optional unless explicitly documented.
brands[].query_plan.source_orderarrayNested response fields; optional unless explicitly documented.
brands[].query_plan.lanesarrayNested response fields; optional unless explicitly documented.
brands[].query_plan.lanes[].platformstring | nullSource platform.
brands[].query_plan.lanes[].querystring | nullExact native retrieval query for this lane.
brands[].query_plan.lanes[].modestring | nullsubject or subject_with_context.
brands[].query_plan.literal_sourcesarrayNested response fields; optional unless explicitly documented.
brands[].query_plan.context_sourcesarrayNested response fields; optional unless explicitly documented.
brands[].query_plan.max_requests_per_sourcenumber | nullOne bounded search per selected source.
brands[].query_plan.policystring | nullCaller context and retrieval limitations.
brands[].match_summaryobjectNested response fields; optional unless explicitly documented.
brands[].match_summary.statusstring | nullmatched, candidates_only, no_supported_match or empty_sample.
brands[].match_summary.collected_recordsnumber | nullAll retained records, including uncertain and unrelated evidence.
brands[].match_summary.supported_matchesnumber | nullCompleted Jev subject matches.
brands[].match_summary.supported_useful_matchesnumber | nullSupported subject matches with substantive useful evidence.
brands[].match_summary.lexical_candidatesnumber | nullAuthored keyword/context candidates; may be namesakes.
brands[].match_summary.unresolved_recordsnumber | nullEvidence without supported identity or literal candidacy.
brands[].match_summary.unrelated_recordsnumber | nullExplicit unrelated classifications.
brands[].match_summary.scopestring | nullreturned_sample.
brands[].match_summary.entity_verifiedboolean | nullFalse: model support is not independent identity verification.
brands[].match_summary.policystring | nullOriginal evidence remains available; no supported match does not establish absence from the web.
brands[].matched_itemsarrayNested response fields; optional unless explicitly documented.
brands[].matched_items[].idstring | nullNative record identifier; preserve exact case and value.
brands[].matched_items[].platformstring | nullPlatform id.
brands[].matched_items[].sourcestring | nullCollection lane.
brands[].matched_items[].titlestring | nullOriginal title.
brands[].matched_items[].textstring | nullOriginal text.
brands[].matched_items[].urlstring | nullOriginal link.
brands[].matched_items[].canonical_urlstring | nullDeduplication URL preserving source identity.
brands[].matched_items[].authorobjectNested response fields; optional unless explicitly documented.
brands[].matched_items[].author.idstring | nullAuthor id.
brands[].matched_items[].author.handlestring | nullPublic username.
brands[].matched_items[].author.namestring | nullDisplay name.
brands[].matched_items[].author.urlstring | nullAuthor link.
brands[].matched_items[].metricsobjectNested response fields; optional unless explicitly documented.
brands[].matched_items[].metrics.likesnumber | nullNative likes or null.
brands[].matched_items[].metrics.scorenumber | nullNative net score; can be negative.
brands[].matched_items[].metrics.commentsnumber | nullNative comments or replies.
brands[].matched_items[].metrics.resharesnumber | nullNative reposts/reshares.
brands[].matched_items[].metrics.viewsnumber | nullNative views; separate from interactions.
brands[].matched_items[].metrics.interactionsnumber | nullDocumented interaction total when available.
brands[].matched_items[].metrics.complete_interactionsboolean | nullAll inputs for the interaction total are known.
brands[].matched_items[].engagementnumber | nullObserved interaction sum; inspect metrics for original counters. This value is not a cross-platform ranking score.
brands[].matched_items[].created_atstring | nullPublication timestamp or null.
brands[].matched_items[].fetched_atstring | nullCollection timestamp.
brands[].matched_items[].date_statusstring | nullwithin_window, outside_window or undated.
brands[].matched_items[].relevanceobjectNested response fields; optional unless explicitly documented.
brands[].matched_items[].relevance.methodstring | nullliteral_subject_match or jev.
brands[].matched_items[].relevance.classificationstring | nullkeyword_match, subject_match, unrelated or needs_review. Lexical matching is not identity verification.
brands[].matched_items[].relevance.entity_verifiedboolean | nullFalse for keyword-only matching.
brands[].matched_items[].relevance.modelstring | nullModel identifier when classified.
brands[].matched_items[].relevance.versionstring | nullClassifier version.
brands[].matched_items[].relevance.statusstring | nullclassified or unavailable for optional Jev analysis.
brands[].matched_items[].relevance.reasonstring | nullReason analysis was unavailable.
brands[].matched_items[].relevance.identitystring | nullyes, no or uncertain.
brands[].matched_items[].relevance.identity_supportnumber | nullModel support0–1, not a calibrated correctness probability.
brands[].matched_items[].relevance.discussionstring | nullsubstantive, incidental, adjacent, unrelated or uncertain.
brands[].matched_items[].relevance.discussion_supportnumber | nullModel support0–1.
brands[].matched_items[].relevance.usefulnessstring | nullevidence, question, capability, passing or unclear.
brands[].matched_items[].relevance.usefulness_supportnumber | nullModel support0–1.
brands[].matched_items[].relevance.evidence_scopestring | nullreturned_title_and_text; attached context is separate reading evidence.
brands[].matched_items[].provenancearrayNested response fields; optional unless explicitly documented.
brands[].matched_items[].provenance[].platformstring | nullOriginal platform.
brands[].matched_items[].provenance[].endpointstring | nullOriginal endpoint.
brands[].matched_items[].provenance[].querystring | nullQuery used.
brands[].matched_items[].provenance[].paramsobjectNested response fields; optional unless explicitly documented.
brands[].matched_items[].context_evidenceobjectNested response fields; optional unless explicitly documented.
brands[].matched_items[].context_evidence.kindstring | nullcomments or transcripts.
brands[].matched_items[].context_evidence.statusstring | nullanswered, unavailable or invalid_response.
brands[].matched_items[].context_evidence.itemsarrayNested response fields; optional unless explicitly documented.
brands[].matched_items[].context_evidence.items[].idstring | nullOriginal comment identifier.
brands[].matched_items[].context_evidence.items[].textstring | nullReadable comment text; YouTube HTML formatting is converted to plain text.
brands[].matched_items[].context_evidence.items[].urlstring | nullOriginal comment URL.
brands[].matched_items[].context_evidence.items[].created_atstring | nullOriginal publication timestamp or null.
brands[].matched_items[].context_evidence.items[].date_statusstring | nullwithin_window or outside_window against the disclosed context window; undated without a publication timestamp; not_evaluated if no valid window was supplied.
brands[].matched_items[].context_evidence.windowobject | nullNested response fields; optional unless explicitly documented.
brands[].matched_items[].context_evidence.window.fromstring | nullExplicit parent query-window start.
brands[].matched_items[].context_evidence.window.tostring | nullExplicit parent query-window end.
brands[].matched_items[].context_evidence.excluded_parent_recordsnumber | nullX records excluded because native ID or canonical URL matched the parent post, not actual replies.
brands[].matched_items[].context_evidence.counted_as_mentionsboolean | nullFalse: contextual comments do not add mentions to the search sample.
brands[].matched_items[].context_evidence.sample_capnumber | nullAt most 10 returned comments per selected parent.
brands[].matched_items[].source_ranknumber | nullOne-based original source page position before non-content filtering and deduplication; null for legacy evidence or separately attached context.
brands[].candidate_itemsarrayNested response fields; optional unless explicitly documented.
brands[].candidate_items[].idstring | nullNative record identifier; preserve exact case and value.
brands[].candidate_items[].platformstring | nullPlatform id.
brands[].candidate_items[].sourcestring | nullCollection lane.
brands[].candidate_items[].titlestring | nullOriginal title.
brands[].candidate_items[].textstring | nullOriginal text.
brands[].candidate_items[].urlstring | nullOriginal link.
brands[].candidate_items[].canonical_urlstring | nullDeduplication URL preserving source identity.
brands[].candidate_items[].authorobjectNested response fields; optional unless explicitly documented.
brands[].candidate_items[].author.idstring | nullAuthor id.
brands[].candidate_items[].author.handlestring | nullPublic username.
brands[].candidate_items[].author.namestring | nullDisplay name.
brands[].candidate_items[].author.urlstring | nullAuthor link.
brands[].candidate_items[].metricsobjectNested response fields; optional unless explicitly documented.
brands[].candidate_items[].metrics.likesnumber | nullNative likes or null.
brands[].candidate_items[].metrics.scorenumber | nullNative net score; can be negative.
brands[].candidate_items[].metrics.commentsnumber | nullNative comments or replies.
brands[].candidate_items[].metrics.resharesnumber | nullNative reposts/reshares.
brands[].candidate_items[].metrics.viewsnumber | nullNative views; separate from interactions.
brands[].candidate_items[].metrics.interactionsnumber | nullDocumented interaction total when available.
brands[].candidate_items[].metrics.complete_interactionsboolean | nullAll inputs for the interaction total are known.
brands[].candidate_items[].engagementnumber | nullObserved interaction sum; inspect metrics for original counters. This value is not a cross-platform ranking score.
brands[].candidate_items[].created_atstring | nullPublication timestamp or null.
brands[].candidate_items[].fetched_atstring | nullCollection timestamp.
brands[].candidate_items[].date_statusstring | nullwithin_window, outside_window or undated.
brands[].candidate_items[].relevanceobjectNested response fields; optional unless explicitly documented.
brands[].candidate_items[].relevance.methodstring | nullliteral_subject_match or jev.
brands[].candidate_items[].relevance.classificationstring | nullkeyword_match, subject_match, unrelated or needs_review. Lexical matching is not identity verification.
brands[].candidate_items[].relevance.entity_verifiedboolean | nullFalse for keyword-only matching.
brands[].candidate_items[].relevance.modelstring | nullModel identifier when classified.
brands[].candidate_items[].relevance.versionstring | nullClassifier version.
brands[].candidate_items[].relevance.statusstring | nullclassified or unavailable for optional Jev analysis.
brands[].candidate_items[].relevance.reasonstring | nullReason analysis was unavailable.
brands[].candidate_items[].relevance.identitystring | nullyes, no or uncertain.
brands[].candidate_items[].relevance.identity_supportnumber | nullModel support0–1, not a calibrated correctness probability.
brands[].candidate_items[].relevance.discussionstring | nullsubstantive, incidental, adjacent, unrelated or uncertain.
brands[].candidate_items[].relevance.discussion_supportnumber | nullModel support0–1.
brands[].candidate_items[].relevance.usefulnessstring | nullevidence, question, capability, passing or unclear.
brands[].candidate_items[].relevance.usefulness_supportnumber | nullModel support0–1.
brands[].candidate_items[].relevance.evidence_scopestring | nullreturned_title_and_text; attached context is separate reading evidence.
brands[].candidate_items[].provenancearrayNested response fields; optional unless explicitly documented.
brands[].candidate_items[].provenance[].platformstring | nullOriginal platform.
brands[].candidate_items[].provenance[].endpointstring | nullOriginal endpoint.
brands[].candidate_items[].provenance[].querystring | nullQuery used.
brands[].candidate_items[].provenance[].paramsobjectNested response fields; optional unless explicitly documented.
brands[].candidate_items[].context_evidenceobjectNested response fields; optional unless explicitly documented.
brands[].candidate_items[].context_evidence.kindstring | nullcomments or transcripts.
brands[].candidate_items[].context_evidence.statusstring | nullanswered, unavailable or invalid_response.
brands[].candidate_items[].context_evidence.itemsarrayNested response fields; optional unless explicitly documented.
brands[].candidate_items[].context_evidence.items[].idstring | nullOriginal comment identifier.
brands[].candidate_items[].context_evidence.items[].textstring | nullReadable comment text; YouTube HTML formatting is converted to plain text.
brands[].candidate_items[].context_evidence.items[].urlstring | nullOriginal comment URL.
brands[].candidate_items[].context_evidence.items[].created_atstring | nullOriginal publication timestamp or null.
brands[].candidate_items[].context_evidence.items[].date_statusstring | nullwithin_window or outside_window against the disclosed context window; undated without a publication timestamp; not_evaluated if no valid window was supplied.
brands[].candidate_items[].context_evidence.windowobject | nullNested response fields; optional unless explicitly documented.
brands[].candidate_items[].context_evidence.window.fromstring | nullExplicit parent query-window start.
brands[].candidate_items[].context_evidence.window.tostring | nullExplicit parent query-window end.
brands[].candidate_items[].context_evidence.excluded_parent_recordsnumber | nullX records excluded because native ID or canonical URL matched the parent post, not actual replies.
brands[].candidate_items[].context_evidence.counted_as_mentionsboolean | nullFalse: contextual comments do not add mentions to the search sample.
brands[].candidate_items[].context_evidence.sample_capnumber | nullAt most 10 returned comments per selected parent.
brands[].candidate_items[].source_ranknumber | nullOne-based original source page position before non-content filtering and deduplication; null for legacy evidence or separately attached context.
comparisonobjectNested response fields; optional unless explicitly documented.
comparison.sourcesarrayNested response fields; optional unless explicitly documented.
comparison.engagement_sourcesarrayNested response fields; optional unless explicitly documented.
comparison.engagement_comparableboolean | nullEvery compared brand has observed interactions on the disclosed engagement sources.
totalsobjectNested response fields; optional unless explicitly documented.
totals.comparable_mentionsnumber | nullCommon-source denominator.
totals.comparable_engagementnumber | nullObserved interaction denominator.

Compare only common successful sources and inspect each brand’s retained evidence. Zero or unavailable denominators yield null, not a zero share.

share_of_mentions and share_of_engagement use fractions0–1, unlike AI visibility percentages0–100. Indexed web citation counts are a different measurement.

Evidence is ordered by relevance tier and balanced across sources within each tier, preserving source page rank. Context supplies a bounded search hint from the caller’s words and lexical priority cues. Inspect query_plan and per-source queries; added terms can narrow retrieval and do not verify identity. Ordering and optional labels do not change sample counts or share denominators.

Use match_summary to distinguish supported matches, lexical candidates and no supported match. matched_items and candidate_items are views into the retained pool, not additional mentions. A complete relevance_analysis covers selected candidates only; remaining_unclassified includes both unselected and failed records.

Failures use the typed error envelope. A confirmed uncharged or refunded failure reports zero; a pending reconciliation can report an unknown charge. Read credits_used and error.details.billing_status, and keep request_id for recovery. Response contract · Error reference

First call in under a minute

1,000 monthly free credits and a ready-made key the moment you sign up. No card.