Skip to main content
This page covers two related groups of endpoints:
  • POST /scan — kick off an immediate re-scan (useful right after a metadata change or when you want fresh data without waiting for the daily run).
  • GET / PUT /settings — choose which AI models to scan, how often the scheduled scans run, and whether AI Visibility is enabled at all for the app.

Trigger an on-demand scan

Sends every active prompt for the app to every enabled AI model, parses the answers, resolves competitor app names, and updates the daily roll-up. Returns immediately (HTTP 201); the actual work runs in the background and full results land in GET /overview within roughly 3–6 minutes.
Scheduled scans run automatically — you should only need this endpoint when you want fresh data now (after a launch, a new feature, a metadata change, or right after adding new intents/prompts).

Path parameters

Body

No body is required. The scan uses the app’s saved settings (country, models, language).

Response

If there are no active prompts the call returns 400 NO_PROMPTS. Run bootstrap first or add intents + prompts manually.

Same-day idempotency

Each (prompt × model × day) is fingerprinted before the model call. Re-running /scan later the same day won’t charge you for a second round of model calls — the existing answers are reused. So you can hit “Refresh” in the UI without worrying about double-billing. If you really want a re-query on the same day (e.g. you suspect a flaky earlier answer), pause the prompt, scan, then re-activate it; or wait until tomorrow’s automatic scan.

Get or update settings

GET /v1/ai-visibility/:appId/settings

Returns the current scanning configuration for the app, plus the list of AI providers Appeeky currently has credentials for (so you can render a UI that only offers configurable options).
settings is null until you’ve called bootstrap at least once. tier reflects the caller’s current plan and the per-plan AI Visibility caps (see pricing overview). Use it in your dashboard to grey out model toggles the user can’t actually enable: e.g. on the small plan above, only the first 2 entries in availableModels are selectable. aiVisibilityCredits is the dedicated credit bucket for AI Visibility (separate from your general API quota). estimatedMonthlyCost is a forecast based on the current cadence and enabled models — (prompts × Σ(model_cost)) × (30 / scanCadenceDays). Use it to surface “you’ll spend ~5,760 / 8,000 this month” before the user commits to a setting change.

PUT /v1/ai-visibility/:appId/settings

All fields are optional — only the ones you provide are updated.

Cost controls

Both manual and scheduled scans bill against the dedicated AI Visibility credit bucket (api_plans.ai_visibility_monthly_credits) — not your general API quota. Each call costs per (prompt × model), summed across every model you’ve enabled. A typical setup of 8 intents × 6 prompts = 48 prompts at the default 3-day cadence (10 scans/month) burns: The exact estimate for your current setup is returned by GET /settings → aiVisibilityCredits.estimatedMonthlyCost. Manual /scan calls return the per-call charge in X-Credit-Cost (and the response body’s estimatedCost).

What happens when the bucket runs low

You can detect a degraded scan in the dashboard by checking ai_visibility_runs.models_dropped — it’s empty when the full requested set ran, otherwise it lists the silently-removed models so you can prompt the user to upgrade.

Tier limits on models[]

The PUT endpoint enforces a per-plan cap on how many models you can enable simultaneously: If you submit models: ["chatgpt", "claude"] on the Indie plan, the API returns 403 TIER_LIMIT_EXCEEDED and your settings stay unchanged. A practical recommendation:
  • Start with ["chatgpt"]. It’s the dominant assistant by usage and gives you the most signal per credit.
  • Add perplexity when you want web-grounded comparisons (Perplexity returns citations alongside the answer — useful for understanding why the assistant picked an app).
  • Add claude and gemini when you have evidence your audience uses them. Note that claude is the most expensive at 15 credits/call — the scheduler will drop it first when budget gets tight.

Code examples


Credits

All AI Visibility endpoints meter against api_plans.ai_visibility_monthly_credits. The middleware sets X-AiVisibility-Limit and X-AiVisibility-Remaining headers on the response so dashboards can render the current bucket state.

Errors


See also