Signal API
Projects as MarkdownUse a clean Markdown version of this page with an agent or local tooling.

Projects

Provision and manage projects in the workspace selected by your API key.

Provisioning is synchronous and separate from onboarding. A successful create request returns the complete resource with HTTP 201. Set start: true on a standard project or location to start onboarding immediately after provisioning. Location container projects require start: false.
Authentication and scopeSend Authorization: Bearer ceyo_platform_... on every request. The API key selects the workspace, so paths never require a workspace identifier.
Packages and project modesA standard project selects an active project package with package_id. Every location selects an active location package. A locations_only project is a container for locations, has no project package, and is not itself a tracking scope. Package assignments cannot be changed through resource updates.
Pagination, filters, and orderingList endpoints use 1-based page and per_page, return pagination metadata, and return an empty array when the page is beyond the result set. Filters combine with AND. Search is trimmed, case-insensitive, and limited to 200 characters. Sorts are stable and use resource ID as the final ascending tie-breaker.
GET
/projects

Returns projects visible to the API key. Filters combine with AND and the selected sort is deterministic.

Parameters

Query parameters

qstring

Case-insensitive search across project name, website, description, folder, and tag name. Maximum: 200 characters.

Optional
folderstring

Match one folder, case-insensitively.

Optional
statusactive | inactive | archived

Return projects in one lifecycle status.

Optional
project_modestandard | locations_only

Return projects in one mode.

Optional
tag_iduuid

Return projects assigned to this workspace tag.

Optional
sortcreated_at | updated_at | name

Field used for ordering.

OptionalDefault: created_at
directionasc | desc

Sort direction.

OptionalDefault: desc
pageinteger

The 1-based page number.

OptionalDefault: 1
per_pageinteger

Number of records per page, from 1 through 100. Values outside this range return 422.

OptionalDefault: 25
Response

Response envelope

projects:Project[]pagination:Pagination
projectsProject[]

Matching projects in the requested deterministic sort order.

paginationPagination

Pagination metadata.

Object

Project

iduuid

Project identifier.

workspace_iduuid

Identifier of the workspace that owns the project.

external_idstring | null

Case-sensitive identifier supplied by the partner.

namestring

Project display name.

descriptionstring | null

Project description.

websitestring | null

Normalized HTTP or HTTPS website URL.

brand_aliasesstring[]

Normalized alternative brand names.

competitorsCompetitor[]

Active tracked competitors. Compatible tracked projection of the dedicated Competitors contract; suggested and dismissed records are excluded.

project_modestandard | locations_only

Standard projects have their own tracking package. locations_only projects act as containers for independently packaged locations.

statusactive | inactive | archived

Current project lifecycle status.

packagePackageReference | null

Assigned project package. Null when project_mode is locations_only.

addressstring | null

Normalized street address.

citystring | null

Normalized city.

statestring | null

Normalized region or state.

postal_codestring | null

Normalized postal code.

countrystring

Normalized country name.

country_codestring

Uppercase ISO 3166-1 alpha-2 country code.

latitudenumber | null

Latitude from -90 through 90.

longitudenumber | null

Longitude from -180 through 180.

google_place_idstring | null

Google place identifier when one is configured.

languagestring

Lowercase ISO 639-1 content language.

action_languagestring | null

Lowercase ISO 639-1 language used for generated actions.

focusglobal | country | region | city

Geographic targeting focus.

local_modeboolean

Whether local geographic context is emphasized.

local_contextobject

Resolved geographic context used by project processing.

location_defaultsobject

Default language, action language, website, and parent-brand settings available to locations in this project.

folderstring | null

Optional workspace organization folder.

tagsTag[]

Up to three workspace tags assigned to the project.

logo_urlstring | null

Absolute project logo URL when configured.

created_atdatetime

Project creation time in ISO 8601 format.

updated_atdatetime

Most recent project update time in ISO 8601 format.

Object

PackageReference

iduuid

Assigned package identifier.

namestring

Assigned package name.

Object

Competitor

iduuid

Competitor identifier.

kindcompetitor

Entity role. Always competitor in this projection.

namestring

Competitor display name.

domainstring

Normalized hostname without a scheme, path, query, leading www, or trailing dot. Required for tracked competitors.

aliasesstring[]

Additional names recognized for the competitor.

statusactive

Tracked competitors always participate in current processing.

competitor_statetracked

Management lifecycle state. This projection contains tracked competitors only.

created_atdatetime

Competitor creation time in ISO 8601 format.

updated_atdatetime

Most recent competitor update time in ISO 8601 format.

Object

Tag

iduuid

Tag identifier.

namestring

Tag display name.

colorstring

Tag display color.

Object

Pagination

pageinteger

Current 1-based page.

per_pageinteger

Number of records requested per page.

totalinteger

Total records matching the request.

total_pagesinteger

Total available pages.

Request and response

Example requestcURL
curl --request GET \
  --url 'https://api.signal.ceyo.ai/v1/projects?q=acme&status=active&sort=created_at&direction=desc&page=1&per_page=25' \
  --header 'Authorization: Bearer ceyo_platform_...'
Example responseJSON
{
  "projects": [
    {
      "id": "e6c96c98-d777-40e0-94ec-48931f57782f",
      "workspace_id": "b7dd886f-b144-4ab4-907b-8efde9df881a",
      "external_id": "partner-project-acme",
      "name": "Acme Europe",
      "description": "European visibility program for Acme.",
      "website": "https://acme.example/",
      "brand_aliases": [
        "acme",
        "acme europe"
      ],
      "competitors": [
        {
          "id": "63ec8dad-c12f-43c8-89e4-06eb629d0977",
          "kind": "competitor",
          "name": "Example Rival",
          "domain": "example-rival.com",
          "aliases": [
            "rival"
          ],
          "status": "active",
          "competitor_state": "tracked",
          "created_at": "2026-07-02T11:20:00Z",
          "updated_at": "2026-07-30T09:10:00Z"
        }
      ],
      "project_mode": "standard",
      "status": "active",
      "package": {
        "id": "92404fd7-f096-49e9-9ab0-5ed73517d9db",
        "name": "Growth Weekly"
      },
      "address": "1 Market Street",
      "city": "Amsterdam",
      "state": "North Holland",
      "postal_code": "1012 JS",
      "country": "Netherlands",
      "country_code": "NL",
      "latitude": 52.3728,
      "longitude": 4.8936,
      "google_place_id": null,
      "language": "en",
      "action_language": "en",
      "focus": "country",
      "local_mode": false,
      "local_context": {},
      "location_defaults": {
        "language": "en",
        "action_language": "en",
        "website": "https://acme.example/",
        "include_parent_brand": true
      },
      "folder": "Europe",
      "tags": [
        {
          "id": "30761d13-bc7e-45c8-8968-2147a37d6e54",
          "name": "Retail",
          "color": "#2563EB"
        }
      ],
      "logo_url": null,
      "created_at": "2026-07-31T08:00:00Z",
      "updated_at": "2026-07-31T08:00:00Z"
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 25,
    "total": 1,
    "total_pages": 1
  }
}
ErrorsResponse format and status codes
Errors

Error response envelope

errorError

Structured error payload.

Errors

Error

codestring

Stable snake_case code suitable for programmatic handling.

messagestring

Human-readable explanation of the failure.

detailsobject | array | null

Structured validation or request context when available.

request_idstring

Identifier to provide when requesting support.

Example error responseJSON
{
  "error": {
    "code": "validation_failed",
    "message": "One or more fields are invalid.",
    "details": {
      "name": [
        "must be present"
      ]
    },
    "request_id": "req_01K1JQY1RQQ7N3C5H1K6J0P8AT"
  }
}
Errors

Status codes

400invalid_request

A path value, query parameter, or JSON body is malformed.

401invalid_api_key

The Bearer API key is absent or invalid.

403forbidden

The API key cannot perform this operation.

422validation_failed

One or more fields are invalid, or package_id does not identify an active package of the required type.

429rate_limit_exceeded

Too many requests were made.

POST
/projects

Synchronously provisions a project and returns it. Optionally starts onboarding after creation.

Request

Request body

namestring

Required project name. Maximum: 200 characters.

project_modestandard | locations_only

Optional project mode. Defaults to standard.

package_iduuid

Required for standard projects and omitted for locations_only projects. Must identify an active project package.

external_idstring | null

Optional partner identifier, unique across projects. Maximum: 200 characters.

websitestring

Required for standard projects. Valid HTTP or HTTPS URL; maximum 2,048 characters.

descriptionstring | null

Optional description. Maximum: 5,000 characters.

brand_aliasesstring[]

Up to 10 alternative names, each at most 200 characters. Values are trimmed, lowercased, and deduplicated.

country_codestring

Uppercase ISO 3166-1 alpha-2 country code. Defaults to US.

countrystring

Country name. Defaults to country_code.

citystring | null

City; required when focus is city. Maximum: 200 characters.

statestring | null

Region or state. Maximum: 200 characters.

addressstring | null

Street address. Maximum: 500 characters.

postal_codestring | null

Postal code. Maximum: 200 characters.

latitudenumber | null

Latitude from -90 through 90.

longitudenumber | null

Longitude from -180 through 180.

google_place_idstring | null

Google place identifier. Maximum: 500 characters.

languageISO 639-1 string

Content language. Defaults to en.

action_languageISO 639-1 string | null

Optional language for generated actions.

focusglobal | country | region | city

Geographic targeting focus. Defaults to country.

local_modeboolean

Enable local geographic context. Defaults to false.

folderstring | null

Optional organization folder. Maximum: 30 characters.

tag_idsuuid[]

Up to three tag identifiers from this workspace.

tag_namesstring[]

Up to three tag names. Names are trimmed and matched case-insensitively; missing names are created. Each name is 1–25 characters and the workspace may contain at most 50 tags. Takes precedence over tag_ids.

startboolean

When true, starts onboarding immediately after synchronous provisioning succeeds. Must be false for locations_only container projects. Defaults to false.

Conditional requirementsFor project_mode: "standard", package_id and website are required. For project_mode: "locations_only", omit package_id; locations created under the project select their own location packages.
Response

Response envelope

project:Projectonboarding_operation:OnboardingOperation | null
projectProject

The provisioned project.

onboarding_operationOnboardingOperation | null

Polling operation when start is true; null when onboarding was not requested.

Object

Project

iduuid

Project identifier.

workspace_iduuid

Identifier of the workspace that owns the project.

external_idstring | null

Case-sensitive identifier supplied by the partner.

namestring

Project display name.

descriptionstring | null

Project description.

websitestring | null

Normalized HTTP or HTTPS website URL.

brand_aliasesstring[]

Normalized alternative brand names.

competitorsCompetitor[]

Active tracked competitors. Compatible tracked projection of the dedicated Competitors contract; suggested and dismissed records are excluded.

project_modestandard | locations_only

Standard projects have their own tracking package. locations_only projects act as containers for independently packaged locations.

statusactive | inactive | archived

Current project lifecycle status.

packagePackageReference | null

Assigned project package. Null when project_mode is locations_only.

addressstring | null

Normalized street address.

citystring | null

Normalized city.

statestring | null

Normalized region or state.

postal_codestring | null

Normalized postal code.

countrystring

Normalized country name.

country_codestring

Uppercase ISO 3166-1 alpha-2 country code.

latitudenumber | null

Latitude from -90 through 90.

longitudenumber | null

Longitude from -180 through 180.

google_place_idstring | null

Google place identifier when one is configured.

languagestring

Lowercase ISO 639-1 content language.

action_languagestring | null

Lowercase ISO 639-1 language used for generated actions.

focusglobal | country | region | city

Geographic targeting focus.

local_modeboolean

Whether local geographic context is emphasized.

local_contextobject

Resolved geographic context used by project processing.

location_defaultsobject

Default language, action language, website, and parent-brand settings available to locations in this project.

folderstring | null

Optional workspace organization folder.

tagsTag[]

Up to three workspace tags assigned to the project.

logo_urlstring | null

Absolute project logo URL when configured.

created_atdatetime

Project creation time in ISO 8601 format.

updated_atdatetime

Most recent project update time in ISO 8601 format.

Object

PackageReference

iduuid

Assigned package identifier.

namestring

Assigned package name.

Object

Competitor

iduuid

Competitor identifier.

kindcompetitor

Entity role. Always competitor in this projection.

namestring

Competitor display name.

domainstring

Normalized hostname without a scheme, path, query, leading www, or trailing dot. Required for tracked competitors.

aliasesstring[]

Additional names recognized for the competitor.

statusactive

Tracked competitors always participate in current processing.

competitor_statetracked

Management lifecycle state. This projection contains tracked competitors only.

created_atdatetime

Competitor creation time in ISO 8601 format.

updated_atdatetime

Most recent competitor update time in ISO 8601 format.

Object

Tag

iduuid

Tag identifier.

namestring

Tag display name.

colorstring

Tag display color.

Request and response

Example requestcURL
curl --request POST \
  --url 'https://api.signal.ceyo.ai/v1/projects' \
  --header 'Authorization: Bearer ceyo_platform_...' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "Acme Europe",
  "external_id": "partner-project-acme",
  "website": "https://acme.example",
  "description": "European visibility program for Acme.",
  "package_id": "92404fd7-f096-49e9-9ab0-5ed73517d9db",
  "country": "Netherlands",
  "country_code": "NL",
  "language": "en",
  "focus": "country",
  "start": false
}'
Example responseJSON
HTTP/1.1 201 Created

{
  "project": {
    "id": "e6c96c98-d777-40e0-94ec-48931f57782f",
    "workspace_id": "b7dd886f-b144-4ab4-907b-8efde9df881a",
    "external_id": "partner-project-acme",
    "name": "Acme Europe",
    "description": "European visibility program for Acme.",
    "website": "https://acme.example/",
    "brand_aliases": [
      "acme",
      "acme europe"
    ],
    "competitors": [
      {
        "id": "63ec8dad-c12f-43c8-89e4-06eb629d0977",
        "kind": "competitor",
        "name": "Example Rival",
        "domain": "example-rival.com",
        "aliases": [
          "rival"
        ],
        "status": "active",
        "competitor_state": "tracked",
        "created_at": "2026-07-02T11:20:00Z",
        "updated_at": "2026-07-30T09:10:00Z"
      }
    ],
    "project_mode": "standard",
    "status": "active",
    "package": {
      "id": "92404fd7-f096-49e9-9ab0-5ed73517d9db",
      "name": "Growth Weekly"
    },
    "address": "1 Market Street",
    "city": "Amsterdam",
    "state": "North Holland",
    "postal_code": "1012 JS",
    "country": "Netherlands",
    "country_code": "NL",
    "latitude": 52.3728,
    "longitude": 4.8936,
    "google_place_id": null,
    "language": "en",
    "action_language": "en",
    "focus": "country",
    "local_mode": false,
    "local_context": {},
    "location_defaults": {
      "language": "en",
      "action_language": "en",
      "website": "https://acme.example/",
      "include_parent_brand": true
    },
    "folder": "Europe",
    "tags": [
      {
        "id": "30761d13-bc7e-45c8-8968-2147a37d6e54",
        "name": "Retail",
        "color": "#2563EB"
      }
    ],
    "logo_url": null,
    "created_at": "2026-07-31T08:00:00Z",
    "updated_at": "2026-07-31T08:00:00Z"
  },
  "onboarding_operation": null
}
ErrorsResponse format and status codes
Errors

Error response envelope

errorError

Structured error payload.

Errors

Error

codestring

Stable snake_case code suitable for programmatic handling.

messagestring

Human-readable explanation of the failure.

detailsobject | array | null

Structured validation or request context when available.

request_idstring

Identifier to provide when requesting support.

Example error responseJSON
{
  "error": {
    "code": "validation_failed",
    "message": "One or more fields are invalid.",
    "details": {
      "name": [
        "must be present"
      ]
    },
    "request_id": "req_01K1JQY1RQQ7N3C5H1K6J0P8AT"
  }
}
Errors

Status codes

400invalid_request

A path value, query parameter, or JSON body is malformed.

401invalid_api_key

The Bearer API key is absent or invalid.

403forbidden

The API key cannot perform this operation.

409conflict

The external ID is already in use or the resource cannot accept this operation in its current state.

422validation_failed

One or more fields are invalid, or package_id does not identify an active package of the required type.

429rate_limit_exceeded

Too many requests were made.

POST
/projects/bulk

Accepts up to 100 project create records and provisions them asynchronously with controlled workspace concurrency.

Request

Request body

projectsProjectCreate[]

Between 1 and 100 records using the same fields and validation as Create project.

Idempotency requiredSend a unique Idempotency-Key header. Repeating the same request returns the existing operation. Reusing the key with a different body returns 409.
OnboardingEach record controls onboarding independently with start. start: true is rejected for a locations_only container; onboard its locations instead.
Response

Response envelope

bulk_operation:BulkOperation

Accepted operation summary with an ID and status_url for polling.

Request and response

Example requestcURL
curl --request POST \
  --url 'https://api.signal.ceyo.ai/v1/projects/bulk' \
  --header 'Authorization: Bearer ceyo_platform_...' \
  --header 'Idempotency-Key: provision-2026-08-04-001' \
  --header 'Content-Type: application/json' \
  --data '{
  "projects": [
    {
      "name": "Acme Europe",
      "external_id": "partner-project-acme",
      "website": "https://acme.example",
      "description": "European visibility program for Acme.",
      "package_id": "92404fd7-f096-49e9-9ab0-5ed73517d9db",
      "country": "Netherlands",
      "country_code": "NL",
      "language": "en",
      "focus": "country",
      "start": false
    },
    {
      "name": "Acme locations",
      "external_id": "partner-project-acme-locations",
      "project_mode": "locations_only",
      "start": false
    }
  ]
}'
Example responseJSON
HTTP/1.1 202 Accepted

{
  "bulk_operation": {
    "id": "f9bc15cc-e9c9-4e93-a93e-b713c92c7315",
    "type": "projects",
    "status": "pending",
    "parent_project_id": null,
    "total": 2,
    "pending": 2,
    "succeeded": 0,
    "failed": 0,
    "created_at": "2026-08-04T15:00:00Z",
    "started_at": null,
    "completed_at": null,
    "status_url": "/v1/bulk-operations/f9bc15cc-e9c9-4e93-a93e-b713c92c7315"
  }
}

Poll the shared Get bulk operation endpoint for per-record results.

ErrorsResponse format and status codes
Errors

Error response envelope

errorError

Structured error payload.

Errors

Error

codestring

Stable snake_case code suitable for programmatic handling.

messagestring

Human-readable explanation of the failure.

detailsobject | array | null

Structured validation or request context when available.

request_idstring

Identifier to provide when requesting support.

Example error responseJSON
{
  "error": {
    "code": "validation_failed",
    "message": "One or more fields are invalid.",
    "details": {
      "name": [
        "must be present"
      ]
    },
    "request_id": "req_01K1JQY1RQQ7N3C5H1K6J0P8AT"
  }
}
Errors

Status codes

400invalid_request

A path value, query parameter, or JSON body is malformed.

401invalid_api_key

The Bearer API key is absent or invalid.

403forbidden

The API key cannot perform this operation.

409conflict

The external ID is already in use or the resource cannot accept this operation in its current state.

422validation_failed

One or more fields are invalid, or package_id does not identify an active package of the required type.

429rate_limit_exceeded

Too many requests were made.

GET
/projects/{project_id}

Returns one project by its Ceyo UUID.

Parameters

Path parameters

project_idproject UUID | project external ID

Ceyo project UUID or configured partner external ID.

Required
Response

Response envelope

project:Project

The requested, created, or updated project. The envelope is identical for UUID and external-ID lookup.

Object

Project

iduuid

Project identifier.

workspace_iduuid

Identifier of the workspace that owns the project.

external_idstring | null

Case-sensitive identifier supplied by the partner.

namestring

Project display name.

descriptionstring | null

Project description.

websitestring | null

Normalized HTTP or HTTPS website URL.

brand_aliasesstring[]

Normalized alternative brand names.

competitorsCompetitor[]

Active tracked competitors. Compatible tracked projection of the dedicated Competitors contract; suggested and dismissed records are excluded.

project_modestandard | locations_only

Standard projects have their own tracking package. locations_only projects act as containers for independently packaged locations.

statusactive | inactive | archived

Current project lifecycle status.

packagePackageReference | null

Assigned project package. Null when project_mode is locations_only.

addressstring | null

Normalized street address.

citystring | null

Normalized city.

statestring | null

Normalized region or state.

postal_codestring | null

Normalized postal code.

countrystring

Normalized country name.

country_codestring

Uppercase ISO 3166-1 alpha-2 country code.

latitudenumber | null

Latitude from -90 through 90.

longitudenumber | null

Longitude from -180 through 180.

google_place_idstring | null

Google place identifier when one is configured.

languagestring

Lowercase ISO 639-1 content language.

action_languagestring | null

Lowercase ISO 639-1 language used for generated actions.

focusglobal | country | region | city

Geographic targeting focus.

local_modeboolean

Whether local geographic context is emphasized.

local_contextobject

Resolved geographic context used by project processing.

location_defaultsobject

Default language, action language, website, and parent-brand settings available to locations in this project.

folderstring | null

Optional workspace organization folder.

tagsTag[]

Up to three workspace tags assigned to the project.

logo_urlstring | null

Absolute project logo URL when configured.

created_atdatetime

Project creation time in ISO 8601 format.

updated_atdatetime

Most recent project update time in ISO 8601 format.

Object

PackageReference

iduuid

Assigned package identifier.

namestring

Assigned package name.

Object

Competitor

iduuid

Competitor identifier.

kindcompetitor

Entity role. Always competitor in this projection.

namestring

Competitor display name.

domainstring

Normalized hostname without a scheme, path, query, leading www, or trailing dot. Required for tracked competitors.

aliasesstring[]

Additional names recognized for the competitor.

statusactive

Tracked competitors always participate in current processing.

competitor_statetracked

Management lifecycle state. This projection contains tracked competitors only.

created_atdatetime

Competitor creation time in ISO 8601 format.

updated_atdatetime

Most recent competitor update time in ISO 8601 format.

Object

Tag

iduuid

Tag identifier.

namestring

Tag display name.

colorstring

Tag display color.

Request and response

Example requestcURL
curl --request GET \
  --url 'https://api.signal.ceyo.ai/v1/projects/e6c96c98-d777-40e0-94ec-48931f57782f' \
  --header 'Authorization: Bearer ceyo_platform_...'
Example responseJSON
{
  "project": {
    "id": "e6c96c98-d777-40e0-94ec-48931f57782f",
    "workspace_id": "b7dd886f-b144-4ab4-907b-8efde9df881a",
    "external_id": "partner-project-acme",
    "name": "Acme Europe",
    "description": "European visibility program for Acme.",
    "website": "https://acme.example/",
    "brand_aliases": [
      "acme",
      "acme europe"
    ],
    "competitors": [
      {
        "id": "63ec8dad-c12f-43c8-89e4-06eb629d0977",
        "kind": "competitor",
        "name": "Example Rival",
        "domain": "example-rival.com",
        "aliases": [
          "rival"
        ],
        "status": "active",
        "competitor_state": "tracked",
        "created_at": "2026-07-02T11:20:00Z",
        "updated_at": "2026-07-30T09:10:00Z"
      }
    ],
    "project_mode": "standard",
    "status": "active",
    "package": {
      "id": "92404fd7-f096-49e9-9ab0-5ed73517d9db",
      "name": "Growth Weekly"
    },
    "address": "1 Market Street",
    "city": "Amsterdam",
    "state": "North Holland",
    "postal_code": "1012 JS",
    "country": "Netherlands",
    "country_code": "NL",
    "latitude": 52.3728,
    "longitude": 4.8936,
    "google_place_id": null,
    "language": "en",
    "action_language": "en",
    "focus": "country",
    "local_mode": false,
    "local_context": {},
    "location_defaults": {
      "language": "en",
      "action_language": "en",
      "website": "https://acme.example/",
      "include_parent_brand": true
    },
    "folder": "Europe",
    "tags": [
      {
        "id": "30761d13-bc7e-45c8-8968-2147a37d6e54",
        "name": "Retail",
        "color": "#2563EB"
      }
    ],
    "logo_url": null,
    "created_at": "2026-07-31T08:00:00Z",
    "updated_at": "2026-07-31T08:00:00Z"
  }
}
ErrorsResponse format and status codes
Errors

Error response envelope

errorError

Structured error payload.

Errors

Error

codestring

Stable snake_case code suitable for programmatic handling.

messagestring

Human-readable explanation of the failure.

detailsobject | array | null

Structured validation or request context when available.

request_idstring

Identifier to provide when requesting support.

Example error responseJSON
{
  "error": {
    "code": "validation_failed",
    "message": "One or more fields are invalid.",
    "details": {
      "name": [
        "must be present"
      ]
    },
    "request_id": "req_01K1JQY1RQQ7N3C5H1K6J0P8AT"
  }
}
Errors

Status codes

400invalid_request

A path value, query parameter, or JSON body is malformed.

401invalid_api_key

The Bearer API key is absent or invalid.

403forbidden

The API key cannot perform this operation.

404not_found

The requested project or location was not found.

429rate_limit_exceeded

Too many requests were made.

GET
/projects/{project_id}/overview

Returns the project, a 30-day visibility summary, and location map markers.

Parameters

Path parameters

project_idproject UUID | project external ID

Ceyo project UUID or configured partner external ID.

Required
Response

Response envelope

project:Projectvisibility_summary:VisibilitySummarymap:LocationMap
projectProject

Current project resource.

visibility_summaryVisibilitySummary

Latest completed 30-day visibility summary across active locations.

mapLocationMap

Active location markers with valid coordinates.

Object

VisibilitySummary

visibility_ratenumber | null

Percentage of included responses that mentioned the brand; null when unavailable.

avg_positionnumber | null

Average 1-based brand position when present; null when no ranked mention is available.

Object

LocationMap

markersLocationMarker[]

Markers ordered by location name, then location ID. Only active locations with both coordinates are eligible.

Object

LocationMarker

iduuid

Location identifier.

external_idstring | null

Partner-supplied location identifier.

namestring

Location display name.

formatted_addressstring | null

Formatted address used in map labels.

latitudenumber

Marker latitude.

longitudenumber

Marker longitude.

visibility_ratenumber | null

Latest 30-day brand visibility percentage.

avg_positionnumber | null

Latest 30-day average brand position.

Aggregation and empty dataVisibility uses the latest completed 30-day window across active locations. A project without eligible data returns null rates and positions.

Request and response

Example requestcURL
curl --request GET \
  --url 'https://api.signal.ceyo.ai/v1/projects/e6c96c98-d777-40e0-94ec-48931f57782f/overview' \
  --header 'Authorization: Bearer ceyo_platform_...'
Example responseJSON
{
  "project": {
    "id": "e6c96c98-d777-40e0-94ec-48931f57782f",
    "workspace_id": "b7dd886f-b144-4ab4-907b-8efde9df881a",
    "external_id": "partner-project-acme",
    "name": "Acme Europe",
    "description": "European visibility program for Acme.",
    "website": "https://acme.example/",
    "brand_aliases": [
      "acme",
      "acme europe"
    ],
    "competitors": [
      {
        "id": "63ec8dad-c12f-43c8-89e4-06eb629d0977",
        "kind": "competitor",
        "name": "Example Rival",
        "domain": "example-rival.com",
        "aliases": [
          "rival"
        ],
        "status": "active",
        "competitor_state": "tracked",
        "created_at": "2026-07-02T11:20:00Z",
        "updated_at": "2026-07-30T09:10:00Z"
      }
    ],
    "project_mode": "standard",
    "status": "active",
    "package": {
      "id": "92404fd7-f096-49e9-9ab0-5ed73517d9db",
      "name": "Growth Weekly"
    },
    "address": "1 Market Street",
    "city": "Amsterdam",
    "state": "North Holland",
    "postal_code": "1012 JS",
    "country": "Netherlands",
    "country_code": "NL",
    "latitude": 52.3728,
    "longitude": 4.8936,
    "google_place_id": null,
    "language": "en",
    "action_language": "en",
    "focus": "country",
    "local_mode": false,
    "local_context": {},
    "location_defaults": {
      "language": "en",
      "action_language": "en",
      "website": "https://acme.example/",
      "include_parent_brand": true
    },
    "folder": "Europe",
    "tags": [
      {
        "id": "30761d13-bc7e-45c8-8968-2147a37d6e54",
        "name": "Retail",
        "color": "#2563EB"
      }
    ],
    "logo_url": null,
    "created_at": "2026-07-31T08:00:00Z",
    "updated_at": "2026-07-31T08:00:00Z"
  },
  "visibility_summary": {
    "visibility_rate": 68.4,
    "avg_position": 2.7
  },
  "map": {
    "markers": [
      {
        "id": "a1308d14-149c-4dd7-a4c5-295ac9090f58",
        "external_id": "partner-location-amsterdam",
        "name": "Acme Amsterdam",
        "formatted_address": "1 Market Street, 1012 JS Amsterdam, Netherlands",
        "latitude": 52.3728,
        "longitude": 4.8936,
        "visibility_rate": 68.4,
        "avg_position": 2.7
      }
    ]
  }
}
ErrorsResponse format and status codes
Errors

Error response envelope

errorError

Structured error payload.

Errors

Error

codestring

Stable snake_case code suitable for programmatic handling.

messagestring

Human-readable explanation of the failure.

detailsobject | array | null

Structured validation or request context when available.

request_idstring

Identifier to provide when requesting support.

Example error responseJSON
{
  "error": {
    "code": "validation_failed",
    "message": "One or more fields are invalid.",
    "details": {
      "name": [
        "must be present"
      ]
    },
    "request_id": "req_01K1JQY1RQQ7N3C5H1K6J0P8AT"
  }
}
Errors

Status codes

400invalid_request

A path value, query parameter, or JSON body is malformed.

401invalid_api_key

The Bearer API key is absent or invalid.

403forbidden

The API key cannot perform this operation.

404not_found

The requested project or location was not found.

429rate_limit_exceeded

Too many requests were made.

GET
/projects/by-external-id/{external_id}

Returns the project whose external_id exactly matches the URL-encoded path value.

Parameters

Path parameters

external_idstring

URL-encoded, case-sensitive external ID previously assigned to the resource.

Required
Exact lookupProject external IDs are unique for the API key's workspace. Matching is case-sensitive. An empty or malformed path value returns 400; an unknown value returns 404.
Response

Response envelope

project:Project

The requested, created, or updated project. The envelope is identical for UUID and external-ID lookup.

Object

Project

iduuid

Project identifier.

workspace_iduuid

Identifier of the workspace that owns the project.

external_idstring | null

Case-sensitive identifier supplied by the partner.

namestring

Project display name.

descriptionstring | null

Project description.

websitestring | null

Normalized HTTP or HTTPS website URL.

brand_aliasesstring[]

Normalized alternative brand names.

competitorsCompetitor[]

Active tracked competitors. Compatible tracked projection of the dedicated Competitors contract; suggested and dismissed records are excluded.

project_modestandard | locations_only

Standard projects have their own tracking package. locations_only projects act as containers for independently packaged locations.

statusactive | inactive | archived

Current project lifecycle status.

packagePackageReference | null

Assigned project package. Null when project_mode is locations_only.

addressstring | null

Normalized street address.

citystring | null

Normalized city.

statestring | null

Normalized region or state.

postal_codestring | null

Normalized postal code.

countrystring

Normalized country name.

country_codestring

Uppercase ISO 3166-1 alpha-2 country code.

latitudenumber | null

Latitude from -90 through 90.

longitudenumber | null

Longitude from -180 through 180.

google_place_idstring | null

Google place identifier when one is configured.

languagestring

Lowercase ISO 639-1 content language.

action_languagestring | null

Lowercase ISO 639-1 language used for generated actions.

focusglobal | country | region | city

Geographic targeting focus.

local_modeboolean

Whether local geographic context is emphasized.

local_contextobject

Resolved geographic context used by project processing.

location_defaultsobject

Default language, action language, website, and parent-brand settings available to locations in this project.

folderstring | null

Optional workspace organization folder.

tagsTag[]

Up to three workspace tags assigned to the project.

logo_urlstring | null

Absolute project logo URL when configured.

created_atdatetime

Project creation time in ISO 8601 format.

updated_atdatetime

Most recent project update time in ISO 8601 format.

Object

PackageReference

iduuid

Assigned package identifier.

namestring

Assigned package name.

Object

Competitor

iduuid

Competitor identifier.

kindcompetitor

Entity role. Always competitor in this projection.

namestring

Competitor display name.

domainstring

Normalized hostname without a scheme, path, query, leading www, or trailing dot. Required for tracked competitors.

aliasesstring[]

Additional names recognized for the competitor.

statusactive

Tracked competitors always participate in current processing.

competitor_statetracked

Management lifecycle state. This projection contains tracked competitors only.

created_atdatetime

Competitor creation time in ISO 8601 format.

updated_atdatetime

Most recent competitor update time in ISO 8601 format.

Object

Tag

iduuid

Tag identifier.

namestring

Tag display name.

colorstring

Tag display color.

Request and response

Example requestcURL
curl --request GET \
  --url 'https://api.signal.ceyo.ai/v1/projects/by-external-id/partner-project-acme' \
  --header 'Authorization: Bearer ceyo_platform_...'
Example responseJSON
{
  "project": {
    "id": "e6c96c98-d777-40e0-94ec-48931f57782f",
    "workspace_id": "b7dd886f-b144-4ab4-907b-8efde9df881a",
    "external_id": "partner-project-acme",
    "name": "Acme Europe",
    "description": "European visibility program for Acme.",
    "website": "https://acme.example/",
    "brand_aliases": [
      "acme",
      "acme europe"
    ],
    "competitors": [
      {
        "id": "63ec8dad-c12f-43c8-89e4-06eb629d0977",
        "kind": "competitor",
        "name": "Example Rival",
        "domain": "example-rival.com",
        "aliases": [
          "rival"
        ],
        "status": "active",
        "competitor_state": "tracked",
        "created_at": "2026-07-02T11:20:00Z",
        "updated_at": "2026-07-30T09:10:00Z"
      }
    ],
    "project_mode": "standard",
    "status": "active",
    "package": {
      "id": "92404fd7-f096-49e9-9ab0-5ed73517d9db",
      "name": "Growth Weekly"
    },
    "address": "1 Market Street",
    "city": "Amsterdam",
    "state": "North Holland",
    "postal_code": "1012 JS",
    "country": "Netherlands",
    "country_code": "NL",
    "latitude": 52.3728,
    "longitude": 4.8936,
    "google_place_id": null,
    "language": "en",
    "action_language": "en",
    "focus": "country",
    "local_mode": false,
    "local_context": {},
    "location_defaults": {
      "language": "en",
      "action_language": "en",
      "website": "https://acme.example/",
      "include_parent_brand": true
    },
    "folder": "Europe",
    "tags": [
      {
        "id": "30761d13-bc7e-45c8-8968-2147a37d6e54",
        "name": "Retail",
        "color": "#2563EB"
      }
    ],
    "logo_url": null,
    "created_at": "2026-07-31T08:00:00Z",
    "updated_at": "2026-07-31T08:00:00Z"
  }
}
ErrorsResponse format and status codes
Errors

Error response envelope

errorError

Structured error payload.

Errors

Error

codestring

Stable snake_case code suitable for programmatic handling.

messagestring

Human-readable explanation of the failure.

detailsobject | array | null

Structured validation or request context when available.

request_idstring

Identifier to provide when requesting support.

Example error responseJSON
{
  "error": {
    "code": "validation_failed",
    "message": "One or more fields are invalid.",
    "details": {
      "name": [
        "must be present"
      ]
    },
    "request_id": "req_01K1JQY1RQQ7N3C5H1K6J0P8AT"
  }
}
Errors

Status codes

400invalid_request

A path value, query parameter, or JSON body is malformed.

401invalid_api_key

The Bearer API key is absent or invalid.

403forbidden

The API key cannot perform this operation.

404not_found

The requested project or location was not found.

429rate_limit_exceeded

Too many requests were made.

PATCH
/projects/{project_id}

Updates only supplied project settings. Omitted fields remain unchanged.

Parameters

Path parameters

project_idproject UUID | project external ID

Ceyo project UUID or configured partner external ID.

Required
Request

JSON request body

namestring

New project name. Maximum: 200 characters.

external_idstring | null

partner identifier, unique across projects. Maximum: 200 characters.

descriptionstring | null

description. Maximum: 5,000 characters.

brand_aliasesstring[]

Up to 10 alternative names, each at most 200 characters. Values are trimmed, lowercased, and deduplicated.

country_codestring

Uppercase ISO 3166-1 alpha-2 country code.

countrystring

Country name.

citystring | null

City; required when focus is city. Maximum: 200 characters.

statestring | null

Region or state. Maximum: 200 characters.

addressstring | null

Street address. Maximum: 500 characters.

postal_codestring | null

Postal code. Maximum: 200 characters.

latitudenumber | null

Latitude from -90 through 90.

longitudenumber | null

Longitude from -180 through 180.

google_place_idstring | null

Google place identifier. Maximum: 500 characters.

languageISO 639-1 string

Content language.

action_languageISO 639-1 string | null

language for generated actions.

focusglobal | country | region | city

Geographic targeting focus.

local_modeboolean

Enable local geographic context.

folderstring | null

organization folder. Maximum: 30 characters.

tag_idsuuid[]

Up to three tag identifiers from this workspace.

tag_namesstring[]

Up to three tag names. Names are trimmed and matched case-insensitively; missing names are created. Each name is 1–25 characters and the workspace may contain at most 50 tags. Takes precedence over tag_ids.

location_defaultsobject

Replacement defaults for location language, action_language, website, and include_parent_brand. These affect effective location behavior without changing explicit location values.

websitestring | null

Replacement normalized HTTP or HTTPS URL, maximum 2,048 characters. Standard projects cannot clear this field; locations_only projects may send null.

Request

Multipart request body

namestring

New project name. Maximum: 200 characters.

external_idstring | null

partner identifier, unique across projects. Maximum: 200 characters.

descriptionstring | null

description. Maximum: 5,000 characters.

brand_aliasesstring[]

Up to 10 alternative names, each at most 200 characters. Values are trimmed, lowercased, and deduplicated.

country_codestring

Uppercase ISO 3166-1 alpha-2 country code.

countrystring

Country name.

citystring | null

City; required when focus is city. Maximum: 200 characters.

statestring | null

Region or state. Maximum: 200 characters.

addressstring | null

Street address. Maximum: 500 characters.

postal_codestring | null

Postal code. Maximum: 200 characters.

latitudenumber | null

Latitude from -90 through 90.

longitudenumber | null

Longitude from -180 through 180.

google_place_idstring | null

Google place identifier. Maximum: 500 characters.

languageISO 639-1 string

Content language.

action_languageISO 639-1 string | null

language for generated actions.

focusglobal | country | region | city

Geographic targeting focus.

local_modeboolean

Enable local geographic context.

folderstring | null

organization folder. Maximum: 30 characters.

tag_idsuuid[]

Up to three tag identifiers from this workspace.

tag_namesstring[]

Up to three tag names. Names are trimmed and matched case-insensitively; missing names are created. Each name is 1–25 characters and the workspace may contain at most 50 tags. Takes precedence over tag_ids.

location_defaultsobject

Replacement defaults for location language, action_language, website, and include_parent_brand. These affect effective location behavior without changing explicit location values.

websitestring | null

Replacement normalized HTTP or HTTPS URL, maximum 2,048 characters. Standard projects cannot clear this field; locations_only projects may send null.

logobinary

JPEG, PNG, or WebP image, maximum 5 MB. Replaces the current logo after validation.

remove_logoboolean

Set true to remove the current logo. If logo is also supplied, the uploaded logo takes precedence and remove_logo is ignored.

Replacement fields and precedenceproject_mode and package assignment are immutable. Set nullable JSON fields to null to clear them. Empty alias and tag arrays clear their assignments. If both tag_names and tag_ids are supplied, tag_names wins. Missing tag names are created atomically; if the three-assignment or 50-tag workspace limit would be exceeded, no tags are changed.
Logo upload and removalUse application/json when no file is involved. Use multipart/form-data to upload logo or set remove_logo=true; other fields retain the same validation and replacement semantics. Repeated tag_ids[], tag_names[], and brand_aliases[] parts represent arrays. A supplied logo takes precedence over remove_logo. Successful removal returns logo_url: null.
Response

Response envelope

project:Project

The requested, created, or updated project. The envelope is identical for UUID and external-ID lookup.

Object

Project

iduuid

Project identifier.

workspace_iduuid

Identifier of the workspace that owns the project.

external_idstring | null

Case-sensitive identifier supplied by the partner.

namestring

Project display name.

descriptionstring | null

Project description.

websitestring | null

Normalized HTTP or HTTPS website URL.

brand_aliasesstring[]

Normalized alternative brand names.

competitorsCompetitor[]

Active tracked competitors. Compatible tracked projection of the dedicated Competitors contract; suggested and dismissed records are excluded.

project_modestandard | locations_only

Standard projects have their own tracking package. locations_only projects act as containers for independently packaged locations.

statusactive | inactive | archived

Current project lifecycle status.

packagePackageReference | null

Assigned project package. Null when project_mode is locations_only.

addressstring | null

Normalized street address.

citystring | null

Normalized city.

statestring | null

Normalized region or state.

postal_codestring | null

Normalized postal code.

countrystring

Normalized country name.

country_codestring

Uppercase ISO 3166-1 alpha-2 country code.

latitudenumber | null

Latitude from -90 through 90.

longitudenumber | null

Longitude from -180 through 180.

google_place_idstring | null

Google place identifier when one is configured.

languagestring

Lowercase ISO 639-1 content language.

action_languagestring | null

Lowercase ISO 639-1 language used for generated actions.

focusglobal | country | region | city

Geographic targeting focus.

local_modeboolean

Whether local geographic context is emphasized.

local_contextobject

Resolved geographic context used by project processing.

location_defaultsobject

Default language, action language, website, and parent-brand settings available to locations in this project.

folderstring | null

Optional workspace organization folder.

tagsTag[]

Up to three workspace tags assigned to the project.

logo_urlstring | null

Absolute project logo URL when configured.

created_atdatetime

Project creation time in ISO 8601 format.

updated_atdatetime

Most recent project update time in ISO 8601 format.

Object

PackageReference

iduuid

Assigned package identifier.

namestring

Assigned package name.

Object

Competitor

iduuid

Competitor identifier.

kindcompetitor

Entity role. Always competitor in this projection.

namestring

Competitor display name.

domainstring

Normalized hostname without a scheme, path, query, leading www, or trailing dot. Required for tracked competitors.

aliasesstring[]

Additional names recognized for the competitor.

statusactive

Tracked competitors always participate in current processing.

competitor_statetracked

Management lifecycle state. This projection contains tracked competitors only.

created_atdatetime

Competitor creation time in ISO 8601 format.

updated_atdatetime

Most recent competitor update time in ISO 8601 format.

Object

Tag

iduuid

Tag identifier.

namestring

Tag display name.

colorstring

Tag display color.

Request and response

Example requestcURL
curl --request PATCH \
  --url 'https://api.signal.ceyo.ai/v1/projects/e6c96c98-d777-40e0-94ec-48931f57782f' \
  --header 'Authorization: Bearer ceyo_platform_...' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "Acme Europe & UK",
  "external_id": "partner-project-acme-eu",
  "brand_aliases": [
    "acme",
    "acme europe",
    "acme uk"
  ],
  "tag_names": [
    "Retail",
    "Europe"
  ]
}'
Example responseJSON
{
  "project": {
    "id": "e6c96c98-d777-40e0-94ec-48931f57782f",
    "workspace_id": "b7dd886f-b144-4ab4-907b-8efde9df881a",
    "external_id": "partner-project-acme-eu",
    "name": "Acme Europe & UK",
    "description": "European visibility program for Acme.",
    "website": "https://acme.example/",
    "brand_aliases": [
      "acme",
      "acme europe",
      "acme uk"
    ],
    "competitors": [
      {
        "id": "63ec8dad-c12f-43c8-89e4-06eb629d0977",
        "kind": "competitor",
        "name": "Example Rival",
        "domain": "example-rival.com",
        "aliases": [
          "rival"
        ],
        "status": "active",
        "competitor_state": "tracked",
        "created_at": "2026-07-02T11:20:00Z",
        "updated_at": "2026-07-30T09:10:00Z"
      }
    ],
    "project_mode": "standard",
    "status": "active",
    "package": {
      "id": "92404fd7-f096-49e9-9ab0-5ed73517d9db",
      "name": "Growth Weekly"
    },
    "address": "1 Market Street",
    "city": "Amsterdam",
    "state": "North Holland",
    "postal_code": "1012 JS",
    "country": "Netherlands",
    "country_code": "NL",
    "latitude": 52.3728,
    "longitude": 4.8936,
    "google_place_id": null,
    "language": "en",
    "action_language": "en",
    "focus": "country",
    "local_mode": false,
    "local_context": {},
    "location_defaults": {
      "language": "en",
      "action_language": "en",
      "website": "https://acme.example/",
      "include_parent_brand": true
    },
    "folder": "Europe",
    "tags": [
      {
        "id": "30761d13-bc7e-45c8-8968-2147a37d6e54",
        "name": "Retail",
        "color": "#2563EB"
      },
      {
        "id": "b4e8bc5c-8282-4969-9d50-d8cf7723705a",
        "name": "Europe",
        "color": "#7C3AED"
      }
    ],
    "logo_url": null,
    "created_at": "2026-07-31T08:00:00Z",
    "updated_at": "2026-07-31T12:00:00Z"
  }
}

Request and response

Example requestcURL
curl --request PATCH \
  --url 'https://api.signal.ceyo.ai/v1/projects/e6c96c98-d777-40e0-94ec-48931f57782f' \
  --header 'Authorization: Bearer ceyo_platform_...' \
  --form 'tag_names[]=Retail' \
  --form 'tag_names[]=Europe' \
  --form 'logo=@./acme-logo.webp;type=image/webp' \
  --form 'remove_logo=true'
Example responseJSON
{
  "project": {
    "id": "e6c96c98-d777-40e0-94ec-48931f57782f",
    "workspace_id": "b7dd886f-b144-4ab4-907b-8efde9df881a",
    "external_id": "partner-project-acme",
    "name": "Acme Europe",
    "description": "European visibility program for Acme.",
    "website": "https://acme.example/",
    "brand_aliases": [
      "acme",
      "acme europe"
    ],
    "competitors": [
      {
        "id": "63ec8dad-c12f-43c8-89e4-06eb629d0977",
        "kind": "competitor",
        "name": "Example Rival",
        "domain": "example-rival.com",
        "aliases": [
          "rival"
        ],
        "status": "active",
        "competitor_state": "tracked",
        "created_at": "2026-07-02T11:20:00Z",
        "updated_at": "2026-07-30T09:10:00Z"
      }
    ],
    "project_mode": "standard",
    "status": "active",
    "package": {
      "id": "92404fd7-f096-49e9-9ab0-5ed73517d9db",
      "name": "Growth Weekly"
    },
    "address": "1 Market Street",
    "city": "Amsterdam",
    "state": "North Holland",
    "postal_code": "1012 JS",
    "country": "Netherlands",
    "country_code": "NL",
    "latitude": 52.3728,
    "longitude": 4.8936,
    "google_place_id": null,
    "language": "en",
    "action_language": "en",
    "focus": "country",
    "local_mode": false,
    "local_context": {},
    "location_defaults": {
      "language": "en",
      "action_language": "en",
      "website": "https://acme.example/",
      "include_parent_brand": true
    },
    "folder": "Europe",
    "tags": [
      {
        "id": "30761d13-bc7e-45c8-8968-2147a37d6e54",
        "name": "Retail",
        "color": "#2563EB"
      },
      {
        "id": "b4e8bc5c-8282-4969-9d50-d8cf7723705a",
        "name": "Europe",
        "color": "#7C3AED"
      }
    ],
    "logo_url": "https://api.ceyo.ai/media/logos/opaque-logo-token",
    "created_at": "2026-07-31T08:00:00Z",
    "updated_at": "2026-07-31T12:05:00Z"
  }
}
ErrorsResponse format and status codes
Errors

Error response envelope

errorError

Structured error payload.

Errors

Error

codestring

Stable snake_case code suitable for programmatic handling.

messagestring

Human-readable explanation of the failure.

detailsobject | array | null

Structured validation or request context when available.

request_idstring

Identifier to provide when requesting support.

Example error responseJSON
{
  "error": {
    "code": "validation_failed",
    "message": "One or more fields are invalid.",
    "details": {
      "name": [
        "must be present"
      ]
    },
    "request_id": "req_01K1JQY1RQQ7N3C5H1K6J0P8AT"
  }
}
Errors

Status codes

400invalid_request

A path value, query parameter, or JSON body is malformed.

401invalid_api_key

The Bearer API key is absent or invalid.

403forbidden

The API key cannot perform this operation.

404not_found

The requested project or location was not found.

409conflict

The external ID is already in use or the resource cannot accept this operation in its current state.

422validation_failed

One or more fields are invalid, or package_id does not identify an active package of the required type.

429rate_limit_exceeded

Too many requests were made.

DELETE
/projects/{project_id}

Schedules asynchronous deletion of a project and all resources contained by it.

Parameters

Path parameters

project_idproject UUID | project external ID

Ceyo project UUID or configured partner external ID.

Required
202 AcceptedDeletion runs asynchronously and the response has no body.

Request and response

Example requestcURL
curl --request DELETE \
  --url 'https://api.signal.ceyo.ai/v1/projects/e6c96c98-d777-40e0-94ec-48931f57782f' \
  --header 'Authorization: Bearer ceyo_platform_...'
Example responseJSON
HTTP/1.1 202 Accepted
ErrorsResponse format and status codes
Errors

Error response envelope

errorError

Structured error payload.

Errors

Error

codestring

Stable snake_case code suitable for programmatic handling.

messagestring

Human-readable explanation of the failure.

detailsobject | array | null

Structured validation or request context when available.

request_idstring

Identifier to provide when requesting support.

Example error responseJSON
{
  "error": {
    "code": "validation_failed",
    "message": "One or more fields are invalid.",
    "details": {
      "name": [
        "must be present"
      ]
    },
    "request_id": "req_01K1JQY1RQQ7N3C5H1K6J0P8AT"
  }
}
Errors

Status codes

400invalid_request

A path value, query parameter, or JSON body is malformed.

401invalid_api_key

The Bearer API key is absent or invalid.

403forbidden

The API key cannot perform this operation.

404not_found

The requested project or location was not found.

429rate_limit_exceeded

Too many requests were made.