All endpoints accept an API key or a signed-in session and bill the AI Visibility credit pool, not your general API credits. Reads cost 1 credit. Editing or dismissing a fix is free. Generating fixes costs 5 credits; shipping a fix is charged like a scan. See Pricing.
API
Every endpoint except
/apps and /storefronts takes an optional country query parameter (default us). Data is kept per country, so pass the storefront you set the app up in.
Your apps
GET /v1/ai-visibility/apps lists the apps that have been bootstrapped or scanned, most recently active first. By default it lists the us storefront; pass ?country=all to list every country, which is how you find an app that was set up outside the US.
Setup and scan status
GET /v1/ai-visibility/:appId/status?country=us answers “is this app set up, and did the last scan work?”
latestRunisnullbefore the first scan.modelHealthshows whether each assistant is answering normally right now. Models that are down are skipped on manual scans, so you are not charged for them.
Storefronts
GET /v1/ai-visibility/:appId/storefronts helps you pick a country and language before you bootstrap.
Scan runs
GET /v1/ai-visibility/:appId/runs?country=us&limit=30 lists recent runs, newest first. limit is 1–100 (default 30).
GET /v1/ai-visibility/:appId/runs/:runId returns the run plus one row per answer: answerId, promptText, intentLabel, modelSlug, status, a short excerpt, mentionsCount and ownerMentioned. Open the full answer with GET /answers/:answerId.
Opportunities
GET /v1/ai-visibility/:appId/opportunities?country=us&days=30 is the “where AI doesn’t recommend you” view. days is 1–90 (default 30).
Each active intent gets a status from its latest scores across all models:
Intents are sorted with the biggest gaps first.
winners are the apps recommended for that intent instead of yours, with the share of answers they appear in. sources lists the websites the assistants cite across the whole app; most citations come from models that search the web, such as Perplexity.
Sources for one intent
GET /v1/ai-visibility/:appId/intents/:intentId/sources?country=us&days=30 returns the same sources list, limited to one intent’s answers: each cited domain with its most-cited URL, how many answers cited it, which models, the apps it backed, and citesOwner (true when the domain is your own website). Use it to find the pages worth getting listed on.
Fixes
A fix is a concrete action for one intent, grounded in your scan data:
A fix moves through these statuses:
- Generate.
POST /v1/ai-visibility/:appId/intents/:intentId/fixes/generate?country=usproposes 2–4 fixes. It needs at least one scan of the intent; otherwise it returns422 NO_FIXES. Costs 5 credits. - Ship. After you make the change, call
POST /v1/ai-visibility/:appId/fixes/:fixId/ship. Appeeky saves the intent’s current numbers as thebaseline. Optional body:{ "targetUrl": "https://example.com/sleep" }. Charged like a scan of your enabled models. - Measure. The next completed scan after shipping is compared with the baseline. If visibility rose by more than one point the fix becomes
verified, otherwiseno_change. Theresultfield holds the after numbers either way.
PATCH /v1/ai-visibility/:appId/fixes/:fixId with { "status": "dismissed" }. Send { "targetUrl": "…" } instead to only change the URL.
GET /v1/ai-visibility/:appId/fixes?country=us lists fixes, newest first. Filter with intentId; dismissed fixes are hidden unless you pass includeDismissed=true.
Errors
MCP
Example prompt: “Which AI Visibility intents is my app 1234567890 missing from, and what should I fix first?”
See also
- Overview: how AI Visibility works and what it costs
- Intents and Prompts: manage what gets measured
- Scan & Settings: run a scan now or change the cadence

