Vizzybl LogoVizzybl LogoVizzybl

API Endpoints

Reference for every Vizzybl public API endpoint — scopes, rate limits, async patterns, pagination, and error codes.

Last updated

API Endpoints

The Vizzybl public API is a JSON REST API for your workspace's GEO data — visibility, monitored prompts, verbatim AI answers, citations — plus metered write actions to run audits and scrape prompts.

  • Base URL: https://vizzybl.ai/api/v1
  • Auth: Authorization: Bearer vzbl_live_... — see API Authentication

Endpoints

Paths below are relative to the base URL. Standard rate limit = 60 requests/min, 1,000/hr. Heavy = 20 requests/min, 400/hr.

MethodPathScopeRate limitDescription
GET/brand/meread:brandStandardTenant brand identity (name, domain, competitors, industries, markets).
GET/enginesread:brandStandardAI answer engines supported/tracked.
GET/quotaread:brandStandardCredit balance, tier, and per-feature quota usage.
GET/statsread:visibilityStandardOne-call rollup: brand, latest visibility, top competitors, SoV/rank trend, monitored-prompt count.
GET/visibilityread:visibilityStandardDaily share-of-voice / visibility history (mentions, rank, sentiment, competitors).
GET/promptsread:promptsStandardMonitored prompts with aggregated metrics.
GET/prompts/{promptId}read:promptsStandardSingle prompt detail.
GET/prompts/{promptId}/metrics-historyread:promptsStandardDaily metrics time-series for a prompt.
GET/prompt-responsesread:responsesHeavyVerbatim AI engine answers with citations, brand mentions, and sentiment.
GET/citationsread:citationsHeavyCited domains/URLs aggregated across AI answers.
GET/citations/promptsread:citationsHeavyReverse lookup — which monitored prompts cite a given URL or domain.
GET/citations/statsread:citationsHeavyAggregated citation stats — domain rank, citation share, most-cited URLs, per-competitor breakdown, source-type distribution.
GET/recommendationsread:recommendationsHeavyUnified recommendation feed merging the Actions Board and nightly Findings/Insights.
GET/bot-trafficread:trafficStandardAI-bot crawler traffic (visits by bot, status, path, day) from server access logs.
GET/tagsread:promptsStandardCustom tag dimensions and values used to group monitored prompts.
GET/auditsread:brandStandardList GEO audits (history) for the tenant, newest first.
GET/productsread:productsStandardProduct catalog with each product’s latest AI-answer visibility (mention rate, avg rank, sentiment) plus the shopping-journey scores.
GET/products/{productId}/metrics-historyread:productsStandardDaily AI-answer visibility time-series for one product (mention rate, avg rank, sentiment, co-occurring competitor products).
POST/auditswrite:auditsHeavyTrigger a GEO audit on a URL (async; returns 202 + auditId; credits settled by the audit pipeline).
GET/audits/{auditId}read:brandStandardGEO audit status and scores for polling.
POST/promptswrite:promptsHeavyCreate monitored prompts (batch ≤50; preview dry-run available). Free to create; scraping is metered.
POST/prompts/{promptId}/scrapewrite:promptsHeavyTrigger a fresh scrape of a prompt across AI engines (async; 202). Charges prompt_monitor_run.

Async writes: 202 + poll

Audits and scrapes run in the background. The POST returns 202 Accepted immediately with an ID — poll the matching GET until the work completes:

  • POST /audits returns an auditId. Poll GET /audits/{auditId} until the status is complete, then read the scores. Audit credits are held and settled by the audit pipeline, not at request time.
  • POST /prompts/{promptId}/scrape returns 202 and charges a prompt_monitor_run credit action. Poll GET /prompts/{promptId} for updated metrics.
  • POST /prompts is free — prompts are created immediately at status pending. Scraping them (via the scrape endpoint) is what's metered. Send "preview": true for a dry run that reports what would be created without writing.
  • A repeated scrape of the same prompt inside a 2-minute window is de-duplicated and charged once; a deliberate re-scrape later is charged again.

Response envelope

Successful responses share one shape:

{ "data": ..., "pagination": { "nextCursor": "...", "limit": 50 }, "meta": { ... } }

pagination appears only on list endpoints. Errors are { "error": { "code": "...", "message": "..." } }.

Pagination and dates

  • limit accepts 1–200 (default 50).
  • When pagination.nextCursor is non-null, pass it back verbatim as cursor to fetch the next page. Cursors are opaque — never construct or modify one.
  • Dates use YYYY-MM-DD format (for example startDate=2026-04-01&endDate=2026-07-01).
  • engines filters accept repeated params: engines=claude&engines=chatgpt.

Error codes

StatusCodeMeaning
400INVALID_PARAMA parameter is malformed — the message names which one
401UNAUTHENTICATEDKey missing, invalid, revoked, or expired
402INSUFFICIENT_CREDITSThe workspace lacks credits for a metered write
403INSUFFICIENT_SCOPEThe key lacks the scope this endpoint requires
403INSUFFICIENT_TIERThe workspace is no longer on an Ultra or Enterprise plan
403USAGE_PAUSEDThe workspace has paused metered usage
404NOT_FOUNDThe resource doesn't exist in this workspace
400BLOCKEDThe audit URL is internal or otherwise disallowed — do not retry
422PROMPT_LIMIT_REACHEDThe monitored-prompt cap is full — pause or archive a prompt first
422BRAND_PENDING_DELETIONThe brand is scheduled for deletion, so it cannot add or reactivate monitored prompts — cancel the deletion first
429RATE_LIMITEDRate limit exceeded — honor the Retry-After header (seconds) before retrying
429MONTHLY_LIMITThe monthly cap for this action is spent — unlike a rate limit, waiting does not help
500CHARGE_FAILEDThe credit charge could not be settled; the action did not run
503UNAVAILABLETemporary upstream failure — retry once after a brief wait

Next steps