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.
expected_outcomeobjectHow the impact was estimated. `state` is critical_rule, modelled, directional, or unknown. `score` (0-100), `range`, and `unit` are only present when state is modelled; `assumption` explains why. Display "unknown" rather than a number for unknown and directional outcomes.
estimated_impactintegerDeprecated: internal ranking input from 0 to 100. Use expected_outcome; this value is present even when no outcome can be modelled.
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, general, access, measurement_fix, entity, facts_page, claim_parity, content_extend, local_template, reputation_programme, marketplace_listing, directory_listing, list_inclusion, partner_integration, or community.
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.
structured_targetStructuredTarget | nullExecution-ready target label, platform, URL, and state.
dependenciesActionDependency[]Actions that should be completed first.
external_profileExternalProfile | nullURL and availability status for an external profile.
diagnosisobject | nullStructured diagnosis behind the selected action when available.
expected_liftobject | nullDirectional expected-lift estimate and assumptions when available.
validationValidation | nullMetrics, success conditions, timing, and comparison used to validate the action.
validation_resultValidationResult | nullResult after validation has observed the completed action.
evidence_summaryobject | nullBounded response, citation, and source evidence for the action.
fixesFix[] | nullMachine-readable corrections when the action comes from AI answers stating a business fact wrong: the stated value, the correct value, its source, and the third-party pages found carrying the wrong value. Null for every other action.
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.
measured_outcomeMeasuredOutcome | nullTargeted-prompt presence before and after completion. Present only when status is completed. Pending until the next visibility run can be compared.
dismissed_atdatetime | nullWhen the action was dismissed.
resolved_atdatetime | nullWhen supporting findings were automatically resolved.
created_atdatetimeAction creation time.
updated_atdatetimeLast action update time.
StructuredTarget
labelstring | nullTarget display label.
platformstring | nullTarget platform.
urlURL | nullTarget URL.
stateexisting_page | proposed_page | external_destination | scope | nullHow the target should be handled.
ActionDependency
action_iduuidRequired action identifier.
titlestringRequired action title.
reasonstring | nullWhy it should be completed first.
ExternalProfile
statusfound | readable | unavailable | not_found | unknownAvailability of the external profile.
urlURL | nullExternal-profile URL.
Validation
observation_window_daysinteger | nullDays allowed to observe the expected result.
comparisonstring | nullPlain-language description of how the result is evaluated.
ValidationResult
statussuccess | failure | inconclusive | not_observableOutcome of the latest validation observation.
reasonstring | nullExplanation when validation did not succeed.
observed_atdatetime | nullWhen the result was last observed.
window_ends_atdatetime | nullWhen the observation window ends.
MeasuredOutcome
statusstringpending or measured.
reasonstring | nullPresent when pending: awaiting_post_completion_run, no_baseline_run, no_targeted_prompts, or missing_targeted_executions.
outcomestring | nullPresent when measured: improved, unchanged, or declined.
targetedobject | nullPresence on this action’s validation prompts: before, after, and sample_size.
otherobject | nullPresence on all other prompts in the same runs: before, after, and sample_size.
baseline_atdatetime | nullWhen the pre-completion visibility run finished.
comparison_atdatetime | nullWhen the post-completion visibility run finished.
Fix
fieldphone | website | address | hours | closedThe business fact AI answers get wrong.
qualifierstring | nullWeekday or weekday range for hours (monday … sunday, monday-saturday). Null for other fields.
wrongstringThe value AI answers state, normalized: HH:MM-HH:MM or closed for hours; E.164 for phone; permanently, temporarily, or moved for closed.
correctstring | nullThe value on record, normalized the same way.
correct_sourcewebsite | location_record | google_business_profile | customer | nullWhere the correct value comes from.
stated_bystring[]AI models whose answers state the wrong value.
carried_byFixSource[]Third-party pages the answers cite that were read and found stating the wrong value: domain, url, and a verbatim quote from the page. Empty when none was found; the fact then needs correcting on the business’s own surfaces.
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,
"expected_outcome": {
"state": "modelled",
"score": 78,
"range": { "low": 31.0, "high": 77.5 },
"unit": "percentage_points",
"assumption": "Estimate based on current absence, lever fit, and feasibility."
},
"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",
"fixes": null,
"topics": [
{
"id": "ab20526b-6bb2-436c-8c93-5bf77ea43848",
"name": "AI visibility platforms"
}
],
"started_at": "2026-07-30T10:05:00Z",
"completed_at": null,
"measured_outcome": 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.
expected_outcomeobjectHow the impact was estimated. `state` is critical_rule, modelled, directional, or unknown. `score` (0-100), `range`, and `unit` are only present when state is modelled; `assumption` explains why. Display "unknown" rather than a number for unknown and directional outcomes.
estimated_impactintegerDeprecated: internal ranking input from 0 to 100. Use expected_outcome; this value is present even when no outcome can be modelled.
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, general, access, measurement_fix, entity, facts_page, claim_parity, content_extend, local_template, reputation_programme, marketplace_listing, directory_listing, list_inclusion, partner_integration, or community.
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.
structured_targetStructuredTarget | nullExecution-ready target label, platform, URL, and state.
dependenciesActionDependency[]Actions that should be completed first.
external_profileExternalProfile | nullURL and availability status for an external profile.
diagnosisobject | nullStructured diagnosis behind the selected action when available.
expected_liftobject | nullDirectional expected-lift estimate and assumptions when available.
validationValidation | nullMetrics, success conditions, timing, and comparison used to validate the action.
validation_resultValidationResult | nullResult after validation has observed the completed action.
evidence_summaryobject | nullBounded response, citation, and source evidence for the action.
fixesFix[] | nullMachine-readable corrections when the action comes from AI answers stating a business fact wrong: the stated value, the correct value, its source, and the third-party pages found carrying the wrong value. Null for every other action.
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.
measured_outcomeMeasuredOutcome | nullTargeted-prompt presence before and after completion. Present only when status is completed. Pending until the next visibility run can be compared.
dismissed_atdatetime | nullWhen the action was dismissed.
resolved_atdatetime | nullWhen supporting findings were automatically resolved.
created_atdatetimeAction creation time.
updated_atdatetimeLast action update time.
StructuredTarget
labelstring | nullTarget display label.
platformstring | nullTarget platform.
urlURL | nullTarget URL.
stateexisting_page | proposed_page | external_destination | scope | nullHow the target should be handled.
ActionDependency
action_iduuidRequired action identifier.
titlestringRequired action title.
reasonstring | nullWhy it should be completed first.
ExternalProfile
statusfound | readable | unavailable | not_found | unknownAvailability of the external profile.
urlURL | nullExternal-profile URL.
Validation
observation_window_daysinteger | nullDays allowed to observe the expected result.
comparisonstring | nullPlain-language description of how the result is evaluated.
ValidationResult
statussuccess | failure | inconclusive | not_observableOutcome of the latest validation observation.
reasonstring | nullExplanation when validation did not succeed.
observed_atdatetime | nullWhen the result was last observed.
window_ends_atdatetime | nullWhen the observation window ends.
MeasuredOutcome
statusstringpending or measured.
reasonstring | nullPresent when pending: awaiting_post_completion_run, no_baseline_run, no_targeted_prompts, or missing_targeted_executions.
outcomestring | nullPresent when measured: improved, unchanged, or declined.
targetedobject | nullPresence on this action’s validation prompts: before, after, and sample_size.
otherobject | nullPresence on all other prompts in the same runs: before, after, and sample_size.
baseline_atdatetime | nullWhen the pre-completion visibility run finished.
comparison_atdatetime | nullWhen the post-completion visibility run finished.
Fix
fieldphone | website | address | hours | closedThe business fact AI answers get wrong.
qualifierstring | nullWeekday or weekday range for hours (monday … sunday, monday-saturday). Null for other fields.
wrongstringThe value AI answers state, normalized: HH:MM-HH:MM or closed for hours; E.164 for phone; permanently, temporarily, or moved for closed.
correctstring | nullThe value on record, normalized the same way.
correct_sourcewebsite | location_record | google_business_profile | customer | nullWhere the correct value comes from.
stated_bystring[]AI models whose answers state the wrong value.
carried_byFixSource[]Third-party pages the answers cite that were read and found stating the wrong value: domain, url, and a verbatim quote from the page. Empty when none was found; the fact then needs correcting on the business’s own surfaces.
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": 64,
"effort_level": "low",
"feasibility": "high",
"source_category": "general",
"content_format": null,
"action_type": "directory_listing",
"title": "Correct the Sunday opening hours on CityList",
"description": "ChatGPT and Gemini tell customers the branch opens 09:00-19:00 on Sundays; the Google Business Profile states 10:00-18:00. The CityList page both assistants cite carries the wrong hours.",
"recommendation": "Update the CityList listing to 10:00-18:00 on Sundays and confirm the hours match the Google Business Profile.",
"target_kind": "domain",
"target": "https://citylist.example/acme-phoenix",
"structured_target": {
"label": "CityList",
"platform": "citylist.example",
"url": "https://citylist.example/acme-phoenix",
"state": "external_destination"
},
"external_profile": {
"status": "readable",
"url": "https://citylist.example/acme-phoenix"
},
"guide": null,
"fixes": [
{
"field": "hours",
"qualifier": "sunday",
"wrong": "09:00-19:00",
"correct": "10:00-18:00",
"correct_source": "google_business_profile",
"stated_by": ["chatgpt", "gemini"],
"carried_by": [
{
"domain": "citylist.example",
"url": "https://citylist.example/acme-phoenix",
"quote": "Sunday 9:00 - 19:00"
}
]
}
],
"topics": [],
"started_at": "2026-07-30T10:05:00Z",
"completed_at": null,
"measured_outcome": null,
"dismissed_at": null,
"resolved_at": null,
"created_at": "2026-07-20T08:30:00Z",
"updated_at": "2026-07-30T10:05:00Z"
},
"findings": [
{
"source": "signals",
"category": "fact_drift",
"severity": "medium",
"status": "open",
"target_kind": "page",
"target": "https://example.com/phoenix",
"title": "AI answers state different opening hours",
"description": "chatgpt and gemini give 09:00-19:00 for Sunday; the Google Business Profile states 10:00-18:00.",
"recommendation": "Publish the correct Sunday hours (10:00-18:00) consistently on the website, the Google Business Profile and the listings AI assistants read, and correct the sources that carry 09:00-19:00.",
"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.
expected_outcomeobjectHow the impact was estimated. `state` is critical_rule, modelled, directional, or unknown. `score` (0-100), `range`, and `unit` are only present when state is modelled; `assumption` explains why. Display "unknown" rather than a number for unknown and directional outcomes.
estimated_impactintegerDeprecated: internal ranking input from 0 to 100. Use expected_outcome; this value is present even when no outcome can be modelled.
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, general, access, measurement_fix, entity, facts_page, claim_parity, content_extend, local_template, reputation_programme, marketplace_listing, directory_listing, list_inclusion, partner_integration, or community.
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.
structured_targetStructuredTarget | nullExecution-ready target label, platform, URL, and state.
dependenciesActionDependency[]Actions that should be completed first.
external_profileExternalProfile | nullURL and availability status for an external profile.
diagnosisobject | nullStructured diagnosis behind the selected action when available.
expected_liftobject | nullDirectional expected-lift estimate and assumptions when available.
validationValidation | nullMetrics, success conditions, timing, and comparison used to validate the action.
validation_resultValidationResult | nullResult after validation has observed the completed action.
evidence_summaryobject | nullBounded response, citation, and source evidence for the action.
fixesFix[] | nullMachine-readable corrections when the action comes from AI answers stating a business fact wrong: the stated value, the correct value, its source, and the third-party pages found carrying the wrong value. Null for every other action.
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.
measured_outcomeMeasuredOutcome | nullTargeted-prompt presence before and after completion. Present only when status is completed. Pending until the next visibility run can be compared.
dismissed_atdatetime | nullWhen the action was dismissed.
resolved_atdatetime | nullWhen supporting findings were automatically resolved.
created_atdatetimeAction creation time.
updated_atdatetimeLast action update time.
StructuredTarget
labelstring | nullTarget display label.
platformstring | nullTarget platform.
urlURL | nullTarget URL.
stateexisting_page | proposed_page | external_destination | scope | nullHow the target should be handled.
ActionDependency
action_iduuidRequired action identifier.
titlestringRequired action title.
reasonstring | nullWhy it should be completed first.
ExternalProfile
statusfound | readable | unavailable | not_found | unknownAvailability of the external profile.
urlURL | nullExternal-profile URL.
Validation
observation_window_daysinteger | nullDays allowed to observe the expected result.
comparisonstring | nullPlain-language description of how the result is evaluated.
ValidationResult
statussuccess | failure | inconclusive | not_observableOutcome of the latest validation observation.
reasonstring | nullExplanation when validation did not succeed.
observed_atdatetime | nullWhen the result was last observed.
window_ends_atdatetime | nullWhen the observation window ends.
MeasuredOutcome
statusstringpending or measured.
reasonstring | nullPresent when pending: awaiting_post_completion_run, no_baseline_run, no_targeted_prompts, or missing_targeted_executions.
outcomestring | nullPresent when measured: improved, unchanged, or declined.
targetedobject | nullPresence on this action’s validation prompts: before, after, and sample_size.
otherobject | nullPresence on all other prompts in the same runs: before, after, and sample_size.
baseline_atdatetime | nullWhen the pre-completion visibility run finished.
comparison_atdatetime | nullWhen the post-completion visibility run finished.
Fix
fieldphone | website | address | hours | closedThe business fact AI answers get wrong.
qualifierstring | nullWeekday or weekday range for hours (monday … sunday, monday-saturday). Null for other fields.
wrongstringThe value AI answers state, normalized: HH:MM-HH:MM or closed for hours; E.164 for phone; permanently, temporarily, or moved for closed.
correctstring | nullThe value on record, normalized the same way.
correct_sourcewebsite | location_record | google_business_profile | customer | nullWhere the correct value comes from.
stated_bystring[]AI models whose answers state the wrong value.
carried_byFixSource[]Third-party pages the answers cite that were read and found stating the wrong value: domain, url, and a verbatim quote from the page. Empty when none was found; the fact then needs correcting on the business’s own surfaces.
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",
"measured_outcome": {
"status": "pending",
"reason": "awaiting_post_completion_run"
},
"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.