Actions
Retrieve prioritized recommendations, supporting findings, implementation guides, status, and measured outcomes.
GETList actions
/projects/{project_id}/actionsReturns actions for the selected project, with server-side filtering and pagination.
List actions
/projects/{project_id}/actionsPath parameters
project_idproject UUID | project external IDProject identifier.
Query parameters
qstringSearch titles, descriptions, recommendations, and targets.
statusstringactive, todo, in_progress, completed, dismissed, or resolved. active includes todo and in_progress.
prioritystringlow, medium, high, or critical.
action_typestringRestrict results to one action type.
effort_levellow | medium | highRestrict results by estimated effort.
source_categorystringRestrict results by work area.
topic_iduuidReturn actions linked to one topic.
pageintegerThe 1-based page number.
per_pageintegerNumber of actions per page. Maximum: 100.
Response envelope
project_id:uuidactions:Action[]pagination:Paginationproject_iduuidResolved Ceyo project identifier.
actionsAction[]Actions matching the selected filters.
paginationPaginationPagination metadata.
Action
iduuidUnique action identifier.
statusstringtodo, in_progress, completed, dismissed, or resolved.
prioritystringlow, medium, high, or critical.
estimated_impactintegerRelative expected impact from 0 to 100.
effort_levellow | medium | highEstimated implementation effort.
feasibilitylow | medium | highEstimated ability to complete the recommendation.
source_categorystringowned, earned, reputation, local, competitive, operational, or general.
content_formatstring | nullRecommended deliverable format when relevant.
action_typestringtechnical, content, visibility, competitor, listing, earned_editorial, earned_ugc, earned_reference, sentiment_correction, or general.
titlestringShort action title.
descriptionstring | nullProblem or opportunity addressed by the action.
recommendationstring | nullRecommended outcome or approach.
target_kindstringType of resource targeted by the action.
targetstring | nullTarget URL, prompt reference, profile, or scope value.
guideGuide | nullStructured implementation guide when available.
topicsTopicReference[]Topics connected through supporting prompts and findings.
started_atdatetime | nullWhen the action first entered in_progress.
completed_atdatetime | nullWhen the action was completed.
dismissed_atdatetime | nullWhen the action was dismissed.
resolved_atdatetime | nullWhen supporting findings were automatically resolved.
created_atdatetimeAction creation time.
updated_atdatetimeLast action update time.
Guide
diagnosisstringConcise explanation of the diagnosed issue.
gap_analysisstringDifference between the current and desired state.
action_stepsstring[]Ordered implementation steps.
validation_stepsstring[]Checks used to confirm completion.
rollback_notesstringRecovery guidance when a change must be reverted.
impact_predictionstringExpected outcome after implementation.
impact_timeline_daysintegerEstimated days before an outcome may become measurable.
TopicReference
iduuidTopic identifier.
namestringTopic display name.
Pagination
pageintegerCurrent 1-based page.
per_pageintegerNumber of records requested per page.
totalintegerTotal records matching the request.
total_pagesintegerTotal available pages.
Request and response
curl --request GET \
--url 'https://api.signal.ceyo.ai/v1/projects/{project_id}/actions?status=active&priority=high&page=1' \
--header 'Authorization: Bearer ceyo_platform_...'{
"project_id": "e6c96c98-d777-40e0-94ec-48931f57782f",
"actions": [
{
"id": "8ec60fe5-9c0b-41ea-98ce-9c98f846466f",
"status": "in_progress",
"priority": "high",
"estimated_impact": 78,
"effort_level": "medium",
"feasibility": "high",
"source_category": "owned",
"content_format": "comparison_page",
"action_type": "content",
"title": "Create a focused comparison page",
"description": "Competitors are cited for high-intent comparison prompts.",
"recommendation": "Publish a factual comparison addressing the observed gaps.",
"target_kind": "site",
"target": "https://example.com",
"topics": [
{
"id": "ab20526b-6bb2-436c-8c93-5bf77ea43848",
"name": "AI visibility platforms"
}
],
"started_at": "2026-07-30T10:05:00Z",
"completed_at": null,
"dismissed_at": null,
"resolved_at": null,
"created_at": "2026-07-20T08:30:00Z",
"updated_at": "2026-07-30T10:05:00Z"
}
],
"pagination": {
"page": 1,
"per_page": 25,
"total": 42,
"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": "invalid_request",
"message": "The request parameters are invalid.",
"details": { "status": ["is not supported"] },
"request_id": "req_01K1JQY1RQQ7N3C5H1K6J0P8AT"
}
}Status codes
400invalid_requestA path value, query parameter, or JSON body is malformed.
401invalid_api_keyThe Bearer API key is absent or invalid.
403forbiddenThe API key cannot perform this operation.
404not_foundProject, location, or action was not found.
429rate_limit_exceededToo many requests were made.
GETGet action
/projects/{project_id}/actions/{action_id}Returns one action, its structured implementation guide, and all supporting findings in the selected project.
Get action
/projects/{project_id}/actions/{action_id}Path parameters
project_idproject UUID | project external IDProject identifier.
action_iduuidAction identifier.
Action response envelope
project_id:uuidaction:Actionfindings:Finding[]project_iduuidResolved Ceyo project identifier.
actionActionRequested action and its implementation guide.
findingsFinding[]Supporting findings linked to the action.
Action
iduuidUnique action identifier.
statusstringtodo, in_progress, completed, dismissed, or resolved.
prioritystringlow, medium, high, or critical.
estimated_impactintegerRelative expected impact from 0 to 100.
effort_levellow | medium | highEstimated implementation effort.
feasibilitylow | medium | highEstimated ability to complete the recommendation.
source_categorystringowned, earned, reputation, local, competitive, operational, or general.
content_formatstring | nullRecommended deliverable format when relevant.
action_typestringtechnical, content, visibility, competitor, listing, earned_editorial, earned_ugc, earned_reference, sentiment_correction, or general.
titlestringShort action title.
descriptionstring | nullProblem or opportunity addressed by the action.
recommendationstring | nullRecommended outcome or approach.
target_kindstringType of resource targeted by the action.
targetstring | nullTarget URL, prompt reference, profile, or scope value.
guideGuide | nullStructured implementation guide when available.
topicsTopicReference[]Topics connected through supporting prompts and findings.
started_atdatetime | nullWhen the action first entered in_progress.
completed_atdatetime | nullWhen the action was completed.
dismissed_atdatetime | nullWhen the action was dismissed.
resolved_atdatetime | nullWhen supporting findings were automatically resolved.
created_atdatetimeAction creation time.
updated_atdatetimeLast action update time.
Guide
diagnosisstringConcise explanation of the diagnosed issue.
gap_analysisstringDifference between the current and desired state.
action_stepsstring[]Ordered implementation steps.
validation_stepsstring[]Checks used to confirm completion.
rollback_notesstringRecovery guidance when a change must be reverted.
impact_predictionstringExpected outcome after implementation.
impact_timeline_daysintegerEstimated days before an outcome may become measurable.
TopicReference
iduuidTopic identifier.
namestringTopic display name.
Finding
sourcestringAnalysis source that produced the finding.
categorystringFinding category.
severitystringFinding severity.
statusstringCurrent finding lifecycle status.
target_kindstringType of resource that produced the signal.
targetstring | nullTarget value when available.
titlestringFinding title.
descriptionstring | nullEvidence-backed finding description.
recommendationstring | nullRecommended response to the finding.
first_seen_atdatetimeFirst detection time.
last_seen_atdatetimeMost recent detection time.
resolved_atdatetime | nullResolution time, when resolved.
Request and response
curl --request GET \
--url 'https://api.signal.ceyo.ai/v1/projects/{project_id}/actions/{action_id}' \
--header 'Authorization: Bearer ceyo_platform_...'{
"project_id": "e6c96c98-d777-40e0-94ec-48931f57782f",
"action": {
"id": "8ec60fe5-9c0b-41ea-98ce-9c98f846466f",
"status": "in_progress",
"priority": "high",
"estimated_impact": 78,
"effort_level": "medium",
"feasibility": "high",
"source_category": "owned",
"content_format": "comparison_page",
"action_type": "content",
"title": "Create a focused comparison page",
"description": "Competitors are cited for high-intent comparison prompts.",
"recommendation": "Publish a factual comparison addressing the observed gaps.",
"target_kind": "site",
"target": "https://example.com",
"guide": {
"diagnosis": "Competitors own the strongest comparison citations.",
"gap_analysis": "The site does not answer the comparison intent directly.",
"action_steps": [
"Collect product evidence for each comparison criterion.",
"Publish a transparent comparison page."
],
"validation_steps": [
"Confirm every claim has a source.",
"Request indexing after publication."
],
"rollback_notes": "Remove unsupported claims if evidence changes.",
"impact_prediction": "Improved relevance for comparison prompts.",
"impact_timeline_days": 30
},
"topics": [],
"started_at": "2026-07-30T10:05:00Z",
"completed_at": null,
"dismissed_at": null,
"resolved_at": null,
"created_at": "2026-07-20T08:30:00Z",
"updated_at": "2026-07-30T10:05:00Z"
},
"findings": [
{
"source": "visibility",
"category": "citation_gap",
"severity": "high",
"status": "open",
"target_kind": "site",
"target": "example.com",
"title": "Competitors own comparison citations",
"description": "Competitor pages are repeatedly cited.",
"recommendation": "Address the observed comparison intent.",
"first_seen_at": "2026-07-10T07:30:00Z",
"last_seen_at": "2026-07-30T09:30:00Z",
"resolved_at": 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": "invalid_request",
"message": "The request parameters are invalid.",
"details": { "status": ["is not supported"] },
"request_id": "req_01K1JQY1RQQ7N3C5H1K6J0P8AT"
}
}Status codes
400invalid_requestA path value, query parameter, or JSON body is malformed.
401invalid_api_keyThe Bearer API key is absent or invalid.
403forbiddenThe API key cannot perform this operation.
404not_foundProject, location, or action was not found.
429rate_limit_exceededToo many requests were made.
PATCHUpdate action status
/projects/{project_id}/actions/{action_id}Updates the customer-managed lifecycle status of an action. Resolved actions are controlled automatically by their supporting findings.
Update action status
/projects/{project_id}/actions/{action_id}Path parameters
project_idproject UUID | project external IDProject identifier.
action_iduuidAction identifier.
Request body
statustodo | in_progress | completed | dismissedNew customer-managed action status.
Allowed transitions
todo→ in_progress, completed, dismissedA new action can be started, completed, or dismissed.
in_progress→ todo, completed, dismissedWork can be paused, completed, or dismissed.
completed→ todoA completed action can be reopened.
dismissed→ todoA dismissed action can be reopened.
Action response envelope
project_id:uuidaction:Actionproject_iduuidResolved Ceyo project identifier.
actionActionUpdated action.
Action
iduuidUnique action identifier.
statusstringtodo, in_progress, completed, dismissed, or resolved.
prioritystringlow, medium, high, or critical.
estimated_impactintegerRelative expected impact from 0 to 100.
effort_levellow | medium | highEstimated implementation effort.
feasibilitylow | medium | highEstimated ability to complete the recommendation.
source_categorystringowned, earned, reputation, local, competitive, operational, or general.
content_formatstring | nullRecommended deliverable format when relevant.
action_typestringtechnical, content, visibility, competitor, listing, earned_editorial, earned_ugc, earned_reference, sentiment_correction, or general.
titlestringShort action title.
descriptionstring | nullProblem or opportunity addressed by the action.
recommendationstring | nullRecommended outcome or approach.
target_kindstringType of resource targeted by the action.
targetstring | nullTarget URL, prompt reference, profile, or scope value.
guideGuide | nullStructured implementation guide when available.
topicsTopicReference[]Topics connected through supporting prompts and findings.
started_atdatetime | nullWhen the action first entered in_progress.
completed_atdatetime | nullWhen the action was completed.
dismissed_atdatetime | nullWhen the action was dismissed.
resolved_atdatetime | nullWhen supporting findings were automatically resolved.
created_atdatetimeAction creation time.
updated_atdatetimeLast action update time.
Guide
diagnosisstringConcise explanation of the diagnosed issue.
gap_analysisstringDifference between the current and desired state.
action_stepsstring[]Ordered implementation steps.
validation_stepsstring[]Checks used to confirm completion.
rollback_notesstringRecovery guidance when a change must be reverted.
impact_predictionstringExpected outcome after implementation.
impact_timeline_daysintegerEstimated days before an outcome may become measurable.
TopicReference
iduuidTopic identifier.
namestringTopic display name.
Request and response
curl --request PATCH \
--url 'https://api.signal.ceyo.ai/v1/projects/{project_id}/actions/{action_id}' \
--header 'Authorization: Bearer ceyo_platform_...' \
--header 'Content-Type: application/json' \
--data '{"status":"completed"}'{
"project_id": "e6c96c98-d777-40e0-94ec-48931f57782f",
"action": {
"id": "8ec60fe5-9c0b-41ea-98ce-9c98f846466f",
"status": "completed",
"completed_at": "2026-07-31T10:15:00Z",
"updated_at": "2026-07-31T10:15: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": "invalid_request",
"message": "The request parameters are invalid.",
"details": { "status": ["is not supported"] },
"request_id": "req_01K1JQY1RQQ7N3C5H1K6J0P8AT"
}
}Status codes
400invalid_requestA path value, query parameter, or JSON body is malformed.
401invalid_api_keyThe Bearer API key is absent or invalid.
403forbiddenThe API key cannot perform this operation.
404not_foundProject, location, or action was not found.
409invalid_transitionThe requested status transition is not allowed.
422invalid_statusThe submitted status is not writable.
429rate_limit_exceededToo many requests were made.
GETGet action impact
/projects/{project_id}/actions/impactCompares visibility signals before and after completed actions in the selected project. Actions remain pending until both baseline and comparison runs are available.
Get action impact
/projects/{project_id}/actions/impactPath parameters
project_idproject UUID | project external IDProject identifier.
Query parameters
start_ondateFirst completion date to include.
end_ondateLast completion date to include.
topic_iduuidMeasure actions connected to one topic.
action_typestringMeasure one action type.
Response envelope
project_id:uuidperiod:ImpactPeriodsummary:ImpactSummarytimeline:ImpactTimelinePoint[]actions:ActionMeasurement[]project_iduuidResolved Ceyo project identifier.
periodImpactPeriodResolved start_on and end_on.
summaryImpactSummaryCompleted, measured, pending, and outcome totals.
timelineImpactTimelinePoint[]Weekly completion and visibility outcome series.
actionsActionMeasurement[]Measurements for up to 100 completed actions.
ImpactPeriod
start_ondateFirst completion date included in the measurement window.
end_ondateLast completion date included in the measurement window.
ImpactSummary
completed_actionsintegerCompleted actions included in the measurement window.
measured_actionsintegerActions with both baseline and comparison signals.
pending_actionsintegerActions awaiting an eligible baseline or comparison signal.
improvedintegerMeasured actions classified as improved.
unchangedintegerMeasured actions classified as unchanged.
declinedintegerMeasured actions classified as declined.
average_visibility_deltanumber | nullMean visibility percentage-point change, or null when no action is measured.
average_citation_deltanumber | nullMean citation-count change, or null when no action is measured.
average_sentiment_deltanumber | nullMean sentiment-score change, or null when no comparable values exist.
ImpactTimelinePoint
datedateStart date of the represented week.
completedintegerActions completed during the represented week.
measuredintegerCompleted actions with an available measurement.
average_visibility_deltanumber | nullMean visibility percentage-point change, or null when the week has no measurements.
ActionMeasurement
iduuidAction identifier.
titlestringAction title.
action_typestringAction type.
completed_atdatetimeAction completion time.
topicsTopicReference[]Topics used to scope the measurement.
statusmeasured | pendingMeasurement availability.
reasonno_baseline_run | awaiting_post_completion_run | nullWhy a pending action cannot yet be measured.
outcomeimproved | unchanged | declined | nullOutcome derived from visibility change when measured.
baseline_atdatetime | nullBaseline run completion time.
comparison_atdatetime | nullComparison run completion time.
baselineImpactSnapshot | nullSignals immediately before completion when measured.
comparisonImpactSnapshot | nullLatest eligible signals after completion when measured.
deltaActionMeasurementDelta | nullSignal changes when the action is measured.
ActionMeasurementDelta
visibility_percentage_pointsnumber | nullComparison visibility minus baseline visibility.
citation_countinteger | nullComparison citation count minus baseline citation count.
sentiment_scorenumber | nullComparison sentiment score minus baseline sentiment score.
average_positionnumber | nullImprovement in average position; positive values indicate movement toward position one.
ImpactSnapshot
visibility_percentagenumberPrimary brand visibility percentage.
citation_countintegerDistinct cited pages.
sentiment_scorenumber | nullAverage primary-brand sentiment score.
average_positionnumber | nullAverage primary-brand position.
TopicReference
iduuidTopic identifier.
namestringTopic display name.
Request and response
curl --request GET \
--url 'https://api.signal.ceyo.ai/v1/projects/{project_id}/actions/impact?start_on=2026-05-01&end_on=2026-07-30' \
--header 'Authorization: Bearer ceyo_platform_...'{
"project_id": "e6c96c98-d777-40e0-94ec-48931f57782f",
"period": {
"start_on": "2026-05-01",
"end_on": "2026-07-30"
},
"summary": {
"completed_actions": 12,
"measured_actions": 9,
"pending_actions": 3,
"improved": 6,
"unchanged": 2,
"declined": 1,
"average_visibility_delta": 4.8,
"average_citation_delta": 3.2,
"average_sentiment_delta": 0.4
},
"timeline": [
{
"date": "2026-07-27",
"completed": 3,
"measured": 2,
"average_visibility_delta": 5.1
}
],
"actions": [
{
"id": "8ec60fe5-9c0b-41ea-98ce-9c98f846466f",
"title": "Create a focused comparison page",
"action_type": "content",
"completed_at": "2026-07-10T10:15:00Z",
"topics": [],
"status": "measured",
"outcome": "improved",
"baseline_at": "2026-07-09T07:30:00Z",
"comparison_at": "2026-07-30T09:30:00Z",
"baseline": {
"visibility_percentage": 35.0,
"citation_count": 8,
"sentiment_score": 6.8,
"average_position": 3.4
},
"comparison": {
"visibility_percentage": 42.5,
"citation_count": 13,
"sentiment_score": 7.3,
"average_position": 2.8
},
"delta": {
"visibility_percentage_points": 7.5,
"citation_count": 5,
"sentiment_score": 0.5,
"average_position": 0.6
}
}
]
}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": "invalid_request",
"message": "The request parameters are invalid.",
"details": { "status": ["is not supported"] },
"request_id": "req_01K1JQY1RQQ7N3C5H1K6J0P8AT"
}
}Status codes
400invalid_requestA path value, query parameter, or JSON body is malformed.
401invalid_api_keyThe Bearer API key is absent or invalid.
403forbiddenThe API key cannot perform this operation.
404not_foundProject, location, or action was not found.
429rate_limit_exceededToo many requests were made.