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_redirect_target | 400 | a node cannot redirect to itself. | Set a node's payload |
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, Create an audience, Update an audience, Resolve a draft preview, Create a category group, Rename a category group, 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; quotaKey and limit say which. | Create a category |
access_denied | 403 | the key's role may view the parent folder but not edit it. | 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 |
ip_denied | 403 | the caller's address is outside the key's allowed ranges. | Any operation |
permission_denied | 403 | the key's role lacks content.contracts.manage. | 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 an audience, Update an audience, Delete an audience, Create a category group, Rename a category group, Delete a category group, Create 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 |
audience_in_use | 409 | a variant still refers to the audience; usages lists each as { entityKind, entityId }, where entityKind is component or node. | Delete an audience |
category_in_use | 409 | isSelectable: false was sent for a category that child categories, classification or field values still use; usages lists each as { sourceKind, sourceId }. | 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_not_empty | 409 | the group still has categories. | Delete a category group |
group_referenced_by_field | 409 | a contract's category field still names this group in its allowed groups. | 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 and referenced_by_field_constraints. | Delete a contract, Delete a template, Delete a node |
import_blocked | 409 | the plan has blockers, listed in blockers. | Import a bundle |
inherited_read_only | 409 | the contract is inherited from another environment (sourceEnvironmentId); edit it there. | Update a contract, Delete a contract, Rename or move a folder, Delete a folder, Update a component, Delete a component, Update a template, Delete a template, Update an audience, Delete an audience, Rename a category group, Delete a category group, Create a category, Update or move a category, Delete a category, Classify a component, Classify a contract, Update an adapter, Delete an adapter, Replace a stream, 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 |
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 |
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 |
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 |