abstract_contract | 400 | an abstract contract cannot be instantiated; use one that inherits from it. | Create a component |
ambiguous_delivery_target | 400 | it publishes to several, listed in mappedDeliveryEnvironmentIds; name one as deliveryEnvironmentId. | Plan a publish, Publish content, Resolve a draft preview, Preview a stream |
category_not_in_group | 400 | the category belongs to a different group from the one the filter is scoped to. | Preview a stream |
cycle | 400 | the new parent is the folder itself or one of its descendants. | Rename or move a folder, Update or move a category |
delivery_target_not_mapped | 400 | deliveryEnvironmentId is not a delivery environment this environment publishes to. | Plan a publish, Publish content, Resolve a draft preview, Preview a stream |
folder_contract_constraint_violation | 400 | the folder does not allow components of this contract. | Create a component, Update a component |
incomplete_sibling_set | 400 | orderedNodeIds does not match the parent's current children; re-read them with GET /experience/nodes/{id}/children and retry. | Reorder sibling nodes |
invalid_context | 400 | ctx is not a valid context bag. | Resolve a draft preview |
invalid_cursor | 400 | the cursor is malformed or belongs to a different listing; restart from the first page. | List the environment's items |
invalid_filter_value | 400 | a date value is not YYYY-MM. | Preview a stream |
invalid_json | 400 | the body is not valid JSON. | Export a bundle, Plan an import, Import a bundle, Plan a publish, Publish content |
invalid_move | 400 | the node is a site root, or the new parent is the node itself or one of its descendants. | Move a node |
invalid_publish_status | 400 | a publishStatus is not one of the four statuses. | List components |
invalid_redirect_target | 400 | a node cannot redirect to itself. | Set a node's payload |
invalid_request | 400 | componentIds is empty or has more than 200 ids. | Move components to a folder |
invalid_sort | 400 | sort is neither name nor updated. | List components |
no_delivery_target_mapped | 400 | this environment publishes to no delivery environment. | Plan a publish, Publish content, Preview a stream |
required_item_omitted | 400 | items the plan calls new are missing from items; the response names them. | Import a bundle |
reserved_path | 400 | the resulting path is reserved and cannot be used by a page. | Update a node, Create a node |
unknown_category | 400 | no category has this path or id. | Preview a stream |
unknown_property | 400 | the body has a property this API does not recognize; the response names it in property. | Export a bundle, Plan an import, Import a bundle, Plan a publish, Publish content |
unsupported_format_version | 400 | the bundle's formatVersion is not one this server accepts; the response gives supplied and supported. | Plan an import, Import a bundle |
validation_failed | 400 | an unknown kind; the response lists the valid ones. | List the environment's items, Export a bundle, Plan an import, Import a bundle, Upload a blob, Find stored blobs by hash, Plan a publish, Publish content, Create a contract, Update a contract, Replace a folder's access rules, Replace a folder's allowed contracts, Create a component, Update a component, Create a template, Update a template, Create a site, Update a node, Create a node, Set a node's payload, Replace a node's access rules, Replace a node's allowed Templates, Resolve a draft preview, Create a category group, Rename a category group, Add a category group to the environment, Create a category, Update or move a category, Resolve a category path or id, Classify a component, Classify a page, Classify a contract, Create an adapter, Update an adapter, Preview an adapter, Create a stream, Replace a stream, Preview a stream |
missing_api_key
invalid_api_key | 401 | no key was sent, or it is unknown, revoked or expired. | Any operation |
payment_required | 402 | the organization's subscription needs attention. | Any operation |
quota_exceeded | 402 | the organization has reached its plan's category limit (platform.max_categories, counted across every app); quotaKey and limit say which. | Create a category |
access_denied | 403 | the key's role cannot edit a folder or page node a selected item is in or would be filed under. | Import a bundle, Create a folder, Rename or move a folder, Delete a folder, Create a component, Update a component, Delete a component, Get a node, Update a node, Delete a node, List a node's children, Create a node, Move a node, Reorder sibling nodes, List what points at a node, Get where a node is used, Set a node's payload, Clear a node's payload, Resolve a draft preview, Classify a component, Classify a page |
app_not_available | 403 | Content is not enabled for the organization. | Any operation |
inherited_owner_not_permitted | 403 | the item is owned by a realm above the key's own (ownerRealmId). A person can edit it from the app and the change is written in the realm that owns it, but a key acts in one realm and never writes through to another: change it with a key bound to the owning realm. | Update a contract, Rename or move a folder, Update a component, Update a template, Update an adapter, Replace a stream |
ip_denied | 403 | the caller's address is outside the key's allowed ranges. | Any operation |
permission_denied | 403 | the bundle would contain a kind the key's role cannot manage; permission names the permission it lacks. | Export a bundle, Import a bundle, Create a contract, Update a contract, Delete a contract, Get a folder's access rules, Replace a folder's access rules, Get a folder's allowed contracts, Replace a folder's allowed contracts, Create a template, Update a template, Delete a template, Get a node's access rules, Replace a node's access rules, Get a node's allowed Templates, Replace a node's allowed Templates, Create a category group, Create a category group, Rename a category group, Delete a category group, Delete a category group, Add a category group to the environment, Remove a category group from the environment, Create a category, Update or move a category, Update or move a category, Delete a category, Classify a contract, Create an adapter, Update an adapter, Delete an adapter, Create a stream, Replace a stream, Delete a stream |
quota_exceeded | 403 | the organization has reached its plan's component limit. | Create a component, Create a site, Create a node |
scope_denied | 403 | the key lacks this route's scope. | Any operation |
tier_required | 403 | the Content Management API needs the Pro plan or above. | Any operation |
operation_not_found | 404 | no job with this id exists in the key's environment. | Get a job's status |
unknown_choice_source | 404 | pluginKey is not a choice source activated for the organization. | Get a choice source's options |
adapter_in_use | 409 | something still uses the adapter; usages lists each as { entityKind, entityId, name, fieldPath }, where entityKind is stream, adapter, component or node. Remove those uses first. | Delete an adapter |
category_in_use | 409 | isSelectable: false was sent for a category that child categories, classification or field values still use; usages lists each usage as { sourceKind, sourceId, app, environmentId, environmentName, displayName }, gathered from every app that classifies with the vocabulary — app is content or assets, and environmentId/environmentName are set for a usage inside an environment. | Update or move a category, Delete a category |
component_has_translation_jobs | 409 | a translation job for it is still in progress. | Delete a component |
component_published | 409 | still published in the deliveryEnvironments listed; unpublish it first. | Delete a component |
concurrency_conflict | 409 | the contract changed since rowVersion; the body carries currentRowVersion and currentUpdatedAtUtc, so re-read and reapply your change. | Update a contract, Update a component, Update a template, Update a node, Move a node, Rename a category group, Update or move a category, Update an adapter, Replace a stream |
confirm_overwrite_required | 409 | items differ from the environment and were not confirmed; they are listed in items. Re-plan before confirming. | Import a bundle |
contract_read_only | 409 | the contract is synced from a content provider and changes only when that provider is refreshed. | Update a contract, Delete a contract, Classify a contract |
duplicate_external_id | 409 | another contract in this environment already has this external id. | Create a contract, Update a contract, Create a component, Create a template, Update a template, Create an adapter, Create a stream |
duplicate_site_name | 409 | a site with this name already exists in the environment. | Create a site, Update a node |
duplicate_slug | 409 | a sibling already resolves to this slug; localeSlot and conflictingNodeId say where. | Update a node, Create a node, Move a node |
group_in_use | 409 | another environment or app still uses the group — a contract's category field names it, or an environment has added it; usages lists each usage as { sourceKind, sourceId, app, environmentId, environmentName, displayName }, gathered from every app that classifies with the vocabulary — app is content or assets, and environmentId/environmentName are set for a usage inside an environment. | Delete a category group, Remove a category group from the environment |
group_not_empty | 409 | the group still has categories. | Delete a category group |
has_dependents | 409 | other data depends on this contract. blockers groups the dependents' ids by reason: has_children, has_components (a count), referenced_by_folder_constraints, referenced_by_template_constraints, referenced_by_template_settings, referenced_by_adapter_constraints, referenced_by_streams, referenced_by_proposals and referenced_by_field_constraints. | Delete a contract, Delete a template, Delete a node |
import_blocked | 409 | the plan has blockers, listed in blockers; nothing is written, including items that are not blocked. | Import a bundle |
inherited_read_only | 409 | the contract is owned by a realm above the key's own. | Delete a contract, Rename or move a folder, Delete a folder, Update a component, Delete a component, Delete a template, Rename a category group, Delete a category group, Remove a category group from the environment, Create a category, Update or move a category, Delete a category, Classify a component, Classify a contract, Delete an adapter, Delete a stream |
node_published | 409 | the node is live in the delivery environments deliveryEnvironments names; unpublish it there first. | Delete a node |
not_empty | 409 | the folder contains child folders or components. | Delete a folder, Delete a node |
referenced_by | 409 | still referenced; usages lists the components and pages that reference it and adapters the Adapters that look it up. | Delete a component |
taxonomy_read_only | 409 | the group or category comes from a content provider and changes only when that provider is refreshed. | Rename a category group, Delete a category group, Create a category, Update or move a category, Delete a category |
blob_too_large | 413 | the upload is over the size limit given in maxBytes. | Upload a blob |
abstract_contract | 422 | that contract is abstract and cannot be instantiated. | Offer content for review |
adapter_invalid | 422 | the adapter cannot be saved. errors lists each problem as { path, code, message }: invalid_rules (the rules are not well-formed), contract_not_found (the input or output contract does not exist), nested_adapter_not_found (a nested rule names an adapter that does not exist in this environment), and the type-compatibility and coverage problems /adapters/validate reports. | Create an adapter, Update an adapter, Validate an adapter |
contract_not_found | 422 | the input or output contract (or that input contract version) does not exist. | Validate an adapter |
invalid_rules | 422 | the rules are not well-formed. | Validate an adapter, Preview an adapter |
proposal_workflow_not_assigned | 422 | no proposal workflow governs that folder, so there would be nobody to review this. | Offer content for review |
stream_invalid | 422 | the definition cannot be saved. errors lists each problem as { target, code, message }, for example source_contracts_required, too_many_source_contracts, contract_not_found, adapter_not_found, stream_adapter_input_unsatisfied (a source contract does not satisfy the adapter's input contract), invalid_field_path, invalid_resolve_depth, too_many_exclusions, too_many_filters, duplicate_filter_key, unknown_filter_type, multiple_fulltext_filters and unknown_category_group. | Create a stream, Replace a stream |
unknown_contract | 422 | no contract with that external id exists in this environment. | Offer content for review |
unknown_folder | 422 | no folder at that path exists in this environment. | Offer content for review |
workflow_state_not_editable | 422 | the component's workflow state (state, in definition) does not allow edits; move it to an editable state first. | Update a component, Update a node, Set a node's payload, Clear a node's payload |
quota_exceeded | 429 | the organization's blob storage quota is full; the response gives the quota key and its limit.
Rate limit or quota exceeded; Retry-After says how long to wait. | Upload a blob |
too_many_failed_authentications | 429 | too many bad keys from this address. | Any operation |
choice_source_failed | 502 | the source is unavailable or failed; message carries its own explanation. Check the source's configuration. | Get a choice source's options |
bulk_operations_paused | 503 | background jobs are temporarily paused. Retry later. | Plan a publish, Publish content |