Optimization workflows
Turn generated recommendations and listing observations into trackable work, then read later measurements without treating them as guaranteed outcomes.
Process recommended actions
Actions are generated from current findings. Use a key with actions:read to build a queue for either a project or a location.
status=active to include todo and in_progress actions. Narrow the queue by priority, type, effort, source category, topic, or search text.priority, estimated_impact, effort_level, and feasibility. These fields support prioritization; they are not delivery or outcome guarantees./locations/{location_id} before /actions; an action is available only in its own scope.curl --request GET \
--url 'https://api.signal.ceyo.ai/v1/projects/{project_id}/actions?status=active&priority=high&page=1' \
--header "Authorization: Bearer ${SIGNAL_API_KEY}"curl --request GET \
--url 'https://api.signal.ceyo.ai/v1/projects/{project_id}/actions/{action_id}' \
--header "Authorization: Bearer ${SIGNAL_API_KEY}"guide: null when no guide is available. Your workflow should still use the action's description, recommendation, target, topics, and findings.Track action status and impact
Use a key with actions:write to synchronize work status. Mark completion only after the implementation and its validation steps are finished, because completed_at anchors impact measurement.
in_progress, completed, or dismissed.todo, or forward to completed or dismissed. The first start time is retained.todo. Reopening clears the corresponding completion or dismissal time.curl --request PATCH \
--url 'https://api.signal.ceyo.ai/v1/projects/{project_id}/actions/{action_id}' \
--header "Authorization: Bearer ${SIGNAL_API_KEY}" \
--header 'Content-Type: application/json' \
--data '{"status":"completed"}'Read impact with actions:read. The endpoint examines completed actions in the requested date window and compares eligible visibility runs immediately before and after completion.
reason instead of assuming measurement is available immediately.improved, unchanged, or declined is derived from the visibility change, not from every returned metric.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 ${SIGNAL_API_KEY}"Monitor listing health
Listings are read-only and available only for locations. A key needs listings:read, and scheduled analysis requires a configured Google place and a location package with listings enabled.
/listings/profile for the configured listing identity, newest retained profile, and latest scan summary. A successful response can contain null values when listing data is unavailable./listings/scans newest first. Scan statuses are pending, running, succeeded, failed, or skipped; fetch one scan for its scored checks when a result is available./listings/findings?status=open, then filter by severity, category, or search text. Findings expose the observed issue and recommendation but are not writable through the Listings API.curl --request GET \
--url 'https://api.signal.ceyo.ai/v1/projects/{project_id}/locations/{location_id}/listings/profile' \
--header "Authorization: Bearer ${SIGNAL_API_KEY}"curl --request GET \
--url 'https://api.signal.ceyo.ai/v1/projects/{project_id}/locations/{location_id}/listings/findings?status=open&severity=high&page=1' \
--header "Authorization: Bearer ${SIGNAL_API_KEY}"