Packages
Read and update your workspace and manage immutable project and location packages.
GETList packages
/packagesReturns workspace packages in a fixed ascending order by package type, name, then ID.
List packages
/packagesQuery parameters
qstringSearch package names and descriptions.
package_typeproject | locationReturn packages of one resource type.
statusactive | inactive | archivedReturn packages in one lifecycle status. When omitted, packages in all statuses are returned.
pageintegerThe 1-based page number.
per_pageintegerNumber of packages per page. Maximum: 100.
Response envelope
packages:Package[]pagination:PaginationpackagesPackage[]Packages matching the selected filters.
paginationPaginationPagination metadata.
Package
iduuidPackage identifier.
namestringPackage display name.
descriptionstring | nullPackage description.
package_typeproject | locationResource type that can use this package.
statusactive | inactive | archivedCurrent package lifecycle status. Only active packages can be attached to resources or archived.
configurationPackageConfigurationNormalized feature and capacity configuration.
pricingPackagePricingMonthly sell price for this configuration.
created_atdatetimePackage creation time.
updated_atdatetimeMost recent package update time.
PackageConfiguration
visibilityobjectCadence, prompt limit, selected models, model tiers, citations, and sentiment.
diagnosisobjectDiagnosis feature settings.
agentsobjectContent and technical agent settings.
advancedobjectPrompt volume, Google Analytics, and fan-out settings.
pricingobjectCustomer access setting.
Visibility configuration
cadencemonthly | weekly | dailyTracking schedule.
prompt_limitintegerMaximum tracked prompts.
model_keysstring[]Selected model keys.
Feature configuration
diagnosis.enabledbooleanWhether Diagnosis, Actions, and Site Audit are enabled.
agents.content_enabledbooleanWhether the content agent is enabled.
agents.technical_enabledbooleanWhether the technical agent is enabled.
advanced.prompt_volume_enabledbooleanWhether prompt-volume analysis is enabled.
advanced.google_analytics_enabledbooleanWhether Google Analytics integration is enabled.
advanced.fanout_enabledbooleanWhether fan-out query analysis is enabled.
pricing.frontend_delivery_enabledbooleanWhether Customer access to hosted Signal UI and redirect login links is enabled.
PackagePricing
currencystringAlways USD.
billing_periodmonthPrice period.
final_pricenumberMonthly sell price after customer access and any applied discount.
sectionsobjectFeature-group prices shown in the package builder.
customer_accessobjectHosted Signal UI access uplift.
discountobjectApplied workspace or package discount.
Pricing details
sections.base.pricenumberBase analytics price, excluding listings.
sections.listings.pricenumberListings price. 0 for project packages.
sections.diagnosis.pricenumberDiagnosis, Actions, and Site Audit price.
sections.agents.pricenumberContent and technical agent price.
sections.agents.itemsobjectEnabled agent prices: content and technical.
sections.advanced.pricenumberAdvanced feature price.
sections.advanced.itemsobjectEnabled advanced prices: prompt_volume, google_analytics, and fanout.
customer_access.enabledbooleanWhether customer access is enabled.
customer_access.uplift_percentintegerUplift applied when customer access is enabled.
discount.sourceworkspace | package | noneworkspace inherits the workspace discount. package is a package override. none means no discount applies.
discount.rate_percentnumberApplied discount percent.
discount.amountnumberDiscount amount in USD.
Pagination
pageintegerCurrent 1-based page.
per_pageintegerNumber of records requested per page.
totalintegerTotal matching packages.
total_pagesintegerTotal available pages.
Request and response
curl --request GET \
--url 'https://api.signal.ceyo.ai/v1/packages?q=growth&package_type=project&status=active&page=1&per_page=25' \
--header 'Authorization: Bearer ceyo_platform_...'{
"packages": [
{
"id": "92404fd7-f096-49e9-9ab0-5ed73517d9db",
"name": "Growth Weekly",
"description": "Weekly visibility and diagnosis for growing brands.",
"package_type": "project",
"status": "active",
"configuration": {
"visibility": {
"cadence": "weekly",
"prompt_limit": 100,
"model_keys": ["chatgpt", "claude", "perplexity", "gemini"]
},
"diagnosis": { "enabled": true },
"agents": {
"content_enabled": true,
"technical_enabled": true
},
"advanced": {
"prompt_volume_enabled": true,
"google_analytics_enabled": false,
"fanout_enabled": true
},
"pricing": {
"frontend_delivery_enabled": true
}
},
"pricing": {
"currency": "USD",
"billing_period": "month",
"final_price": 130.2515,
"sections": {
"base": { "price": 66.0012 },
"listings": { "price": 0.0 },
"diagnosis": { "price": 12.2 },
"agents": {
"price": 6.4,
"items": {
"content": 4.8,
"technical": 1.6
}
},
"advanced": {
"price": 19.6,
"items": {
"prompt_volume": 7.6,
"fanout": 12.0
}
}
},
"customer_access": {
"enabled": true,
"uplift_percent": 25
},
"discount": {
"source": "none",
"rate_percent": 0.0,
"amount": 0.0
}
},
"created_at": "2026-07-30T15:05:00Z",
"updated_at": "2026-07-30T15:05:00Z"
}
],
"pagination": {
"page": 1,
"per_page": 25,
"total": 1,
"total_pages": 1
}
}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_api_key",
"message": "The Bearer API key is invalid.",
"details": null,
"request_id": "req_01K1F8M7QX4R2V9N6Y3Z0A5BCT"
}
}Status codes
400invalid_requestThe JSON body or a query parameter is malformed.
401invalid_api_keyThe Bearer API key was not provided or is invalid.
403forbiddenThe API key cannot perform this operation.
429rate_limit_exceededToo many requests were made.
POSTValidate package configuration
/packages/previewValidates and normalizes a proposed package configuration without creating a package.
Validate package configuration
/packages/previewRequest body
package_typeproject | locationRequired resource type.
configurationPackageConfigurationInputRequired proposed configuration.
PackageConfigurationInput
visibilityobjectRequired visibility tracking configuration.
visibility.cadencemonthly | weekly | dailyTracking schedule.
visibility.prompt_limitintegerMaximum tracked prompts. Minimum: 20.
visibility.model_keysstring[]Non-empty list containing chatgpt, claude, perplexity, gemini, google_ai_mode, google_ai_overview, grok, or copilot.
diagnosis.enabledbooleanEnable Diagnosis, Actions, and Site Audit. Defaults to false.
agents.content_enabledbooleanEnable the content agent. Defaults to false and is normalized to false unless diagnosis.enabled is true.
agents.technical_enabledbooleanEnable the technical agent. Defaults to false and is normalized to false unless diagnosis.enabled is true.
listings.enabledderivedDerived from package_type: true for location packages and false for project packages. Do not send this field.
advanced.prompt_volume_enabledbooleanEnable prompt-volume analysis. Defaults to false.
advanced.google_analytics_enabledbooleanEnable Google Analytics integration. Defaults to false.
advanced.fanout_enabledbooleanEnable fan-out query analysis. Defaults to false.
pricing.frontend_delivery_enabledbooleanEnable Customer access, including hosted Signal UI and redirect login links, and apply one 25% uplift. Defaults to false.
Response envelope
configuration:PackageConfigurationpricing:PackagePricingconfigurationPackageConfigurationNormalized public configuration.
pricingPackagePricingMonthly sell price for the proposed configuration.
PackageConfiguration
visibilityobjectCadence, prompt limit, selected models, model tiers, citations, and sentiment.
diagnosisobjectDiagnosis feature settings.
agentsobjectContent and technical agent settings.
advancedobjectPrompt volume, Google Analytics, and fan-out settings.
pricingobjectCustomer access setting.
Visibility configuration
cadencemonthly | weekly | dailyTracking schedule.
prompt_limitintegerMaximum tracked prompts.
model_keysstring[]Selected model keys.
Feature configuration
diagnosis.enabledbooleanWhether Diagnosis, Actions, and Site Audit are enabled.
agents.content_enabledbooleanWhether the content agent is enabled.
agents.technical_enabledbooleanWhether the technical agent is enabled.
advanced.prompt_volume_enabledbooleanWhether prompt-volume analysis is enabled.
advanced.google_analytics_enabledbooleanWhether Google Analytics integration is enabled.
advanced.fanout_enabledbooleanWhether fan-out query analysis is enabled.
pricing.frontend_delivery_enabledbooleanWhether Customer access to hosted Signal UI and redirect login links is enabled.
PackagePricing
currencystringAlways USD.
billing_periodmonthPrice period.
final_pricenumberMonthly sell price after customer access and any applied discount.
sectionsobjectFeature-group prices shown in the package builder.
customer_accessobjectHosted Signal UI access uplift.
discountobjectApplied workspace or package discount.
Pricing details
sections.base.pricenumberBase analytics price, excluding listings.
sections.listings.pricenumberListings price. 0 for project packages.
sections.diagnosis.pricenumberDiagnosis, Actions, and Site Audit price.
sections.agents.pricenumberContent and technical agent price.
sections.agents.itemsobjectEnabled agent prices: content and technical.
sections.advanced.pricenumberAdvanced feature price.
sections.advanced.itemsobjectEnabled advanced prices: prompt_volume, google_analytics, and fanout.
customer_access.enabledbooleanWhether customer access is enabled.
customer_access.uplift_percentintegerUplift applied when customer access is enabled.
discount.sourceworkspace | package | noneworkspace inherits the workspace discount. package is a package override. none means no discount applies.
discount.rate_percentnumberApplied discount percent.
discount.amountnumberDiscount amount in USD.
Request and response
curl --request POST \
--url 'https://api.signal.ceyo.ai/v1/packages/preview' \
--header 'Authorization: Bearer ceyo_platform_...' \
--header 'Content-Type: application/json' \
--data '{
"package_type": "project",
"configuration": {
"visibility": {
"cadence": "weekly",
"prompt_limit": 100,
"model_keys": ["chatgpt", "claude", "perplexity", "gemini"]
},
"diagnosis": { "enabled": true },
"agents": {
"content_enabled": true,
"technical_enabled": true
},
"advanced": {
"prompt_volume_enabled": true,
"google_analytics_enabled": false,
"fanout_enabled": true
},
"pricing": {
"frontend_delivery_enabled": true
}
}
}'{
"configuration": {
"visibility": {
"cadence": "weekly",
"prompt_limit": 100,
"model_keys": ["chatgpt", "claude", "perplexity", "gemini"]
},
"diagnosis": { "enabled": true },
"agents": {
"content_enabled": true,
"technical_enabled": true
},
"advanced": {
"prompt_volume_enabled": true,
"google_analytics_enabled": false,
"fanout_enabled": true
},
"pricing": {
"frontend_delivery_enabled": true
}
},
"pricing": {
"currency": "USD",
"billing_period": "month",
"final_price": 130.2515,
"sections": {
"base": { "price": 66.0012 },
"listings": { "price": 0.0 },
"diagnosis": { "price": 12.2 },
"agents": {
"price": 6.4,
"items": {
"content": 4.8,
"technical": 1.6
}
},
"advanced": {
"price": 19.6,
"items": {
"prompt_volume": 7.6,
"fanout": 12.0
}
}
},
"customer_access": {
"enabled": true,
"uplift_percent": 25
},
"discount": {
"source": "none",
"rate_percent": 0.0,
"amount": 0.0
}
}
}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_api_key",
"message": "The Bearer API key is invalid.",
"details": null,
"request_id": "req_01K1F8M7QX4R2V9N6Y3Z0A5BCT"
}
}Status codes
400invalid_requestThe JSON body or a query parameter is malformed.
401invalid_api_keyThe Bearer API key was not provided or is invalid.
403forbiddenThe API key cannot perform this operation.
422validation_failedOne or more request fields are invalid.
429rate_limit_exceededToo many requests were made.
POSTCreate package
/packagesCreates an immutable package and returns its public configuration.
Create package
/packagesRequest body
namestringRequired package name. Maximum: 200 characters.
descriptionstring | nullOptional description. Maximum: 5,000 characters.
package_typeproject | locationRequired resource type.
configurationPackageConfigurationInputRequired feature and capacity configuration.
PackageConfigurationInput
visibilityobjectRequired visibility tracking configuration.
visibility.cadencemonthly | weekly | dailyTracking schedule.
visibility.prompt_limitintegerMaximum tracked prompts. Minimum: 20.
visibility.model_keysstring[]Non-empty list containing chatgpt, claude, perplexity, gemini, google_ai_mode, google_ai_overview, grok, or copilot.
diagnosis.enabledbooleanEnable Diagnosis, Actions, and Site Audit. Defaults to false.
agents.content_enabledbooleanEnable the content agent. Defaults to false and is normalized to false unless diagnosis.enabled is true.
agents.technical_enabledbooleanEnable the technical agent. Defaults to false and is normalized to false unless diagnosis.enabled is true.
listings.enabledderivedDerived from package_type: true for location packages and false for project packages. Do not send this field.
advanced.prompt_volume_enabledbooleanEnable prompt-volume analysis. Defaults to false.
advanced.google_analytics_enabledbooleanEnable Google Analytics integration. Defaults to false.
advanced.fanout_enabledbooleanEnable fan-out query analysis. Defaults to false.
pricing.frontend_delivery_enabledbooleanEnable Customer access, including hosted Signal UI and redirect login links, and apply one 25% uplift. Defaults to false.
package_type: "location" derives configuration.listings.enabled: true. Listings is derived and must not be included in the request configuration.Response envelope
package:PackageThe requested or resulting package.
Package
iduuidPackage identifier.
namestringPackage display name.
descriptionstring | nullPackage description.
package_typeproject | locationResource type that can use this package.
statusactive | inactive | archivedCurrent package lifecycle status. Only active packages can be attached to resources or archived.
configurationPackageConfigurationNormalized feature and capacity configuration.
pricingPackagePricingMonthly sell price for this configuration.
created_atdatetimePackage creation time.
updated_atdatetimeMost recent package update time.
PackageConfiguration
visibilityobjectCadence, prompt limit, selected models, model tiers, citations, and sentiment.
diagnosisobjectDiagnosis feature settings.
agentsobjectContent and technical agent settings.
advancedobjectPrompt volume, Google Analytics, and fan-out settings.
pricingobjectCustomer access setting.
Visibility configuration
cadencemonthly | weekly | dailyTracking schedule.
prompt_limitintegerMaximum tracked prompts.
model_keysstring[]Selected model keys.
Feature configuration
diagnosis.enabledbooleanWhether Diagnosis, Actions, and Site Audit are enabled.
agents.content_enabledbooleanWhether the content agent is enabled.
agents.technical_enabledbooleanWhether the technical agent is enabled.
advanced.prompt_volume_enabledbooleanWhether prompt-volume analysis is enabled.
advanced.google_analytics_enabledbooleanWhether Google Analytics integration is enabled.
advanced.fanout_enabledbooleanWhether fan-out query analysis is enabled.
pricing.frontend_delivery_enabledbooleanWhether Customer access to hosted Signal UI and redirect login links is enabled.
PackagePricing
currencystringAlways USD.
billing_periodmonthPrice period.
final_pricenumberMonthly sell price after customer access and any applied discount.
sectionsobjectFeature-group prices shown in the package builder.
customer_accessobjectHosted Signal UI access uplift.
discountobjectApplied workspace or package discount.
Pricing details
sections.base.pricenumberBase analytics price, excluding listings.
sections.listings.pricenumberListings price. 0 for project packages.
sections.diagnosis.pricenumberDiagnosis, Actions, and Site Audit price.
sections.agents.pricenumberContent and technical agent price.
sections.agents.itemsobjectEnabled agent prices: content and technical.
sections.advanced.pricenumberAdvanced feature price.
sections.advanced.itemsobjectEnabled advanced prices: prompt_volume, google_analytics, and fanout.
customer_access.enabledbooleanWhether customer access is enabled.
customer_access.uplift_percentintegerUplift applied when customer access is enabled.
discount.sourceworkspace | package | noneworkspace inherits the workspace discount. package is a package override. none means no discount applies.
discount.rate_percentnumberApplied discount percent.
discount.amountnumberDiscount amount in USD.
201. Package names must be unique within their package type.Request and response
curl --request POST \
--url 'https://api.signal.ceyo.ai/v1/packages' \
--header 'Authorization: Bearer ceyo_platform_...' \
--header 'Content-Type: application/json' \
--data '{
"name": "Growth Weekly",
"description": "Weekly visibility and diagnosis for growing brands.",
"package_type": "project",
"configuration": {
"visibility": {
"cadence": "weekly",
"prompt_limit": 100,
"model_keys": ["chatgpt", "claude", "perplexity", "gemini"]
},
"diagnosis": { "enabled": true },
"agents": {
"content_enabled": true,
"technical_enabled": true
},
"advanced": {
"prompt_volume_enabled": true,
"google_analytics_enabled": false,
"fanout_enabled": true
},
"pricing": {
"frontend_delivery_enabled": true
}
}
}'{
"package": {
"id": "92404fd7-f096-49e9-9ab0-5ed73517d9db",
"name": "Growth Weekly",
"description": "Weekly visibility and diagnosis for growing brands.",
"package_type": "project",
"status": "active",
"configuration": {
"visibility": {
"cadence": "weekly",
"prompt_limit": 100,
"model_keys": ["chatgpt", "claude", "perplexity", "gemini"]
},
"diagnosis": { "enabled": true },
"agents": {
"content_enabled": true,
"technical_enabled": true
},
"advanced": {
"prompt_volume_enabled": true,
"google_analytics_enabled": false,
"fanout_enabled": true
},
"pricing": {
"frontend_delivery_enabled": true
}
},
"pricing": {
"currency": "USD",
"billing_period": "month",
"final_price": 130.2515,
"sections": {
"base": { "price": 66.0012 },
"listings": { "price": 0.0 },
"diagnosis": { "price": 12.2 },
"agents": {
"price": 6.4,
"items": {
"content": 4.8,
"technical": 1.6
}
},
"advanced": {
"price": 19.6,
"items": {
"prompt_volume": 7.6,
"fanout": 12.0
}
}
},
"customer_access": {
"enabled": true,
"uplift_percent": 25
},
"discount": {
"source": "none",
"rate_percent": 0.0,
"amount": 0.0
}
},
"created_at": "2026-07-30T15:05:00Z",
"updated_at": "2026-07-30T15:05: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_api_key",
"message": "The Bearer API key is invalid.",
"details": null,
"request_id": "req_01K1F8M7QX4R2V9N6Y3Z0A5BCT"
}
}Status codes
400invalid_requestThe JSON body or a query parameter is malformed.
401invalid_api_keyThe Bearer API key was not provided or is invalid.
403forbiddenThe API key cannot perform this operation.
422validation_failedOne or more request fields are invalid.
429rate_limit_exceededToo many requests were made.
GETGet package
/packages/{package_id}Returns one package from the workspace selected by the Bearer API key.
Get package
/packages/{package_id}Path parameters
package_iduuidPackage identifier.
Response envelope
package:PackageThe requested or resulting package.
Package
iduuidPackage identifier.
namestringPackage display name.
descriptionstring | nullPackage description.
package_typeproject | locationResource type that can use this package.
statusactive | inactive | archivedCurrent package lifecycle status. Only active packages can be attached to resources or archived.
configurationPackageConfigurationNormalized feature and capacity configuration.
pricingPackagePricingMonthly sell price for this configuration.
created_atdatetimePackage creation time.
updated_atdatetimeMost recent package update time.
PackageConfiguration
visibilityobjectCadence, prompt limit, selected models, model tiers, citations, and sentiment.
diagnosisobjectDiagnosis feature settings.
agentsobjectContent and technical agent settings.
advancedobjectPrompt volume, Google Analytics, and fan-out settings.
pricingobjectCustomer access setting.
Visibility configuration
cadencemonthly | weekly | dailyTracking schedule.
prompt_limitintegerMaximum tracked prompts.
model_keysstring[]Selected model keys.
Feature configuration
diagnosis.enabledbooleanWhether Diagnosis, Actions, and Site Audit are enabled.
agents.content_enabledbooleanWhether the content agent is enabled.
agents.technical_enabledbooleanWhether the technical agent is enabled.
advanced.prompt_volume_enabledbooleanWhether prompt-volume analysis is enabled.
advanced.google_analytics_enabledbooleanWhether Google Analytics integration is enabled.
advanced.fanout_enabledbooleanWhether fan-out query analysis is enabled.
pricing.frontend_delivery_enabledbooleanWhether Customer access to hosted Signal UI and redirect login links is enabled.
PackagePricing
currencystringAlways USD.
billing_periodmonthPrice period.
final_pricenumberMonthly sell price after customer access and any applied discount.
sectionsobjectFeature-group prices shown in the package builder.
customer_accessobjectHosted Signal UI access uplift.
discountobjectApplied workspace or package discount.
Pricing details
sections.base.pricenumberBase analytics price, excluding listings.
sections.listings.pricenumberListings price. 0 for project packages.
sections.diagnosis.pricenumberDiagnosis, Actions, and Site Audit price.
sections.agents.pricenumberContent and technical agent price.
sections.agents.itemsobjectEnabled agent prices: content and technical.
sections.advanced.pricenumberAdvanced feature price.
sections.advanced.itemsobjectEnabled advanced prices: prompt_volume, google_analytics, and fanout.
customer_access.enabledbooleanWhether customer access is enabled.
customer_access.uplift_percentintegerUplift applied when customer access is enabled.
discount.sourceworkspace | package | noneworkspace inherits the workspace discount. package is a package override. none means no discount applies.
discount.rate_percentnumberApplied discount percent.
discount.amountnumberDiscount amount in USD.
Request and response
curl --request GET \
--url 'https://api.signal.ceyo.ai/v1/packages/92404fd7-f096-49e9-9ab0-5ed73517d9db' \
--header 'Authorization: Bearer ceyo_platform_...'{
"package": {
"id": "92404fd7-f096-49e9-9ab0-5ed73517d9db",
"name": "Growth Weekly",
"description": "Weekly visibility and diagnosis for growing brands.",
"package_type": "project",
"status": "active",
"configuration": {
"visibility": {
"cadence": "weekly",
"prompt_limit": 100,
"model_keys": ["chatgpt", "claude", "perplexity", "gemini"]
},
"diagnosis": { "enabled": true },
"agents": {
"content_enabled": true,
"technical_enabled": true
},
"advanced": {
"prompt_volume_enabled": true,
"google_analytics_enabled": false,
"fanout_enabled": true
},
"pricing": {
"frontend_delivery_enabled": true
}
},
"pricing": {
"currency": "USD",
"billing_period": "month",
"final_price": 130.2515,
"sections": {
"base": { "price": 66.0012 },
"listings": { "price": 0.0 },
"diagnosis": { "price": 12.2 },
"agents": {
"price": 6.4,
"items": {
"content": 4.8,
"technical": 1.6
}
},
"advanced": {
"price": 19.6,
"items": {
"prompt_volume": 7.6,
"fanout": 12.0
}
}
},
"customer_access": {
"enabled": true,
"uplift_percent": 25
},
"discount": {
"source": "none",
"rate_percent": 0.0,
"amount": 0.0
}
},
"created_at": "2026-07-30T15:05:00Z",
"updated_at": "2026-07-30T15:05: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_api_key",
"message": "The Bearer API key is invalid.",
"details": null,
"request_id": "req_01K1F8M7QX4R2V9N6Y3Z0A5BCT"
}
}Status codes
401invalid_api_keyThe Bearer API key was not provided or is invalid.
403forbiddenThe API key cannot perform this operation.
404not_foundThe requested package was not found in this workspace.
429rate_limit_exceededToo many requests were made.
POSTClone package
/packages/{package_id}/cloneCreates a new active package by copying the source package type and configuration.
Clone package
/packages/{package_id}/clonePath parameters
package_iduuidPackage identifier.
Request body
namestringRequired name for the cloned package. Maximum: 200 characters.
descriptionstring | nullOptional description. Maximum: 5,000 characters. When omitted, the source description is copied.
201 with a new package ID and new creation and update timestamps. The clone copies package_type and configuration. Package type and configuration cannot be overridden in the request.Response envelope
package:PackageThe requested or resulting package.
Package
iduuidPackage identifier.
namestringPackage display name.
descriptionstring | nullPackage description.
package_typeproject | locationResource type that can use this package.
statusactive | inactive | archivedCurrent package lifecycle status. Only active packages can be attached to resources or archived.
configurationPackageConfigurationNormalized feature and capacity configuration.
pricingPackagePricingMonthly sell price for this configuration.
created_atdatetimePackage creation time.
updated_atdatetimeMost recent package update time.
PackageConfiguration
visibilityobjectCadence, prompt limit, selected models, model tiers, citations, and sentiment.
diagnosisobjectDiagnosis feature settings.
agentsobjectContent and technical agent settings.
advancedobjectPrompt volume, Google Analytics, and fan-out settings.
pricingobjectCustomer access setting.
Visibility configuration
cadencemonthly | weekly | dailyTracking schedule.
prompt_limitintegerMaximum tracked prompts.
model_keysstring[]Selected model keys.
Feature configuration
diagnosis.enabledbooleanWhether Diagnosis, Actions, and Site Audit are enabled.
agents.content_enabledbooleanWhether the content agent is enabled.
agents.technical_enabledbooleanWhether the technical agent is enabled.
advanced.prompt_volume_enabledbooleanWhether prompt-volume analysis is enabled.
advanced.google_analytics_enabledbooleanWhether Google Analytics integration is enabled.
advanced.fanout_enabledbooleanWhether fan-out query analysis is enabled.
pricing.frontend_delivery_enabledbooleanWhether Customer access to hosted Signal UI and redirect login links is enabled.
PackagePricing
currencystringAlways USD.
billing_periodmonthPrice period.
final_pricenumberMonthly sell price after customer access and any applied discount.
sectionsobjectFeature-group prices shown in the package builder.
customer_accessobjectHosted Signal UI access uplift.
discountobjectApplied workspace or package discount.
Pricing details
sections.base.pricenumberBase analytics price, excluding listings.
sections.listings.pricenumberListings price. 0 for project packages.
sections.diagnosis.pricenumberDiagnosis, Actions, and Site Audit price.
sections.agents.pricenumberContent and technical agent price.
sections.agents.itemsobjectEnabled agent prices: content and technical.
sections.advanced.pricenumberAdvanced feature price.
sections.advanced.itemsobjectEnabled advanced prices: prompt_volume, google_analytics, and fanout.
customer_access.enabledbooleanWhether customer access is enabled.
customer_access.uplift_percentintegerUplift applied when customer access is enabled.
discount.sourceworkspace | package | noneworkspace inherits the workspace discount. package is a package override. none means no discount applies.
discount.rate_percentnumberApplied discount percent.
discount.amountnumberDiscount amount in USD.
Request and response
curl --request POST \
--url 'https://api.signal.ceyo.ai/v1/packages/92404fd7-f096-49e9-9ab0-5ed73517d9db/clone' \
--header 'Authorization: Bearer ceyo_platform_...' \
--header 'Content-Type: application/json' \
--data '{
"name": "Growth Weekly Plus",
"description": "A new package based on Growth Weekly."
}'{
"package": {
"id": "1fd73876-e220-4962-924b-a74bdb32481d",
"name": "Growth Weekly Plus",
"description": "A new package based on Growth Weekly.",
"package_type": "project",
"status": "active",
"configuration": {
"visibility": {
"cadence": "weekly",
"prompt_limit": 100,
"model_keys": ["chatgpt", "claude", "perplexity", "gemini"]
},
"diagnosis": { "enabled": true },
"agents": {
"content_enabled": true,
"technical_enabled": true
},
"advanced": {
"prompt_volume_enabled": true,
"google_analytics_enabled": false,
"fanout_enabled": true
},
"pricing": {
"frontend_delivery_enabled": true
}
},
"pricing": {
"currency": "USD",
"billing_period": "month",
"final_price": 130.2515,
"sections": {
"base": { "price": 66.0012 },
"listings": { "price": 0.0 },
"diagnosis": { "price": 12.2 },
"agents": {
"price": 6.4,
"items": {
"content": 4.8,
"technical": 1.6
}
},
"advanced": {
"price": 19.6,
"items": {
"prompt_volume": 7.6,
"fanout": 12.0
}
}
},
"customer_access": {
"enabled": true,
"uplift_percent": 25
},
"discount": {
"source": "none",
"rate_percent": 0.0,
"amount": 0.0
}
},
"created_at": "2026-07-31T10:05:00Z",
"updated_at": "2026-07-31T10:05: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_api_key",
"message": "The Bearer API key is invalid.",
"details": null,
"request_id": "req_01K1F8M7QX4R2V9N6Y3Z0A5BCT"
}
}Status codes
400invalid_requestThe JSON body or a query parameter is malformed.
401invalid_api_keyThe Bearer API key was not provided or is invalid.
403forbiddenThe API key cannot perform this operation.
404not_foundThe requested package was not found in this workspace.
422validation_failedOne or more request fields are invalid.
429rate_limit_exceededToo many requests were made.
POSTArchive package
/packages/{package_id}/archiveArchives an unattached active package. The request body must be an empty JSON object.
Archive package
/packages/{package_id}/archivePath parameters
package_iduuidPackage identifier.
Request body
{}objectRequired empty JSON request body.
200. Only an unattached active package can be archived. A package that is attached, already archived, or not active returns a conflict. An archived package cannot be restored.Response envelope
package:PackageThe requested or resulting package.
Package
iduuidPackage identifier.
namestringPackage display name.
descriptionstring | nullPackage description.
package_typeproject | locationResource type that can use this package.
statusactive | inactive | archivedCurrent package lifecycle status. Only active packages can be attached to resources or archived.
configurationPackageConfigurationNormalized feature and capacity configuration.
pricingPackagePricingMonthly sell price for this configuration.
created_atdatetimePackage creation time.
updated_atdatetimeMost recent package update time.
PackageConfiguration
visibilityobjectCadence, prompt limit, selected models, model tiers, citations, and sentiment.
diagnosisobjectDiagnosis feature settings.
agentsobjectContent and technical agent settings.
advancedobjectPrompt volume, Google Analytics, and fan-out settings.
pricingobjectCustomer access setting.
Visibility configuration
cadencemonthly | weekly | dailyTracking schedule.
prompt_limitintegerMaximum tracked prompts.
model_keysstring[]Selected model keys.
Feature configuration
diagnosis.enabledbooleanWhether Diagnosis, Actions, and Site Audit are enabled.
agents.content_enabledbooleanWhether the content agent is enabled.
agents.technical_enabledbooleanWhether the technical agent is enabled.
advanced.prompt_volume_enabledbooleanWhether prompt-volume analysis is enabled.
advanced.google_analytics_enabledbooleanWhether Google Analytics integration is enabled.
advanced.fanout_enabledbooleanWhether fan-out query analysis is enabled.
pricing.frontend_delivery_enabledbooleanWhether Customer access to hosted Signal UI and redirect login links is enabled.
PackagePricing
currencystringAlways USD.
billing_periodmonthPrice period.
final_pricenumberMonthly sell price after customer access and any applied discount.
sectionsobjectFeature-group prices shown in the package builder.
customer_accessobjectHosted Signal UI access uplift.
discountobjectApplied workspace or package discount.
Pricing details
sections.base.pricenumberBase analytics price, excluding listings.
sections.listings.pricenumberListings price. 0 for project packages.
sections.diagnosis.pricenumberDiagnosis, Actions, and Site Audit price.
sections.agents.pricenumberContent and technical agent price.
sections.agents.itemsobjectEnabled agent prices: content and technical.
sections.advanced.pricenumberAdvanced feature price.
sections.advanced.itemsobjectEnabled advanced prices: prompt_volume, google_analytics, and fanout.
customer_access.enabledbooleanWhether customer access is enabled.
customer_access.uplift_percentintegerUplift applied when customer access is enabled.
discount.sourceworkspace | package | noneworkspace inherits the workspace discount. package is a package override. none means no discount applies.
discount.rate_percentnumberApplied discount percent.
discount.amountnumberDiscount amount in USD.
Request and response
curl --request POST \
--url 'https://api.signal.ceyo.ai/v1/packages/92404fd7-f096-49e9-9ab0-5ed73517d9db/archive' \
--header 'Authorization: Bearer ceyo_platform_...' \
--header 'Content-Type: application/json' \
--data '{}'{
"package": {
"id": "92404fd7-f096-49e9-9ab0-5ed73517d9db",
"name": "Growth Weekly",
"description": "Weekly visibility and diagnosis for growing brands.",
"package_type": "project",
"status": "archived",
"configuration": {
"visibility": {
"cadence": "weekly",
"prompt_limit": 100,
"model_keys": ["chatgpt", "claude", "perplexity", "gemini"]
},
"diagnosis": { "enabled": true },
"agents": {
"content_enabled": true,
"technical_enabled": true
},
"advanced": {
"prompt_volume_enabled": true,
"google_analytics_enabled": false,
"fanout_enabled": true
},
"pricing": {
"frontend_delivery_enabled": true
}
},
"pricing": {
"currency": "USD",
"billing_period": "month",
"final_price": 130.2515,
"sections": {
"base": { "price": 66.0012 },
"listings": { "price": 0.0 },
"diagnosis": { "price": 12.2 },
"agents": {
"price": 6.4,
"items": {
"content": 4.8,
"technical": 1.6
}
},
"advanced": {
"price": 19.6,
"items": {
"prompt_volume": 7.6,
"fanout": 12.0
}
}
},
"customer_access": {
"enabled": true,
"uplift_percent": 25
},
"discount": {
"source": "none",
"rate_percent": 0.0,
"amount": 0.0
}
},
"created_at": "2026-07-30T15:05:00Z",
"updated_at": "2026-07-31T10:12: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_api_key",
"message": "The Bearer API key is invalid.",
"details": null,
"request_id": "req_01K1F8M7QX4R2V9N6Y3Z0A5BCT"
}
}Status codes
400invalid_requestThe JSON body or a query parameter is malformed.
401invalid_api_keyThe Bearer API key was not provided or is invalid.
403forbiddenThe API key cannot perform this operation.
404not_foundThe requested package was not found in this workspace.
409package_not_active | package_in_useThe package is attached to a resource, is already archived, or is not active.
429rate_limit_exceededToo many requests were made.