Visibility workflows
Configure what Signal monitors, review the resulting measurements, and inspect the underlying responses and citations.
Set up visibility tracking
Decide whether visibility belongs to a standard project or to an individual location. A locations-only project is a container and does not have project-level visibility.
start: true when creating the resource to queue automatic onboarding. Use start: false when you will create topics, prompts, and competitors through the API./projects/{project_id}. Location paths add /locations/{location_id} before the visibility resource.prompts:read and prompts:write, competitors:read and competitors:write, and visibility:read for the corresponding operations.Manage topics and prompts
Create a durable topic first, then add the questions you want to monitor. Each prompt belongs to one topic in the same visibility scope.
POST /visibility/topics. Use the returned topic ID when creating prompts.POST /visibility/prompts creates an active prompt and starts a visibility run across the package's enabled models.POST /visibility/prompts/bulk_create accepts 1–100 rows atomically. One invalid row or capacity failure rejects the request.POST /visibility/prompts/{prompt_id}/restore; restoring does not start a visibility run.curl --request POST \
--url 'https://api.signal.ceyo.ai/v1/projects/{project_id}/visibility/prompts' \
--header "Authorization: Bearer ${SIGNAL_API_KEY}" \
--header 'Content-Type: application/json' \
--data '{
"topic_id": "ab20526b-6bb2-436c-8c93-5bf77ea43848",
"content": "Which platforms help measure visibility in AI answers?",
"category": "general"
}'DELETE /visibility/prompts/{prompt_id}/permanent starts irreversible background deletion. Prefer archive when the prompt may be needed again.Manage competitors and suggestions
Keep tracked competitors separate from candidates. Prompt suggestions also remain separate from active prompts until you explicitly track them.
GET /competitors?state=tracked or create one with POST /competitors. A tracked competitor requires a domain.GET /competitors?state=suggested. Track one by patching competitor_state to tracked, or dismiss it with DELETE /competitors/{competitor_id}.GET /visibility/suggested_prompts. Use the suggestion's /track or /dismiss action after review.Read visibility results
Start with the summary, then use competitor and model endpoints when you need a breakdown. All reads require visibility:read.
GET /visibility/summary returns primary mentions, visibility percentage, average position, and citation count.GET /visibility/competitors compares the primary entity with tracked competitors. Add /timeseries for dated mention and position series.GET /visibility/model-trends returns daily and range-level primary-brand visibility by model, plus an aggregate.start, end, models, topic_ids, or prompt_id. The default window is seven days and the maximum is three months.curl --request GET \
--url 'https://api.signal.ceyo.ai/v1/projects/{project_id}/visibility/summary?start=2026-07-24&end=2026-07-30&models=chatgpt,perplexity' \
--header "Authorization: Bearer ${SIGNAL_API_KEY}"Work with responses and citations
Use response and citation endpoints to inspect the evidence behind aggregate visibility metrics.
GET /prompts/{prompt_id}/responses returns successful model responses, newest first, with brand presence, position, sentiment, entities, and a citation preview.GET /prompts/{prompt_id}/citations aggregates repeated citations across the selected date range. The separate responses endpoint previews at most three citations per model response.GET /citations can group results by page or domain and supports topic, model, search, and domain filters.GET /citations/timeseries returns daily totals, per-model frequencies, and top citations.curl --request GET \
--url 'https://api.signal.ceyo.ai/v1/projects/{project_id}/prompts/{prompt_id}/responses?start=2026-07-24&end=2026-07-30' \
--header "Authorization: Bearer ${SIGNAL_API_KEY}"