Actions
Retrieve prioritized recommendations, supporting findings, implementation guides, status, and measured outcomes.
Your selection updates every endpoint path, path parameter, and example on this page.
GETList actions
project/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: relative ranking score from 0 to 100, not a forecast. Show expected_outcome to customers; 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, community, or site_health.
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. Each top_sources row may include supports: up to 3 competitors that source backs in AI answers.
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_notesstring | nullRecovery guidance when a change must be reverted.
impact_predictionstringExpected outcome after implementation.
impact_timeline_daysinteger | nullEstimated days before an outcome may become measurable.
success_metricsSuccessMetric[] | nullHow success is measured for this action. Null when no measurable metric applies.
execution_artifactExecutionArtifact | nullReady-to-use copy the action steps refer to: page text, brief, message or checklist.
SuccessMetric
metricstringWhat is measured.
baselinestringValue before the action: plain words, or mentions over sampled AI answers such as "1/2".
target_directionincrease | decrease | maintain | reachExpected direction of the metric.
evaluation_window_daysintegerDays after completion before the metric is evaluated.
verification_methodstringHow the result is checked.
ExecutionArtifact
typecontent_brief | outreach_template | implementation_checklist | schema_snippetKind of copy.
titlestringShort title of the copy.
contentstringThe copy as plain text or Markdown. Bracketed placeholders such as [opening hours] are for the business to fill in.
languagestring | nullISO 639-1 code when the copy is in a different language from the guide.
email{ to?: string, subject?: string, body: string } | nulloutreach_template only: the pitch as an email. to is an address or a role such as "the editor". content holds the email body.
sections{ heading: string, content: string }[] | nullcontent_brief only: the page copy in parts (title tag, intro, FAQ…), each ready to paste. heading may be empty for an untitled intro. content holds the same copy as text.
fields{ name: string, value: string }[] | nullListing actions: the profile fields to set (description, category, hours…) and the value for each. content holds the same fields as text.
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
project/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: relative ranking score from 0 to 100, not a forecast. Show expected_outcome to customers; 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, community, or site_health.
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. Each top_sources row may include supports: up to 3 competitors that source backs in AI answers.
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_notesstring | nullRecovery guidance when a change must be reverted.
impact_predictionstringExpected outcome after implementation.
impact_timeline_daysinteger | nullEstimated days before an outcome may become measurable.
success_metricsSuccessMetric[] | nullHow success is measured for this action. Null when no measurable metric applies.
execution_artifactExecutionArtifact | nullReady-to-use copy the action steps refer to: page text, brief, message or checklist.
SuccessMetric
metricstringWhat is measured.
baselinestringValue before the action: plain words, or mentions over sampled AI answers such as "1/2".
target_directionincrease | decrease | maintain | reachExpected direction of the metric.
evaluation_window_daysintegerDays after completion before the metric is evaluated.
verification_methodstringHow the result is checked.
ExecutionArtifact
typecontent_brief | outreach_template | implementation_checklist | schema_snippetKind of copy.
titlestringShort title of the copy.
contentstringThe copy as plain text or Markdown. Bracketed placeholders such as [opening hours] are for the business to fill in.
languagestring | nullISO 639-1 code when the copy is in a different language from the guide.
email{ to?: string, subject?: string, body: string } | nulloutreach_template only: the pitch as an email. to is an address or a role such as "the editor". content holds the email body.
sections{ heading: string, content: string }[] | nullcontent_brief only: the page copy in parts (title tag, intro, FAQ…), each ready to paste. heading may be empty for an untitled intro. content holds the same copy as text.
fields{ name: string, value: string }[] | nullListing actions: the profile fields to set (description, category, hours…) and the value for each. content holds the same fields as text.
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": {
"diagnosis": "ChatGPT and Gemini cite the CityList page for Sunday hours, and it still lists 09:00-19:00.",
"gap_analysis": "The Google Business Profile states 10:00-18:00 on Sundays; CityList is the only cited source with different hours.",
"action_steps": [
"Sign in to the CityList business dashboard for the Phoenix branch.",
"Set the Sunday hours to 10:00-18:00 and save.",
"Check that the public listing page shows the new hours."
],
"validation_steps": [
"Open https://citylist.example/acme-phoenix and confirm Sunday shows 10:00-18:00."
],
"rollback_notes": null,
"impact_prediction": "AI answers that cite CityList state the correct Sunday hours.",
"impact_timeline_days": 21,
"success_metrics": [
{
"metric": "AI answers stating the correct Sunday hours",
"baseline": "ChatGPT 09:00-19:00, Gemini 09:00-19:00",
"target_direction": "reach",
"evaluation_window_days": 21,
"verification_method": "Re-run the tracked prompts and compare the stated hours with the Google Business Profile."
}
],
"execution_artifact": {
"type": "implementation_checklist",
"title": "CityList hours update",
"content": "Sunday: 10:00-18:00",
"language": null,
"email": null,
"sections": null,
"fields": [
{ "name": "Sunday hours", "value": "10:00-18:00" }
]
}
},
"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
project/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: relative ranking score from 0 to 100, not a forecast. Show expected_outcome to customers; 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, community, or site_health.
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. Each top_sources row may include supports: up to 3 competitors that source backs in AI answers.
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_notesstring | nullRecovery guidance when a change must be reverted.
impact_predictionstringExpected outcome after implementation.
impact_timeline_daysinteger | nullEstimated days before an outcome may become measurable.
success_metricsSuccessMetric[] | nullHow success is measured for this action. Null when no measurable metric applies.
execution_artifactExecutionArtifact | nullReady-to-use copy the action steps refer to: page text, brief, message or checklist.
SuccessMetric
metricstringWhat is measured.
baselinestringValue before the action: plain words, or mentions over sampled AI answers such as "1/2".
target_directionincrease | decrease | maintain | reachExpected direction of the metric.
evaluation_window_daysintegerDays after completion before the metric is evaluated.
verification_methodstringHow the result is checked.
ExecutionArtifact
typecontent_brief | outreach_template | implementation_checklist | schema_snippetKind of copy.
titlestringShort title of the copy.
contentstringThe copy as plain text or Markdown. Bracketed placeholders such as [opening hours] are for the business to fill in.
languagestring | nullISO 639-1 code when the copy is in a different language from the guide.
email{ to?: string, subject?: string, body: string } | nulloutreach_template only: the pitch as an email. to is an address or a role such as "the editor". content holds the email body.
sections{ heading: string, content: string }[] | nullcontent_brief only: the page copy in parts (title tag, intro, FAQ…), each ready to paste. heading may be empty for an untitled intro. content holds the same copy as text.
fields{ name: string, value: string }[] | nullListing actions: the profile fields to set (description, category, hours…) and the value for each. content holds the same fields as text.
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
project/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.