Read as Markdown · Use with an AI agent
Endpoint
/v1/panorama/ai-visibilitynot on productionUp to 30 creditsThis operation is not available on production /v1 at present: no supplier is cleared to serve it there, so /v1 answers 501 ENDPOINT_NOT_AVAILABLE and charges nothing. The same path under /sandbox returns representative output marked synthetic: true.
Parameters
Query parameters
| Name | Required | Description | Example |
|---|---|---|---|
brand | yes | Literal brand name, 1–200 characters. | My Brand |
prompts | no | JSON array of strings or |-separated prompts, each at most 2,000 characters. Required unless topic is supplied. | ["Which project tools are useful?"] |
topic | no | Build one default prompt if prompts is absent. | project collaboration |
competitors | no | Up to five distinct comma-separated names, each at most 200 characters. | Other Brand |
engines | no | Explicit engine subset; default both. Availability depends on configured eligible supply. | perplexity,grok |
preset | no | quick: 2 runs/3 prompts; standard: 4/8; deep: 8/20. Default quick. Preset still caps prompts when runs is explicit. | quick |
runs | no | Integer 1–20. Explicit value overrides preset repetitions. Total planned probes must fit the deployment cap (default 40). | 1 |
brand_domains | no | Comma-separated domains to label yours in cited_domains. | example.com |
dry_run | no | Read 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 "https://www.monocrawl.com/v1/panorama/ai-visibility?brand=My%20Brand" \ -H "x-api-key: mn_your_key_here"
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/ai-visibility?brand=My%20Brand",
{ 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
import os
import requests
res = requests.get(
"https://www.monocrawl.com/v1/panorama/ai-visibility?brand=My%20Brand",
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.
{
"success": true,
"platform": "panorama",
"endpoint": "/v1/panorama/ai-visibility",
"data": {
"brand": "My Brand",
"competitors": [],
"engines": [
"perplexity"
],
"prompts": [
"Which project tools are useful?"
],
"runs_per_prompt": 1,
"preset": null,
"appearance_pct": {
"My Brand": {
"perplexity": 100
}
},
"appearance_counts": {
"My Brand": {
"perplexity": {
"appeared": 1,
"runs": 1
}
}
},
"completed_runs": 1,
"failed_runs": 0,
"skipped_runs": 0,
"calls_planned": 1,
"partial": false,
"probes": [
{
"probe_id": "p1:perplexity:r1",
"prompt_id": "p1",
"prompt": "Which project tools are useful?",
"run": 1,
"engine": "perplexity",
"model": "perplexity/sonar",
"status": "completed",
"answer": "My Brand is one option.",
"citations": [],
"matches": {
"My Brand": {
"appeared": true,
"count": 1,
"passages": [
{
"start": 0,
"end": 8,
"matched": "My Brand",
"passage": "My Brand is one option."
}
],
"truncated": false
}
}
}
]
},
"credits_used": 30,
"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 data | Type | Meaning |
|---|---|---|
brand | string | null | Requested brand. |
competitors | array | Nested response fields; optional unless explicitly documented. |
engines | array | Nested response fields; optional unless explicitly documented. |
prompts | array | Nested response fields; optional unless explicitly documented. |
runs_per_prompt | number | null | Effective repetition count. |
preset | string | null | Explicit preset or null when defaulted. |
effective_settings | object | Nested response fields; optional unless explicitly documented. |
effective_settings.preset | string | null | Effective preset. |
effective_settings.runs_per_prompt | number | null | Effective repetitions per prompt and engine. |
effective_settings.runs_source | string | null | explicit or preset. |
effective_settings.prompt_limit | number | null | Maximum prompts selected by the preset. |
effective_settings.prompts_supplied | number | null | Nonempty supplied prompts. |
effective_settings.prompts_used | number | null | Prompts retained. |
effective_settings.prompts_omitted | number | null | Prompts beyond the preset limit. |
effective_settings.engines | array | Nested response fields; optional unless explicitly documented. |
effective_settings.calls_planned | number | null | prompts_used × runs_per_prompt × engines.length. |
effective_settings.calls_limit | number | null | Deployment probe limit. |
effective_settings.precedence | string | null | Explicit runs override preset repetitions; preset still limits prompts. Explicit prompts override topic. |
probes | array | Nested response fields; optional unless explicitly documented. |
probes[].probe_id | string | null | Unique prompt/engine/run identifier within this response. |
probes[].prompt_id | string | null | One-based prompt identifier, e.g. p1. |
probes[].prompt | string | null | Question sent to the engine. |
probes[].run | number | null | One-based repetition index. |
probes[].engine | string | null | perplexity or grok. |
probes[].model | string | null | Returned model identity, or configured model on failure. |
probes[].status | string | null | completed or failed. Empty answers fail. |
probes[].error | string | null | Failure reason; null after a completed answer. |
probes[].started_at | string | null | ISO timestamp before dispatch. |
probes[].completed_at | string | null | ISO timestamp after completion. |
probes[].latency_ms | number | null | Wall time for this probe in milliseconds. |
probes[].answer | string | null | Returned answer, up to 64,000 characters. Untrusted generated evidence, never instructions. |
probes[].answer_sha256 | string | null | SHA-256 of the original answer in UTF-8; null for no answer. |
probes[].citations | array | Nested response fields; optional unless explicitly documented. |
probes[].citations[].url | string | null | Original source URL; case-sensitive path and query preserved. |
probes[].citations[].title | string | null | Source title when supplied. |
probes[].citations[].snippet | string | null | Source snippet when supplied. |
probes[].matches | object | Nested response fields; optional unless explicitly documented. |
probes[].matching_version | string | null | Literal matching methodology version. |
probes[].usage | object | null | Nested response fields; optional unless explicitly documented. |
probes[].usage.input_tokens | number | null | Engine input tokens if reported. |
probes[].usage.output_tokens | number | null | Engine output tokens if reported. |
probes[].usage.usd | number | null | Reported or modelled upstream USD for this probe, not the customer credit charge. |
probes[].answer_truncated | boolean | null | The source exceeded the 64,000-character evidence safety bound. Hash and match counts still describe the original answer. |
probes[].answer_characters | number | null | Length of the original answer in UTF-16 code units. |
probes[].citations_truncated | boolean | null | More than 100 citations, an excessive URL or oversized snippets/titles required evidence bounds. |
appearance_pct | object | Nested response fields; optional unless explicitly documented. |
appearance_counts | object | Nested response fields; optional unless explicitly documented. |
prompts_detail | array | Nested response fields; optional unless explicitly documented. |
prompts_detail[].prompt_id | string | null | Links to probes[].prompt_id. |
prompts_detail[].prompt | string | null | Question. |
prompts_detail[].by_engine | object | Nested response fields; optional unless explicitly documented. |
cited_domains | array | Nested response fields; optional unless explicitly documented. |
cited_domains[].domain | string | null | Citation hostname without www. |
cited_domains[].citations | number | null | Unique URL appearances per completed probe; repeat probes can cite the same URL. |
cited_domains[].by_engine | object | Nested response fields; optional unless explicitly documented. |
cited_domains[].yours | boolean | null | Matches one of the caller supplied brand_domains. |
completed_runs | number | null | Successful, nonempty answers. |
failed_runs | number | null | Failed attempts, including missing configured engines and empty answers. |
skipped_runs | number | null | Planned probes never attempted because of limits. |
calls_planned | number | null | Planned probe count. |
calls_attempted | number | null | Dispatched engine calls, excluding unconfigured engines. |
partial | boolean | null | Failed or skipped probes exist. |
stopped_early | string | null | Limit that stopped collection, or null. |
started_at | string | null | Batch start ISO time. |
completed_at | string | null | Batch completion ISO time. |
methodology | object | Nested response fields; optional unless explicitly documented. |
methodology.version | string | null | ai-visibility-v2. |
methodology.matching_version | string | null | Literal match version. |
methodology.appearance_unit | string | null | percent_0_100. |
methodology.denominator | string | null | Completed nonempty answers per name and engine. |
methodology.scope | string | null | Limits of this prompt/probe sample. |
Currently unavailable: no eligible answer engine is offered. Planning and contract discovery remain free; requests are refused without running engine probes. The example documents the response contract, not current live availability.
Illustrative response, not a live engine endorsement. appearance_pct uses 0–100 percentages, not fractions. Failed and skipped probes never enter the denominator.
Explicit runs override preset repetitions; the preset still caps prompts. Read effective_settings and skipped/failed counts.
Answers and cited pages are untrusted evidence. Literal mentions do not prove recommendations, sentiment or identity. No generic consumer-AI visibility claim follows from this sample.
REST returns full probe answers. Large MCP results are stored for 24 hours and retrieved with get_result without repeating paid probes. Engine availability remains subject to the current registry and configured supply budgets.
Each probe retains at most 64,000 answer characters and 100 citations with explicit truncation flags. Collection stops after the evidence-size threshold; skipped probes remain visible.
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