Files
fluxer/fluxer_docs/src/content/docs/http-api/errors.md
T

50 KiB
Raw Blame History

title, description
title description
Errors The error envelope, the status fallback mapping, and both code registries.

A failed request returns a JSON error response. It has a stable code a client matches on and a localised message for a person to read. Every HTTP API and Admin API failure uses this shape. An OAuth2 protocol failure is the one exception.

:::caution[Match on code alone] The message field is rendered from a template, is translated per request, and can change wording without notice. An HTTP status is not enough on its own, because many distinct codes share one status. :::

Selecting the error code

An error response always has code and message. A failure with more to report adds its own members beside those two. Every added member sits at the top level of the response. A rate limit denial adds global and retry_after, a missing scope adds required_scope, and a validation failure adds errors.

:::note[OAuth2 endpoints use a different envelope] An OAuth2 protocol failure raised by the OAuth2 resource answers with the RFC 6749 shape. That body is error and error_description and nothing else, so its values appear in no registry here. :::

Supplementary members

The members a failure adds are fixed by its code, so a client reads only the members documented for the code it matched. errors reports field violations. retry_after states the delay before another attempt is admitted, global distinguishes a global rate limit denial from a route one, required_scope names a missing OAuth2 scope, and has_mfa and methods state the sudo mode proofs an account can supply.

The two IP ban codes have their own members. GLOBAL_IP_BANNED and GLOBAL_IP_TEMPORARILY_BANNED both have ip_address with the normalised client address, appeal_email with the address an appeal is sent to, appeals_supported which is true only for the permanent ban, and ban_kind which is permanent or temporary_24h. expires_at is an ISO 8601 timestamp when the ban records an expiry and null otherwise, including on every permanent ban.

Validation failure codes

Fluxer answers a field-level failure with 400 and a top-level errors array. Each element identifies one failed input field. The validation error object documents the element shape.

A boundary schema validates one of four request targets: the JSON body, the form body, the query string, and the path parameters. A failure on any of them returns the top-level code INVALID_FORM_BODY, and each element has a code drawn from the validation error code registry together with a localised message.

An operation can also report against a named field without the boundary schema. That failure returns INVALID_FORM_BODY as well. Its element has an enumerated code and localised message when the failure declares a registry code. Otherwise it has a fixed English message written at the failure site and no code. Every element code a client observes is a registry value.

Modify current user settings is the one operation that answers such a failure with the top-level code VALIDATION_ERROR instead of INVALID_FORM_BODY. Its trusted domain, age restriction, and synced preferences decisions each report one element with a registry code and a fixed English message.

The path of an element is the dot-joined position of the failed value, so a nested field appears as embeds.0.title. A failure with no field position uses the literal path root. Fluxer produces at most one element for each distinct pair of path and code.

Example

{
  "code": "INVALID_FORM_BODY",
  "message": "Invalid form body.",
  "errors": [
    {
      "path": "embeds.0.title",
      "code": "CONTENT_EXCEEDS_MAX_LENGTH",
      "message": "Text must not exceed 256 characters."
    }
  ]
}

:::note[An empty body reports the missing fields] An empty or whitespace-only body becomes {}, so the response reports the fields the schema then finds missing. A body that does not parse as JSON returns 400 INVALID_FORM_BODY with one element at path body and code INVALID_FORMAT. :::

Fluxer normalises empty values on all four targets before validation runs. An empty string becomes null wherever it appears, including inside an array element. A nested object becomes null when it holds no members, and it becomes null when every one of its members is null after Fluxer has applied the same rule to each of them. The top-level object itself is never replaced, so a request that sends nothing still reaches the schema as an object and fails on the fields the schema requires.

:::caution[An enumerated validation failure answers 400 alone] A validation failure whose elements have enumerated codes answers 400 with its elements in errors, and its top-level code is INVALID_FORM_BODY everywhere except Modify current user settings. Any other status, retry guidance, or response header from the original failure is dropped. :::

Default schema failure codes

A boundary schema constraint can name its own validation code. When it names none, Fluxer maps the failure to one of the codes below by the kind of constraint that failed.

Constraint Code Description
String longer than its maximum CONTENT_EXCEEDS_MAX_LENGTH1 A string value exceeded the maximum length the schema declares
Email format INVALID_EMAIL_ADDRESS A value declared as an email address did not parse as one
UUID format INVALID_SNOWFLAKE A value declared as a UUID did not parse as one
Any other constraint INVALID_FORMAT2 Every constraint kind not listed above

1 A string shorter than its minimum reports INVALID_FORMAT, and so does a length bound on anything other than a string

2 Covers a type, union, enumerated value, unknown key, minimum length, numeric or date bound, multiple, key, element, or custom constraint, a constraint kind the mapping does not recognise, and a constraint that names a code outside the registry

HTTP status fallback codes

A failure that has an HTTP status and no recognised Fluxer error code takes the fallback code its status selects below. An unclassified 401, 413, 422, or 429 falls back to GENERAL_ERROR. An error named by an operation or by one of the registries below keeps that more specific code.

An unrecognised failure returns 500 with INTERNAL_SERVER_ERROR and a generic message that names no detail. A failure that has a registered API code but no status returns 400, except GENERAL_ERROR, which returns 500.

Status Code Description
400 BAD_REQUEST The request was malformed or failed a precondition
403 FORBIDDEN The caller lacks permission for the operation
404 NOT_FOUND1 The target resource does not exist or is not visible
405 METHOD_NOT_ALLOWED The HTTP method is not accepted on the route
409 CONFLICT The request conflicts with the current state of the resource
410 GONE The resource is permanently unavailable
500 INTERNAL_SERVER_ERROR2 An unexpected internal failure occurred
501 NOT_IMPLEMENTED The requested capability is not implemented
502 BAD_GATEWAY An upstream dependency returned an invalid response
503 SERVICE_UNAVAILABLE The service is temporarily unable to handle the request
504 GATEWAY_TIMEOUT An upstream dependency did not respond in time
default3 GENERAL_ERROR Any status without a specific mapping

1 Also the code a request that matches no route receives, so an unrouted path and an unreadable resource are indistinguishable from the body alone

2 Also the code an unrecognised failure receives, with the generic localised message

3 A failure that lands on this row keeps its own status

Client errors as an abuse signal

Every 4xx response to a request that resolved no authenticated user contributes a weighted abuse signal keyed by the client IP identity. A 429 weighs 3, a 401 weighs 0.75, a 403 weighs 0.5, and every other 4xx weighs 0.25. Fluxer records a signal only when the client address is public and not exempt. An IPv4 client is keyed by its exact address and an IPv6 client by its /64. One request records at most one client error signal. A denial produced by an existing IP ban records no signal.

Fluxer records a second signal of weight 1 for a credential that fails to resolve. A request that presents an unrecognised token and is answered 401 contributes both. That signal also records a hash of the credential presented, and Fluxer tracks the number of distinct hashes seen for one IP identity beside the score.

The score and the credential hashes accumulate inside a fixed window, and the window restarts once it elapses. Two triggers fire an automatic ban. The credential trigger fires the first time the count of distinct rejected credentials reaches its threshold. The score trigger fires only after the score has crossed its threshold in three separate windows, which is the default. Both thresholds depend on the address classification, which is datacentre, anonymising, mobile, or residential. An unclassified address takes the residential thresholds. Fluxer never bans a mobile address automatically.

:::caution[An automatic ban answers every request for 24 hours] The window length, both thresholds, and the number of windows the score trigger requires are instance configuration. A tripped ban lasts 24 hours by default. While it holds, Fluxer answers every request from that identity with 403 and the code GLOBAL_IP_TEMPORARILY_BANNED. :::

API error code registry

These codes appear in the top-level code field of an error response, transmitted as the exact JSON string shown. The registry is closed and holds exactly 257 codes. Each entry states the leading sentence of the English source message, without its final full stop. Those messages call a guild a community.

:::note[The rendered message fills in the braced values] A description containing a value in braces is an ICU MessageFormat template. You've reached the maximum of {count, plural, one {# emoji} other {# emojis}} renders as a complete sentence with the applicable limit. :::

:::note[A rendered message can run longer than the registry entry] Several source messages append a further recovery sentence with a template value such as a maximum size, a format list, or a retry delay. A client branches on code and reads the members the operation documents. :::

ACCESS_DENIED

You don't have access to this resource or feature

ACCOUNT_SUSPENDED_PERMANENTLY

This account has been permanently suspended

ACCOUNT_SUSPENDED_TEMPORARILY

This account has been temporarily suspended

ACCOUNT_SUSPICIOUS_ACTIVITY

Your account is locked due to suspicious activity

ACCOUNT_TOO_NEW_FOR_GUILD

Your account is too new to send messages in this community

ACLS_MUST_BE_NON_EMPTY

ACLs must be non-empty

ADMIN_API_KEY_NOT_FOUND

Admin API key wasn't found

AGE_VERIFICATION_ALREADY_VERIFIED

You've already completed age verification

ALREADY_FRIENDS

You're already friends with this user

APPLICATION_NOT_OWNED

You don't own this application

BAD_GATEWAY

Bad gateway

BAD_REQUEST

Bad request

BLUESKY_OAUTH_AUTHORIZATION_FAILED

We couldn't resolve that Bluesky handle

BLUESKY_OAUTH_CALLBACK_FAILED

We couldn't complete the Bluesky connection

BLUESKY_OAUTH_NOT_ENABLED

Bluesky connections are not enabled on this instance

BLUESKY_OAUTH_STATE_INVALID

The authorization request has expired or is invalid

BOTS_CANNOT_CREATE_GUILDS

Bots can't create communities

BOTS_CANNOT_SEND_FRIEND_REQUESTS

Bots can't send friend requests

BOT_ALREADY_IN_GUILD

This bot is already in the community

BOT_IS_PRIVATE

This bot is private

BOT_USER_AUTH_ENDPOINT_ACCESS_DENIED

Bot users can't use auth endpoints

BOT_USER_AUTH_SESSION_CREATION_DENIED

Bot users can't create auth sessions

BOT_USER_GENERATION_FAILED

Bot user generation failed

BOT_USER_NOT_FOUND

Bot user wasn't found

CALL_ALREADY_EXISTS

A call is already in progress in this channel

CANNOT_BLOCK_SYSTEM_USER

You can't block the system user

CANNOT_EDIT_OTHER_USER_MESSAGE

You can't edit another user's message

CANNOT_EXECUTE_ON_DM

This action can't be performed in a DM

CANNOT_MODIFY_SYSTEM_WEBHOOK

You can't edit system messages

CANNOT_REDEEM_PLUTONIUM_WITH_VISIONARY

You can't redeem {premium_tier_name} with Visionary

CANNOT_REPORT_GUILD

You can't report this community

CANNOT_REPORT_OWN_GUILD

You can't report your own community

CANNOT_REPORT_OWN_MESSAGE

You can't report your own message

CANNOT_REPORT_YOURSELF

You can't report yourself

CANNOT_SEND_EMPTY_MESSAGE

You can't send an empty message

CANNOT_SEND_FRIEND_REQUEST_TO_BLOCKED_USER

You can't send a friend request to a blocked user

CANNOT_SEND_FRIEND_REQUEST_TO_SELF

You can't send a friend request to yourself

CANNOT_SEND_MESSAGES_IN_NON_TEXT_CHANNEL

You can't send messages in a non-text channel

CANNOT_SEND_MESSAGES_TO_USER

You can't send messages to this user

CANNOT_SHRINK_RESERVED_SLOTS

You can't shrink reserved slots

CANNOT_TRANSFER_OWNERSHIP_TO_BOT

Community ownership can't be transferred to a bot

CAPTCHA_REQUIRED

Captcha is required

COMMUNICATION_DISABLED

Communication is disabled

CONFLICT

Conflict

CONNECTION_ALREADY_EXISTS

A connection of this type with this identifier already exists

CONNECTION_INITIATION_TOKEN_INVALID

The connection initiation token is invalid or has expired

CONNECTION_INVALID_TYPE

The connection type is not supported

CONNECTION_LIMIT_REACHED

You've reached the maximum number of connections ({limit})

CONNECTION_NOT_FOUND

Unknown connection

CONNECTION_VERIFICATION_FAILED

Connection verification failed

CONTENT_BLOCKED

This content was blocked by safety systems

DELETION_FAILED

We couldn't delete the resource

DIRECT_MESSAGES_DISABLED

Direct messages and friend requests are disabled on this instance

DIRECT_MESSAGE_EMAIL_VERIFICATION_REQUIRED

Email verification is required for this action

DISCOVERY_ALREADY_APPLIED

This community has already applied for discovery

DISCOVERY_APPLICATION_ALREADY_REVIEWED

This discovery application has already been reviewed

DISCOVERY_APPLICATION_NOT_FOUND

Discovery application wasn't found

DISCOVERY_DISABLED

Discovery isn't available on this instance

DISCOVERY_INSUFFICIENT_MEMBERS

This community doesn't meet the minimum member count for discovery

DISCOVERY_NOT_DISCOVERABLE

This community isn't listed in discovery

DISCRIMINATOR_REQUIRED

Discriminator is required

DONATION_AMOUNT_INVALID

Donation amount is invalid

Magic link has expired

Magic link is invalid

Magic link has already been used

EMAIL_SERVICE_NOT_TESTABLE

Email service is temporarily unavailable

EMAIL_VERIFICATION_REQUIRED

Email verification is required for this action

EXPLICIT_CONTENT_CANNOT_BE_SENT

Explicit content can't be sent

FEATURE_NOT_AVAILABLE_SELF_HOSTED

This feature isn't available on self-hosted instances

FEATURE_TEMPORARILY_DISABLED

This feature is temporarily disabled

FILE_SIZE_TOO_LARGE

File size is too large

FORBIDDEN

Forbidden

FRIEND_REQUEST_BLOCKED

User does not accept friend requests at this time

FRIEND_REQUEST_EMAIL_VERIFICATION_REQUIRED

Email verification is required for this action

GATEWAY_TIMEOUT

Gateway timeout

GENERAL_ERROR

Something went wrong

GIFT_CODE_ALREADY_REDEEMED

Gift code is already redeemed

GLOBAL_IP_BANNED

Your IP address {ipAddress} has been permanently blocked from the Fluxer API by platform administrators

GLOBAL_IP_TEMPORARILY_BANNED

Your IP address {ipAddress} has been temporarily blocked from the Fluxer API for 24 hours because of abusive or unusual access patterns

GONE

Gone

GROUP_DM_RECIPIENTS_NOT_ADDABLE

One or more selected users can't be added to this group DM

GUILD_CREATION_EMAIL_VERIFICATION_REQUIRED

Email verification is required for this action

GUILD_EMAIL_VERIFICATION_REQUIRED

Email verification is required for this action

GUILD_PHONE_VERIFICATION_REQUIRED

You need to add a phone number to send messages in this community

GUILD_TEMPLATE_INVALID

The community template data is invalid or malformed

GUILD_VERIFICATION_REQUIRED

Community verification is required

HANDOFF_CODE_EXPIRED

Handoff code expired

HARVEST_EXPIRED

Your data export request has expired

HARVEST_FAILED

Your data export request failed

HARVEST_NOT_READY

Your data export is still being prepared

INSTANCE_POLICY_TRANSITION_NOT_ALLOWED

This instance policy change is not allowed

INTERNAL_SERVER_ERROR

Internal server error

INVALID_ACLS_FORMAT

Invalid ACLs format

INVALID_API_ORIGIN

Invalid API origin

INVALID_AUTH_TOKEN

Invalid or expired authorization token

INVALID_BOT_FLAG

Invalid bot flag

INVALID_CAPTCHA

Invalid captcha

INVALID_CHANNEL_TYPE

Invalid channel type

INVALID_CHANNEL_TYPE_FOR_CALL

Calls can only be made in direct messages or group DMs

INVALID_DSA_REPORT_TARGET

Invalid DSA report target

INVALID_DSA_TICKET

Invalid DSA ticket

INVALID_DSA_VERIFICATION_CODE

Invalid DSA verification code

INVALID_FLAGS_FORMAT

Invalid flags format

INVALID_FORM_BODY

Invalid form body

INVALID_HANDOFF_CODE

Invalid handoff code

INVALID_PERMISSIONS_INTEGER

Permissions must be a valid integer

INVALID_PERMISSIONS_NEGATIVE

Permissions must be non-negative

INVALID_PHONE_NUMBER

Invalid phone number

INVALID_PHONE_VERIFICATION_CODE

Invalid phone verification code

INVALID_REQUEST

Invalid request

INVALID_STREAM_KEY_FORMAT

Invalid stream key format

INVALID_STREAM_THUMBNAIL_PAYLOAD

Invalid stream thumbnail payload

INVALID_SUSPICIOUS_FLAGS_FORMAT

Invalid suspicious flags format

INVALID_SYSTEM_FLAG

Invalid system flag

INVALID_TIMESTAMP

Invalid timestamp

INVALID_TOKEN

Invalid or expired authorization token

INVALID_WEBAUTHN_AUTHENTICATION_COUNTER

Invalid WebAuthn authentication counter

INVALID_WEBAUTHN_CREDENTIAL

Failed to verify WebAuthn credential

INVALID_WEBAUTHN_CREDENTIAL_COUNTER

Invalid WebAuthn credential counter

INVALID_WEBAUTHN_PUBLIC_KEY_FORMAT

Invalid WebAuthn public key format

INVITES_DISABLED

Invites are disabled

IP_AUTHORIZATION_REQUIRED

IP authorization is required

IP_AUTHORIZATION_RESEND_COOLDOWN

IP authorization resend is on cooldown

IP_AUTHORIZATION_RESEND_LIMIT_EXCEEDED

IP authorization resend limit exceeded

IP_BAN_DECLINED

This IP address cannot be added to the blocklist

MAX_APPLICATIONS

You've reached the maximum of {limit, plural, one {# application} other {# applications}}

MAX_BOOKMARKS

You've reached the maximum of {count, plural, one {# bookmark} other {# bookmarks}}

MAX_CATEGORY_CHANNELS

You've reached the maximum of {count, plural, one {# category channel} other {# category channels}}

MAX_EMOJIS

You've reached the maximum of {count, plural, one {# emoji} other {# emojis}}

MAX_FAVORITE_MEMES

You've reached the maximum of {count, plural, one {# favorite meme} other {# favorite memes}}

MAX_FRIENDS

You've reached the maximum of {count, plural, one {# friend} other {# friends}}

MAX_GROUP_DMS

You've reached the maximum of {count, plural, one {# group DM} other {# group DMs}}

MAX_GROUP_DM_RECIPIENTS

You've reached the maximum of {count, plural, one {# group DM recipient} other {# group DM recipients}}

MAX_GUILDS

You've reached the maximum of {count, plural, one {# community} other {# communities}}

MAX_GUILD_CHANNELS

You've reached the maximum of {count, plural, one {# community channel} other {# community channels}}

MAX_GUILD_MEMBERS

You've reached the maximum of {count, plural, one {# community member} other {# community members}}

MAX_GUILD_ROLES

You've reached the maximum of {count, plural, one {# community role} other {# community roles}}

MAX_INVITES

You've reached the maximum of {count, plural, one {# invite} other {# invites}}

MAX_REACTIONS

You've reached the maximum of {count, plural, one {# reaction} other {# reactions}}

MAX_STICKERS

You've reached the maximum of {count, plural, one {# sticker} other {# stickers}}

MAX_WEBHOOKS_PER_CHANNEL

You've reached the maximum of {count, plural, one {# webhook} other {# webhooks}} per channel

MAX_WEBHOOKS_PER_GUILD

You've reached the maximum of {count, plural, one {# webhook} other {# webhooks}} per community

MEDIA_METADATA_ERROR

Media metadata error

METHOD_NOT_ALLOWED

Method not allowed

MFA_EMAIL_VERIFICATION_REQUIRED

Email verification is required for this action

MISSING_ACCESS

You don't have access to this resource or feature

MISSING_ACL

Missing ACL

MISSING_AUTHORIZATION

Missing or invalid authorization header

MISSING_OAUTH_SCOPE

The requested scope isn't supported or you don't have permission to request it

MISSING_PERMISSIONS

You don't have the permissions required to perform this action

NCMEC_ALREADY_SUBMITTED

This content has already been submitted to NCMEC

NCMEC_SUBMISSION_FAILED

We couldn't submit the report to NCMEC

NOT_A_BOT_APPLICATION

This application isn't a bot

NOT_FOUND

Not found

NOT_FRIENDS_WITH_USER

You're not friends with this user

NOT_IMPLEMENTED

Not implemented

NO_ACTIVE_CALL

No active call

NO_ACTIVE_SUBSCRIPTION

No active subscription

NO_PASSKEYS_REGISTERED

No passkeys are registered

NO_PENDING_DELETION

Invalid request

NO_USERS_WITH_FLUXERTAG_EXIST

There are too many users with this username

NSFW_CONTENT_AGE_RESTRICTED

NSFW content is age restricted

PASSKEY_AUTHENTICATION_FAILED

Passkey authentication failed

PHONE_ADD_NOT_ELIGIBLE

You are not eligible to add a phone number to your account

PHONE_ALREADY_USED

Phone number is already in use

PHONE_COUNTRY_NOT_SUPPORTED

We don't send verification texts to this country. Use a mobile number from another country, or email [email protected] and a person will review your account

PHONE_GATE_ESCAPE_UNAVAILABLE

This account cannot postpone the phone verification check

PHONE_INBOUND_VERIFICATION_REQUIRED

This number is verified by texting us instead of us texting you. Start phone verification again to get the code and the number to text

PHONE_LOOKUP_UNAVAILABLE

Our phone number check is down right now, so we stopped before sending your code. This is on us, not your number. Wait a few minutes and try the same number again

PHONE_NUMBER_NOT_IN_SERVICE

Your carrier says this number isn't in service. Check the number and try again, or email [email protected] if it's correct

PHONE_NUMBER_NOT_MOBILE

This isn't a mobile number, so it can't receive our text. Use a mobile number, or email [email protected] if you think that's wrong

PHONE_RATE_LIMIT_EXCEEDED

Phone rate limit exceeded

PHONE_VERIFICATION_NEEDS_REVIEW

We couldn't verify this number automatically. Email [email protected] and a person will review your account

PHONE_VERIFICATION_REQUIRED

Phone verification is required

PREMIUM_PURCHASE_BLOCKED

No active subscription

PREVIEW_MUST_BE_JPEG

Preview must be JPEG

PROCESSING_FAILED

We couldn't process the request

PROFILE_EMAIL_VERIFICATION_REQUIRED

Email verification is required for this action

PURCHASE_EMAIL_VERIFICATION_REQUIRED

Email verification is required for this action

RATE_LIMITED

You're being rate limited

REACTION_EMAIL_VERIFICATION_REQUIRED

Email verification is required for this action

REGISTRATION_CLOSED

Registration is closed on this instance

REGISTRATION_PENDING_APPROVAL

This registration is waiting for admin approval

REGISTRATION_REJECTED

This registration request was rejected

REGISTRATION_URL_INVALID

This registration link is invalid or has expired

REPORT_ALREADY_RESOLVED

Report already resolved

REPORT_BANNED

You've been banned from submitting reports

REPORT_EMAIL_VERIFICATION_REQUIRED

Email verification is required for this action

RESOURCE_LOCKED

This resource is being modified

RESPONSE_VALIDATION_ERROR

Response validation failed: {errors}

SERVICE_UNAVAILABLE

Service unavailable

SESSION_TOKEN_MISMATCH

Session token mismatch

SINGLE_COMMUNITY_CANNOT_CREATE_GUILDS

This instance is a single community, so additional communities cannot be created

SINGLE_COMMUNITY_CANNOT_DELETE

The community for this instance cannot be deleted

SINGLE_COMMUNITY_CANNOT_LEAVE

You cannot leave the community for this instance

SLOWMODE_RATE_LIMITED

Slowmode rate limited

SMS_VERIFICATION_UNAVAILABLE

Service unavailable

SSO_REQUIRED

Invalid request

STREAM_KEY_CHANNEL_MISMATCH

Stream key channel mismatch

STREAM_KEY_SCOPE_MISMATCH

Stream key scope mismatch

STRIPE_ERROR

Payment processing encountered an error

STRIPE_GIFT_REDEMPTION_IN_PROGRESS

Gift code redemption is in progress

STRIPE_INVALID_PRODUCT

Invalid product selection

STRIPE_INVALID_PRODUCT_CONFIGURATION

Invalid product configuration

STRIPE_NO_ACTIVE_SUBSCRIPTION

No active subscription found

STRIPE_NO_PURCHASE_HISTORY

No purchase history found

STRIPE_NO_SUBSCRIPTION

No subscription found

STRIPE_PAYMENT_NOT_AVAILABLE

Payment processing is temporarily unavailable

STRIPE_REFUND_COOLDOWN_ACTIVE

You can self-serve refund once every 30 days

STRIPE_REFUND_OUTSIDE_WINDOW

This purchase is outside the 3-day self-serve refund window

STRIPE_SUBSCRIPTION_ALREADY_CANCELING

Subscription is already set to cancel at period end

STRIPE_SUBSCRIPTION_NOT_CANCELING

Subscription isn't set to cancel

STRIPE_WEBHOOK_NOT_AVAILABLE

Webhook processing isn't available

STRIPE_WEBHOOK_SIGNATURE_INVALID

Stripe webhook signature is invalid

STRIPE_WEBHOOK_SIGNATURE_MISSING

Stripe webhook signature is missing

SUDO_MODE_REQUIRED

Sudo mode is required

TAG_ALREADY_TAKEN

This tag is already taken

TEMPORARY_INVITE_REQUIRES_PRESENCE

Temporary invite requires presence

TEST_HARNESS_DISABLED

Test harness is disabled

TEST_HARNESS_FORBIDDEN

Test harness is forbidden

TWO_FACTOR_REQUIRED

Two-factor authentication is required

TWO_FA_NOT_ENABLED

Two-factor authentication isn't enabled

UNAUTHORIZED

Unauthorized

UNCLAIMED_ACCOUNT_CANNOT_ACCEPT_FRIEND_REQUESTS

You're not friends with this user

UNCLAIMED_ACCOUNT_CANNOT_ADD_REACTIONS

Invalid request

UNCLAIMED_ACCOUNT_CANNOT_CREATE_APPLICATIONS

Invalid request

UNCLAIMED_ACCOUNT_CANNOT_CREATE_GUILDS

You need to complete your account setup before you can create communities

UNCLAIMED_ACCOUNT_CANNOT_JOIN_GROUP_DMS

You can't add yourself to a group DM

UNCLAIMED_ACCOUNT_CANNOT_JOIN_ONE_ON_ONE_VOICE_CALLS

Invalid request

UNCLAIMED_ACCOUNT_CANNOT_JOIN_VOICE_CHANNELS

Invalid request

UNCLAIMED_ACCOUNT_CANNOT_MAKE_PURCHASES

Invalid request

UNCLAIMED_ACCOUNT_CANNOT_SEND_DIRECT_MESSAGES

You can't send messages to this user

UNCLAIMED_ACCOUNT_CANNOT_SEND_FRIEND_REQUESTS

Bots can't send friend requests

UNCLAIMED_ACCOUNT_CANNOT_SEND_MESSAGES

Invalid request

UNCLAIMED_ACCOUNT_CANNOT_SUBMIT_REPORTS

You need to complete your account setup before you can submit reports

UNKNOWN_APPLICATION

Unknown application

UNKNOWN_CHANNEL

Channel wasn't found

UNKNOWN_EMOJI

Unknown emoji

UNKNOWN_FAVORITE_MEME

Unknown favorite meme

UNKNOWN_GIFT_CODE

Unknown gift code

UNKNOWN_GUILD

Community wasn't found

UNKNOWN_HARVEST

Unknown harvest

UNKNOWN_INVITE

Invite wasn't found or is no longer valid

UNKNOWN_MEMBER

Member wasn't found in this community

UNKNOWN_MESSAGE

Message wasn't found

UNKNOWN_REPORT

Unknown report

UNKNOWN_ROLE

Role wasn't found

UNKNOWN_STICKER

Unknown sticker

UNKNOWN_SUSPICIOUS_FLAG

Unknown suspicious flag

UNKNOWN_USER

User wasn't found

UNKNOWN_USER_FLAG

The specified user flag isn't recognized

UNKNOWN_VOICE_REGION

Unknown voice region

UNKNOWN_VOICE_SERVER

Unknown voice server

UNKNOWN_WEBAUTHN_CREDENTIAL

Unknown WebAuthn credential

UNKNOWN_WEBHOOK

Unknown webhook

UPDATE_FAILED

We couldn't update the resource

USERNAME_NOT_AVAILABLE

This username is not available

USER_BANNED_FROM_GUILD

This user is banned from this community

USER_IP_BANNED_FROM_GUILD

This user's IP is banned from this community

USER_NOT_IN_VOICE

This user isn't in voice

USER_OWNS_GUILDS

This user owns communities

VALIDATION_ERROR

Validation failed

VOICE_CHANNEL_FULL

Voice channel is full

WEBAUTHN_CREDENTIAL_LIMIT_REACHED

You've reached the maximum of {count, plural, one {# WebAuthn credential} other {# WebAuthn credentials}}

Validation error code registry

These codes appear in the code field of an element in the top-level errors array on an INVALID_FORM_BODY response. Each names one specific input constraint. A schema failure whose constraint names no code of its own reports one of the default schema failure codes. The registry is closed and holds exactly 236 codes. Each entry states the leading sentence of the English source message, the same way.

ACCENT_COLOR_CHANGED_TOO_MANY_TIMES

You've changed your accent color too often recently

AFK_CHANNEL_MUST_BE_IN_GUILD

AFK channel must be in this community

AFK_CHANNEL_MUST_BE_VOICE

AFK channel must be a voice channel

AGE_RESTRICTED

This sensitive content filter isn't available for your age

ALL_CHANNELS_MUST_BELONG_TO_GUILD

All channels must belong to this community

ANIMATED_AVATARS_REQUIRE_PREMIUM

Animated avatars require Premium

ANIMATED_GUILD_BANNER_REQUIRES_FEATURE

Animated community banner requires ANIMATED_BANNER feature

ATTACHMENTS_NOT_ALLOWED_FOR_MESSAGE

Attachments aren't allowed for this message

ATTACHMENT_FIELDS_REQUIRED

attachment_id, channel_id, message_id, and expires_at are required

ATTACHMENT_IDS_MUST_BE_VALID_INTEGERS

attachment_id, channel_id, and message_id must be valid integers

ATTACHMENT_ID_NOT_FOUND_IN_MESSAGE

Attachment with ID {attachmentId} wasn't found in the message

ATTACHMENT_MUST_BE_IMAGE

Attachment "{filename}" must be an image file (png, jpg, jpeg, webp, or gif)

AT_LEAST_ONE_ENTRY_IS_REQUIRED

At least one entry is required

AT_LEAST_ONE_RECIPIENT_REQUIRED

At least one recipient is required

AVATAR_CHANGED_TOO_MANY_TIMES

You've changed your avatar too often recently

BANNERS_REQUIRE_PREMIUM

Banners require Premium

BANNER_CHANGED_TOO_MANY_TIMES

You've changed your banner too often recently

BASE64_LENGTH_INVALID

Base64 string length must be between {min} and {maxLength} characters

BIO_CHANGED_TOO_MANY_TIMES

You've changed your bio too often recently

BOT_DISCRIMINATOR_CANNOT_BE_CHANGED

Bot discriminator can't be changed

BOT_SEARCH_SCOPE_UNAVAILABLE

Bots can only search within a single community or channel

BUCKET_IS_REQUIRED

bucket is required

CANNOT_ADD_YOURSELF_TO_GROUP_DM

You can't add yourself to a group DM

CANNOT_DELETE_MORE_THAN_100_MESSAGES

You can't delete more than {max, plural, one {# message} other {# messages}} at once

CANNOT_DM_YOURSELF

You can't DM yourself

CANNOT_EDIT_ATTACHMENT_METADATA

Users with MANAGE_MESSAGES can only edit attachment descriptions, not other metadata

CANNOT_LEAVE_GUILD_AS_OWNER

You can't leave a community as the owner

CANNOT_POSITION_CHANNEL_RELATIVE_TO_ITSELF

You can't position a channel relative to itself or its descendants

CANNOT_PRELOAD_MORE_THAN_100_CHANNELS

You can't preload more than {max, plural, one {# channel} other {# channels}} at once

CANNOT_REFERENCE_ATTACHMENTS_WITHOUT_ATTACHMENTS

You can't reference attachments when no attachments are provided

CANNOT_REORDER_EVERYONE_ROLE

You can't reorder the @everyone role

CANNOT_REPLY_TO_SYSTEM_MESSAGE

You can't reply to a system message

CANNOT_SET_HOIST_FOR_EVERYONE_ROLE

You can't set hoist position for the @everyone role

CANNOT_SPECIFY_BOTH_BEFORE_AND_AFTER

You can't specify both before and after

CATEGORIES_CANNOT_HAVE_PARENTS

Categories can't have parents

CATEGORIES_CANNOT_HAVE_PARENT_CHANNEL

Categories can't have a parent channel

CHANGING_DISCRIMINATOR_REQUIRES_PREMIUM

Changing your discriminator requires Premium

CHANNEL_DOES_NOT_EXIST

Channel not found

CHANNEL_ID_IS_REQUIRED

channel_id is required

CHANNEL_MUST_BE_DM_OR_GROUP_DM

Channel must be a DM or a group DM

CHANNEL_MUST_BE_VOICE

Channel must be a voice channel

CHANNEL_NAME_EMPTY_AFTER_NORMALIZATION

Channel name can't be empty after normalization

CHANNEL_NOT_FOUND

Channel not found

COLOR_VALUE_TOO_HIGH

Color value must not exceed 0xffffff

COLOR_VALUE_TOO_LOW

Color value must be at least 0x000000

CONTENT_EXCEEDS_MAX_LENGTH

Text must not exceed {maxLength, plural, one {# character} other {# characters}}

CONTEXT_CHANNEL_OR_GUILD_ID_REQUIRED

A context channel or community ID is required

CUSTOM_EMOJIS_REQUIRE_PREMIUM_OUTSIDE_SOURCE

You can't use custom emojis outside their source communities without Premium

CUSTOM_EMOJI_NOT_FOUND

Custom emoji wasn't found

CUSTOM_STICKERS_IN_DMS_REQUIRE_PREMIUM

You can't use custom stickers in DMs without Premium

CUSTOM_STICKERS_REQUIRE_PREMIUM_OUTSIDE_SOURCE

You can't use custom stickers outside their source communities without Premium

CUSTOM_STICKER_NOT_FOUND

Custom sticker wasn't found

DISCOVERABLE_GUILD_VERIFICATION_LEVEL_TOO_LOW

Discoverable communities must have a verification level of at least Low

DISCRIMINATOR_INVALID_FORMAT

Discriminator must be {min}–{max} digits

DISCRIMINATOR_OUT_OF_RANGE

Discriminator must be between {min} and {max}

DUPLICATE_ATTACHMENT_IDS_NOT_ALLOWED

Duplicate attachment IDs aren't allowed

DUPLICATE_FILE_INDEX

Duplicate file index: {index}

DUPLICATE_RECIPIENTS_NOT_ALLOWED

Duplicate recipients aren't allowed

EMAIL_ALREADY_IN_USE

Email is already in use

EMAIL_DOMAIN_NOT_ALLOWED_FOR_SSO

This email domain isn't allowed for single sign-on

EMAIL_IS_REQUIRED

Email is required

EMAIL_LENGTH_INVALID

Email address must be between {min} and {max} characters

EMAIL_MUST_BE_CHANGED_VIA_TOKEN

Email must be changed via token

EMAIL_TOKEN_EXPIRED

Email token expired

EMBEDS_EXCEED_MAX_CHARACTERS

Embeds must not exceed {maxCharacters, plural, one {# character} other {# characters}} in total

EMBED_INDEX_OUT_OF_BOUNDS

Embed index {embedIndex} is out of bounds (message has {embedCount, plural, one {# embed} other {# embeds}})

EMBED_SPLASH_REQUIRES_FEATURE

Embed splash requires INVITE_SPLASH feature

ENTRANCE_SOUND_DURATION_EXCEEDS_LIMIT

Entrance sounds can be at most {max_ms, number}ms long

ENTRANCE_SOUND_INVALID_FORMAT

Entrance sounds must be MP3, OGG, M4A, or WAV audio

ENTRANCE_SOUND_INVALID_SCOPE

Invalid entrance sound scope

ENTRANCE_SOUND_NAME_LENGTH_INVALID

Entrance sound names must be between 1 and {max, number} characters

ENTRANCE_SOUND_NOT_FOUND

Entrance sound not found

ENTRANCE_SOUND_QUOTA_REACHED

You've reached the limit of {max, number} saved entrance sounds

ENTRANCE_SOUND_SIZE_EXCEEDS_LIMIT

Entrance sounds can be at most {max_bytes, number} bytes

FAILED_TO_FETCH_SSO_USER_INFO

We couldn't fetch your SSO user info

FAILED_TO_PARSE_MULTIPART_FORM_DATA

We couldn't parse the multipart form data

FAILED_TO_PARSE_SSO_USER_INFO

We couldn't read the response from your SSO provider

FAILED_TO_UPLOAD_IMAGE

We couldn't upload the image

FAVORITE_MEME_NAME_REQUIRED

Favorite meme name is required

FAVORITE_MEME_NOT_FOUND

Favorite meme wasn't found

FILENAME_EMPTY_AFTER_NORMALIZATION

Filename can't be empty after normalization

FILENAME_INVALID_CHARACTERS

Filename contains invalid characters

FILENAME_LENGTH_INVALID

Filename must be between {min} and {max} characters

FILE_INDEX_EXCEEDS_MAXIMUM

File index {index} exceeds the maximum allowed index of {maxIndex}

FILE_NOT_FOUND

File not found

FORWARD_MESSAGES_CANNOT_CONTAIN_CONTENT

Forwarded messages can't include content, embeds, attachments, or stickers

FORWARD_REFERENCE_REQUIRES_CHANNEL_AND_MESSAGE

Forward message reference must include channel_id and message_id

GLOBAL_NAME_CANNOT_CONTAIN_RESERVED_TERMS

Display name can't contain "system message"

GLOBAL_NAME_LENGTH_INVALID

Global name must be between {min} and {max} characters

GLOBAL_NAME_RESERVED_VALUE

Global name can't be "everyone" or "here"

GUILD_BANNER_REQUIRES_FEATURE

Community banner requires BANNER feature

GUILD_FEATURE_NOT_TOGGLEABLE

This feature cannot be toggled

GUILD_ID_MUST_MATCH_REFERENCED_MESSAGE

Community ID must match the channel the referenced message was fetched from

GUILD_ID_REQUIRED_FOR_SEARCH_INDEX

Community ID is required for channel message and member search indexes

IMAGE_SIZE_EXCEEDS_LIMIT

Image size exceeds {maxSize} bytes

INTEGER_OUT_OF_INT64_RANGE

Integer value is out of the valid int64 range

INVALID_AUDIT_LOG_REASON

Invalid audit log reason

INVALID_BASE64_FORMAT

The provided value is in an invalid format

INVALID_CHANNEL_ID

Invalid channel ID: {channelId}

INVALID_CODE

Invalid code

INVALID_DATE_OF_BIRTH_FORMAT

Invalid date of birth format

INVALID_EMAIL_ADDRESS

Invalid email address format

INVALID_EMAIL_FORMAT

Invalid email address format

INVALID_EMAIL_LOCAL_PART

Invalid email address format

INVALID_EMAIL_OR_PASSWORD

Invalid email or password

INVALID_EMAIL_TOKEN

Invalid email token

INVALID_FILE_FIELD_NAME

Invalid file field name: {key}

INVALID_FORMAT

The provided value is in an invalid format

INVALID_IMAGE_FORMAT

Invalid image format

INVALID_INTEGER_FORMAT

Invalid integer format

INVALID_ISO_TIMESTAMP

Must be a valid ISO timestamp

INVALID_JSON_IN_PAYLOAD_JSON

Invalid JSON in payload_json

INVALID_MESSAGE_DATA

Invalid message data

INVALID_MFA_CODE

Invalid MFA code

INVALID_OR_EXPIRED_AUTHORIZATION_TICKET

Invalid or expired authorization ticket

INVALID_OR_EXPIRED_AUTHORIZATION_TOKEN

Invalid or expired authorization token

INVALID_OR_EXPIRED_RESET_TOKEN

Invalid or expired password reset token

INVALID_OR_EXPIRED_REVERT_TOKEN

Invalid or expired revert token

INVALID_OR_EXPIRED_SSO_STATE

Invalid or expired SSO state

INVALID_OR_EXPIRED_TICKET

Invalid or expired ticket

INVALID_OR_EXPIRED_VERIFICATION_TOKEN

Invalid or expired verification token

INVALID_OR_RESTRICTED_RTC_REGION

Invalid or restricted RTC region: {region}

INVALID_PARENT_CHANNEL

Invalid parent channel

INVALID_PASSWORD

Invalid email or password

INVALID_PROOF_TOKEN

Invalid proof token

INVALID_ROLE_ID

Invalid role ID: {roleId}

INVALID_RTC_REGION

Invalid RTC region: {region}

INVALID_SNOWFLAKE

Invalid snowflake

INVALID_SNOWFLAKE_FORMAT

Invalid snowflake

INVALID_SSO_AUTHORIZATION_CODE

Invalid SSO authorization code

INVALID_SSO_TOKEN

Invalid SSO token

INVALID_TIMEOUT_VALUE

Invalid timeout value

INVALID_TIMEZONE_IDENTIFIER

Invalid timezone identifier

INVALID_TRUSTED_DOMAINS

The wildcard (*) can't be combined with specific domains

INVALID_URL_FORMAT

Invalid URL format

INVALID_URL_OR_ATTACHMENT_FORMAT

Invalid URL format or attachment reference

INVALID_VERIFICATION_CODE

Invalid verification code

INVITE_SPLASH_REQUIRES_FEATURE

Invite splash requires INVITE_SPLASH feature

MAX_FAVORITE_MEME_TAGS_EXCEEDED

You can only add up to {limit, plural, one {# tag} other {# tags}} per favorite meme

MEDIA_ALREADY_IN_FAVORITE_MEMES

This media is already in your favorite memes

MESSAGES_ARRAY_REQUIRED_AND_NOT_EMPTY

messages array is required and must not be empty

MESSAGES_WITH_SNAPSHOTS_CANNOT_BE_EDITED

Messages with snapshots can't be edited

MESSAGE_HISTORY_CUTOFF_BEFORE_GUILD_CREATION

Message history cutoff can't be before the community was created

MESSAGE_HISTORY_CUTOFF_IN_FUTURE

Message history cutoff can't be in the future

MESSAGE_IDS_CANNOT_BE_EMPTY

message_ids can't be empty

MULTIPLE_FILES_FOR_INDEX_NOT_ALLOWED

Multiple files for index {index} aren't allowed

MUST_AGREE_TO_TOS_AND_PRIVACY_POLICY

You must agree to the Terms of Service and Privacy Policy

MUST_BE_MINIMUM_AGE

You must be at least {minAge, plural, one {# year} other {# years}} old to create an account

MUST_ENABLE_2FA_BEFORE_REQUIRING_FOR_MODS

You must enable 2FA on your account before requiring it for moderators

MUST_HAVE_EMAIL_TO_CHANGE_IT

You must have an email address to change it

MUST_START_SESSION_BEFORE_SENDING

You must start a session before sending messages

NAME_EMPTY_AFTER_NORMALIZATION

Name can't be empty after normalization

NCMEC_ATTACHMENT_MUST_BE_IMAGE_OR_VIDEO

Only image or video attachments can be reported to NCMEC

NEW_EMAIL_MUST_BE_DIFFERENT

New email must be different from your current email

NOT_A_VALID_UNICODE_EMOJI

Not a valid unicode emoji

NO_FILE_FOR_ATTACHMENT

No file was uploaded for attachment with ID {attachmentId}

NO_FILE_FOR_ATTACHMENT_METADATA

No file was uploaded for attachment metadata with ID {attachmentId}

NO_NEW_EMAIL_REQUESTED

No new email was requested

NO_ORIGINAL_EMAIL_ON_RECORD

No original email is on record

NO_UPLOADED_PARTS_TO_FINALIZE

No uploaded parts are available to finalize

NO_VALID_MEDIA_IN_MESSAGE

No valid media was found in the message

ORIGINAL_EMAIL_ALREADY_VERIFIED

Original email is already verified

ORIGINAL_EMAIL_MUST_BE_VERIFIED_FIRST

Original email must be verified first

ORIGINAL_VERIFICATION_NOT_REQUIRED

Original verification isn't required for this flow

PARENT_CHANNEL_NOT_IN_GUILD

Parent channel isn't present in the community

PARENT_MUST_BE_CATEGORY

Parent must be a category

PARSE_AND_USERS_OR_ROLES_CANNOT_BE_USED_TOGETHER

You can't use parse together with allowed_mentions.users or allowed_mentions.roles

PASSWORD_IS_TOO_COMMON

Your password is too common

PASSWORD_LENGTH_INVALID

String length must be between {min} and {max} characters

PASSWORD_NOT_SET

Password isn't set

PHONE_NUMBER_INVALID_FORMAT

Phone number must be in E.164 format (for example, +1234567890)

PRECEDING_CHANNEL_MUST_SHARE_PARENT

Preceding channel must share the same parent as the moved channel

PRECEDING_CHANNEL_NOT_IN_GUILD

Preceding channel isn't present in the community

PRONOUNS_CHANGED_TOO_MANY_TIMES

You've changed your pronouns too often recently

RECIPIENT_IDS_CANNOT_BE_EMPTY

Recipient IDs can't be empty

RECIPIENT_IDS_MUST_BE_STRINGS

Recipient IDs must be strings

RECIPIENT_IDS_MUST_BE_VALID_SNOWFLAKES

Recipient IDs must be valid snowflakes

REFERENCED_ATTACHMENT_NOT_FOUND

Referenced attachment "{filename}" wasn't found in message attachments

ROWS_IS_REQUIRED

rows is required

SESSION_TIMEOUT

Session timed out

SIZE_BYTES_MUST_BE_VALID_INTEGER

size_bytes must be a valid integer

SNOWFLAKE_OUT_OF_RANGE

Invalid snowflake

SSO_IDENTITY_MISMATCH

SSO identity mismatch between id_token and userinfo

SSO_MISCONFIGURED

SSO is misconfigured

SSO_PROVIDER_DID_NOT_RETURN_EMAIL

Your SSO provider didn't return an email address

SSO_TEST_CODE_MISSING_EMAIL

SSO test code is missing the email payload

SSO_UNABLE_TO_ALLOCATE_DISCRIMINATOR

We couldn't allocate a discriminator for your SSO account

STRING_LENGTH_EXACT

String must be exactly {length} characters

STRING_LENGTH_INVALID

String length must be between {min} and {max} characters

SYSTEM_CHANNEL_MUST_BE_IN_GUILD

System channel must be in this community

SYSTEM_CHANNEL_MUST_BE_TEXT

System channel must be a text channel

TAG_ALREADY_TAKEN

This tag is already taken

THIS_VANITY_URL_IS_ALREADY_TAKEN

This vanity URL is already taken

TICKET_ALREADY_COMPLETED

This ticket has already been completed

TIMEOUT_CANNOT_EXCEED_365_DAYS

Timeout can't be longer than {maxDays, plural, one {# day} other {# days}} from now

TOO_LARGE

Synced preferences exceed {max_bytes} bytes

TOO_MANY_EMBEDS

Too many embeds

TOO_MANY_FILES

Too many files

TOO_MANY_USERS_WITH_THIS_USERNAME

There are too many users with this username

TOO_MANY_USERS_WITH_USERNAME_TRY_DIFFERENT

There are too many users with this username

TOTP_NOT_ENABLED

Authenticator app two-factor isn't enabled for this account

UNCLAIMED_ACCOUNTS_CAN_ONLY_SET_EMAIL_VIA_TOKEN

Unclaimed accounts can only set email via token

UNRESOLVED_ATTACHMENT_URL

Unresolved attachment:// URL detected

UPLOADED_ATTACHMENT_NOT_FOUND

Uploaded attachment {filename} wasn't found

URL_LENGTH_INVALID

URL must be between {min} and {max} characters

URL_NOT_PUBLICLY_ROUTABLE

URL must resolve to a publicly routable address

USERNAME_CANNOT_CONTAIN_RESERVED_TERMS

Username can't contain "fluxer" or "system message"

USERNAME_CHANGED_TOO_MANY_TIMES

You've changed your username too often recently

USERNAME_INVALID_CHARACTERS

Username can only contain Latin letters (a-z, A-Z), numbers (0-9), and underscores (_)

USERNAME_LENGTH_INVALID

Username must be between {min} and {max} characters

USERNAME_RESERVED_VALUE

Username can't be "everyone" or "here"

USER_DOES_NOT_HAVE_AN_EMAIL_ADDRESS

This user doesn't have an email address

USER_IS_NOT_BANNED

This user isn't banned

USER_MUST_BE_A_BOT_TO_BE_MARKED_AS_A_SYSTEM_USER

User must be a bot to be marked as a system user

USER_NOT_IN_CHANNEL

This user isn't in the channel

VALUE_MUST_BE_INTEGER_IN_RANGE

The value for {name} must be an integer between {minValue} and {maxValue}

VANITY_URL_CODE_ALREADY_TAKEN

Vanity URL code is already taken

VANITY_URL_CODE_CANNOT_CONTAIN_FLUXER

Vanity URL code can't contain "fluxer"

VANITY_URL_CODE_LENGTH_INVALID

Vanity URL code must be between {min} and {max} characters

VANITY_URL_INVALID_CHARACTERS

Vanity URL can only contain lowercase letters (a-z), digits (0-9), and hyphens (-)

VANITY_URL_REQUIRES_FEATURE

Vanity URL requires VANITY_URL feature

VERIFICATION_CODE_EXPIRED

Verification code has expired

VERIFICATION_CODE_NOT_ISSUED

No verification code has been issued

VISIONARY_REQUIRED_FOR_DISCRIMINATOR

You must be on the Visionary lifetime plan to use that discriminator

VOICE_ACTIVITY_SHARING_ON_COOLDOWN

You can only update your voice activity sharing default once every 24 hours

VOICE_CHANNELS_CANNOT_BE_ABOVE_TEXT_CHANNELS

Voice channels can't be positioned above text channels within the same category

VOICE_MESSAGES_ATTACHMENT_DURATION_REQUIRED

Voice message attachments must specify a duration

VOICE_MESSAGES_ATTACHMENT_MUST_BE_AUDIO

Voice message attachments must be audio files

VOICE_MESSAGES_ATTACHMENT_WAVEFORM_REQUIRED

Voice message attachments must include waveform data

VOICE_MESSAGES_CANNOT_HAVE_CONTENT

Voice messages can't have text content

VOICE_MESSAGES_CANNOT_HAVE_EMBEDS

Voice messages can't have embeds

VOICE_MESSAGES_CANNOT_HAVE_FAVORITE_MEMES

Voice messages can't have favorite memes

VOICE_MESSAGES_CANNOT_HAVE_STICKERS

Voice messages can't have stickers

VOICE_MESSAGES_DURATION_EXCEEDS_LIMIT

Voice message duration can't exceed {maxDuration, plural, one {# second} other {# seconds}}

VOICE_MESSAGES_REQUIRE_SINGLE_ATTACHMENT

Voice messages must contain exactly one attachment

WEBHOOK_NAME_LENGTH_INVALID

Webhook name must be between {min} and {max} characters

Localisation

An error message is rendered in one resolved locale. Fluxer uses the configured locale of the authenticated account when the request is authenticated and the account has one. Otherwise it negotiates the request Accept-Language value against the canonical supported locale registry. Locales defines the resolution algorithm, including weights, language subtag reduction, and the en-US result.

A failure raised before the request locale is resolved, such as an IP ban denial, cannot see the account locale and negotiates Accept-Language on its own. That negotiation reads the header entries in order, ignores quality weights, and falls back to en-US.

Fluxer localises the message of a validation element that has a code the same way. A validation element with no code has the fixed English string written at the failure site. The code field is never localised, either in the envelope or in a validation element.

A code whose catalogue entry is missing for the resolved locale falls back to its English source template. A code with no registered template at all falls back to the message the failure supplied or to the code itself.