Topics
Create and manage topic groups used to organize prompts for the selected project or location.
Your selection updates every endpoint path, path parameter, and example on this page.
GETList topics
project/projects/{project_id}/visibility/topicsReturns paginated topics in the selected project, ordered deterministically by created_at, then id.
List topics
/projects/{project_id}/visibility/topicsPath parameters
project_idproject UUID | project external IDProject identifier.
Query parameters
pageinteger1-based page number.
per_pageintegerTopics per page. Maximum: 100.
Response envelope
project_id:uuidtopics:Topic[]pagination:Paginationproject_iduuidResolved Ceyo project identifier.
topicsTopic[]Topics ordered by created_at, then id.
paginationPaginationTopic pagination metadata.
Topic
iduuidUnique topic identifier.
namestringCustomer-facing topic name; maximum 200 characters and case-insensitively unique within this visibility scope.
created_atdatetimeTopic creation time in ISO 8601 format.
updated_atdatetimeTime the topic was last updated.
Request and response
curl --request GET \
--url 'https://api.signal.ceyo.ai/v1/projects/{project_id}/visibility/topics?page=1&per_page=25' \
--header 'Authorization: Bearer ceyo_platform_...'{
"project_id": "e6c96c98-d777-40e0-94ec-48931f57782f",
"topics": [
{
"id": "ab20526b-6bb2-436c-8c93-5bf77ea43848",
"name": "AI visibility platforms",
"created_at": "2026-07-20T08:30:00Z",
"updated_at": "2026-07-20T08:30:00Z"
}
],
"pagination": {
"page": 1,
"per_page": 25,
"total": 1,
"total_pages": 1
}
}Pagination
pageintegerCurrent 1-based page.
per_pageintegerRecords requested per page.
totalintegerTotal records matching the filters.
total_pagesintegerTotal available pages.
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 topic 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 topic
project/projects/{project_id}/visibility/topicsCreates a topic in the selected project. Topic names should represent a durable customer question area rather than an individual query.
Create topic
/projects/{project_id}/visibility/topicsPath parameters
project_idproject UUID | project external IDProject identifier.
Request body
namestringRequired topic name; maximum 200 characters and case-insensitively unique within the scope.
Response envelope
project_id:uuidtopic:Topicproject_iduuidResolved Ceyo project identifier.
topicTopicCreated topic.
Topic
iduuidUnique topic identifier.
namestringCustomer-facing topic name; maximum 200 characters and case-insensitively unique within this visibility scope.
created_atdatetimeTopic creation time in ISO 8601 format.
updated_atdatetimeTime the topic was last updated.
Request and response
curl --request POST \
--url 'https://api.signal.ceyo.ai/v1/projects/{project_id}/visibility/topics' \
--header 'Authorization: Bearer ceyo_platform_...' \
--header 'Content-Type: application/json' \
--data '{"name":"AI visibility platforms"}'{
"project_id": "e6c96c98-d777-40e0-94ec-48931f57782f",
"topic": {
"id": "ab20526b-6bb2-436c-8c93-5bf77ea43848",
"name": "AI visibility platforms",
"created_at": "2026-07-20T08:30:00Z",
"updated_at": "2026-07-20T08:30:00Z"
}
}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 topic 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 topic
project/projects/{project_id}/visibility/topics/{topic_id}Returns one topic from the selected project. Use the prompt list with topic_ids to retrieve its prompts and metrics.
Get topic
/projects/{project_id}/visibility/topics/{topic_id}Path parameters
project_idproject UUID | project external IDProject identifier.
topic_iduuidTopic identifier.
Response envelope
project_id:uuidtopic:Topicproject_iduuidResolved Ceyo project identifier.
topicTopicRequested topic.
Topic
iduuidUnique topic identifier.
namestringCustomer-facing topic name; maximum 200 characters and case-insensitively unique within this visibility scope.
created_atdatetimeTopic creation time in ISO 8601 format.
updated_atdatetimeTime the topic was last updated.
Request and response
curl --request GET \
--url 'https://api.signal.ceyo.ai/v1/projects/{project_id}/visibility/topics/{topic_id}' \
--header 'Authorization: Bearer ceyo_platform_...'{
"project_id": "e6c96c98-d777-40e0-94ec-48931f57782f",
"topic": {
"id": "ab20526b-6bb2-436c-8c93-5bf77ea43848",
"name": "AI visibility platforms",
"created_at": "2026-07-20T08:30:00Z",
"updated_at": "2026-07-20T08:30:00Z"
}
}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 topic 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 topic
project/projects/{project_id}/visibility/topics/{topic_id}Starts irreversible asynchronous deletion of a topic and its dependent visibility data. This is not an archive operation.
Delete topic
/projects/{project_id}/visibility/topics/{topic_id}Path parameters
project_idproject UUID | project external IDProject identifier.
topic_iduuidTopic identifier.
Request and response
curl --request DELETE \
--url 'https://api.signal.ceyo.ai/v1/projects/{project_id}/visibility/topics/{topic_id}' \
--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 topic 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.