GETList prompts
/projects/{project_id}/visibility/promptsReturns paginated prompts and visibility metrics for the selected project.
List prompts
/projects/{project_id}/visibility/promptsPath parameters
project_idproject UUID | project external IDProject identifier.
Query parameters
startdateFirst metrics date in YYYY-MM-DD format. The inclusive range may span at most 3 months.
enddateLast metrics date in YYYY-MM-DD format. The inclusive range may span at most 3 months.
modelsstringComma-separated or repeated model keys.
topic_idsstringComma-separated or repeated topic UUIDs.
competitor_idsstringTracked competitor UUIDs that must be mentioned.
sentimentsstringComma-separated negative, neutral, or positive labels.
categorygeneral | organic_search | brand_sentiment | competitor_comparisonRestrict prompts to one category.
qstringSearch prompt content and topic names.
statusactive | archivedSelect active prompts or archived prompts.
sortcreated_at | prompt | topic | visibility | position | volumeField used to order the result.
sort_directionasc | descSort direction.
pageinteger1-based page number.
per_pageintegerPrompts per page. Maximum: 100.
Response envelope
project_id:uuidprompts:Prompt[]start:dateend:datemodels:string[]pagination:Paginationproject_iduuidResolved Ceyo project identifier.
promptsPrompt[]Paginated prompts matching the filters.
startdateResolved metrics start date.
enddateResolved metrics end date.
modelsstring[]Model keys included in metric calculations.
paginationPaginationPrompt pagination metadata.
Prompt
iduuidUnique prompt identifier.
topic_iduuidTopic that contains the prompt.
topic_namestringCurrent name of the containing topic.
contentstringQuestion sent to configured AI models. Maximum 20,000 characters.
categorygeneral | organic_search | brand_sentiment | competitor_comparisonStable snake_case intent category.
city_overridestring | nullPrompt-specific city. Null means the city is inherited from the selected scope.
country_overridestring | nullPrompt-specific country. Null means the country is inherited from the selected scope; present together with country_code_override.
country_code_overridestring | nullPrompt-specific uppercase ISO 3166-1 alpha-2 country code. Null means the code is inherited; present together with country_override.
archived_atdatetime | nullArchive time. Null means the prompt is active.
created_atdatetimePrompt creation time in ISO 8601 format.
metricsPromptMetrics | nullVisibility metrics for the requested date and model filters.
PromptMetrics
primary_mentionsintegerResponses that mentioned the primary tracked brand.
visibility_percentagenumberShare of responses that mentioned the primary tracked brand.
visibility_trend_ppnumber | nullPercentage-point change from the preceding equal-length period.
average_positionnumber | nullAverage 1-based primary-brand position when mentioned.
position_trendnumber | nullAverage-position change from the preceding period.
average_position_trendnumber | nullChange in average position from the preceding comparison window.
average_sentimentnumber | nullAverage primary-brand sentiment score.
sentiment_countsSentimentCountsResponse counts keyed by negative, neutral, and positive.
citationsintegerCitation occurrences across matching responses.
competitor_mentionsRecord<string, integer>Mention counts keyed by tracked competitor name.
SentimentCounts
negativeintegerNegative responses.
neutralintegerNeutral responses.
positiveintegerPositive responses.
Pagination
pageintegerCurrent 1-based page.
per_pageintegerRecords requested per page.
totalintegerTotal records matching the filters.
total_pagesintegerTotal available pages.
Request and response
curl --request GET \
--url 'https://api.signal.ceyo.ai/v1/projects/{project_id}/visibility/prompts?start=2026-07-24&end=2026-07-30&models=chatgpt,perplexity&status=active&page=1' \
--header 'Authorization: Bearer ceyo_platform_...'{
"project_id": "e6c96c98-d777-40e0-94ec-48931f57782f",
"prompts": [
{
"id": "4de5e484-ce6a-4e45-ad7c-bd48db2549af",
"topic_id": "ab20526b-6bb2-436c-8c93-5bf77ea43848",
"topic_name": "AI visibility platforms",
"content": "Which platforms help brands measure visibility in AI answers?",
"category": "organic_search",
"city_override": null,
"country_override": null,
"country_code_override": null,
"archived_at": null,
"created_at": "2026-07-20T08:35:00Z",
"metrics": {
"primary_mentions": 8,
"visibility_percentage": 57.14,
"visibility_trend_pp": 7.14,
"average_position": 2.25,
"position_trend": -0.5,
"average_position_trend": -0.5,
"average_sentiment": 7.6,
"sentiment_counts": {
"negative": 1,
"neutral": 4,
"positive": 9
},
"citations": 22,
"competitor_mentions": {
"Example competitor": 6
}
}
}
],
"start": "2026-07-24",
"end": "2026-07-30",
"models": [
"chatgpt",
"perplexity"
],
"pagination": {
"page": 1,
"per_page": 25,
"total": 36,
"total_pages": 2
}
}ErrorsResponse format and status codes
Error response envelope
errorErrorStructured error payload.
Error
codestringStable snake_case code suitable for programmatic handling.
messagestringHuman-readable explanation of the failure.
detailsobject | array | nullStructured validation or request context when available.
request_idstringIdentifier to provide when requesting support.
{
"error": {
"code": "validation_failed",
"message": "One or more fields are invalid.",
"details": [
{
"field": "name",
"message": "must be present"
}
],
"request_id": "req_01K1GP6J8QQFZ4D2B6C5A9V3TS"
}
}Status codes
400invalid_request | invalid_date_range | range_too_largeA prompt filter, model, identifier, or metrics date range is invalid, or the range exceeds three months.
401invalid_api_keyAuthorization is absent or invalid.
403forbiddenThe API key cannot manage this visibility scope.
404not_foundThe project, location, or prompt was not found.
409conflictThe requested lifecycle operation conflicts with current state.
422validation_failed | prompt_limit_reached | daily_prompt_activation_limit_reachedInput is invalid, a suggested-prompt status is unsupported, capacity is exhausted, or a bulk request exceeds 100 rows.
429rate_limit_exceededToo many requests were made.
POSTCreate prompt
/projects/{project_id}/visibility/promptsCreates and activates one prompt for visibility tracking across the enabled models.
Create prompt
/projects/{project_id}/visibility/promptsPath parameters
project_idproject UUID | project external IDProject identifier.
Request body
topic_iduuidTopic in this scope. Required when creating a prompt.
contentstringPrompt question. Required; maximum 20,000 characters.
categorygeneral | organic_search | brand_sentiment | competitor_comparisonPrompt category. Defaults to general when creating.
city_overridestring | nullOptional create-only city override; maximum 200 characters. Omit or send null to inherit the scope city.
country_overridestring | nullCountry name for a location override; must be provided with country_code_override. Maximum 200 characters.
country_code_overridestring | nullUppercase two-letter code for a location override; must be provided with country_override.
Response envelope
project_id:uuidprompt:Promptproject_iduuidResolved Ceyo project identifier.
promptPromptCreated and activated prompt.
Prompt
iduuidUnique prompt identifier.
topic_iduuidTopic that contains the prompt.
topic_namestringCurrent name of the containing topic.
contentstringQuestion sent to configured AI models. Maximum 20,000 characters.
categorygeneral | organic_search | brand_sentiment | competitor_comparisonStable snake_case intent category.
city_overridestring | nullPrompt-specific city. Null means the city is inherited from the selected scope.
country_overridestring | nullPrompt-specific country. Null means the country is inherited from the selected scope; present together with country_code_override.
country_code_overridestring | nullPrompt-specific uppercase ISO 3166-1 alpha-2 country code. Null means the code is inherited; present together with country_override.
archived_atdatetime | nullArchive time. Null means the prompt is active.
created_atdatetimePrompt creation time in ISO 8601 format.
metricsPromptMetrics | nullVisibility metrics for the requested date and model filters.
PromptMetrics
primary_mentionsintegerResponses that mentioned the primary tracked brand.
visibility_percentagenumberShare of responses that mentioned the primary tracked brand.
visibility_trend_ppnumber | nullPercentage-point change from the preceding equal-length period.
average_positionnumber | nullAverage 1-based primary-brand position when mentioned.
position_trendnumber | nullAverage-position change from the preceding period.
average_position_trendnumber | nullChange in average position from the preceding comparison window.
average_sentimentnumber | nullAverage primary-brand sentiment score.
sentiment_countsSentimentCountsResponse counts keyed by negative, neutral, and positive.
citationsintegerCitation occurrences across matching responses.
competitor_mentionsRecord<string, integer>Mention counts keyed by tracked competitor name.
SentimentCounts
negativeintegerNegative responses.
neutralintegerNeutral responses.
positiveintegerPositive responses.
Request and response
curl --request POST \
--url 'https://api.signal.ceyo.ai/v1/projects/{project_id}/visibility/prompts' \
--header 'Authorization: Bearer ceyo_platform_...' \
--header 'Content-Type: application/json' \
--data '{"topic_id":"ab20526b-6bb2-436c-8c93-5bf77ea43848","content":"Which platforms help brands measure visibility in AI answers?","category":"organic_search"}'{
"project_id": "e6c96c98-d777-40e0-94ec-48931f57782f",
"prompt": {
"id": "4de5e484-ce6a-4e45-ad7c-bd48db2549af",
"topic_id": "ab20526b-6bb2-436c-8c93-5bf77ea43848",
"topic_name": "AI visibility platforms",
"content": "Which platforms help brands measure visibility in AI answers?",
"category": "organic_search",
"city_override": null,
"country_override": null,
"country_code_override": null,
"archived_at": null,
"created_at": "2026-07-20T08:35:00Z",
"metrics": null
}
}ErrorsResponse format and status codes
Error response envelope
errorErrorStructured error payload.
Error
codestringStable snake_case code suitable for programmatic handling.
messagestringHuman-readable explanation of the failure.
detailsobject | array | nullStructured validation or request context when available.
request_idstringIdentifier to provide when requesting support.
{
"error": {
"code": "validation_failed",
"message": "One or more fields are invalid.",
"details": [
{
"field": "name",
"message": "must be present"
}
],
"request_id": "req_01K1GP6J8QQFZ4D2B6C5A9V3TS"
}
}Status codes
400invalid_request | invalid_date_range | range_too_largeA prompt filter, model, identifier, or metrics date range is invalid, or the range exceeds three months.
401invalid_api_keyAuthorization is absent or invalid.
403forbiddenThe API key cannot manage this visibility scope.
404not_foundThe project, location, or prompt was not found.
409conflictThe requested lifecycle operation conflicts with current state.
422validation_failed | prompt_limit_reached | daily_prompt_activation_limit_reachedInput is invalid, a suggested-prompt status is unsupported, capacity is exhausted, or a bulk request exceeds 100 rows.
429rate_limit_exceededToo many requests were made.
POSTBulk create prompts
/projects/{project_id}/visibility/prompts/bulk_createCreates and activates up to 100 prompts atomically. Any invalid row or capacity failure rejects the entire request.
Bulk create prompts
/projects/{project_id}/visibility/prompts/bulk_createPath parameters
project_idproject UUID | project external IDProject identifier.
Request body
promptsPromptInput[]Required array containing 1–100 prompt rows.
PromptInput
topic_iduuidTopic in this scope. Required when creating a prompt.
contentstringPrompt question. Required; maximum 20,000 characters.
categorygeneral | organic_search | brand_sentiment | competitor_comparisonPrompt category. Defaults to general when creating.
city_overridestring | nullOptional create-only city override; maximum 200 characters. Omit or send null to inherit the scope city.
country_overridestring | nullCountry name for a location override; must be provided with country_code_override. Maximum 200 characters.
country_code_overridestring | nullUppercase two-letter code for a location override; must be provided with country_override.
Response envelope
project_id:uuidprompts:Prompt[]project_iduuidResolved Ceyo project identifier.
promptsPrompt[]Created and activated prompts in request order.
Prompt
iduuidUnique prompt identifier.
topic_iduuidTopic that contains the prompt.
topic_namestringCurrent name of the containing topic.
contentstringQuestion sent to configured AI models. Maximum 20,000 characters.
categorygeneral | organic_search | brand_sentiment | competitor_comparisonStable snake_case intent category.
city_overridestring | nullPrompt-specific city. Null means the city is inherited from the selected scope.
country_overridestring | nullPrompt-specific country. Null means the country is inherited from the selected scope; present together with country_code_override.
country_code_overridestring | nullPrompt-specific uppercase ISO 3166-1 alpha-2 country code. Null means the code is inherited; present together with country_override.
archived_atdatetime | nullArchive time. Null means the prompt is active.
created_atdatetimePrompt creation time in ISO 8601 format.
metricsPromptMetrics | nullVisibility metrics for the requested date and model filters.
PromptMetrics
primary_mentionsintegerResponses that mentioned the primary tracked brand.
visibility_percentagenumberShare of responses that mentioned the primary tracked brand.
visibility_trend_ppnumber | nullPercentage-point change from the preceding equal-length period.
average_positionnumber | nullAverage 1-based primary-brand position when mentioned.
position_trendnumber | nullAverage-position change from the preceding period.
average_position_trendnumber | nullChange in average position from the preceding comparison window.
average_sentimentnumber | nullAverage primary-brand sentiment score.
sentiment_countsSentimentCountsResponse counts keyed by negative, neutral, and positive.
citationsintegerCitation occurrences across matching responses.
competitor_mentionsRecord<string, integer>Mention counts keyed by tracked competitor name.
SentimentCounts
negativeintegerNegative responses.
neutralintegerNeutral responses.
positiveintegerPositive responses.
Request and response
curl --request POST \
--url 'https://api.signal.ceyo.ai/v1/projects/{project_id}/visibility/prompts/bulk_create' \
--header 'Authorization: Bearer ceyo_platform_...' \
--header 'Content-Type: application/json' \
--data '{"prompts":[{"topic_id":"ab20526b-6bb2-436c-8c93-5bf77ea43848","content":"Which platforms help brands measure visibility in AI answers?","category":"organic_search"},{"topic_id":"ab20526b-6bb2-436c-8c93-5bf77ea43848","content":"How do AI visibility platforms compare?","category":"competitor_comparison"}]}'{
"project_id": "e6c96c98-d777-40e0-94ec-48931f57782f",
"prompts": [
{
"id": "4de5e484-ce6a-4e45-ad7c-bd48db2549af",
"topic_id": "ab20526b-6bb2-436c-8c93-5bf77ea43848",
"topic_name": "AI visibility platforms",
"content": "Which platforms help brands measure visibility in AI answers?",
"category": "organic_search",
"city_override": null,
"country_override": null,
"country_code_override": null,
"archived_at": null,
"created_at": "2026-07-20T08:35:00Z",
"metrics": null
},
{
"id": "ab7d6157-ca42-4d43-b02c-edeea5911475",
"topic_id": "ab20526b-6bb2-436c-8c93-5bf77ea43848",
"topic_name": "AI visibility platforms",
"content": "How do AI visibility platforms compare?",
"category": "competitor_comparison",
"city_override": null,
"country_override": null,
"country_code_override": null,
"archived_at": null,
"created_at": "2026-07-20T08:35:00Z",
"metrics": null
}
]
}ErrorsResponse format and status codes
Error response envelope
errorErrorStructured error payload.
Error
codestringStable snake_case code suitable for programmatic handling.
messagestringHuman-readable explanation of the failure.
detailsobject | array | nullStructured validation or request context when available.
request_idstringIdentifier to provide when requesting support.
{
"error": {
"code": "validation_failed",
"message": "One or more fields are invalid.",
"details": [
{
"field": "name",
"message": "must be present"
}
],
"request_id": "req_01K1GP6J8QQFZ4D2B6C5A9V3TS"
}
}Status codes
400invalid_request | invalid_date_range | range_too_largeA prompt filter, model, identifier, or metrics date range is invalid, or the range exceeds three months.
401invalid_api_keyAuthorization is absent or invalid.
403forbiddenThe API key cannot manage this visibility scope.
404not_foundThe project, location, or prompt was not found.
409conflictThe requested lifecycle operation conflicts with current state.
422validation_failed | prompt_limit_reached | daily_prompt_activation_limit_reachedInput is invalid, a suggested-prompt status is unsupported, capacity is exhausted, or a bulk request exceeds 100 rows.
429rate_limit_exceededToo many requests were made.
GETGet prompt
/projects/{project_id}/visibility/prompts/{prompt_id}Returns one active or archived prompt in the selected project, with metrics for the requested period and enabled-model context.
Get prompt
/projects/{project_id}/visibility/prompts/{prompt_id}Path parameters
project_idproject UUID | project external IDProject identifier.
prompt_iduuidPrompt identifier.
Query parameters
startdateFirst metrics date in YYYY-MM-DD format. The inclusive range may span at most 3 months.
enddateLast metrics date in YYYY-MM-DD format. The inclusive range may span at most 3 months.
modelsstringComma-separated or repeated model keys.
Response envelope
project_id:uuidprompt:Promptstart:dateend:datemodels:string[]project_iduuidResolved Ceyo project identifier.
promptPromptRequested prompt and metrics.
startdateResolved metrics start.
enddateResolved metrics end.
modelsstring[]Models included in metrics.
Prompt
iduuidUnique prompt identifier.
topic_iduuidTopic that contains the prompt.
topic_namestringCurrent name of the containing topic.
contentstringQuestion sent to configured AI models. Maximum 20,000 characters.
categorygeneral | organic_search | brand_sentiment | competitor_comparisonStable snake_case intent category.
city_overridestring | nullPrompt-specific city. Null means the city is inherited from the selected scope.
country_overridestring | nullPrompt-specific country. Null means the country is inherited from the selected scope; present together with country_code_override.
country_code_overridestring | nullPrompt-specific uppercase ISO 3166-1 alpha-2 country code. Null means the code is inherited; present together with country_override.
archived_atdatetime | nullArchive time. Null means the prompt is active.
created_atdatetimePrompt creation time in ISO 8601 format.
metricsPromptMetrics | nullVisibility metrics for the requested date and model filters.
PromptMetrics
primary_mentionsintegerResponses that mentioned the primary tracked brand.
visibility_percentagenumberShare of responses that mentioned the primary tracked brand.
visibility_trend_ppnumber | nullPercentage-point change from the preceding equal-length period.
average_positionnumber | nullAverage 1-based primary-brand position when mentioned.
position_trendnumber | nullAverage-position change from the preceding period.
average_position_trendnumber | nullChange in average position from the preceding comparison window.
average_sentimentnumber | nullAverage primary-brand sentiment score.
sentiment_countsSentimentCountsResponse counts keyed by negative, neutral, and positive.
citationsintegerCitation occurrences across matching responses.
competitor_mentionsRecord<string, integer>Mention counts keyed by tracked competitor name.
SentimentCounts
negativeintegerNegative responses.
neutralintegerNeutral responses.
positiveintegerPositive responses.
Request and response
curl --request GET \
--url 'https://api.signal.ceyo.ai/v1/projects/{project_id}/visibility/prompts/{prompt_id}?start=2026-07-24&end=2026-07-30' \
--header 'Authorization: Bearer ceyo_platform_...'{
"project_id": "e6c96c98-d777-40e0-94ec-48931f57782f",
"prompt": {
"id": "4de5e484-ce6a-4e45-ad7c-bd48db2549af",
"topic_id": "ab20526b-6bb2-436c-8c93-5bf77ea43848",
"topic_name": "AI visibility platforms",
"content": "Which platforms help brands measure visibility in AI answers?",
"category": "organic_search",
"city_override": null,
"country_override": null,
"country_code_override": null,
"archived_at": null,
"created_at": "2026-07-20T08:35:00Z",
"metrics": {
"primary_mentions": 8,
"visibility_percentage": 57.14,
"visibility_trend_pp": 7.14,
"average_position": 2.25,
"position_trend": -0.5,
"average_position_trend": -0.5,
"average_sentiment": 7.6,
"sentiment_counts": {
"negative": 1,
"neutral": 4,
"positive": 9
},
"citations": 22,
"competitor_mentions": {
"Example competitor": 6
}
}
},
"start": "2026-07-24",
"end": "2026-07-30",
"models": [
"chatgpt",
"perplexity"
]
}ErrorsResponse format and status codes
Error response envelope
errorErrorStructured error payload.
Error
codestringStable snake_case code suitable for programmatic handling.
messagestringHuman-readable explanation of the failure.
detailsobject | array | nullStructured validation or request context when available.
request_idstringIdentifier to provide when requesting support.
{
"error": {
"code": "validation_failed",
"message": "One or more fields are invalid.",
"details": [
{
"field": "name",
"message": "must be present"
}
],
"request_id": "req_01K1GP6J8QQFZ4D2B6C5A9V3TS"
}
}Status codes
400invalid_request | invalid_date_range | range_too_largeA prompt filter, model, identifier, or metrics date range is invalid, or the range exceeds three months.
401invalid_api_keyAuthorization is absent or invalid.
403forbiddenThe API key cannot manage this visibility scope.
404not_foundThe project, location, or prompt was not found.
409conflictThe requested lifecycle operation conflicts with current state.
422validation_failed | prompt_limit_reached | daily_prompt_activation_limit_reachedInput is invalid, a suggested-prompt status is unsupported, capacity is exhausted, or a bulk request exceeds 100 rows.
429rate_limit_exceededToo many requests were made.
DELETEArchive prompt
/projects/{project_id}/visibility/prompts/{prompt_id}Archives an active prompt and stops it consuming active capacity. Historical response data remains available. A successful archive has no response body.
Archive prompt
/projects/{project_id}/visibility/prompts/{prompt_id}Path parameters
project_idproject UUID | project external IDProject identifier.
prompt_iduuidPrompt identifier.
Response
204No ContentPrompt was archived successfully.
Request and response
curl --request DELETE \
--url 'https://api.signal.ceyo.ai/v1/projects/{project_id}/visibility/prompts/{prompt_id}' \
--header 'Authorization: Bearer ceyo_platform_...'HTTP/1.1 204 No ContentErrorsResponse format and status codes
Error response envelope
errorErrorStructured error payload.
Error
codestringStable snake_case code suitable for programmatic handling.
messagestringHuman-readable explanation of the failure.
detailsobject | array | nullStructured validation or request context when available.
request_idstringIdentifier to provide when requesting support.
{
"error": {
"code": "validation_failed",
"message": "One or more fields are invalid.",
"details": [
{
"field": "name",
"message": "must be present"
}
],
"request_id": "req_01K1GP6J8QQFZ4D2B6C5A9V3TS"
}
}Status codes
400invalid_request | invalid_date_range | range_too_largeA prompt filter, model, identifier, or metrics date range is invalid, or the range exceeds three months.
401invalid_api_keyAuthorization is absent or invalid.
403forbiddenThe API key cannot manage this visibility scope.
404not_foundThe project, location, or prompt was not found.
409conflictThe requested lifecycle operation conflicts with current state.
422validation_failed | prompt_limit_reached | daily_prompt_activation_limit_reachedInput is invalid, a suggested-prompt status is unsupported, capacity is exhausted, or a bulk request exceeds 100 rows.
429rate_limit_exceededToo many requests were made.
POSTRestore prompt
/projects/{project_id}/visibility/prompts/{prompt_id}/restoreRestores and reactivates an archived prompt after checking active capacity only. Restore does not consume daily activations and does not schedule a visibility run.
Restore prompt
/projects/{project_id}/visibility/prompts/{prompt_id}/restorePath parameters
project_idproject UUID | project external IDProject identifier.
prompt_iduuidPrompt identifier.
Response envelope
project_id:uuidprompt:Promptproject_iduuidResolved Ceyo project identifier.
promptPromptRestored and reactivated prompt.
Prompt
iduuidUnique prompt identifier.
topic_iduuidTopic that contains the prompt.
topic_namestringCurrent name of the containing topic.
contentstringQuestion sent to configured AI models. Maximum 20,000 characters.
categorygeneral | organic_search | brand_sentiment | competitor_comparisonStable snake_case intent category.
city_overridestring | nullPrompt-specific city. Null means the city is inherited from the selected scope.
country_overridestring | nullPrompt-specific country. Null means the country is inherited from the selected scope; present together with country_code_override.
country_code_overridestring | nullPrompt-specific uppercase ISO 3166-1 alpha-2 country code. Null means the code is inherited; present together with country_override.
archived_atdatetime | nullArchive time. Null means the prompt is active.
created_atdatetimePrompt creation time in ISO 8601 format.
metricsPromptMetrics | nullVisibility metrics for the requested date and model filters.
PromptMetrics
primary_mentionsintegerResponses that mentioned the primary tracked brand.
visibility_percentagenumberShare of responses that mentioned the primary tracked brand.
visibility_trend_ppnumber | nullPercentage-point change from the preceding equal-length period.
average_positionnumber | nullAverage 1-based primary-brand position when mentioned.
position_trendnumber | nullAverage-position change from the preceding period.
average_position_trendnumber | nullChange in average position from the preceding comparison window.
average_sentimentnumber | nullAverage primary-brand sentiment score.
sentiment_countsSentimentCountsResponse counts keyed by negative, neutral, and positive.
citationsintegerCitation occurrences across matching responses.
competitor_mentionsRecord<string, integer>Mention counts keyed by tracked competitor name.
SentimentCounts
negativeintegerNegative responses.
neutralintegerNeutral responses.
positiveintegerPositive responses.
Request and response
curl --request POST \
--url 'https://api.signal.ceyo.ai/v1/projects/{project_id}/visibility/prompts/{prompt_id}/restore' \
--header 'Authorization: Bearer ceyo_platform_...'{
"project_id": "e6c96c98-d777-40e0-94ec-48931f57782f",
"prompt": {
"id": "4de5e484-ce6a-4e45-ad7c-bd48db2549af",
"topic_id": "ab20526b-6bb2-436c-8c93-5bf77ea43848",
"topic_name": "AI visibility platforms",
"content": "Which platforms help brands measure visibility in AI answers?",
"category": "organic_search",
"city_override": null,
"country_override": null,
"country_code_override": null,
"archived_at": null,
"created_at": "2026-07-20T08:35:00Z",
"metrics": null
}
}ErrorsResponse format and status codes
Error response envelope
errorErrorStructured error payload.
Error
codestringStable snake_case code suitable for programmatic handling.
messagestringHuman-readable explanation of the failure.
detailsobject | array | nullStructured validation or request context when available.
request_idstringIdentifier to provide when requesting support.
{
"error": {
"code": "validation_failed",
"message": "One or more fields are invalid.",
"details": [
{
"field": "name",
"message": "must be present"
}
],
"request_id": "req_01K1GP6J8QQFZ4D2B6C5A9V3TS"
}
}Status codes
400invalid_request | invalid_date_range | range_too_largeA prompt filter, model, identifier, or metrics date range is invalid, or the range exceeds three months.
401invalid_api_keyAuthorization is absent or invalid.
403forbiddenThe API key cannot manage this visibility scope.
404not_foundThe project, location, or prompt was not found.
409conflictThe requested lifecycle operation conflicts with current state.
422validation_failed | prompt_limit_reached | daily_prompt_activation_limit_reachedInput is invalid, a suggested-prompt status is unsupported, capacity is exhausted, or a bulk request exceeds 100 rows.
429rate_limit_exceededToo many requests were made.
DELETEDelete prompt permanently
/projects/{project_id}/visibility/prompts/{prompt_id}/permanentStarts irreversible asynchronous deletion of a prompt and its dependent visibility data. Archive the prompt instead if it may be needed again.
Delete prompt permanently
/projects/{project_id}/visibility/prompts/{prompt_id}/permanentPath parameters
project_idproject UUID | project external IDProject identifier.
prompt_iduuidPrompt identifier.
Request and response
curl --request DELETE \
--url 'https://api.signal.ceyo.ai/v1/projects/{project_id}/visibility/prompts/{prompt_id}/permanent' \
--header 'Authorization: Bearer ceyo_platform_...'HTTP/1.1 202 AcceptedErrorsResponse format and status codes
Error response envelope
errorErrorStructured error payload.
Error
codestringStable snake_case code suitable for programmatic handling.
messagestringHuman-readable explanation of the failure.
detailsobject | array | nullStructured validation or request context when available.
request_idstringIdentifier to provide when requesting support.
{
"error": {
"code": "validation_failed",
"message": "One or more fields are invalid.",
"details": [
{
"field": "name",
"message": "must be present"
}
],
"request_id": "req_01K1GP6J8QQFZ4D2B6C5A9V3TS"
}
}Status codes
400invalid_request | invalid_date_range | range_too_largeA prompt filter, model, identifier, or metrics date range is invalid, or the range exceeds three months.
401invalid_api_keyAuthorization is absent or invalid.
403forbiddenThe API key cannot manage this visibility scope.
404not_foundThe project, location, or prompt was not found.
409conflictThe requested lifecycle operation conflicts with current state.
422validation_failed | prompt_limit_reached | daily_prompt_activation_limit_reachedInput is invalid, a suggested-prompt status is unsupported, capacity is exhausted, or a bulk request exceeds 100 rows.
429rate_limit_exceededToo many requests were made.