Skip to content
Fluxer API

Guild stickers

A sticker is an image a guild stores for its members to send with a message. It belongs to exactly one guild. Its snowflake is unique across every guild. Get sticker metadata resolves a sticker without membership of its guild.

Every route names a guild in its path. A guild that has UNAVAILABLE_FOR_EVERYONE rejects the request with 403 MISSING_ACCESS before the operation runs. UNAVAILABLE_FOR_EVERYONE_BUT_STAFF does the same for an account without the instance staff flag. On Clone guild sticker the gate covers the target guild and never the source guild.

The instance-wide content filter screens every route with a JSON body before the route runs. A body string of at least 3 characters matching the phrase blocklist, or a URL matching the URL blocklist, returns 403 CONTENT_BLOCKED. The image member is exempt.

A guild that does not exist returns 404 UNKNOWN_GUILD. A caller who is not a current member of an existing guild returns 403 MISSING_PERMISSIONS, so guild existence is distinguishable from guild membership. Modify guild sticker answers 404 UNKNOWN_STICKER for such a guild.

There is no single-sticker read scoped to a guild. List guild stickers returns the whole collection in one response.

A guild sticker object is the complete stored form of one sticker. The stored image is written once at creation and is never replaced. Only the name, description, and tags are mutable.

FieldTypeDescription
idsnowflakeThe ID of the sticker
namestringThe name of the sticker (2-30 characters)
description1stringThe sticker description, or an empty string when it has none
tagsarray[string]Sticker tags
animated2booleanWhether the stored image is animated
user?3partial user objectThe account that uploaded the sticker

1 Never null on the wire. A sticker with no description has an empty string

2 Detected from the submitted image at creation, and copied unchanged by Clone guild sticker

3 Present only on List guild stickers, where it is populated for every caller and requires no permission

A sticker is always a guild sticker, and animated alone describes its format. The object has no sticker type, format type, or availability field.

{
"id": "1501314428688998183",
"name": "shipit",
"description": "Ship it",
"tags": ["ship", "deploy"],
"animated": false
}

Tags are an array of strings. A create or modify request accepts at most 10 entries. Fluxer trims each entry. The 1 to 30 character bound applies to the trimmed value. Entries are stored and returned in the submitted order.

The array is optional on every request that accepts it and defaults to an empty array, so omitting it on Modify guild sticker clears the stored tags.

The item shape shared by Create guild sticker and each entry of Bulk create guild stickers.

FieldTypeDescription
name1stringThe name of the sticker (2-30 characters)
description?2?stringThe sticker description (1-500 characters), or null for none
tags?array[string]Sticker tags, defaulting to an empty array
image3base64 stringThe image data, with at most 524288 decoded bytes

1 The value is trimmed before the bound applies, as it is for description and each tag

2 An omitted value and null are both stored as null and returned as an empty string

3 A data URL prefix is accepted and everything up to the first comma is removed before any bound applies

The remaining encoded portion is bounded to 699052 characters, which encodes a full 524288 byte image, and a longer value returns the validation code BASE64_LENGTH_INVALID at the image path. A value that is not canonical base64 with correct padding returns INVALID_BASE64_FORMAT.

Decoded bytes are at most the operator-configured sticker_max_size limit key value, resolved against the guild’s complete feature set and defaulting to 524288. A larger image is rejected on the image path with IMAGE_SIZE_EXCEEDS_LIMIT, whose message names the resolved ceiling. An image over 524289 bytes exceeds the 699052 character bound and returns BASE64_LENGTH_INVALID, so a configured value above 524289 never applies.

Accepted upload formats are PNG, JPEG, APNG, GIF, WebP, AVIF, and SVG. Fluxer takes the format from the decoded image. An animated AVIF is rejected. Fluxer detects animation state from the image, so this object has no animation field.

Pixel dimensions and animation length are not enforced. An accepted image is stored at its original dimensions. The Media Proxy image asset contract selects the delivered size.

{
"name": "shipit",
"description": "Ship it",
"tags": ["ship", "deploy"],
"image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAAAAAA6fptVAAAACklEQVR4nGMAAQAABQABDQottAAAAABJRU5ErkJggg=="
}

The outcome of one Bulk create guild stickers call, split into the items that were created and the items that were rejected.

FieldTypeDescription
successarray[guild sticker object]The stickers that were created
failedarray[sticker creation failure object]The items rejected after top-level request validation

Both arrays are present on every success response. Either can be empty. An item appears in exactly one of them, so the combined length equals the submitted item count.

{
"success": [],
"failed": [{"name": "shipit", "error": "The image is too large."}]
}

One rejected item from a bulk create call, named and explained in display text.

FieldTypeDescription
name1stringThe requested sticker name, echoed from the submitted item
error2stringThe failure message rendered for the item

1 The object has no index, so two submitted items sharing a name cannot be told apart

2 Rendered in the locale of the authenticated account, so its value changes with the caller’s locale

There is no machine-readable code, so a client that needs to branch on the reason retries the item on its own.

GET/v1/guilds/{guild_id}/stickersBot

Returns every guild sticker object of the guild, each with user. Requires membership of the guild and no permission.

One response has the complete collection. The operation is not paginated. A sticker whose uploader cannot be resolved is omitted, so the array can be shorter than the number of stored stickers.

FieldTypeDescription
guild_idsnowflakeThe ID of the guild
StatusBodyCondition
200array[guild sticker object]Stickers were returned
4031error responseGuild is unavailable, or the caller is not a member
404error responseGuild does not exist and the request returns UNKNOWN_GUILD

1 The error code is MISSING_ACCESS for an unavailable guild and MISSING_PERMISSIONS for a non-member

60 requests per 10 seconds for each authenticated user and guild ID, on the guild:sticker:list::guild_id bucket.

POST/v1/guilds/{guild_id}/stickersBotAudit reason

Creates one sticker from submitted image data and returns its guild sticker object without user. Requires membership of the guild and CREATE_EXPRESSIONS. Emits a Guild Stickers Update Gateway event.

The admission checks run in a fixed order. Fluxer scans the submitted name, description, and tags for prohibited content, then resolves guild existence and membership, then CREATE_EXPRESSIONS, then the slot limit, and only then the image. A guild at its slot limit therefore returns MAX_STICKERS even when the image would also have been rejected.

The slot limit is the operator-configured max_guild_stickers value resolved against the guild’s complete feature set, defaulting to 500. A guild with UNLIMITED_STICKERS bypasses that configuration and receives a fixed ceiling of 999999.

FieldTypeDescription
guild_idsnowflakeThe ID of the guild

The body is one sticker create object.

StatusBodyCondition
200guild sticker objectSticker was created
4001error responseGuild is at its sticker slot limit, or the image is invalid
4032error responseGuild is unavailable, the caller is not a member or lacks CREATE_EXPRESSIONS, or the submitted text or image is blocked
404error responseGuild does not exist and the request returns UNKNOWN_GUILD

1 The error code is MAX_STICKERS for the slot limit, with the resolved limit in its message variables. An image failure is INVALID_FORM_BODY with BASE64_LENGTH_INVALID for an oversized encoding, IMAGE_SIZE_EXCEEDS_LIMIT for decoded bytes over the resolved ceiling, or INVALID_IMAGE_FORMAT for an undecodable or unaccepted image at the image path

2 The error code is MISSING_ACCESS for an unavailable guild, MISSING_PERMISSIONS for a membership or permission failure, and CONTENT_BLOCKED when the name, description, or a tag matches a blocklist or the decoded image matches a banned file hash

The operation consumes one guild sticker slot, stores the metadata-stripped image, emits Guild Stickers Update with the guild’s complete sticker collection, and then writes a STICKER_CREATE audit entry with the supplied reason. A failed creation leaves no sticker, audit entry, or Dispatch and consumes no slot.

10 requests per 30 seconds for each authenticated user and guild ID, on the guild:sticker:create::guild_id bucket.

POST/v1/guilds/{guild_id}/stickers/bulkBotAudit reason

Attempts to create between 1 and 50 stickers in one request and returns a sticker bulk create response object. Emits one Guild Stickers Update Gateway event for the whole batch.

The caller needs membership of the guild and CREATE_EXPRESSIONS. Fluxer processes the items strictly in the submitted order and treats each one independently. An item fails when no guild sticker slot remains. A later item can still succeed after an earlier item failed for another reason.

FieldTypeDescription
guild_idsnowflakeThe ID of the guild
FieldTypeDescription
stickersarray[sticker create object]The items to create, in the order they are processed (1-50)
StatusBodyCondition
200sticker bulk create response objectEvery validated item was attempted
4001error responseTop-level body, item count, item shape, item metadata, or encoded image bound is invalid
4032error responseGuild is unavailable, the caller is not a member or lacks CREATE_EXPRESSIONS, or a submitted string is blocked
404error responseGuild does not exist and the request returns UNKNOWN_GUILD

1 An oversized encoded image, an out-of-range name, or a tag outside its bound rejects the whole request before any item is created

2 The error code is MISSING_ACCESS for an unavailable guild, MISSING_PERMISSIONS for a membership or permission failure, and CONTENT_BLOCKED for a blocked string

A decoded image that is oversized, undecodable, in an unaccepted format, or matching a banned file hash fails one item.

Each successful item consumes one guild sticker slot, stores its image, and writes the supplied audit reason into its STICKER_CREATE entry. A failed item leaves no sticker, audit entry, or slot consumption.

Fluxer emits one Guild Stickers Update after the batch when at least one item succeeded, with the guild’s complete sticker collection. A batch in which no item succeeded emits nothing.

6 requests per minute for each authenticated user and guild ID, on the guild:sticker:bulk_create::guild_id bucket.

POST/v1/guilds/{guild_id}/stickers/cloneBotAudit reason

Copies an existing sticker into the target guild and returns the new guild sticker object without user. Emits a Guild Stickers Update Gateway event in the target guild.

The caller needs membership of the target guild and CREATE_EXPRESSIONS there. Membership of the source guild is not required. The source guild must not have CLONE_STICKER_DISABLED.

The name, description, tags, animation state, and stored image bytes are copied server-side, so the caller does not re-upload the image and cannot override any copied value.

The availability gate on the target guild runs first. An unknown source sticker is then reported before a missing source guild, before target membership and permission, and before the target slot limit. A request naming an unknown source sticker against a target guild that does not exist returns 404 UNKNOWN_STICKER.

Get sticker metadata reports whether a source permits cloning without attempting the operation.

FieldTypeDescription
guild_idsnowflakeThe ID of the target guild
FieldTypeDescription
source_sticker_idsnowflakeThe ID of the sticker to copy, which can belong to any guild
StatusBodyCondition
200guild sticker objectSticker was cloned
4001error responseTarget guild is at its sticker slot limit
4032error responseSource guild is missing or disables cloning, the target guild is unavailable, or the caller is not a member of the target guild or lacks CREATE_EXPRESSIONS there
4043error responseSource sticker or target guild does not exist

1 The error code is MAX_STICKERS

2 The error code is MISSING_ACCESS when the source guild is missing or has CLONE_STICKER_DISABLED and when the target guild is unavailable, and MISSING_PERMISSIONS for a target membership or permission failure

3 The error code is UNKNOWN_STICKER for the source sticker and UNKNOWN_GUILD for the target guild

A source guild that no longer exists returns 403 MISSING_ACCESS, so a caller cannot tell it apart from a source guild that disables cloning.

The operation consumes one target guild sticker slot and creates a copy whose uploader is the caller. It emits Guild Stickers Update with the target guild’s complete sticker collection and then writes a STICKER_CREATE audit entry. The source sticker and source guild are unchanged and receive no Dispatch.

10 requests per 30 seconds for each authenticated user and target guild ID, on the guild:sticker:clone::guild_id bucket.

PATCH/v1/guilds/{guild_id}/stickers/{sticker_id}BotAudit reason

Replaces sticker metadata and returns the guild sticker object without user. Emits a Guild Stickers Update Gateway event.

  • The uploader can modify their own sticker with CREATE_EXPRESSIONS, and any other caller requires MANAGE_EXPRESSIONS.
  • Neither permission is subject to the guild MFA level.
  • The stored image cannot be replaced, so an image change requires creating a new sticker.

The sticker is resolved before any permission is evaluated. A sticker that belongs to another guild and a sticker in a guild that does not exist are both reported as an unknown sticker.

FieldTypeDescription
guild_idsnowflakeThe ID of the guild
sticker_idsnowflakeThe ID of the sticker
FieldTypeDescription
namestringThe name of the sticker (2-30 characters)
description?1?stringThe sticker description (1-500 characters), or null to clear it
tags?2array[string]Sticker tags, defaulting to an empty array

1 An omitted value and null are both stored as null and returned as an empty string

2 An omitted array is written as an empty array

StatusBodyCondition
200guild sticker objectMetadata was processed
4031error responseGuild is unavailable, the caller is neither the uploader with CREATE_EXPRESSIONS nor a member holding MANAGE_EXPRESSIONS, or the submitted text is blocked
404error responseSticker does not exist in that guild and the request returns UNKNOWN_STICKER

1 The error code is MISSING_ACCESS for an unavailable guild, MISSING_PERMISSIONS for a membership or permission failure, and CONTENT_BLOCKED for a blocked name, description, or tag

A non-member who names an existing sticker receives MISSING_PERMISSIONS.

The operation writes the supplied metadata, emits Guild Stickers Update with the guild’s complete sticker collection, and then records a STICKER_UPDATE audit entry. Both are produced even when the submitted values match the stored ones. The audit entry then has no changes.

20 requests per 10 seconds for each authenticated user and guild ID, on the guild:sticker:update::guild_id bucket.

DELETE/v1/guilds/{guild_id}/stickers/{sticker_id}BotAudit reason

Deletes the sticker record and returns 204 with an empty body. Emits a Guild Stickers Update Gateway event.

Fluxer checks membership, then purge eligibility, then the sticker, and only then the permission. A non-member receives MISSING_PERMISSIONS whatever purge is set to, and a purging request in a guild without the required feature is refused before the sticker is looked up.

FieldTypeDescription
guild_idsnowflakeThe ID of the guild
sticker_idsnowflakeThe ID of the sticker
FieldTypeDescription
purge?1booleanWhether to permanently delete the stored image (default false)

1 Read as true only when it is exactly true, True, or 1 after trimming. Every other value, including TRUE and yes, reads as false

StatusBodyCondition
204emptySticker was deleted
4031error responseGuild is unavailable or cannot purge expression assets, or the caller is neither the uploader with CREATE_EXPRESSIONS nor a member holding MANAGE_EXPRESSIONS
4042error responseGuild or sticker does not exist

1 The error code is MISSING_ACCESS for an unavailable guild and when purge is true and the guild lacks EXPRESSION_PURGE_ALLOWED, and MISSING_PERMISSIONS for a membership or permission failure

2 The error code is UNKNOWN_GUILD for the guild and UNKNOWN_STICKER for the sticker

The operation removes the sticker from the guild, returns its slot, emits Guild Stickers Update with the guild’s remaining sticker collection, and then writes a STICKER_DELETE audit entry.

When purge is true, the stored image and each cached representation are deleted after the response, so the image can still be served for a short time after the 204. Messages that reference the sticker are not rewritten. No message Dispatch is produced.

10 requests per 30 seconds for each authenticated user and guild ID, on the guild:sticker:delete::guild_id bucket. The route charges a second allowance of 300 requests per day for each authenticated user and guild ID, on the guild:sticker:delete:daily::guild_id bucket.