Documentation
Every API

Error codes.

Every code the ProductCraft APIs return, with its status, what it means and what to do. Generated from each API's published OpenAPI spec.

Every failed request returns the same body (see the error body). Branch on code, never on message. The set is open: a new code can appear without notice, so treat one you do not know by its HTTP status. The SDKs raise a class per status and link here from err.docUrl.

handle-errors.ts
import { Trawl, APIError, RateLimitError } from "@productcraft/trawl";

const trawl = new Trawl();

try {
  await trawl.jobs.retrieve("3f0c1a2b-4c5d-4e6f-8a9b-0c1d2e3f4a5b");
} catch (err) {
  if (err instanceof RateLimitError) {
    console.log("retry in", err.retryAfter, "s");
  } else if (err instanceof APIError) {
    // Every API error: status, code, request_id and a link to /docs/errors
    console.log(err.status, err.code, err.requestId, err.docUrl);
  } else {
    throw err;
  }
}

Every API

Codes any ProductCraft API can return: the generic code for each status, plus the shared authentication, idempotency and webhook codes.

The policy grants actions the caller does not hold.

What to do: Grant the action to the key or role, or enable the product on the workspace. (PermissionDeniedError)

An upstream service returned an invalid response.

What to do: Retry with backoff (the SDK does); quote request_id if it persists. (InternalServerError)

The request is malformed (not valid JSON, a bad header, an unusable parameter).

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

The request conflicts with the current state of the resource.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

The caller is authenticated but not allowed to do this.

What to do: Grant the action to the key or role, or enable the product on the workspace. (PermissionDeniedError)

An upstream service did not answer in time; retry.

What to do: Retry with backoff (the SDK does); quote request_id if it persists. (InternalServerError)

GONE410

The resource existed but has been removed for good.

What to do: Read message and errors[] for the detail, then fix the request. (APIError)

A request with the same Idempotency-Key is still running. Retry after Retry-After seconds with the same key to get its response.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

This operation requires an Idempotency-Key header.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

The Idempotency-Key was already used with a different body or route.

What to do: Use a new Idempotency-Key for a different request; reuse a key only for a retry of the same one. (IdempotencyKeyReuseError)

An unexpected server error. Retrying is safe for idempotent requests; quote request_id to support.

What to do: Retry with backoff (the SDK does); quote request_id if it persists. (InternalServerError)

The credentials were not accepted.

What to do: Send a valid, unexpired API key or token, or sign in again. (AuthenticationError)

An MCP (agent) token cannot call this route.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

The MCP token was issued for a different workspace.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

The route does not accept this HTTP method.

What to do: Read message and errors[] for the detail, then fix the request. (APIError)

The route cannot produce the requested content type.

What to do: Read message and errors[] for the detail, then fix the request. (APIError)

The resource does not exist, or belongs to another workspace or app.

What to do: Check the id and that it belongs to this workspace or app. (NotFoundError)

The server does not support this operation.

What to do: Retry with backoff (the SDK does); quote request_id if it persists. (InternalServerError)

A workspace API key cannot call this route.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

The request body is over the size limit.

What to do: Read message and errors[] for the detail, then fix the request. (APIError)

The workspace has no credit or plan for this operation.

What to do: Add credit or upgrade the plan, then retry. (APIError)

A precondition header did not match.

What to do: Read message and errors[] for the detail, then fix the request. (APIError)

The route requires a precondition header.

What to do: Read message and errors[] for the detail, then fix the request. (APIError)

Too many requests; retry after the Retry-After header.

What to do: Wait Retry-After seconds. The SDK retries this for you. (RateLimitError)

The request took too long to arrive.

What to do: Read message and errors[] for the detail, then fix the request. (APIError)

The workspace has not enabled this product.

What to do: Grant the action to the key or role, or enable the product on the workspace. (PermissionDeniedError)

The service or one of its dependencies is temporarily unavailable; retry.

What to do: Retry with backoff (the SDK does); quote request_id if it persists. (InternalServerError)

The session behind this token was signed out or revoked.

What to do: Send a valid, unexpired API key or token, or sign in again. (AuthenticationError)

No credentials, or the token or API key is invalid, expired or revoked.

What to do: Send a valid, unexpired API key or token, or sign in again. (AuthenticationError)

The request is well-formed but cannot be carried out.

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

The request body is not in a content type the route accepts.

What to do: Read message and errors[] for the detail, then fix the request. (APIError)

One or more request fields are invalid; errors lists each field (param, message, code).

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

The workspace has the maximum number of webhook endpoints.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

No webhook endpoint with this id in this workspace.

What to do: Check the id and that it belongs to this workspace or app. (NotFoundError)

The endpoint is not subscribed to this event type.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

No webhook event with this id in this workspace.

What to do: Check the id and that it belongs to this workspace or app. (NotFoundError)

The event type is not one this product sends.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)


Product codes

Codes specific to one or more products. Each lists the APIs that return it.

Account deactivated.

What to do: Grant the action to the key or role, or enable the product on the workspace. (PermissionDeniedError)

An account already exists for this address. Sign in and accept the invite from your account instead.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

An account with this email exists and signs in with a different method.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

Account not found.

What to do: Check the id and that it belongs to this workspace or app. (NotFoundError)

ACCOUNT_SUSPENDED403Auth · Platform

Account suspended.

What to do: Grant the action to the key or role, or enable the product on the workspace. (PermissionDeniedError)

ALREADY_A_MEMBER409Platform

Already a member.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

A custom domain must be a subdomain, not the apex of a zone.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

The app is archived.

What to do: Grant the action to the key or role, or enable the product on the workspace. (PermissionDeniedError)

App has no workspace.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

APP_NOT_FOUNDvariesAuth

App not found.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

The app is suspended; its consumer routes are closed.

What to do: Grant the action to the key or role, or enable the product on the workspace. (PermissionDeniedError)

Uploaded bytes are not an MP4/MOV/WebM container.

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

ASSET_INVALID_SIZEvariesSocial

Video must declare a positive integer byte_size.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

ASSET_INVALID_TYPEvariesSocial

The asset file type is not supported.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

Asset file content does not match declared type.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

ASSET_NOT_OWNEDvariesSocial

The asset belongs to another actor.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

ASSET_NOT_READYvariesSocial

The asset is still processing.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

Only video assets are finalized explicitly.

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

Asset could not be processed.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

The asset is over the size limit.

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

The video could not be transcoded.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

No uploaded file was found for the asset.

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

Pass segment_id, topic_id, or both.

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

Sign-in settings cannot be changed through app metadata. Use PATCH /v1/apps/{appId}/auth-config, or leave the auth key out of metadata.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

Avatar file could not be decoded as an image.

What to do: Read message and errors[] for the detail, then fix the request. (APIError)

Avatar file content does not match declared type.

What to do: Read message and errors[] for the detail, then fix the request. (APIError)

Avatar not found.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

Avatar exceeds 2 MB.

What to do: Read message and errors[] for the detail, then fix the request. (APIError)

The bot-protection token was rejected.

What to do: Grant the action to the key or role, or enable the product on the workspace. (PermissionDeniedError)

The app requires a bot-protection token on sign-up.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

Bot protection could not be checked; retry.

What to do: Retry with backoff (the SDK does); quote request_id if it persists. (InternalServerError)

Nobody in this audience can receive the broadcast.

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

Use a template or inline html, not both.

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

The broadcast cannot be canceled in its current status.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

The broadcast cannot be deleted in its current status; cancel it first.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

The broadcast is no longer a draft (details.status).

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

Broadcast not found.

What to do: Check the id and that it belongs to this workspace or app. (NotFoundError)

The broadcast cannot be sent yet (details.problems).

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

Cannot quote a private post.

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

Cannot quote your own post.

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

Cannot repost a private post.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

CANNOT_REPOST_SELFvariesSocial

Cannot repost your own post.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

A verified domain cannot gain sending or receiving until the new records verify (details.records).

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

COMMENTS_DISABLEDvariesSocial

Comments are turned off for this post.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

Only followers can comment on this post.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

Only actors mentioned in this post can comment.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

A contact with this email already exists.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

The workspace has the maximum number of contacts.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

Contact not found.

What to do: Check the id and that it belongs to this workspace or app. (NotFoundError)

A contact property with this key already exists.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

The workspace has the maximum number of contact properties.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

Contact property not found.

What to do: Check the id and that it belongs to this workspace or app. (NotFoundError)

The request came from an origin that is not allowed for this cookie-authenticated route.

What to do: Grant the action to the key or role, or enable the product on the workspace. (PermissionDeniedError)

This app already has a custom domain; remove it before adding another.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

This app has no active custom domain to test on. Finish its setup first.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

Custom domain not found.

What to do: Check the id and that it belongs to this workspace or app. (NotFoundError)

The custom domain only serves OAuth routes; test sign-in on the app domain instead.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

The date range reaches past the data retention window.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

The date range is wider than allowed.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

The date window is longer than the message log retention.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

The domain has no DKIM key yet.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

DNS_CONFLICTS409Auth · Mail

Some records cannot be written without breaking existing ones; nothing was changed.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

Domain Connect is turned off.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

Domain Connect cannot apply a custom MAIL FROM label.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

Domain Connect needs a sending domain.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

The DNS provider does not support Domain Connect for this domain.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

The domain still has active mailboxes (details.mailboxes).

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

Domain not found in this workspace.

What to do: Check the id and that it belongs to this workspace or app. (NotFoundError)

The From domain's DNS records have been broken for over 72 h, so it no longer sends.

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

The post can no longer be edited.

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

Send either html/text or a template, not both, and at least one of them.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

Email not found in this workspace.

What to do: Check the id and that it belongs to this workspace or app. (NotFoundError)

Verify the account email first.

What to do: Grant the action to the key or role, or enable the product on the workspace. (PermissionDeniedError)

Emailing share links is temporarily unavailable. Create the link without email_to and send it yourself.

What to do: Retry with backoff (the SDK does); quote request_id if it persists. (InternalServerError)

The app is not linked to a workspace, so it cannot send through Mail.

What to do: Read message and errors[] for the detail, then fix the request. (APIError)

Mail is not enabled for the app's workspace.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

ENVOI_NOT_WIREDvariesAuth

Mail client not wired in this deployment.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

No sender address is set for this notification.

What to do: Read message and errors[] for the detail, then fix the request. (APIError)

No Mail template is set for this notification.

What to do: Read message and errors[] for the detail, then fix the request. (APIError)

Custom domains are not available for this workspace yet.

What to do: Grant the action to the key or role, or enable the product on the workspace. (PermissionDeniedError)

The From address is not at this domain.

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

from_domain_not_verified422Mail · Waitlist

The From domain is not an active sending domain of this workspace (details: { fqdn, reason }).

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

That host name is reserved and cannot be used.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

That host name is already used by another app.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

An idempotency_key on a batch row conflicts with the request key.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

A repeat of a key-creating request: the secret is never replayed (details.key_id).

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

Another contact import is running for this workspace.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

Import not found.

What to do: Check the id and that it belongs to this workspace or app. (NotFoundError)

The import file is over the size limit.

What to do: Read message and errors[] for the detail, then fix the request. (APIError)

The token does not grant the permission this route needs.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

At least one capability (sending or receiving) must be enabled.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

A contact property value does not match the property type.

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

The first line must be a header with an "email" column.

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

The cursor is invalid; restart from the first page.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

INVALID_DATEvariesMail

A date is not valid ISO 8601.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

A date filter is not valid ISO 8601.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

The date range is invalid (start after end).

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

The date window is invalid.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

Unsupported expand value.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

INVALID_FORMAT400Auth · Mail

A path or query value is not in the expected format.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

The From address could not be parsed.

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

The host name is not valid; use a name such as auth.example.com.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

An id list is malformed.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

INVALID_IDENTIFIERvariesAuth · Social

An id in the path or query is not a valid UUID.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

Unknown notification kind.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

INVALID_ORDERvariesSocial

The order value is not supported.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

Unsupported DNS provider.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

The search query is invalid.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

The segment rule is invalid (details.problems).

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

The time zone is not a valid IANA name.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

INVALID_ZONE400Auth · Mail

The DNS zone is not one this domain belongs to.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

The invite was sent to a different email address.

What to do: Grant the action to the key or role, or enable the product on the workspace. (PermissionDeniedError)

INVITE_EXHAUSTED410Platform

Invite exhausted.

What to do: Read message and errors[] for the detail, then fix the request. (APIError)

INVITE_EXPIRED410Platform

Invite expired.

What to do: Read message and errors[] for the detail, then fix the request. (APIError)

INVITE_INVALID404Platform

Invite invalid.

What to do: Check the id and that it belongs to this workspace or app. (NotFoundError)

INVITE_NOT_FOUND404Platform

Invite not found.

What to do: Check the id and that it belongs to this workspace or app. (NotFoundError)

INVITE_REVOKED410Platform

Invite revoked.

What to do: Read message and errors[] for the detail, then fix the request. (APIError)

LAST_MEMBER409Platform

The workspace's last member cannot leave; delete the workspace instead.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

The MAIL FROM host already has records that are not ours (details.found).

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

A custom MAIL FROM needs the domain to send.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

A custom header is not allowed, or its value is invalid (details.headers).

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

MAIL_UNREACHABLE503Auth · Waitlist

The Mail service did not answer; try again in a minute.

What to do: Retry with backoff (the SDK does); quote request_id if it persists. (InternalServerError)

You cannot manage a member whose role ranks above yours.

What to do: Grant the action to the key or role, or enable the product on the workspace. (PermissionDeniedError)

no_default_sender422Mail · Waitlist

No from and the workspace has no default sender.

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

NOT_A_MEMBER403, 404Platform

The caller is not a member of this workspace.

What to do: Grant the action to the key or role, or enable the product on the workspace. (PermissionDeniedError)

An admin revoked this OAuth grant.

What to do: Grant the action to the key or role, or enable the product on the workspace. (PermissionDeniedError)

ORIGIN_NOT_ALLOWEDvariesWaitlist

Origin not allowed.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

Only an owner can do this.

What to do: Grant the action to the key or role, or enable the product on the workspace. (PermissionDeniedError)

PAK_EXPIRED409Platform

Pak expired.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

An API key needs a name.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

The API key name is too long.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

PAK_NOT_FOUND404Platform

Pak not found.

What to do: Check the id and that it belongs to this workspace or app. (NotFoundError)

PAK_REVOKED409Platform

Pak revoked.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

The workspace API key belongs to a different workspace.

What to do: Grant the action to the key or role, or enable the product on the workspace. (PermissionDeniedError)

This password has appeared in a known data breach — pick a different one.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

The password reset code is invalid or expired.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

Password is too common — pick something less guessable.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

The post has the maximum number of pinned comments.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

POLICY_INVALID400Platform

The policy document is invalid.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

Policy name taken.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

POLICY_NOT_FOUND404Platform

Policy not found.

What to do: Check the id and that it belongs to this workspace or app. (NotFoundError)

POLL_CLOSED422Social

This poll is closed.

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

PROVIDER_ERROR502Auth · Mail

The DNS provider returned an error.

What to do: Retry with backoff (the SDK does); quote request_id if it persists. (InternalServerError)

The DNS provider token lacks permission to edit this zone.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

The DNS provider rejected the token.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

PROVIDER_UNAVAILABLE502Auth · Mail

The DNS provider is unavailable; try again later.

What to do: Retry with backoff (the SDK does); quote request_id if it persists. (InternalServerError)

The DNS provider has no zone for this domain.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

QUOTE_NOT_ALLOWEDvariesSocial

The author has disabled quoting this post.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

A quote post needs a body.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

A quote post needs source_post_id.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

More than 50 recipients across to, cc and bcc.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

The recipient is suppressed for this workspace or topic (details.reason).

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

region is not the region this deployment sends from (details.available).

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

REPOST_NOT_ALLOWEDvariesSocial

The author has disabled reposting this post.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

The property key is reserved.

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

ROLE_HAS_MEMBERS409Platform

The role still has members; move them first.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

ROLE_IN_USEvariesAuth

Role is in use.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

ROLE_NAME_TAKEN409Platform

Role name taken.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

ROLE_NOT_FOUND404Platform

Role not found.

What to do: Check the id and that it belongs to this workspace or app. (NotFoundError)

System roles (owner, admin, member) cannot be changed or deleted.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

A segment with this name already exists.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

The workspace has the maximum number of segments.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

SEGMENT_NOT_FOUND404, 422Mail

Segment not found.

What to do: Check the id and that it belongs to this workspace or app. (NotFoundError)

Members of a rule segment follow its rule: change the contact or the rule instead.

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

A static segment cannot take a rule: create a rule segment instead.

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

A sender address is required for these notification settings.

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

The address is not on a sending domain of this workspace (details.fqdn).

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

The product is not activated for this workspace.

What to do: Check the id and that it belongs to this workspace or app. (NotFoundError)

SERVICE_UNKNOWN400Platform

No product with this name.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

The sending identity could not be removed from the email provider; retry.

What to do: Retry with backoff (the SDK does); quote request_id if it persists. (InternalServerError)

SESSION_EXPIREDvariesAuth

Session expired.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

This sign-in test link is unknown, already used or expired. Start a new test from the console.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

SLUG_TAKENvariesAuth

The clone needs a slug of its own.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

A slug cannot look like a UUID.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

SMTP username and password must be set together.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

No SMTP override saved for this domain.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

An SMTP password is required.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

SOLE_OWNER409Platform

The workspace's only owner cannot leave or be removed; transfer ownership first.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

source_post_id is only valid on a quote post.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

Recent MFA is required; verify a factor and retry (details.max_age_minutes).

What to do: Grant the action to the key or role, or enable the product on the workspace. (PermissionDeniedError)

The render data does not match the template schema.

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

This template kind (a partial or layout) cannot be sent on its own.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

No template with this name in this workspace.

What to do: Check the id and that it belongs to this workspace or app. (NotFoundError)

The template could not be rendered.

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

The requested expiry is not one of the allowed values (details.allowed).

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

The tenant has the maximum number of active API keys (25); revoke one first.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

Only an active key can be rotated.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

API key not found.

What to do: Check the id and that it belongs to this workspace or app. (NotFoundError)

You cannot rotate a key whose scopes your own tenant role does not hold.

What to do: Grant the action to the key or role, or enable the product on the workspace. (PermissionDeniedError)

Some scopes are not offered by this app.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

Tenant API keys for this app are managed through the app, not directly.

What to do: Grant the action to the key or role, or enable the product on the workspace. (PermissionDeniedError)

Your tenant role cannot manage API keys.

What to do: Grant the action to the key or role, or enable the product on the workspace. (PermissionDeniedError)

Enabling tenant API keys needs at least one grantable scope.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

Tenant API keys are not enabled for this app.

What to do: Grant the action to the key or role, or enable the product on the workspace. (PermissionDeniedError)

A scope name is malformed; scopes look like orders.read (details.scopes).

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

Tenant API keys are suspended for this app.

What to do: Grant the action to the key or role, or enable the product on the workspace. (PermissionDeniedError)

Tenant API keys are suspended for this app; only suspended can be changed.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

manage_roles names a role this app does not have (details.roles).

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

No active tenant on this session. Switch to a tenant first (POST /auth/switch-tenant).

What to do: Grant the action to the key or role, or enable the product on the workspace. (PermissionDeniedError)

You are not a member of the active tenant.

What to do: Grant the action to the key or role, or enable the product on the workspace. (PermissionDeniedError)

The active tenant is not active.

What to do: Grant the action to the key or role, or enable the product on the workspace. (PermissionDeniedError)

tls: enforced is not available yet.

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

TOKEN_EXPIREDvariesAuth

Token expired.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

TOKEN_INVALIDvariesAuth

Token invalid.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

TOKEN_REVOKEDvariesAuth

Token revoked.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

The workspace has the maximum number of active jobs; wait or cancel some.

What to do: Wait Retry-After seconds. The SDK retries this for you. (RateLimitError)

The community has the maximum number of videos uploading or processing.

What to do: Wait Retry-After seconds. The SDK retries this for you. (RateLimitError)

The post has too many attachments.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

Too many attempts; wait before trying again.

What to do: Wait Retry-After seconds. The SDK retries this for you. (RateLimitError)

TOO_MANY_IDS400Social

Too many ids in one request.

What to do: Fix the request: errors[] names each field. Do not retry it unchanged. (BadRequestError)

A topic with this name already exists.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

The workspace has the maximum number of topics.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

TOPIC_NOT_FOUND404, 422Mail

Topic not found.

What to do: Check the id and that it belongs to this workspace or app. (NotFoundError)

Open and click tracking are not available yet.

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

The workspace has no Trawl credits left.

What to do: Read message and errors[] for the detail. Quote request_id if you contact support. (APIError)

The contact property is not defined; create it first.

What to do: The request is valid but not allowed in this state. Change the state or the request. (UnprocessableEntityError)

Username already in use.

What to do: Re-read the current state and decide; IDEMPOTENCY_IN_PROGRESS is retried by the SDK. (ConflictError)

No waitlist with this id or slug in this workspace.

What to do: Check the id and that it belongs to this workspace or app. (NotFoundError)

This route needs a workspace API key.

What to do: Grant the action to the key or role, or enable the product on the workspace. (PermissionDeniedError)

259 codes from 6 APIs. Statuses come from the responses each code is documented on; “varies” means the specs do not tie it to one status yet.