- Reads your app metadata (title, subtitle, description, primary genre) and a sample of the keywords you already rank for.
- Generates intents — 8–12 user goals your app addresses, written in the language a real user would use when asking an AI assistant.
- Generates prompts per intent — 5–8 user-style queries spread across different styles (problem-led, branded, comparison, …).
- Queues the first scan automatically so fresh data appears within ~10 minutes.
Bootstrap is idempotent. Re-running it later (after editing your app’s title, for example) only adds new intents the LLM proposes — it never deletes intents you’ve edited or added manually.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | Yes | Apple App ID (numeric) |
Body
| Field | Type | Default | Description |
|---|---|---|---|
| country | string | us | ISO country code — biases the LLM toward apps available in that storefront. |
| language | string | en | ISO 639-1 language code — used as a hint for prompt phrasing. |
Response
taskRunId is the durable Trigger.dev run id; you can ignore it for normal use. The endpoint returns immediately (HTTP 201) and the work continues in the background.
What happens after the call
The background task takes about 3–8 minutes end-to-end:| Phase | Typical duration |
|---|---|
| Pull app metadata + keyword sample | < 5s |
| Generate intents (LLM) | 5–15s |
| Generate prompts for each new intent (LLM, parallel) | 30–60s |
| Insert rows | < 5s |
Trigger first scan (scan-app-ai-visibility) | runs immediately after, takes another 3–6 min for the answers + parsing to land |
When to re-run bootstrap
| Situation | Action |
|---|---|
| You changed the app’s title or subtitle and want the LLM to reconsider intents | Re-run bootstrap |
| You launched a major new feature and the LLM-generated intents are out of date | Re-run bootstrap |
| You just want to add a few more intents | Use POST /intents instead — much cheaper |
| You want to scan with the same intents but fresh AI answers | Use POST /scan instead |
Code examples
Credits
Bootstrap charges against your dedicated AI Visibility credit bucket — separate from your general API quota.- The bootstrap call itself is free (intent + prompt generation runs on Appeeky’s account, not yours).
- The initial scan that runs immediately afterwards is metered like any other scheduled scan — see the Scan & Settings cost table. For an 8-intent × 6-prompt × 1-model (
chatgpt) setup that’s ~432 credits up front.
- Tier gate: bootstrap requires the
Indieplan or higher. Free-plan calls return403 TIER_LIMIT_EXCEEDED. - Quota gate: when the AI Visibility bucket is empty, bootstrap returns
429 AI_VISIBILITY_QUOTA_EXCEEDEDinstead of queuing intents+prompts the user can’t measure.
Errors
| Status | Code | When |
|---|---|---|
| 400 | INVALID_APP_ID | Missing or non-numeric app ID |
| 403 | TIER_LIMIT_EXCEEDED | Caller is on the free plan — upgrade to Indie or higher |
| 404 | APP_NOT_FOUND | App is not available in the requested country |
| 401 | — | Missing or invalid API key / JWT |
| 429 | AI_VISIBILITY_QUOTA_EXCEEDED | Out of AI Visibility credits — upgrade or wait for the quota to reset |
See also
- Overview — what AI Visibility is
- Overview endpoint — read the gauge after bootstrap completes
- Intents — view, edit, or add intents the LLM generated
- Scan & Settings — control the daily cadence

