Skip to main content
Docs

Backend API errors

An index of Clerk Backend API errors.

Actor Tokens

ActorTokenCannotBeRevoked

Status Code: 400
{
  "shortMessage": "cannot revoke",
  "longMessage": "Actor token cannot be revoked because its status is <status>. Only pending tokens can be revoked.",
  "code": "actor_token_cannot_be_revoked_code"
}
Status Code: 404
{
  "shortMessage": "Identifier not found",
  "longMessage": "No identifier was found with id <identifierID>",
  "code": "resource_not_found"
}
Status Code: 400
{
  "shortMessage": "duplicate allowlist identifier",
  "longMessage": "the identifier <identifier> already exists",
  "code": "duplicate_record"
}

Applications

AccountlessApplicationNotFound

AccountlessApplicationNotFound signifies an error when no application with the given claim token could be found

Status Code: 404
{
  "shortMessage": "Application not found",
  "longMessage": "No application was found with the given claim token.",
  "code": "resource_not_found"
}
Status Code: 401
{
  "shortMessage": "Could not authenticate request.",
  "longMessage": "Could not authenticate request.",
  "code": "could_not_authenticate_request"
}
Status Code: 401
{
  "shortMessage": "Failed to verify internal migration JWT.",
  "longMessage": "Failed to verify internal migration JWT.",
  "code": "failed_to_verify_internal_migration_jwt"
}

IdentificationExists

IdentificationExists signifies an error when the identifier already exists

Status Code: 400
{
  "shortMessage": "already exists",
  "longMessage": "This <identifier> already exists.",
  "code": ""
}
Status Code: 401
{
  "shortMessage": "The provided internal migration JWT is missing the instance ID.",
  "longMessage": "The provided internal migration JWT is missing the instance ID.",
  "code": "internal_migration_jwt_missing_instance_id"
}

InvalidAuthentication

InvalidAuthentication signifies an error when the request is not authenticated

Status Code: 401
{
  "shortMessage": "Invalid authentication",
  "longMessage": "Unable to authenticate the request, you need to supply an active session",
  "code": "authentication_invalid"
}

InvalidAuthorization

InvalidAuthorization signifies an error when the request is not authorized to perform the given operation

Status Code: 403
{
  "shortMessage": "Unauthorized request",
  "longMessage": "You are not authorized to perform this request",
  "code": "authorization_invalid"
}

InvalidAuthorizationHeaderFormat

InvalidAuthorizationHeaderFormat signifies an error when the Authorization header has no proper format.

Status Code: 401
{
  "shortMessage": "Invalid Authorization header format",
  "longMessage": "Invalid Authorization header format. Must be 'Bearer <YOUR_API_KEY>'",
  "code": "authorization_header_format_invalid"
}

InvalidClerkSecretKey

InvalidClerkSecretKey signifies an error when the supplied client key is invalid

Status Code: 401
{
  "shortMessage": "The provided Clerk Secret Key is invalid. Make sure that your Clerk Secret Key is correct.",
  "longMessage": "The provided Clerk Secret Key is invalid. Make sure that your Clerk Secret Key is correct.",
  "code": "clerk_key_invalid"
}

InvalidRequestForEnvironment

InvalidRequestForEnvironment signifies an error when the incoming request is invalid for given environment(s)

Status Code: 400
{
  "shortMessage": "Invalid request for environment",
  "longMessage": "Request only valid for <envTypes> instances.",
  "code": "request_invalid_for_environment"
}

RequestInvalidForInstance

RequestInvalidForInstance signifies an error when the incoming request is invalid for the given instance, due to the auth_config

Status Code: 400
{
  "shortMessage": "Invalid request for instance",
  "longMessage": "This request is not valid for your instance. Modify your instance settings to use this request.",
  "code": "request_invalid_for_instance"
}
Status Code: 403
{
  "shortMessage": "Unsupported country code",
  "longMessage": "Phone numbers from this country (<countryName>) are currently not supported. For more information, please contact <support>.",
  "code": "unsupported_country_code",
  "meta": "{\"formParameter\": {\"Name\": \"param\"}, \"Alpha2\": alpha2, \"CountryCode\": countryCode}"
}
Status Code: 402
{
  "shortMessage": "Unsupported plan features",
  "longMessage": "Some features are not supported in your current plan. Upgrade your subscription to unlock them.",
  "code": "unsupported_subscription_plan_features",
  "meta": {
    "unsupportedfeatures": "unsupportedfeatures"
  }
}
Status Code: 404
{
  "shortMessage": "Identifier not found",
  "longMessage": "No identifier was found with id <identifierID>",
  "code": "resource_not_found"
}
Status Code: 400
{
  "shortMessage": "duplicate blocklist identifier",
  "longMessage": "the identifier <identifier> already exists",
  "code": "duplicate_record"
}

Clients

ClientNotFound

ClientNotFound signifies an error when no client is found with clientID

Status Code: 404
{
  "shortMessage": "Client not found",
  "longMessage": "No client was found with id <clientID>",
  "code": "resource_not_found"
}

ClientNotFoundInRequest

ClientNotFoundInRequest signifies an error when no client is found in an incoming request

Status Code: 400
{
  "shortMessage": "No client found",
  "longMessage": "This request is expecting a client and did not find one",
  "code": "client_not_found"
}

InvalidCookie signifies an error when cookie is invalid

Status Code: 400
{
  "shortMessage": "",
  "code": "cookie_invalid"
}

InvalidRotatingToken

InvalidRotatingToken signifies an error when rotating token does not match the client's rotating token

Status Code: 400
{
  "shortMessage": "",
  "longMessage": "The client's rotating key does not match the given one <token>",
  "code": "cookie_invalid"
}

MissingClaims

MissingClaims signifies an error when token is missing claim

Status Code: 400
{
  "shortMessage": "",
  "longMessage": "The token is missing the following claims: <claims>",
  "code": "cookie_invalid"
}
Status Code: 410
{
  "shortMessage": "endpoint is deprecated and pending removal",
  "longMessage": "endpoint is deprecated and pending removal",
  "code": "operation_deprecated"
}

Domains

DomainUpdateForbidden

DomainUpdateForbidden signifies an error when trying to update an non production instance domain

Status Code: 400
{
  "shortMessage": "Domain update was forbidden",
  "longMessage": "Domain can be only updated for production instances",
  "code": "domain_update_forbidden"
}
Status Code: 422
{
  "shortMessage": "",
  "longMessage": "Clerk Frontend API cannot be accessed through the proxy URL. Make sure your proxy is configured correctly.",
  "code": "invalid_proxy_configuration",
  "meta": {
    "name": "proxy_url"
  }
}
Status Code: 403
{
  "shortMessage": "operation not allowed",
  "longMessage": "This operation is not allowed on a primary domain. Try again with a satellite domain of the instance.",
  "code": "operation_not_allowed_on_primary_domain"
}

PrimaryDomainAlreadyExists

PrimaryDomainAlreadyExists signifies an error when a new domain is added as primary when there is already once in the instance. Currently, we only support a single primary domain per instance.

Status Code: 422
{
  "shortMessage": "primary domain already exists",
  "longMessage": "Currently, only a single primary domain is supported and the current instance already has one. All new domains need to be set a satellites.",
  "code": "primary_domain_already_exists",
  "meta": {
    "name": "is_satellite"
  }
}
Status Code: 403
{
  "shortMessage": "not enabled",
  "longMessage": "This feature is not enabled on this instance",
  "code": "feature_not_enabled"
}
Status Code: 422
{
  "shortMessage": "not an OIDC provider",
  "longMessage": "You are using the legacy OAuth 2.0 provider. Please migrate to the new OIDC compatible provider to use this feature",
  "code": "feature_requires_oidc_provider"
}
Status Code: 422
{
  "shortMessage": "not a Progressive Sign Up instance",
  "longMessage": "<feature> can only be used in instances that migrated to Progressive Sign Up (https://clerk.com/docs/upgrade-guides/progressive-sign-up)",
  "code": "feature_requires_progressive_sign_up"
}

Forms

FormAlreadyExists

FormAlreadyExists signifies an error when given resource already exists

Status Code: 422
{
  "shortMessage": "",
  "code": "form_already_exists",
  "meta": {
    "name": "param"
  }
}

FormAtLeastOneOptionalParameterMissing

FormAtLeastOneOptionalParameterMissing signifies an error when at least one optional parameter must be provided

Status Code: 422
{
  "shortMessage": "at least one parameter must be provided",
  "longMessage": "at least one of `<parameters>` must be provided",
  "code": "form_param_missing",
  "meta": {
    "names": "paramnames"
  }
}
Status Code: 422
{
  "shortMessage": "Date values must not be in the future.",
  "longMessage": "Date values must not be in the future.",
  "code": "form_disallow_future_date",
  "meta": {
    "name": "param"
  }
}

FormDuplicateParameter

FormDuplicateParameter signifies an error when a duplicate parameter is found in a form

Status Code: 422
{
  "shortMessage": "is duplicate",
  "longMessage": "<param> included multiple times. There should only be one.",
  "code": "form_param_duplicate",
  "meta": {
    "name": "param"
  }
}

FormIdentifierExists

FormIdentifierExists signifies an error when given identifier already exists

Status Code: 422
{
  "shortMessage": "",
  "code": "form_identifier_exists",
  "meta": {
    "name": "param"
  }
}
Status Code: 422
{
  "shortMessage": "Date values must be given in Unix millisecond timestamp format.",
  "longMessage": "Date values must be given in Unix millisecond timestamp format.",
  "code": "form_param_invalid_date",
  "meta": {
    "name": "param"
  }
}
Status Code: 422
{
  "shortMessage": "is invalid",
  "longMessage": "<param> must be a valid email address.",
  "code": "form_param_format_invalid",
  "meta": {
    "name": "param"
  }
}
Status Code: 422
{
  "shortMessage": "is invalid",
  "longMessage": "<param> must be a valid email address local part.",
  "code": "form_param_format_invalid",
  "meta": {
    "name": "param"
  }
}

FormInvalidEncodingParameterValue

FormInvalidEncodingParameterValue signifies an error when the given parameter has an invalid encoding

Status Code: 422
{
  "shortMessage": "invalid character encoding",
  "longMessage": "<param> contains invalid UTF-8 characters",
  "code": "form_param_value_invalid",
  "meta": {
    "name": "param"
  }
}
Status Code: 422
{
  "shortMessage": "is invalid",
  "longMessage": "<param> must be either a valid email address, a valid phone number according to E.164 international standard or a valid web3 wallet.",
  "code": "form_param_format_invalid",
  "meta": {
    "name": "param"
  }
}

FormInvalidOrigin

FormInvalidOrigin signifies an error when the given origin is http/https

Status Code: 422
{
  "shortMessage": "is invalid",
  "longMessage": "<param> must be a valid origin such as my-app://localhost, chrome-extension://mnhbilbfebpbokpjjamapdecdgieldho, or capacitor://localhost:3000",
  "code": "form_invalid_origin",
  "meta": {
    "name": "param"
  }
}

FormInvalidParameterFormat

FormInvalidParameterFormat signifies an error when the given parameter has an invalid format

Status Code: 422
{
  "shortMessage": "",
  "code": "form_param_format_invalid",
  "meta": {
    "name": "param"
  }
}
Status Code: 422
{
  "shortMessage": "is invalid",
  "longMessage": "<param> is invalid. Only one of the following parameter values is allowed: <allowedValues>",
  "code": "form_param_value_invalid",
  "meta": {
    "name": "param"
  }
}

FormInvalidParameterValue

FormInvalidParameterValue signifies an error when the given parameter has an invalid value

Status Code: 422
{
  "shortMessage": "is invalid",
  "longMessage": "<value> does not match one of the allowed values for parameter <param>",
  "code": "form_param_value_invalid",
  "meta": {
    "name": "param"
  }
}

FormInvalidParameterValueWithAllowed

FormInvalidParameterValueWithAllowed signifies an error when the given parameter has an invalid value. The difference with FormInvalidParameterValue is that this error also includes the allowed values

Status Code: 422
{
  "shortMessage": "is invalid",
  "longMessage": "<value> does not match the allowed values for parameter <param>. Allowed values: <allowedValues>",
  "code": "form_param_value_invalid",
  "meta": {
    "name": "param"
  }
}

FormInvalidPasswordLengthTooLong

FormInvalidPasswordLengthTooLong signifies an error when the password is invalid because of its length

Status Code: 422
{
  "shortMessage": "",
  "code": "form_password_length_too_long",
  "meta": {
    "name": "param"
  }
}

FormInvalidPasswordLengthTooShort

FormInvalidPasswordLengthTooShort signifies an error when the password is invalid because of its length

Status Code: 422
{
  "shortMessage": "",
  "code": "form_password_length_too_short",
  "meta": {
    "name": "param"
  }
}
Status Code: 422
{
  "shortMessage": "Passwords must contain at least one lowercase character.",
  "longMessage": "Passwords must contain at least one lowercase character.",
  "code": "form_password_no_lowercase",
  "meta": {
    "name": "param"
  }
}
Status Code: 422
{
  "shortMessage": "Passwords must contain at least one number.",
  "longMessage": "Passwords must contain at least one number.",
  "code": "form_password_no_number",
  "meta": {
    "name": "param"
  }
}
Status Code: 422
{
  "shortMessage": "",
  "code": "form_password_no_special_char",
  "meta": {
    "name": "param"
  }
}
Status Code: 422
{
  "shortMessage": "Given password is not strong enough.",
  "longMessage": "Given password is not strong enough.",
  "code": "form_password_not_strong_enough"
}
Status Code: 422
{
  "shortMessage": "Passwords must contain at least one uppercase character.",
  "longMessage": "Passwords must contain at least one uppercase character.",
  "code": "form_password_no_uppercase",
  "meta": {
    "name": "param"
  }
}

FormInvalidPasswordSizeInBytesExceeded

FormInvalidPasswordSizeInBytesExceeded signifies that the size in bytes was exceeded. Note that the maximum character length constraint may fail to detect this case, if multi-byte characters are included in the password. For example, bcrypt limit https://cs.opensource.google/go/x/crypto/+/refs/tags/v0.8.0:bcrypt/bcrypt.go;l=87

Status Code: 422
{
  "shortMessage": "Your password has exceeded the maximum number of bytes allowed, please shorten it or remove some special characters.",
  "longMessage": "Your password has exceeded the maximum number of bytes allowed, please shorten it or remove some special characters.",
  "code": "form_password_size_in_bytes_exceeded",
  "meta": {
    "name": "param"
  }
}
Status Code: 422
{
  "shortMessage": "is invalid",
  "longMessage": "<param> must be a valid phone number according to E.164 international standard.",
  "code": "form_param_format_invalid",
  "meta": {
    "name": "param"
  }
}
Status Code: 422
{
  "shortMessage": "invalid format",
  "longMessage": "<param> must contain a datetime specified in RFC3339 format (e.g. `2022-10-20T10:00:27.645Z`).",
  "code": "form_param_invalid_time",
  "meta": {
    "name": "param"
  }
}

FormInvalidTypeParameter

FormInvalidTypeParameter signifies an error when a form parameter has the wrong type

Status Code: 422
{
  "shortMessage": "is invalid",
  "longMessage": "`<param>` must be a `<paramType>`.",
  "code": "form_param_type_invalid",
  "meta": {
    "name": "param"
  }
}

FormInvalidUsernameCharacter

FormInvalidUsernameCharacter signifies an error when the given username does not match username regex

Status Code: 422
{
  "shortMessage": "",
  "code": "form_username_invalid_character",
  "meta": {
    "name": "param"
  }
}

FormInvalidUsernameLength

FormInvalidUsernameLength signifies an error when the given username does not have required length

Status Code: 422
{
  "shortMessage": "",
  "code": "form_username_invalid_length",
  "meta": {
    "name": "param"
  }
}

FormInvalidUsernameNeedsNonNumberCharCode

FormInvalidUsernameNeedsNonNumberCharCode signifies an error when the given username does not match username regex

Status Code: 422
{
  "shortMessage": "",
  "code": "form_username_needs_non_number_char",
  "meta": {
    "name": "param"
  }
}

FormInvalidWeb3WalletAddress

FormInvalidWeb3Wallet signifies an error when the given web3 wallet address is invalid

Status Code: 422
{
  "shortMessage": "is invalid",
  "longMessage": "<param> must be a valid web3 wallet address that starts with 0x and contains 40 hexadecimal characters.",
  "code": "form_param_format_invalid",
  "meta": {
    "name": "param"
  }
}

FormMetadataInvalidType

FormMetadataInvalidType signifies an error when the given metadata is not a valid key-value object

Status Code: 422
{
  "shortMessage": "",
  "code": "form_param_value_invalid",
  "meta": {
    "name": "param"
  }
}

FormMissingConditionalParameter

FormMissingConditionalParameter signifies an error when required parameter based on conditions is missing

Status Code: 422
{
  "shortMessage": "is missing",
  "longMessage": "`<param>` is required when `<leftCondition>` is `<rightCondition>`.",
  "code": "form_conditional_param_missing"
}

FormMissingConditionalParameterOnExistence

FormMissingConditionalParameterOnExistence signifies an error when parameter is required because of the existence of another

Status Code: 422
{
  "shortMessage": "is missing",
  "longMessage": "`<missingParam>` is required when `<conditionalParam>` is present.",
  "code": "form_conditional_param_missing",
  "meta": {
    "name": "missingparam"
  }
}

FormMissingParameter

FormMissingParameter signifies an error when an expected form parameter is missing

Status Code: 422
{
  "shortMessage": "is missing",
  "longMessage": "<param> must be included.",
  "code": "form_param_missing",
  "meta": {
    "name": "param"
  }
}

FormMissingResource

FormMissingResource signifies an error when the form parameter is referring to a missing resource

Status Code: 422
{
  "shortMessage": "is missing",
  "longMessage": "The resource associated with the supplied <param> was not found.",
  "code": "form_resource_not_found",
  "meta": {
    "name": "param"
  }
}

FormNilParameter

FormNilParameter signifies an error when a nil parameter is found in a form

Status Code: 422
{
  "shortMessage": "",
  "code": "form_param_nil",
  "meta": {
    "name": "param"
  }
}

FormNotAllowedToDisableDefaultSecondFactor

FormNotAllowedToDisableDefaultSecondFactor signifies an error when trying to disable the default flag from a second-factor

Status Code: 422
{
  "shortMessage": "The default second factor method can only be changed by assigning another method as the default.",
  "longMessage": "The default second factor method can only be changed by assigning another method as the default.",
  "code": "form_disable_default_second_factor_not_allowed",
  "meta": {
    "name": "param"
  }
}

FormParameterMaxLengthExceeded

FormParameterMaxLengthExceeded signifies an error when the given param value exceeds the maximum allowed length

Status Code: 422
{
  "shortMessage": "exceeds maximum length",
  "longMessage": "<parameter> should not exceed %d characters.",
  "code": "form_param_max_length_exceeded",
  "meta": {
    "name": "param"
  }
}

FormParameterMinLengthExceeded

FormParameterMinLengthExceeded signifies an error when the given param value is less than the minimum allowed length

Status Code: 422
{
  "shortMessage": "does not reach minimum length",
  "longMessage": "<parameter> must be at least %d characters long.",
  "code": "form_param_min_length_exceeded",
  "meta": {
    "name": "param"
  }
}

FormParameterNotAllowedConditionally

FormParameterNotAllowedConditionally signifies an error when parameter is not allowed based on condition

Status Code: 422
{
  "shortMessage": "is not allowed",
  "longMessage": "`<param>` isn't allowed when `<leftCondition>` is <rightCondition>.",
  "code": "form_conditional_param_disallowed",
  "meta": {
    "name": "param"
  }
}

FormParameterNotAllowedIfAnotherParameterIsPresent

FormParameterNotAllowedIfAnotherParameterIsPresent signifies an error when a parameter is present but is not allowed because another parameter is also present

Status Code: 422
{
  "shortMessage": "is not allowed",
  "longMessage": "`<notAllowedParam>` isn't allowed when `<existingParam>` is present.",
  "code": "form_conditional_param_disallowed",
  "meta": {
    "name": "notallowedparam"
  }
}

FormParameterSizeTooLarge

FormParameterSizeTooLarge signifies an error when a parameter exceeds the max allowed size

Status Code: 422
{
  "shortMessage": "",
  "code": "form_param_exceeds_allowed_size",
  "meta": {
    "name": "param"
  }
}
Status Code: 422
{
  "shortMessage": "Value too large",
  "longMessage": "The value of <param> can't be greater than %d",
  "code": "form_param_value_too_large",
  "meta": {
    "name": "param"
  }
}

FormPasswordDigestInvalid

FormPasswordDigestInvalid signifies an error when the provided password_digest is not valid for the provided password_hasher

Status Code: 422
{
  "shortMessage": "",
  "code": "form_password_digest_invalid_code",
  "meta": {
    "name": "param"
  }
}

FormPasswordValidationFailed

FormPasswordValidationFailed signifies a generic error when the password validation failed

Status Code: 422
{
  "shortMessage": "Incorrect password. Please try again.",
  "longMessage": "Incorrect password. Please try again.",
  "code": "form_password_validation_failed",
  "meta": {
    "name": "param"
  }
}

FormPwnedPassword

FormPwnedPassword signifies an error when the chosen password has been found in the pwned list

Status Code: 422
{
  "shortMessage": "",
  "code": "form_password_pwned",
  "meta": {
    "name": "param"
  }
}

FormUnknownParameter

FormUnknownParameter signifies an error when an unexpected parameter is found in a form

Status Code: 422
{
  "shortMessage": "is unknown",
  "longMessage": "<param> is not a valid parameter for this request.",
  "code": "form_param_unknown",
  "meta": {
    "name": "param"
  }
}

FormValidationFailed

FormValidationFailed converts validator.ValidationErrors to Error.

Status Code: 422
{
  "shortMessage": "is invalid",
  "longMessage": "<sanitizedField> is invalid",
  "code": "form_param_value_invalid",
  "meta": {
    "name": "sanitizedfield"
  }
}

Home Url

HomeURLTaken

HomeURLTaken signifies an error when the root domain of the provided home_url already in use by another application

Status Code: 422
{
  "shortMessage": "Domain already in use",
  "longMessage": "The <homeURL> root domain is already in use by another application.",
  "code": "home_url_taken",
  "meta": {
    "name": "paramname"
  }
}

KnownHostingDomain

KnownHostingDomain signifies an error when the domain extracted from the provided home_url belongs to a known hosting service and cannot be used to deploy production apps

Status Code: 422
{
  "shortMessage": "Known hosting domain",
  "longMessage": "The <domain> domain cannot be used to deploy production apps.",
  "code": "known_hosting_domain",
  "meta": {
    "name": "paramname"
  }
}

ReservedDomain

ReservedDomain signifies an error when the domain extracted from the provided home_url is reserved by Clerk

Status Code: 422
{
  "shortMessage": "Domain reserved by Clerk",
  "longMessage": "The <domain> domain is reserved by Clerk.",
  "code": "reserved_domain",
  "meta": {
    "name": "paramname"
  }
}

ReservedSubdomain

ReservedSubdomain signifies an error when the subdomain extracted from the provided home_url is reserved by Clerk

Status Code: 422
{
  "shortMessage": "Reserved subdomain",
  "longMessage": "The <subdomain> subdomain is reserved by Clerk.",
  "code": "reserved_subdomain",
  "meta": {
    "name": "paramname"
  }
}
Status Code: 400
{
  "shortMessage": "Create failed",
  "longMessage": "Unverified identifications cannot be a second factor",
  "code": "identification_create_second_factor_unverified"
}

IdentificationNotFound

IdentificationNotFound signifies an error when comm is not found

Status Code: 404
{
  "shortMessage": "Resource not found",
  "longMessage": "Resource not found",
  "code": "resource_not_found"
}
Status Code: 400
{
  "shortMessage": "Update failed",
  "longMessage": "You cannot set your last identification as second factor.",
  "code": "identification_update_failed"
}
Status Code: 400
{
  "shortMessage": "Update failed",
  "longMessage": "Cannot update second factor attributes for unverified identification",
  "code": "identification_update_second_factor_unverified"
}
Status Code: 404
{
  "shortMessage": "Image not found",
  "longMessage": "Image not found",
  "code": "image_not_found"
}

RequestWithoutImage

RequestWithoutImage signifies an error when no image was present in the request.

Status Code: 400
{
  "shortMessage": "Image file missing",
  "longMessage": "There was no image file present in the request",
  "code": "form_param_missing"
}
Status Code: 422
{
  "shortMessage": "Enhanced email deliverability mode is only compatible with email codes (OTP)",
  "longMessage": "Ensure that either enhanced email deliverability is disabled or you only have email codes (OTP) enabled.",
  "code": "enhanced_email_deliverability_prohibited"
}

Instances

BreaksInstanceInvariant

BreaksInstanceInvariantCode

Status Code: 400
{
  "shortMessage": "Breaks instance invariant",
  "longMessage": "%v - This invariant is determined by your user settings",
  "code": "breaks_instance_invariant"
}

InstanceNotFound

InstanceNotFound signifies an error when no instance with given instanceID was found

Status Code: 404
{
  "shortMessage": "Instance not found",
  "longMessage": "No instance was found with id <instanceID>",
  "code": "resource_not_found"
}
Status Code: 400
{
  "shortMessage": "Bad request",
  "longMessage": "Bad request",
  "code": "bad_request"
}

QuotaExceeded

403 - quota exceeded

Status Code: 403
{
  "shortMessage": "Quota exceeded",
  "longMessage": "Quota exceeded, you have reached your limit.",
  "code": "quota_exceeded"
}

Unexpected

Unexpected is used for all unexpected errors

Status Code: 500
{
  "shortMessage": "Oops, an unexpected error occurred",
  "longMessage": "There was an internal error on our servers. We've been notified and are working on fixing it.",
  "code": "internal_clerk_error"
}

Invitations

DuplicateInvitations

DuplicateInvitations denotes an error when there are already invitations for the given email addresses

Status Code: 400
{
  "shortMessage": "",
  "longMessage": "There are already pending invitations for the following email addresses: <emails>",
  "code": "duplicate_record",
  "meta": {
    "emailaddresses": "emailaddresses"
  }
}

InvitationAlreadyAccepted

InvitationAlreadyAccepted denotes an error when someone tries to use an invitation which is already accepted.

Status Code: 400
{
  "shortMessage": "Invitation is already accepted, try signing in instead.",
  "longMessage": "Invitation is already accepted, try signing in instead.",
  "code": "invitation_already_accepted"
}

InvitationAlreadyRevoked

InvitationAlreadyRevoked denotes an error when someone tries to revoke an invitation which is already revoked.

Status Code: 400
{
  "shortMessage": "Invitation is already revoked.",
  "longMessage": "Invitation is already revoked.",
  "code": "invitation_already_revoked"
}

InvitationNotFound

InvitationNotFound denotes an error when there is no invitation with the given id

Status Code: 404
{
  "shortMessage": "not found",
  "longMessage": "No invitation was found with id <invitationID>.",
  "code": "resource_not_found"
}

InvitationsNotSupportedInInstance

InvitationsNotSupportedInInstance denotes an error when user is trying to create an invitation on an instance that doesn't support it

Status Code: 400
{
  "shortMessage": "Invitations are only supported on instances that accept email addresses.",
  "longMessage": "Invitations are only supported on instances that accept email addresses.",
  "code": "invitations_not_supported"
}

Jwt Templates

JWTTemplateNotFound

JWTTemplateNotFound signifies an error when a JWT template was not found by the provided attribute

Status Code: 404
{
  "shortMessage": "JWT template not found",
  "longMessage": "No JWT template exists with <attribute>: <val>",
  "code": "resource_not_found"
}

JWTTemplateReservedClaim

JWTTemplateReservedClaim denotes an error when the provided template contains a reserved claim.

Status Code: 400
{
  "shortMessage": "reserved claim used",
  "longMessage": "You can't use the reserved claim: '<claim>'",
  "code": "jwt_template_reserved_claim",
  "meta": {
    "name": "param"
  }
}
Status Code: 403
{
  "shortMessage": "session token template cannot be deleted",
  "longMessage": "This template cannot be deleted because it's a session token template",
  "code": "session_token_jwt_template"
}

Machine Token

MachineTokenReservedClaim

MachineTokenReservedClaim denotes an error when the provided machine token claims object contains a reserved claim.

Status Code: 400
{
  "shortMessage": "reserved claim used",
  "longMessage": "You can't use the reserved claim: '<claim>'",
  "code": "machine_token_reserved_claim",
  "meta": {
    "name": "param"
  }
}
Status Code: 503
{
  "shortMessage": "System under maintenance",
  "longMessage": "We are currently undergoing maintenance and only essential operations are permitted. We will be back shortly.",
  "code": "maintenance_mode"
}
Status Code: 422
{
  "shortMessage": "Missing OAuth access token",
  "longMessage": "OAuth access token is missing",
  "code": "oauth_missing_access_token"
}
Status Code: 422
{
  "shortMessage": "Cannot refresh OAuth access token",
  "longMessage": "The current access token has expired and we cannot refresh it, because the authorization server hasn't provided us with a refresh token",
  "code": "oauth_missing_refresh_token"
}
Status Code: 404
{
  "shortMessage": "OAuth provider not enabled",
  "longMessage": "Single-sign on for this OAuth provider is not enabled in the instance settings.",
  "code": "oauth_token_provider_not_enabled"
}
Status Code: 400
{
  "shortMessage": "Token retrieval failed",
  "longMessage": "Failed to retrieve a new access token from the OAuth provider",
  "code": "oauth_token_retrieval_error"
}

UnsupportedOauthProvider

UnsupportedOauthProvider signifies an error when an instance tries to enable an OAuth external provider which is not supported.

Status Code: 400
{
  "shortMessage": "",
  "longMessage": "%v OAuth is not supported. Please contact us if you think this error should not appear.",
  "code": "oauth_unsupported_provider"
}
Status Code: 400
{
  "shortMessage": "duplicate redirect URI",
  "longMessage": "the redirect URI already exists",
  "code": "duplicate_record"
}
Status Code: 403
{
  "shortMessage": "missing permission",
  "longMessage": "Current user is missing an organization permission.",
  "code": "missing_organization_permission",
  "meta": {
    "permissions": "permissions"
  }
}

NotAMemberInOrganization

403 - Only for organization members Deprecated: This error reveals the existence of an organization to an unauthorized user. Use OrganizationNotFoundOrUnauthorized instead, and ensure other pathways that error when the organization isn't found also use OrganizationNotFoundOrUnauthorized

Status Code: 403
{
  "shortMessage": "not a member",
  "longMessage": "Current user is not a member of the organization. Only organization members can perform this action.",
  "code": "not_a_member_in_organization"
}
Status Code: 422
{
  "shortMessage": "this organization already has an SSO connection",
  "longMessage": "This organization already has an SSO connection.",
  "code": "organization_already_has_sso_connection",
  "meta": {
    "name": "organization_id"
  }
}

OrganizationCreatorNotFound

400 - Creator doesn't exist

Status Code: 400
{
  "shortMessage": "creator not found",
  "longMessage": "No users found with id <userID>.",
  "code": "organization_creator_not_found"
}
Status Code: 422
{
  "shortMessage": "organizaton domain already exists",
  "longMessage": "This domain is already used by another organization.",
  "code": "organization_domain_already_exists",
  "meta": {
    "name": "param"
  }
}
Status Code: 422
{
  "shortMessage": "blocked email domain",
  "longMessage": "This is a blocked email provider domain. Please use a different one.",
  "code": "organization_domain_blocked",
  "meta": {
    "name": "param"
  }
}
Status Code: 422
{
  "shortMessage": "common email domain",
  "longMessage": "This is a common email provider domain. Please use a different one.",
  "code": "organization_domain_common",
  "meta": {
    "name": "param"
  }
}
Status Code: 403
{
  "shortMessage": "organization enrollment mode not enabled",
  "longMessage": "Enrollment mode <enrollmentMode> is not enabled for this instances's organizations.",
  "code": "organization_domain_enrollment_mode_not_enabled"
}
Status Code: 403
{
  "shortMessage": "organization domains quota exceeded",
  "longMessage": "You have reached your limit of %d domains per organization.",
  "code": "organization_domain_quota_exceeded"
}
Status Code: 400
{
  "shortMessage": "organization invitation not unique",
  "longMessage": "Organizations cannot have duplicate pending invitations for an email address.",
  "code": "organization_invitation_not_unique"
}
Status Code: 422
{
  "shortMessage": "missing permissions for creator role",
  "longMessage": "The creator role must contain the following permissions: <permissionKeys>",
  "code": "organization_missing_creator_role_permissions"
}
Status Code: 422
{
  "shortMessage": "invalid organization name",
  "longMessage": "The organization name %q is invalid: <name>",
  "code": "form_param_value_invalid",
  "meta": {
    "name": "name"
  }
}
Status Code: 403
{
  "shortMessage": "access denied",
  "longMessage": "The organizations feature is not enabled for this instance. You can enable it at https://dashboard.clerk.com.",
  "code": "organization_not_enabled_in_instance"
}

OrganizationNotFound

404 - Organization not found WARNING: This is safe to use for endpoints where the caller is authorized to be aware of every organization. But if the endpoint errors if the caller is not authorized on the organization, do not use this, because it leaks the existence of the organization! Use OrganizationNotFoundOrUnauthorized instead.

Status Code: 404
{
  "shortMessage": "not found",
  "longMessage": "Given organization not found.",
  "code": "resource_not_found"
}

OrganizationNotFoundOrUnauthorized

404 - Used for any case

Status Code: 404
{
  "shortMessage": "not found or unauthorized",
  "longMessage": "Given organization not found, or you don't have permission to access the organization",
  "code": "organization_not_found_or_unauthorized"
}
Status Code: 404
{
  "shortMessage": "not found",
  "longMessage": "Organization role not found",
  "code": "resource_not_found",
  "meta": {
    "name": "paramname"
  }
}
Status Code: 400
{
  "shortMessage": "cannot disable organizations",
  "longMessage": "Cannot disable organizations because <reason>.",
  "code": "organizations_disable_not_allowed"
}

Redirect Urls

RedirectURLNotFound

RedirectURLNotFound signifies an error when a RedirectURL was not found by the provided attribute

Status Code: 404
{
  "shortMessage": "Redirect url not found",
  "longMessage": "No RedirectURL exists with <attribute>: <val>",
  "code": "resource_not_found"
}
Status Code: 400
{
  "shortMessage": "",
  "longMessage": "<value> does not match one of the allowed values for parameter <param>",
  "code": "invalid_query_parameter_value"
}

InvalidRequestBody

InvalidRequestBody signifies an error when the body of the request does not conform to the expected format

Status Code: 400
{
  "shortMessage": "Request body invalid",
  "longMessage": "The request body is invalid. Please consult the API documentation for more information.",
  "code": "request_body_invalid"
}
Status Code: 400
{
  "shortMessage": "Malformed publishable key",
  "longMessage": "Ensure the provided publishable key (<key>) is the one displayed in Dashboard",
  "code": "malformed_publishable_key"
}

MalformedRequestParameters

MalformedRequestParameters signifies an error when the request parameters are malformed and result in parsing errors

Status Code: 400
{
  "shortMessage": "Malformed request parameters",
  "longMessage": "The request parameters are malformed and could not be parsed",
  "code": "malformed_request_parameters"
}
Status Code: 400
{
  "shortMessage": "Missing query parameter",
  "longMessage": "Either of the following query parameters must be provided: <parameters>.",
  "code": "missing_query_parameter"
}

UnsupportedContentType

UnsupportedContentType signifies an error when provided content type is unsupported

Status Code: 415
{
  "shortMessage": "Content-Type is unsupported",
  "longMessage": "Content-Type <actual> is unsupported. You should use <expected> instead.",
  "code": "unsupported_content_type"
}
Status Code: 422
{
  "shortMessage": "SAML Connection can't be activated",
  "longMessage": "You have to provide the <fields> before you are able to activate this connection.",
  "code": "saml_connection_cant_be_activated"
}
Status Code: 400
{
  "shortMessage": "Failed to fetch IdP metadata",
  "longMessage": "We failed to fetch the IdP metadata. If the error persists, please provide the IdP configuration data explicitly.",
  "code": "saml_failed_to_fetch_idp_metadata"
}
Status Code: 422
{
  "shortMessage": "Failed to parse IdP metadata",
  "longMessage": "We failed to parse the IdP metadata. If the error persists, please provide the IdP configuration data explicitly.",
  "code": "saml_failed_to_parse_idp_metadata"
}
Status Code: 401
{
  "shortMessage": "expired session token consumed",
  "longMessage": "The provided expired session token was already consumed in a previous refresh request",
  "code": "session_refresh_expired_session_token_consumed"
}
Status Code: 401
{
  "shortMessage": "Invalid expired_token param",
  "longMessage": "The session token provided could not be successfully verified",
  "code": "expired_session_token_invalid"
}
Status Code: 401
{
  "shortMessage": "session token too old",
  "longMessage": "The provided expired session token is too old",
  "code": "session_refresh_expired_session_token_too_old"
}
Status Code: 401
{
  "shortMessage": "session inactive",
  "longMessage": "The provided session is not active",
  "code": "session_refresh_inactive_session"
}
Status Code: 401
{
  "shortMessage": "expired session token ineligible",
  "longMessage": "The provided expired session token is not eligible for refresh",
  "code": "session_refresh_session_token_ineligible"
}
Status Code: 401
{
  "shortMessage": "Request origin is invalid",
  "longMessage": "The request_origin parameter could not be parsed",
  "code": "refresh_request_origin_invalid"
}
Status Code: 401
{
  "shortMessage": "missing 'azp' claim",
  "longMessage": "No 'azp' claim present in the provided expired session token",
  "code": "expired_session_token_missing_azp"
}
Status Code: 401
{
  "shortMessage": "missing 'iat' claim",
  "longMessage": "No 'iat' claim present in the provided expired session token",
  "code": "session_refresh_expired_session_token_missing_iat"
}
Status Code: 401
{
  "shortMessage": "missing 'sid' claim",
  "longMessage": "No 'sid' claim present in the provided expired session token",
  "code": "expired_session_token_missing_sid"
}
Status Code: 401
{
  "shortMessage": "not enabled",
  "longMessage": "This feature is not enabled in your instance",
  "code": "feature_not_enabled"
}
Status Code: 401
{
  "shortMessage": "Request origin does not match azp claim",
  "longMessage": "The request_origin parameter does not match the 'azp' claim of expired_token",
  "code": "refresh_request_origin_azp_mismatch"
}
Status Code: 401
{
  "shortMessage": "Session not found",
  "longMessage": "No session was found with id <sessionID>",
  "code": "session_refresh_session_not_found"
}
Status Code: 401
{
  "shortMessage": "Session ID does not match the 'sid' claim",
  "longMessage": "The 'sid' claim of the provided expired session token does not match the session ID provided in the request path",
  "code": "refresh_sid_mismatch"
}
Status Code: 401
{
  "shortMessage": "Refresh token not found",
  "longMessage": "The provided refresh token was not found",
  "code": "refresh_token_not_found"
}
Status Code: 401
{
  "shortMessage": "user not found",
  "longMessage": "The provided user was not found",
  "code": "session_refresh_user_not_found"
}
Status Code: 401
{
  "shortMessage": "account deprovisioned",
  "longMessage": "Your account is deprovisioned",
  "code": "deprovisioned"
}
Status Code: 400
{
  "shortMessage": "account deprovisioned",
  "longMessage": "The target user's account has been deprovisioned according to their external identity provider",
  "code": "deprovisioned"
}
Status Code: 400
{
  "shortMessage": "Invalid session token",
  "longMessage": "The token provided could not be successfully verified",
  "code": "invalid_session_token"
}

SessionNotFound

SessionNotFound signifies an error when no session with given sessionID was found

Status Code: 404
{
  "shortMessage": "Session not found",
  "longMessage": "No session was found with id <sessionID>",
  "code": "resource_not_found"
}

Sign In

IdentificationClaimed

IdentificationClaimed signifies an error when the requested identification is already claimed by another user

Status Code: 400
{
  "shortMessage": "Identification claimed by another user",
  "longMessage": "One or more identifiers on this sign up have since been connected to a different User. Please sign up again.",
  "code": "identification_claimed"
}
Status Code: 400
{
  "shortMessage": "cannot revoke",
  "longMessage": "Sign in token cannot be revoked because its status is <status>. Only pending tokens can be revoked.",
  "code": "sign_in_token_cannot_be_revoked_code"
}
Status Code: 422
{
  "shortMessage": "is not allowed",
  "longMessage": "`<param>` isn't allowed to be `%v` when sign-up mode is set to <value>",
  "code": "sign_up_mode_restricted_invalid_value",
  "meta": {
    "name": "param"
  }
}
Status Code: 403
{
  "shortMessage": "Sign up cannot be updated",
  "longMessage": "This sign up has reached a terminal state and cannot be updated",
  "code": "sign_up_cannot_be_updated"
}

Signing Keys

SigningKeyNotFound

SigningKeyNotFound signifies an error when no signing key with a given signingKeyID was found

Status Code: 404
{
  "shortMessage": "Signing key not found",
  "longMessage": "No signing key was found with id <signingKeyID>",
  "code": "resource_not_found"
}
Status Code: 422
{
  "shortMessage": "Invalid template body",
  "longMessage": "This template body is invalid and cannot be rendered successfully, please check for syntax errors",
  "code": "invalid_template_body",
  "meta": {
    "name": "body"
  }
}
Status Code: 422
{
  "shortMessage": "",
  "longMessage": "Body should contain the {{<requiredVariable>}} variable",
  "code": "required_variable_missing",
  "meta": {
    "name": "body"
  }
}
Status Code: 400
{
  "shortMessage": "Template body cannot be modified",
  "longMessage": "The body of template with slug <slug> can't be modified",
  "code": "template_body_modification_restricted"
}

TemplateDeletionRestricted

TemplateDeletionRestricted signifies an error when a deletion is attempted for a built-in (non-custom) template

Status Code: 400
{
  "shortMessage": "Template deletion restricted",
  "longMessage": "Template with slug <slug> can't be deleted",
  "code": "template_deletion_restricted"
}

TemplateNotFound

TemplateNotFound signifies an error when no template with given slug was found

Status Code: 404
{
  "shortMessage": "Template not found",
  "longMessage": "No template was found with slug <slug>",
  "code": "resource_not_found"
}

TemplateRevertRestricted

TemplateRevertRestricted signifies an error when a custom template is attempted to be reverted

Status Code: 400
{
  "shortMessage": "Template revert restricted",
  "longMessage": "Template with slug <slug> can't be reverted",
  "code": "template_revert_error"
}

TemplateTypeUnsupported

TemplateTypeUnsupported signifies an error when an invalid template type is provided

Status Code: 400
{
  "shortMessage": "Template type not supported",
  "longMessage": "Template type <templateType> is not supported",
  "code": "template_type_unsupported"
}
Status Code: 422
{
  "shortMessage": "invalid TOTP secret",
  "longMessage": "The TOTP secret is invalid, please provide a valid one base32 encoded",
  "code": "invalid_totp_secret_code"
}
Status Code: 404
{
  "shortMessage": "URL not found",
  "longMessage": "The URL was not found",
  "code": "resource_not_found"
}
Status Code: 403
{
  "shortMessage": "forbidden",
  "longMessage": "Resource forbidden",
  "code": "resource_forbidden"
}
Status Code: 404
{
  "shortMessage": "not found",
  "longMessage": "Resource not found",
  "code": "resource_not_found"
}
Status Code: 422
{
  "shortMessage": "incorrect password",
  "longMessage": "The provided password is not the one the user has set",
  "code": "incorrect_password"
}
Status Code: 422
{
  "shortMessage": "incorrect TOTP",
  "longMessage": "The provided TOTP code is incorrect",
  "code": "totp_incorrect_code"
}
Status Code: 422
{
  "shortMessage": "invalid length",
  "longMessage": "The provided TOTP code must be 6 characters long.",
  "code": "totp_invalid_length"
}
Status Code: 400
{
  "shortMessage": "no password set",
  "longMessage": "This user does not have a password set for their account",
  "code": "no_password_set"
}
Status Code: 400
{
  "shortMessage": "TOTP is disabled",
  "longMessage": "This user does not have TOTP enabled in their account",
  "code": "totp_disabled"
}

UserBanned

UserBanned signifies an error when a user is banned

Status Code: 403
{
  "shortMessage": "User banned",
  "longMessage": "You have been banned. If you think this was by mistake, please contact support.",
  "code": "user_banned"
}
Status Code: 422
{
  "shortMessage": "missing data",
  "longMessage": "%q data doesn't match user requirements set for this instance",
  "code": "form_data_missing",
  "meta": {
    "names": "missingparams"
  }
}

UserNotFound

UserNotFound signifies an error when no user is found with userID

Status Code: 404
{
  "shortMessage": "not found",
  "longMessage": "No user was found with id <userID>",
  "code": "resource_not_found"
}
Status Code: 403
{
  "shortMessage": "user quota exceeded",
  "longMessage": "You have reached your limit of %d users. <maxAllowed>",
  "code": "user_quota_exceeded"
}
Status Code: 400
{
  "shortMessage": "No Svix apps are associated with the current instance.",
  "longMessage": "No Svix apps are associated with the current instance.",
  "code": "svix_app_missing"
}

Feedback

What did you think of this content?

Last updated on