# Error codes

> Every error Coho's APIs send is an RFC 9457 problem with a stable code to branch on. Each code has a page here, and the problem's type links to it.

Branch on `code`, not on `status`: the status is deliberately coarse, so most domain rules are a 400. A code's page says what it means and what to do.

- [`ACCOUNT_ADMIN_REQUIRED`](https://coho-cms.com/errors/account-admin-required/index.html.md): Only an admin of this account may do this. The request changes an organization's settings, people, or billing, and you are a member of it but not an admin.
- [`ACCOUNT_CLOSED`](https://coho-cms.com/errors/account-closed/index.html.md): Account closed. The organization that owns the project has been closed, and its data is waiting to be purged.
- [`ACCOUNT_MAINTENANCE`](https://coho-cms.com/errors/account-maintenance/index.html.md): Account maintenance. The organization's data is being moved, and writes are paused while it moves. Nothing was written.
- [`ACCOUNT_MISMATCH`](https://coho-cms.com/errors/account-mismatch/index.html.md): The body names a different account than the path. The request's path names one organization and its body names another.
- [`ACCOUNT_NOT_FOUND`](https://coho-cms.com/errors/account-not-found/index.html.md): No such account. The organization in the path does not exist, or you are not a member of it. Coho gives the same answer for both, so it does not say which organizations exist.
- [`ACCOUNT_SLUG_INVALID`](https://coho-cms.com/errors/account-slug-invalid/index.html.md): Not a usable account slug. An organization's slug must be lowercase letters and digits, with single hyphens between them, within the length the detail gives.
- [`ACCOUNT_SLUG_RESERVED`](https://coho-cms.com/errors/account-slug-reserved/index.html.md): The account slug is reserved. The slug is one Coho keeps for itself, such as a word that would collide with a page of the portal.
- [`ACCOUNT_SLUG_TAKEN`](https://coho-cms.com/errors/account-slug-taken/index.html.md): The account slug is taken. Another organization already has that slug.
- [`ACCOUNT_SUSPENDED`](https://coho-cms.com/errors/account-suspended/index.html.md): Account suspended. The organization that owns the project is suspended, usually over billing. A suspension is lifted when it is resolved; nothing is deleted.
- [`ALREADY_REGISTERED`](https://coho-cms.com/errors/already-registered/index.html.md): Already registered. The identity you signed up with, or are connecting as a new sign-in method, already belongs to a Coho user.
- [`ARTIFACT_UNREADABLE`](https://coho-cms.com/errors/artifact-unreadable/index.html.md): Artifact unreadable. The release this environment serves was built in a format this delivery server cannot read. It is a fault on Coho's side, not in the request.
- [`ASSETS_UNAVAILABLE`](https://coho-cms.com/errors/assets-unavailable/index.html.md): Assets unavailable. This deployment of Coho has no asset storage configured. Nothing was written.
- [`ASSET_TOO_LARGE`](https://coho-cms.com/errors/asset-too-large/index.html.md): File too large. The file is larger than an asset may be on this plan. The detail gives the limit.
- [`ASSET_TYPE_NOT_ACCEPTED`](https://coho-cms.com/errors/asset-type-not-accepted/index.html.md): A field linking this asset does not accept this type of file. You replaced an asset's file with one of a type that a field linking the asset does not allow, such as a PDF in an image field.
- [`ASSET_TYPE_NOT_ALLOWED`](https://coho-cms.com/errors/asset-type-not-allowed/index.html.md): Not a type of file Coho stores. Coho reads a file's type from its bytes, not its name or the type you declared, and this kind of file is not one it stores.
- [`ASSET_UPLOAD_EXPIRED`](https://coho-cms.com/errors/asset-upload-expired/index.html.md): The upload expired before it was finalized. An upload has to be finalized soon after it starts, and this one was not.
- [`ASSET_UPLOAD_INCOMPLETE`](https://coho-cms.com/errors/asset-upload-incomplete/index.html.md): The upload's bytes are not in place. You finalized an upload, but nothing is at its URL yet, or not the bytes the upload named.
- [`AT_OUT_OF_RANGE`](https://coho-cms.com/errors/at-out-of-range/index.html.md): Not a point this ref can be read at. The `at` parameter asks for a point in history the ref has not reached, or below zero, or was sent on a write, which always happens now.
- [`BAD_REQUEST`](https://coho-cms.com/errors/bad-request/index.html.md): Bad request. The request is wrong in a way no more specific code covers. The detail says what.
- [`BILLING_UNAVAILABLE`](https://coho-cms.com/errors/billing-unavailable/index.html.md): Billing unavailable. Coho could not reach its payment provider. Nothing changed.
- [`BRANCH_NOT_WRITABLE`](https://coho-cms.com/errors/branch-not-writable/index.html.md): Branch is not writable. The ref you wrote to is a tag, or an environment that serves one, and tags never change.
- [`BRANCH_PROTECTED`](https://coho-cms.com/errors/branch-protected/index.html.md): Branch protected. The project protects this version branch from direct writes, and you are not someone it lets bypass that.
- [`BRANCH_TOO_DEEP`](https://coho-cms.com/errors/branch-too-deep/index.html.md): Branch depth exceeded. The new branch would sit more than five levels deep, counting the project's version branch.
- [`CANNOT_BRANCH_FROM`](https://coho-cms.com/errors/cannot-branch-from/index.html.md): Cannot branch from this ref. The ref cannot be branched from or tagged as asked: an environment that points at nothing, a tag branched from with `at`, a feature branch tagged, or a tag tagged again.
- [`CANNOT_MERGE`](https://coho-cms.com/errors/cannot-merge/index.html.md): These refs cannot be merged. The source and target are the same branch, or share no history to merge from.
- [`CELL_UNAVAILABLE`](https://coho-cms.com/errors/cell-unavailable/index.html.md): Cell unavailable. The servers that hold this project's data could not be reached. Nothing was written.
- [`CSRF_REJECTED`](https://coho-cms.com/errors/csrf-rejected/index.html.md): Missing or wrong CSRF token. A request made with the portal's session cookie did not carry the session's CSRF token.
- [`DESTRUCTIVE_SCHEMA_CHANGE`](https://coho-cms.com/errors/destructive-schema-change/index.html.md): Destructive schema change. The change could break entries that exist: removing a field, adding a required one or making one required, or turning off localization, while the type, its subtypes, or the types holding it as a component have entries.
- [`DOMAIN_NOT_ALLOWED`](https://coho-cms.com/errors/domain-not-allowed/index.html.md): Email domain not allowed. The organization only lets in people whose email address is at one of its allowed domains, and this address is not.
- [`DUPLICATE_VALUE`](https://coho-cms.com/errors/duplicate-value/index.html.md): Value already in use. Another record already has a value that must be unique. The `errors` list names the fields.
- [`EMAIL_NOT_EDITABLE`](https://coho-cms.com/errors/email-not-editable/index.html.md): Email address not editable. Your email address comes from the provider you sign in with, so Coho does not change it.
- [`EMAIL_NOT_VERIFIED`](https://coho-cms.com/errors/email-not-verified/index.html.md): Email address not verified. An invitation can only be accepted by someone signed in with a verified email address.
- [`ENTRY_NOT_FOUND`](https://coho-cms.com/errors/entry-not-found/index.html.md): Entry not found. The ref this environment serves has no entry by that id or slug, or none of the type you asked for.
- [`ENTRY_TOO_LARGE`](https://coho-cms.com/errors/entry-too-large/index.html.md): The entry is larger than an entry may be. The entry, all its locales together, is over 2 MB as stored.
- [`ENVIRONMENT_MOVED`](https://coho-cms.com/errors/environment-moved/index.html.md): The environment moved since you read it. Someone else promoted to this environment after you read it, so your change would undo theirs without anyone seeing it.
- [`FIELD_CONFLICT`](https://coho-cms.com/errors/field-conflict/index.html.md): The field comes from two places. A content type gets the same field from two places, such as its parent and a trait, so it is not clear which definition applies.
- [`FIELD_INHERITED`](https://coho-cms.com/errors/field-inherited/index.html.md): The field is inherited. The type declares a field its parent already has, or loosens a rule on a field it inherits.
- [`FORBIDDEN`](https://coho-cms.com/errors/forbidden/index.html.md): Forbidden. You are signed in, but your role in this project or organization does not allow the request.
- [`FREE_ORGANIZATION_HELD`](https://coho-cms.com/errors/free-organization-held/index.html.md): Free organization already held. A person may own one organization on the free plan, and the person who would own this one already does.
- [`ID_TAKEN`](https://coho-cms.com/errors/id-taken/index.html.md): Id already taken. The id you chose already names a type, trait, or asset, or an entry of another type on this branch. Two requests creating the same thing at once can also meet it.
- [`IMG_PARAM_INVALID`](https://coho-cms.com/errors/img-param-invalid/index.html.md): Invalid image parameter. A transform parameter is out of range, unknown, or not written in its normal form. Coho asks for one spelling of each transform so that one image is cached once. The `parameter` member names it.
- [`IMG_TOO_LARGE`](https://coho-cms.com/errors/img-too-large/index.html.md): Image too large. The source has more pixels than can be transformed, or the result would be too large to serve.
- [`IMG_UNSUPPORTED_SOURCE`](https://coho-cms.com/errors/img-unsupported-source/index.html.md): Not a transformable image. The asset is not an image Coho can transform, such as a PDF or an SVG.
- [`INSUFFICIENT_SCOPE`](https://coho-cms.com/errors/insufficient-scope/index.html.md): Insufficient scope. The token was granted fewer scopes than the request needs. An app you connected through MCP holds only the scopes you approved.
- [`INTERNAL`](https://coho-cms.com/errors/internal/index.html.md): Internal error. Something failed on Coho's side. It is not a fault in the request.
- [`INTERNAL_NAME_CONFLICT`](https://coho-cms.com/errors/internal-name-conflict/index.html.md): Internal name already in use. Another entry in the same type family on this ref (the type, its parent, or its subtypes) already has that internal name (`_name`). For a type, another type has it.
- [`INVALID`](https://coho-cms.com/errors/invalid/index.html.md): Invalid. A request about an organization, its people, or your user is malformed. The detail says what.
- [`INVALID_BRANCH_NAME`](https://coho-cms.com/errors/invalid-branch-name/index.html.md): Not a valid branch name. Coho's branch names say what kind of branch each is: a version branch such as `v1.2.x`, or a working branch under a prefix such as `feature/`. This name says neither, or contradicts the `kind` you sent.
- [`INVALID_BRANCH_POINT`](https://coho-cms.com/errors/invalid-branch-point/index.html.md): Not a point this project has reached. The point you asked to branch from is past the head of the ref, or not in its history.
- [`INVALID_ID`](https://coho-cms.com/errors/invalid-id/index.html.md): Invalid id. An id in the path or body is not in the form Coho's ids take, usually a UUID.
- [`INVALID_PROMOTION_TARGET`](https://coho-cms.com/errors/invalid-promotion-target/index.html.md): Not a valid target for this tier. The ref does not exist, or is not the kind the environment's tier serves: snapshot environments serve tags, and live ones follow branches.
- [`INVALID_QUERY`](https://coho-cms.com/errors/invalid-query/index.html.md): Invalid query. A query parameter or a GraphQL query is not one the delivery API understands. The detail says which part.
- [`INVALID_SLUG`](https://coho-cms.com/errors/invalid-slug/index.html.md): Invalid slug. The slug is not in the form it takes: an entry's is lowercase letters, digits, and hyphens; a type's or trait's is camelCase starting with a letter, such as `blogPost`.
- [`INVALID_TAG_POINT`](https://coho-cms.com/errors/invalid-tag-point/index.html.md): Not a point on the branch being tagged. The point you asked to tag is not in the history of the branch you named.
- [`INVITATION_ACCEPTED`](https://coho-cms.com/errors/invitation-accepted/index.html.md): Invitation already accepted. The invitation was accepted already, so it cannot be changed or revoked.
- [`INVITATION_EMAIL_MISMATCH`](https://coho-cms.com/errors/invitation-email-mismatch/index.html.md): Not the invited address. You accepted the invitation signed in with a verified address other than the one it was sent to.
- [`INVITATION_EXPIRED`](https://coho-cms.com/errors/invitation-expired/index.html.md): Invitation expired. The invitation was not accepted in time.
- [`INVITATION_REVOKED`](https://coho-cms.com/errors/invitation-revoked/index.html.md): Invitation revoked. An admin withdrew the invitation, or, when revoking, it was revoked already.
- [`INVITATION_USED`](https://coho-cms.com/errors/invitation-used/index.html.md): Invitation already used. Someone has accepted this invitation already. An invitation works once.
- [`KEY_REQUIRED`](https://coho-cms.com/errors/key-required/index.html.md): Delivery key required. This environment serves its content only to callers that present a delivery key, and none was sent.
- [`LAST_ADMIN`](https://coho-cms.com/errors/last-admin/index.html.md): Last admin. The change would leave the organization with no admin.
- [`LAST_LOGIN`](https://coho-cms.com/errors/last-login/index.html.md): Last login. You asked to remove the only way you have of signing in.
- [`LIVE_ENVIRONMENT_LIMIT`](https://coho-cms.com/errors/live-environment-limit/index.html.md): This project's live-environment limit is reached. The project already has as many live environments following a branch below its version branch as it may have: the lower of its plan's limit and its own setting.
- [`LOGIN_REFUSED`](https://coho-cms.com/errors/login-refused/index.html.md): The identity provider refused the login. The sign-in did not complete: the provider refused it, or its code could not be exchanged. It arrives as `?error=` on the portal's sign-in error page, not as a response body.
- [`LOGIN_STATE_INVALID`](https://coho-cms.com/errors/login-state-invalid/index.html.md): This login attempt is unknown, expired, or already used. The sign-in came back to Coho with a state it did not start, too late, or for a second time, as from the browser's back button.
- [`MALFORMED_BODY`](https://coho-cms.com/errors/malformed-body/index.html.md): Malformed request body. The body is not JSON, or not the shape this endpoint takes. The detail says where it went wrong.
- [`MERGE_CONFLICT`](https://coho-cms.com/errors/merge-conflict/index.html.md): The merge needs decisions a human has to make. The two branches changed the same fields differently, and Coho does not choose between them for you. The response lists the conflicts.
- [`MERGE_REFS_MOVED`](https://coho-cms.com/errors/merge-refs-moved/index.html.md): The refs moved since this merge was reviewed. One of the branches changed after you reviewed the merge, so the merge you would make is not the one you saw.
- [`MERGE_RESOLUTION_REJECTED`](https://coho-cms.com/errors/merge-resolution-rejected/index.html.md): A resolution does not apply to this merge. A resolution you sent names a conflict this merge does not have, so it was worked out from a different diff.
- [`MFA_CODE_WRONG`](https://coho-cms.com/errors/mfa-code-wrong/index.html.md): That code did not match. The authenticator code was wrong or had expired.
- [`MFA_TOO_MANY`](https://coho-cms.com/errors/mfa-too-many/index.html.md): Too many attempts. Too many wrong authenticator codes in a short time.
- [`MFA_UNAVAILABLE`](https://coho-cms.com/errors/mfa-unavailable/index.html.md): Authenticator enrolment is not available here. This deployment of Coho is not set up for authenticator apps.
- [`NOT_AN_ENVIRONMENT`](https://coho-cms.com/errors/not-an-environment/index.html.md): Only environments can be repointed. You asked to point a ref at another one, and only environments are pointers. A branch or tag is content.
- [`NOT_AWAITING_PAYMENT`](https://coho-cms.com/errors/not-awaiting-payment/index.html.md): Not awaiting payment. You tried to complete a checkout for an organization that has no payment pending.
- [`NOT_A_MEMBER`](https://coho-cms.com/errors/not-a-member/index.html.md): Not a member. The person you named is not a member of this organization.
- [`NOT_FOUND`](https://coho-cms.com/errors/not-found/index.html.md): Not found. Nothing exists at this path, or it exists and you may not see it. Coho gives the same answer for both, so it does not say what exists.
- [`OWNER_ONLY`](https://coho-cms.com/errors/owner-only/index.html.md): Only the owner can do this. Closing an organization, and handing it to another owner, are for its owner alone.
- [`OWNER_REQUIRED`](https://coho-cms.com/errors/owner-required/index.html.md): Owner required. The change would leave the organization without an owner.
- [`PASSWORD_NOT_ALLOWED`](https://coho-cms.com/errors/password-not-allowed/index.html.md): That password is not allowed. The new password fails the password policy, was used recently, or is your current one.
- [`PASSWORD_TOO_MANY`](https://coho-cms.com/errors/password-too-many/index.html.md): Too many attempts. Too many attempts to change the password in a short time.
- [`PASSWORD_UNAVAILABLE`](https://coho-cms.com/errors/password-unavailable/index.html.md): Changing a password is not available here. This deployment of Coho is not set up to change passwords.
- [`PASSWORD_WRONG`](https://coho-cms.com/errors/password-wrong/index.html.md): That is not your current password. The current password you typed was wrong, so the new one was not set.
- [`PATH_INVALID`](https://coho-cms.com/errors/path-invalid/index.html.md): Invalid path. A segment of the path is `.`, `..`, or holds a slash, so it never reached a route.
- [`PAYMENT_FAILED`](https://coho-cms.com/errors/payment-failed/index.html.md): Payment failed. The payment was refused as it was made. Nothing is on hold.
- [`PAYMENT_PENDING`](https://coho-cms.com/errors/payment-pending/index.html.md): Payment pending. You chose a paid plan for a new organization while another of yours still waits for its first payment.
- [`PAYMENT_REQUIRED`](https://coho-cms.com/errors/payment-required/index.html.md): Payment required. The plan you chose needs a payment method, and the organization has none.
- [`PIN_LIMIT`](https://coho-cms.com/errors/pin-limit/index.html.md): Too many pinned entries. Each person can pin up to twenty entries in a project.
- [`PLAN_LIMIT`](https://coho-cms.com/errors/plan-limit/index.html.md): This account's plan does not allow that. The organization's plan does not allow this, or it is past one of its plan's caps. Nothing you can change in the request fixes it, and the detail says which limit it is and, for a cap, when it resets.
- [`PLAN_NOT_SELF_SERVE`](https://coho-cms.com/errors/plan-not-self-serve/index.html.md): Plan not self-serve. This plan is arranged with Coho rather than chosen in the portal.
- [`POOL_UNAVAILABLE`](https://coho-cms.com/errors/pool-unavailable/index.html.md): Pool unavailable. The servers that deliver this project's content are not configured here, or too many GraphQL queries are running at once.
- [`PRECONDITION_REQUIRED`](https://coho-cms.com/errors/precondition-required/index.html.md): Precondition required. Updating or deleting an entry, type, trait, or asset, and replacing an asset's file, must say which version it changes, so that one person's write never silently overwrites another's.
- [`PROJECTS_REMAIN`](https://coho-cms.com/errors/projects-remain/index.html.md): Projects remain. The organization still has projects, so it cannot be closed.
- [`PROJECT_ARCHIVED`](https://coho-cms.com/errors/project-archived/index.html.md): Project is archived. The project is archived. It can be read, but not written to.
- [`PROJECT_NAME_TAKEN`](https://coho-cms.com/errors/project-name-taken/index.html.md): Another project in this account already has that name. Project names are unique within an organization, ignoring case, including projects you cannot see.
- [`PROJECT_NOT_ARCHIVED`](https://coho-cms.com/errors/project-not-archived/index.html.md): Project is not archived. Only an archived project can be deleted.
- [`PROJECT_NOT_FOUND`](https://coho-cms.com/errors/project-not-found/index.html.md): Not found. No project by this id is reached by the key or token you sent. Coho gives the same answer when the project does not exist, so it does not say which projects exist.
- [`PROVIDER_UNAVAILABLE`](https://coho-cms.com/errors/provider-unavailable/index.html.md): Provider unavailable. The sign-in provider could not be reached, so nothing was changed.
- [`RATE_LIMITED`](https://coho-cms.com/errors/rate-limited/index.html.md): Too many requests. The token or delivery key sent more requests than its plan allows in a short time.
- [`REF_NAME_TAKEN`](https://coho-cms.com/errors/ref-name-taken/index.html.md): Ref name already in use. The project already has a branch, tag, or environment by that name.
- [`REF_NOT_FOUND`](https://coho-cms.com/errors/ref-not-found/index.html.md): Ref not found. The project has no branch, tag, or environment by that name. On the delivery API it also means the ref is not one delivery serves: a branch, a live environment such as `dev`, an environment that points at nothing, or a tag with no published snapshot.
- [`RENEWAL_PAYMENT_FAILED`](https://coho-cms.com/errors/renewal-payment-failed/index.html.md): Payment failed. The organization's renewal did not pay, and it is on a payment hold: content can be read, but not written.
- [`REQUEST_TOO_LARGE`](https://coho-cms.com/errors/request-too-large/index.html.md): Request too large. The request body, usually a GraphQL query, is larger than the delivery API accepts.
- [`RESOLUTION_LIMIT`](https://coho-cms.com/errors/resolution-limit/index.html.md): Resolution limit. The read would resolve more than 2,000 linked entries or 8 MB in one request.
- [`ROUTE_NOT_FOUND`](https://coho-cms.com/errors/route-not-found/index.html.md): No such endpoint. No endpoint matches this path and method.
- [`SCHEMA_INVALID`](https://coho-cms.com/errors/schema-invalid/index.html.md): Invalid type definition. The content type's definition is not valid: a field of an unknown type, a rule that does not apply to it, or a missing required part. The detail says what.
- [`SIGNUP_DOMAIN_NOT_ALLOWED`](https://coho-cms.com/errors/signup-domain-not-allowed/index.html.md): Sign-up is limited to approved email domains. Sign-up on this deployment of Coho is open only to email addresses at approved domains.
- [`SIGNUP_INCOMPLETE`](https://coho-cms.com/errors/signup-incomplete/index.html.md): The sign-up did not name the new organization. You signed in with an identity you already had, and the sign-up did not say what the new organization is called. It arrives as `?error=` on the portal's sign-in error page, not as a response body.
- [`SINGLETON_BLOCKED`](https://coho-cms.com/errors/singleton-blocked/index.html.md): The type cannot be a singleton on this ref. A singleton type has one entry, under its own slug, and this ref holds more than that, a subtype, or its one entry under another slug. The detail names what is in the way.
- [`SLUG_CONFLICT`](https://coho-cms.com/errors/slug-conflict/index.html.md): Slug already in use. Something else on this ref already has that slug: an entry of any type, a type, a trait, or an asset.
- [`SNAPSHOT_NOT_READY`](https://coho-cms.com/errors/snapshot-not-ready/index.html.md): The target tag's snapshot is not ready. The snapshot the delivery API serves from this tag is not ready: still building, evicted, failed, or cancelled. `state` says which. Exporting a tag meets it too.
- [`TAG_CONTENT_INVALID`](https://coho-cms.com/errors/tag-content-invalid/index.html.md): Entries at the tag point fail validation. You asked for the tag's entries to be checked first, and some do not match their content types. No tag was made. `invalidEntries` names the first hundred, and `entryCount` says how many.
- [`TIER_ID_TAKEN`](https://coho-cms.com/errors/tier-id-taken/index.html.md): Tier id already in use. The project already has a tier with that id.
- [`TIER_NOT_EMPTY`](https://coho-cms.com/errors/tier-not-empty/index.html.md): A tier holding environments cannot be deleted. The tier still has environments.
- [`TIER_NOT_FOUND`](https://coho-cms.com/errors/tier-not-found/index.html.md): No such tier in this project. The tier the request names does not exist in this project.
- [`TOKEN_NOT_ALLOWED`](https://coho-cms.com/errors/token-not-allowed/index.html.md): Project tokens cannot do this. A project token reaches only its own project's content, and this request is about something else, such as an organization's people or billing.
- [`TRAIT_IN_USE`](https://coho-cms.com/errors/trait-in-use/index.html.md): Types still take the trait. Content types still take this trait, so it cannot be deleted.
- [`TYPE_ABSTRACT`](https://coho-cms.com/errors/type-abstract/index.html.md): The content type is abstract. The type exists to be inherited from. Only the types that extend it take entries.
- [`TYPE_IN_USE`](https://coho-cms.com/errors/type-in-use/index.html.md): Content type still has entries. The content type has entries on this ref, subtypes, or repeaters holding it as a component, so it cannot be deleted or made abstract.
- [`TYPE_SLUG_FIXED`](https://coho-cms.com/errors/type-slug-fixed/index.html.md): A type's slug cannot change. A content type's slug is how its entries, generated code, and queries refer to it, so it never changes.
- [`UNAUTHENTICATED`](https://coho-cms.com/errors/unauthenticated/index.html.md): Not authenticated. No credential was sent, or the one sent is unknown, expired, or revoked.
- [`UPSTREAM_TIMEOUT`](https://coho-cms.com/errors/upstream-timeout/index.html.md): A service behind the API took too long to answer. A service behind the management API was reached but did not answer in time. The request may still have finished.
- [`UPSTREAM_UNAVAILABLE`](https://coho-cms.com/errors/upstream-unavailable/index.html.md): A service behind the API could not be reached. A service behind the management API could not be reached. Nothing was sent to it.
- [`USAGE_QUERY_INVALID`](https://coho-cms.com/errors/usage-query-invalid/index.html.md): Usage query invalid. The usage report cannot answer this range: it is malformed, too long, or asks for hours further back than hours are kept.
- [`USER_SUSPENDED`](https://coho-cms.com/errors/user-suspended/index.html.md): User suspended. Your access to Coho is suspended. No change of role fixes it.
- [`VALIDATION_FAILED`](https://coho-cms.com/errors/validation-failed/index.html.md): The document does not match its content type. The entry's fields do not match its content type. The `errors` list gives each field and what is wrong with it.
- [`VERSION_CONFLICT`](https://coho-cms.com/errors/version-conflict/index.html.md): Version conflict. The resource changed after you read it: the version in your `If-Match` header is no longer its current one.
- [`WEBHOOKS_UNCONFIGURED`](https://coho-cms.com/errors/webhooks-unconfigured/index.html.md): Webhooks are not configured. This deployment of Coho cannot keep webhook secrets yet, so it does not make webhooks.
- [`WEBHOOK_EVENT_UNKNOWN`](https://coho-cms.com/errors/webhook-event-unknown/index.html.md): No such webhook event. The webhook subscribes to an event Coho does not send.
- [`WEBHOOK_HEADER_RESERVED`](https://coho-cms.com/errors/webhook-header-reserved/index.html.md): The header is Coho's to set. The webhook sets a header that Coho sets on every delivery, such as the signature.
- [`WEBHOOK_INVALID`](https://coho-cms.com/errors/webhook-invalid/index.html.md): The webhook is not valid. The webhook's settings are not valid in a way no more specific code covers. The detail says what.
- [`WEBHOOK_LIMIT_REACHED`](https://coho-cms.com/errors/webhook-limit-reached/index.html.md): Too many webhooks. The project already has as many webhooks as it may have.
- [`WEBHOOK_URL_INVALID`](https://coho-cms.com/errors/webhook-url-invalid/index.html.md): Not a URL a webhook can have. A webhook's URL must be absolute and use `https`, with no credentials in it.
- [`WEBHOOK_URL_REFUSED`](https://coho-cms.com/errors/webhook-url-refused/index.html.md): The URL reaches an address webhooks cannot. The URL's host resolves to a private, loopback, or other address that is not on the public internet.
