| Endpoint | Purpose |
|---|---|
POST /v1/ai-visibility/:appId/intents/:intentId/prompts | Add a custom prompt to an intent |
PATCH /v1/ai-visibility/:appId/prompts/:promptId | Edit text, change style, pause, or archive |
DELETE /v1/ai-visibility/:appId/prompts/:promptId | Archive (soft delete) |
prompts[] array.
Prompt styles
Every prompt has astyle tag. Variety matters: 5 paraphrases of “best meditation app” don’t tell you anything new, but a problem-led prompt and a comparison prompt for the same intent often produce very different recommendations from the same model.
| Style | What it looks like | When to use |
|---|---|---|
unbranded | ”best app for meditation” | Pure category visibility — does the assistant know about you at all? |
branded | ”is Calm or Headspace better for sleep?” | Discoverability when the user is comparison-shopping. |
problem | ”I struggle to fall asleep at night, what app can help me wind down?” | Real-world phrasing — picks up apps the assistant associates with the outcome rather than the category. |
use_case | ”an app I can use during my morning commute” | Scenario-driven discovery. |
comparison | ”alternatives to Calm” | Surfaces competitor benchmarking — useful for understanding who AI thinks is similar to a market leader. |
Add a prompt
Body
| Field | Type | Required | Description |
|---|---|---|---|
text | string | Yes | The prompt the assistants will receive verbatim. 15–220 chars. Write it the way a real user would type it — conversational tone, lowercase ok, contractions ok. |
style | string | No | One of unbranded, branded, problem, use_case, comparison. Defaults to unbranded if not provided or invalid. |
Response
status: "active" and will be included in the next scan. If you want it picked up immediately, follow with POST /scan.
Deduplication. Re-posting the same text under the same intent is a no-op — we fingerprint the normalised text and ignore duplicates. This is safe to use idempotently from import scripts.
Edit / pause / archive
text re-fingerprints the prompt; if the new text matches an existing one under the same intent, the update will fail silently and you’ll get the existing row’s text on the next read.
Delete (archive)
Code examples
Tips for writing good prompts
- Keep it conversational. “best meditation app for beginners” beats “Comprehensive evaluation of meditation applications for novice users”.
- Avoid mentioning yourself. A prompt that names your app guarantees you’ll appear — but it doesn’t measure visibility, it measures the assistant’s willingness to repeat a name back.
- One question per prompt. Compound questions confuse the assistants and yield messier mention extraction.
- Cover the intent, not the feature. “an app that plays nature sounds” is too narrow if your intent is Reduce stress and anxiety to feel calm; “what helps me calm down before bed?” is better.
- Add at least one prompt in each language you care about — assistants behave differently across languages (a Turkish prompt often produces a different competitor set than an English one for the same intent).
Credits
| Endpoint | Cost |
|---|---|
POST /intents/:intentId/prompts | 1 credit |
PATCH /prompts/:promptId | Free |
DELETE /prompts/:promptId | Free |
Errors
| Status | Code | When |
|---|---|---|
| 400 | INVALID_INPUT | text shorter than 15 chars or contains invalid characters |
| 404 | NOT_FOUND | Intent or prompt doesn’t exist or doesn’t belong to this app |
| 401 | — | Missing or invalid API key / JWT |
| 429 | — | Insufficient monthly credits |
See also
- Intents — list/drill-down + intent CRUD
- Answers — see the actual AI responses for each prompt
- Scan & Settings — re-scan after adding new prompts

