Vizzybl LogoVizzybl LogoVizzybl

API Endpoints

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

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:brandStandardBrand 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, trend, prompt count
GET/visibilityread:visibilityStandardDaily share-of-voice 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, sentiment
GET/citationsread:citationsHeavyCited domains/URLs aggregated across AI answers
GET/citations/promptsread:citationsHeavyReverse lookup — which prompts cite a given URL or domain
POST/auditswrite:auditsHeavyTrigger a GEO audit on a URL (async, returns 202 + auditId)
GET/audits/{auditId}read:brandStandardGEO audit status and scores, for polling
POST/promptswrite:promptsHeavyCreate monitored prompts (batch up to 50; optional autoScrape)
POST/prompts/{promptId}/scrapewrite:promptsHeavyTrigger a fresh scrape of a prompt across AI engines (async, 202)

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 autoScrape or the scrape endpoint) is what's metered.

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
404NOT_FOUNDThe resource doesn't exist in this workspace
429RATE_LIMITEDRate limit exceeded — honor the Retry-After header (seconds) before retrying

Next steps