Skip to content
Fluxer API

Entrance sounds

An entrance sound is a short audio clip that plays for everyone else in a voice channel when you join it. You upload clips into your own library, assign one to each scope, and ask Fluxer to play the chosen clip after you connect. Bot tokens can't call these routes.

BoundValue
Clips per account8
Decoded clip size1048576 bytes
Encoded upload size1398134 characters
Clip duration100 through 5200 milliseconds
Display name1 through 32 characters

The feature_voice_entrance_sounds limit key tells the Fluxer app whether to show entrance sounds, but these routes don't check it.

Fluxer detects the container from the audio bytes and ignores the type in a data: URI prefix.

Detected containerExtensionContent type
MP3, MPEGmp3audio/mpeg
Oggoggaudio/ogg
MP4, QuickTime, AAC in MP4m4aaudio/mp4
WAVwavaudio/wav

Fluxer stores the bytes as uploaded and doesn't transcode them.

One audio clip in an account's library.

FieldTypeDescription
idsnowflakeThe ID of the sound
namestringThe display name of the clip (1-32 characters)
hashstringThe content hash of the audio (16 hexadecimal characters)
extensionstringThe stored extension, one of mp3, ogg, m4a and wav
content_typestringThe MIME type the clip is served with
duration_msintegerThe duration in milliseconds (0-5200)
size_bytesintegerThe decoded size in bytes (0-1048576)
urlstringThe CDN URL of the clip (no authentication needed)
created_atISO8601 timestampThe time the clip was uploaded
{
"id": "1501314428688998182",
"name": "airhorn",
"hash": "9f2c41ab77de0135",
"extension": "mp3",
"content_type": "audio/mpeg",
"duration_ms": 1240,
"size_bytes": 20416,
"url": "https://cdn.example.com/entrance-sounds/1490000000000000000/9f2c41ab77de0135.mp3",
"created_at": "2026-08-31T09:12:04.118Z"
}

The clip assigned to one scope. A scope with no clip has no selection.

FieldTypeDescription
scope_idstringThe scope the selection applies to
sound_idsnowflakeThe clip assigned to that scope
ValueDescription
globalApplies wherever no narrower scope is selected
guildsApplies in guild voice channels
dmsApplies in direct message and group calls
guild:{guild_id}Applies in one guild

Your client picks the selection that fits the channel and sends its sound_id to Play entrance sound.

GET/v1/users/@me/entrance-sounds

Returns your library and its selections.

FieldTypeDescription
soundsarray[entrance sound object]The clips the account owns
selectionsarray[entrance sound selection object]The scopes that have a clip assigned
StatusBodyCondition
200response bodyThe library was returned

The rate limit is 30 requests per minute, on the user:entrance_sound:list bucket.

POST/v1/users/@me/entrance-sounds

Stores one clip in your library and returns the entrance sound object. Assign it to a scope with Set entrance sound selection.

FieldTypeDescription
namestringThe display name of the clip (1-32 characters)
audiobase64 stringThe audio bytes, base64 encoded (1-1398134 characters)

A data: URI prefix on audio is accepted and ignored.

Every failure returns 400 INVALID_FORM_BODY with these codes.

FailureCodePath
The field is missing or an empty stringINVALID_FORMATname or audio
The name is blank after trimming or over 32 charactersSTRING_LENGTH_INVALIDname
The encoded payload is empty or over 1398134 charactersBASE64_LENGTH_INVALIDaudio
The payload is not valid base64INVALID_BASE64_FORMATaudio
The library already has 8 clipsENTRANCE_SOUND_QUOTA_REACHEDaudio
The decoded bytes are over 1048576 bytesENTRANCE_SOUND_SIZE_EXCEEDS_LIMITaudio
The container is not supported or the duration can't be measuredENTRANCE_SOUND_INVALID_FORMATaudio
The duration is under 100 or over 5200 millisecondsENTRANCE_SOUND_DURATION_EXCEEDS_LIMITaudio
The clip could not be storedFAILED_TO_UPLOAD_IMAGEaudio
StatusBodyCondition
201entrance sound objectThe clip was stored
400error responseThe name or audio fails validation
403error responseACCOUNT_LIMITED when the account is limited

The rate limit is 5 requests per 5 minutes, on the user:entrance_sound:upload bucket.

PATCH/v1/users/@me/entrance-sounds/{sound_id}

Changes the display name of a clip and returns the updated entrance sound object.

FieldTypeDescription
namestringThe new display name (1-32 characters)
StatusBodyCondition
200entrance sound objectThe clip was renamed
400error responseSTRING_LENGTH_INVALID for a bad name, or ENTRANCE_SOUND_NOT_FOUND when you don't own the clip

The rate limit is 20 requests per minute, on the user:entrance_sound:mutate bucket.

DELETE/v1/users/@me/entrance-sounds/{sound_id}

Deletes a clip and clears every selection that pointed at it.

StatusBodyCondition
204emptyThe clip was deleted or didn't exist

The rate limit is 20 requests per minute, on the user:entrance_sound:mutate bucket.

PUT/v1/users/@me/entrance-sound-selections

Assigns one of your clips to a scope and replaces any earlier selection for that scope.

FieldTypeDescription
scope_idstringThe scope to write (1-32 characters)
sound_id?snowflakeThe clip to assign, or null to clear the scope
StatusBodyCondition
204emptyThe selection was written or cleared
400error responseINVALID_FORMAT for an unknown scope, or ENTRANCE_SOUND_NOT_FOUND when you don't own the clip
403error responseACCOUNT_LIMITED when a limited account assigns a clip

The rate limit is 20 requests per minute, on the user:entrance_sound:mutate bucket.

POST/v1/voice/channels/{channel_id}/entrance-sound

Sends an ENTRANCE_SOUND_PLAY event to everyone else connected to the voice channel, and their apps play the clip from the URL in the event. You need to be connected to the channel.

FieldTypeDescription
sound_idsnowflakeThe clip to play, from your own library
StatusBodyCondition
204emptyThe event was sent
400error responseENTRANCE_SOUND_INVALID_SCOPE when you aren't connected to the channel, or ENTRANCE_SOUND_NOT_FOUND when you don't own the clip

The rate limit is 3 requests per 30 seconds, on the voice:entrance_sound:play::user_id::channel_id bucket.