API reference
Objects
Every shape the reference links to, in alphabetical order. Gateway events carry the same shapes; see Gateway.
AboutMe
Type: string
About Me, plain text shown as written (no markdown yet). Line endings become \n, the text is trimmed, three or more line breaks in a row become two, and at most 10 line breaks are allowed. Then at most 190 characters (code points), each line free of control and invisible formatting characters. Null or an empty string clears it.
AllowedMentions
Type: object
Only replied_user is supported. Mentions written in the content ping as described on Message.mentions whatever this says.
| Field | Type | Description |
|---|---|---|
| replied_user | boolean | Whether a reply pings the author of the message it replies to, as on Discord (the web client sends true unless the person turns the mention off). The author is then in default false |
{
"replied_user": false
}
Attachment
Type: object
A file attached to a message. url and thumbnail_url are signed and expire (see media.attachment_url_ttl_seconds); fetch the message again for fresh ones. Show a file whose spoiler is true blurred until clicked. Blur an image whose sensitive is explicit as the viewer's sensitive media settings say (see AttachmentSensitive).
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| filenameRequired | string | The name to show, without any path. A name starting with |
| descriptionRequired | string or null | Alt text, up to 1024 characters. |
| content_typeRequired | string | The type the file is served with, decided from its content. Active content (HTML, SVG, XML, scripts) is |
| sizeRequired | integer | at least 1 |
| urlRequired | string or null | Null when quarantined. On a separate media host or the storage bucket, never the app's origin. |
| thumbnail_urlRequired | string or null | A still preview of at most 512 by 512 pixels, for images larger than that and for animated GIFs. |
| widthRequired | integer or null | Images only. |
| heightRequired | integer or null | Images only. |
| placeholderRequired | string or null | A BlurHash (4 by 3 components) to show while the image loads. Images only. |
| spoilerRequired | boolean | |
| riskRequired | AttachmentRisk | |
| sensitiveRequired | AttachmentSensitive or null | What the instance's image classifier found in an image: One of |
| quarantinedRequired | boolean | Hidden by moderators or the trust and safety team; nothing about the file can be shown. |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"filename": "string",
"description": "string",
"content_type": "string",
"size": 1,
"url": "string",
"thumbnail_url": "string",
"width": 0,
"height": 0,
"placeholder": "string",
"spoiler": false,
"risk": "none",
"sensitive": "none",
"quarantined": false
}
AttachmentRef
Type: object
| Field | Type | Description |
|---|---|---|
| upload_idRequired | ID | A finalized attachment upload of the caller's for this channel, not used before. |
| filename | string | A display name to use instead of the uploaded one; the extension stays. |
| description | string | Alt text, up to 1024 characters without control characters other than newlines. |
| spoiler | boolean | Same as a filename starting with |
{
"upload_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"filename": "string",
"description": "string",
"spoiler": false
}
AttachmentRisk
Type: string
Whether opening the file could harm the device, decided by the server when the file is sent. risky: the name says it runs or installs something, or opens as a web page or shortcut (executables, installers, scripts, disk images, Java and Android packages, Office files that can hold macros, HTML, SVG and XML files, shortcuts). mismatch: the name does not match the content, such as invoice.pdf.exe, or a .png or .pdf whose bytes are a program, a script or a web page. Files sent before the classification are judged by name only. Always none for a quarantined file. Clients warn before downloading a risky or mismatch file only where the risky_files flag is on: in a server's features, and in direct messages in the viewer's own features.
One of none, risky, mismatch
AttachmentSensitive
Type: string
What the instance's image classifier found in an image: explicit (nudity or sexual content, drawn or photographed), suggestive (revealing but not explicit) or none. An animated image is judged by its first, middle and last frames and takes the highest level. Null when the file was never classified: anything that is not a still or animated image, files sent before classification existed or while the sensitive_media flag was inactive, files that could not be read for it, and quarantined files. A file whose classification did not answer in time is sent as pending and classified in the background; the message then arrives again as message_update with the level set. Clients treat pending like explicit until then (reports never carry it). Clients blur only explicit and pending images, never block them, and only where the sensitive_media flag is on (a server's features; in direct messages, the viewer's own flags). Inside an age-restricted channel nothing is blurred for a viewer who passed its age gate. Otherwise the viewer's privacy settings decide: sensitive_media_servers in servers, sensitive_media_friend_dms for direct messages from friends and sensitive_media_other_dms for other direct messages. The viewer's own uploads are never blurred for them. With sensitive_media_locked every explicit and pending image blurs. Public web pages never show explicit, suggestive or pending images.
One of none, suggestive, explicit, pending
AutoModerationAction
Type: object
| Field | Type | Description |
|---|---|---|
| typeRequired | string | One of |
| metadataRequired | AutoModerationActionMetadata |
{
"type": "block_message",
"metadata": {
"custom_message": "string",
"channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"duration_seconds": 1
}
}
AutoModerationActionMetadata
Type: object
| Field | Type | Description |
|---|---|---|
| custom_message | string |
at most 150 characters |
| channel_id | ID |
|
| duration_seconds | integer |
at least 1; at most 2419200 |
{
"custom_message": "string",
"channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"duration_seconds": 1
}
AutoModerationAlert
Type: object
What an auto_moderation_action alert message reports.
| Field | Type | Description |
|---|---|---|
| rule_idRequired | ID | |
| rule_nameRequired | string | |
| trigger_typeRequired | AutoModerationTriggerType | |
| channel_idRequired | ID | Where the member sent or edited the message. |
| message_idRequired | string or null | The message, when it was posted (an alert-only rule) or for an edit; null when a new message was blocked. |
| blockedRequired | boolean | |
| editRequired | boolean | True when the content was an edit of an existing message. |
| matched_keywordRequired | string or null | The keyword, pattern or preset entry that matched. |
| matched_contentRequired | string or null | The matched text, folded. Null for a bot without the message content permission, and when |
| contentRequired | string or null | What the member sent or edited. Null for a bot without the message content permission, when |
| content_hiddenRequired | boolean | True when the alert never held the text, file names or matched text: the source channel is not visible to every member, and it is not the alert channel or a public thread in it, so some readers of the alert channel might not be allowed to read it. Moderators who can see the source channel find the text in the moderation log and the execution event. |
| content_removedRequired | boolean | True when the text, file names and matched text were removed, 90 days after the alert or when the member deleted their content. |
| attachmentsRequired | array of string | File names that were checked with the message. Empty for a bot without the message content permission, and when |
| timeout_secondsRequired | integer or null | The timeout this rule applied, if any. |
| timeout_untilRequired | string (date-time) or null |
{
"rule_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"rule_name": "string",
"trigger_type": "keyword",
"channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"message_id": "string",
"blocked": false,
"edit": false,
"matched_keyword": "string",
"matched_content": "string",
"content": "string",
"content_hidden": false,
"content_removed": false,
"attachments": [
"string"
],
"timeout_seconds": 0,
"timeout_until": "2026-10-15T09:00:00Z"
}
AutoModerationBlock
Type: object
Why AutoMod refused a message; only on auto_moderation_blocked errors.
| Field | Type | Description |
|---|---|---|
| trigger_typeRequired | AutoModerationTriggerType | |
| custom_messageRequired | string or null | The community's own words to show the sender under the notice. |
{
"trigger_type": "keyword",
"custom_message": "string"
}
AutoModerationRule
Type: object
An AutoMod rule. Also the payload of the auto_moderation_rule_* gateway events.
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| community_idRequired | ID | |
| nameRequired | string | at least 1 characters; at most 100 characters |
| creator_idRequired | string or null | |
| updated_byRequired | string or null | Who last saved the rule. Its timeouts apply only to members ranked below this member, while they hold Moderate Members. |
| event_typeRequired | string | One of |
| trigger_typeRequired | AutoModerationTriggerType | |
| trigger_metadataRequired | AutoModerationTriggerMetadata | |
| actionsRequired | array of AutoModerationAction | at least 1 items; at most 3 items |
| enabledRequired | boolean | |
| exempt_rolesRequired | array of ID | Members with any of these roles are not checked (the at most 20 items |
| exempt_channelsRequired | array of ID | Text channels or categories not checked; a category covers its channels and a channel its threads. at most 50 items |
| created_atRequired | string (date-time) | |
| updated_atRequired | string (date-time) |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"name": "string",
"creator_id": "string",
"updated_by": "string",
"event_type": "message_send",
"trigger_type": "keyword",
"trigger_metadata": {
"keyword_filter": [
"string"
],
"regex_patterns": [
"string"
],
"presets": [
"profanity"
],
"allow_list": [
"string"
],
"mention_total_limit": 1,
"mention_raid_protection_enabled": false
},
"actions": [
{
"type": "block_message",
"metadata": {
"custom_message": "string",
"channel_id": {},
"duration_seconds": 1
}
}
],
"enabled": false,
"exempt_roles": [
"01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
],
"exempt_channels": [
"01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
],
"created_at": "2026-10-15T09:00:00Z",
"updated_at": "2026-10-15T09:00:00Z"
}
AutoModerationRuleList
Type: object
| Field | Type | Description |
|---|---|---|
| rulesRequired | array of AutoModerationRule |
{
"rules": [
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"name": "string",
"creator_id": "string",
"updated_by": "string",
"event_type": "message_send",
"trigger_type": "keyword",
"trigger_metadata": {
"keyword_filter": [],
"regex_patterns": [],
"presets": [],
"allow_list": [],
"mention_total_limit": 1,
"mention_raid_protection_enabled": false
},
"actions": [
{
"type": "block_message",
"metadata": {}
}
],
"enabled": false,
"exempt_roles": [
"01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
],
"exempt_channels": [
"01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
],
"created_at": "2026-10-15T09:00:00Z",
"updated_at": "2026-10-15T09:00:00Z"
}
]
}
AutoModerationTriggerMetadata
Type: object
Only the fields of the rule's trigger type are kept; others are dropped. Keywords and allow list entries are case-insensitive and folded like messages: cat matches the whole word, cat* a word starting with it, *cat a word ending with it, *cat* anywhere.
| Field | Type | Description |
|---|---|---|
| keyword_filter | array of string |
at most 1000 items |
| regex_patterns | array of string |
at most 10 items |
| presets | array of string |
|
| allow_list | array of string | Entries that never trigger the rule, with the keyword syntax: up to 100 for at most 1000 items |
| mention_total_limit | integer |
at least 1; at most 50 |
| mention_raid_protection_enabled | boolean |
|
{
"keyword_filter": [
"string"
],
"regex_patterns": [
"string"
],
"presets": [
"profanity"
],
"allow_list": [
"string"
],
"mention_total_limit": 1,
"mention_raid_protection_enabled": false
}
AutoModerationTriggerType
Type: string
One of keyword, keyword_preset, mention_spam, spam
Badge
Type: object
A badge an account holds. Show label as the text alternative; the tier is never conveyed by the icon alone.
| Field | Type | Description |
|---|---|---|
| keyRequired | BadgeKey | |
| nameRequired | string | |
| descriptionRequired | string | |
| labelRequired | string | The name with the tier, such as "Bug hunter, Gold". |
| kindRequired | string | One of |
| issuerRequired | string | The identity domain of the instance that issued it. |
| tierRequired | object or null | |
| tier.keyRequired | string | |
| tier.nameRequired | string | |
| tier.levelRequired | integer | at least 1 |
| next_tierRequired | object or null | |
| next_tier.keyRequired | string | |
| next_tier.nameRequired | string | |
| next_tier.requirementRequired | string | |
| activeRequired | boolean | False for a frozen badge (a supporter whose plan ended); show it as inactive. |
| hiddenRequired | boolean | Only ever true in the holder's own and admin lists. |
| hideableRequired | boolean | |
| granted_atRequired | string (date-time) or null | |
| expires_atRequired | string (date-time) or null | |
| organizationRequired | OrganizationRef or null | A verified organization, for its badge. |
| domainsRequired | array of string | For |
{
"key": "staff",
"name": "string",
"description": "string",
"label": "string",
"kind": "automatic",
"issuer": "string",
"tier": {
"key": "string",
"name": "string",
"level": 1
},
"next_tier": {
"key": "string",
"name": "string",
"requirement": "string"
},
"active": false,
"hidden": false,
"hideable": false,
"granted_at": "2026-10-15T09:00:00Z",
"expires_at": "2026-10-15T09:00:00Z",
"organization": {
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"name": "string",
"domain": "string"
},
"domains": [
"string"
]
}
BadgeCatalog
Type: object
| Field | Type | Description |
|---|---|---|
| badgesRequired | array of BadgeDefinition |
{
"badges": [
{
"key": "staff",
"name": "string",
"description": "string",
"kind": "automatic",
"lapse": "keep",
"hideable": false,
"owner_only": false,
"order": 0,
"tiers": [
{
"key": "string",
"name": "string",
"level": 1,
"requirement": "string"
}
]
}
]
}
BadgeDefinition
Type: object
| Field | Type | Description |
|---|---|---|
| keyRequired | BadgeKey | |
| nameRequired | string | |
| descriptionRequired | string | |
| kindRequired | string | One of |
| lapseRequired | string | One of |
| hideableRequired | boolean | |
| owner_onlyRequired | boolean | Only the instance owner grants and revokes it. |
| orderRequired | integer | Display order; profiles list badges in this order. |
| tiersRequired | array of object | |
| tiers[].keyRequired | string | |
| tiers[].nameRequired | string | |
| tiers[].levelRequired | integer | at least 1 |
| tiers[].requirementRequired | string |
{
"key": "staff",
"name": "string",
"description": "string",
"kind": "automatic",
"lapse": "keep",
"hideable": false,
"owner_only": false,
"order": 0,
"tiers": [
{
"key": "string",
"name": "string",
"level": 1,
"requirement": "string"
}
]
}
BadgeKey
Type: string
One of staff, verified_organization, verified_domain, partner, moderator, supporter, early_supporter, bug_hunter, event_participant, bot_developer
Ban
Type: object
| Field | Type | Description |
|---|---|---|
| userRequired | PublicUser | |
| reasonRequired | string or null | |
| banned_byRequired | string or null | The user who last set the ban. Null once that account is deleted. |
| created_atRequired | string (date-time) |
{
"user": {
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"username": "string",
"display_name": "string",
"kind": "user",
"avatar": "string",
"avatar_dark": "string"
},
"reason": "string",
"banned_by": "string",
"created_at": "2026-10-15T09:00:00Z"
}
BannerColor
Type: integer
The profile banner color as 0xRRGGBB, shown when there is no banner image. Null for the default.
at least 0; at most 16777215
BanPage
Type: object
| Field | Type | Description |
|---|---|---|
| bansRequired | array of Ban | |
| nextRequired | string or null | Pass as |
{
"bans": [
{
"user": {
"id": {},
"username": "string",
"display_name": "string",
"kind": {},
"avatar": {},
"avatar_dark": {}
},
"reason": "string",
"banned_by": "string",
"created_at": "2026-10-15T09:00:00Z"
}
],
"next": "string"
}
BanRequest
Type: object
| Field | Type | Description |
|---|---|---|
| reason | string or null | Shown to members with Ban Members. Trimmed; empty or null means none. No control or invisible formatting characters. at most 512 characters |
{
"reason": "string"
}
Channel
Type: object
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| community_idRequired | ID | |
| nameRequired | string | |
| kindRequired | ChannelKind | |
| positionRequired | integer | Sort key within the channel's group: the categories, or the channels sharing a |
| parent_idRequired | string or null | The category this channel is in, or null. Always null for a category. For a thread, the text channel it belongs to. |
| topicRequired | ChannelTopic | Empty when the channel has none. Only text channels have one. Visible to everyone who can view the channel, in lists, |
| created_atRequired | string (date-time) | |
| overwritesRequired | array of Overwrite | Permission overwrites, role overwrites first, each group ordered by ID. Clients drop a member's overwrites when the member leaves and a role's when the role is deleted; the server removes them too. Always empty for a thread, which uses its parent's. |
| owner_id | ID | Threads only. Who started the thread; absent if that account no longer exists. |
| message_count | integer | Threads only. Messages sent in the thread, not counting system messages or deleted ones. at least 0 |
| member_count | integer | Threads only. How many members the thread has. at least 0 |
| thread_metadata | ThreadMetadata | |
| user_limit | integer | Voice channels only. How many people can be in it at once; 0 means no limit. at least 0; at most 99 |
| bitrate | integer | Voice channels only. The audio bitrate clients send, in bits per second. at least 8000; at most 96000 |
| age_restricted | boolean | Text and voice channels only (absent on categories and threads; a thread follows its parent). An age-restricted channel, Discord's NSFW channel: clients show an age gate ("Are you 18 or older?") the first time a viewer opens it on a device and hide its messages until they continue, never let an account with |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"name": "string",
"kind": "text",
"position": 0,
"parent_id": "string",
"topic": "string",
"created_at": "2026-10-15T09:00:00Z",
"overwrites": [
{
"type": "role",
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"allow": "2748678791",
"deny": "2748678791"
}
],
"owner_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"message_count": 0,
"member_count": 0,
"thread_metadata": {
"archived": false,
"auto_archive_duration": 60,
"archive_timestamp": "2026-10-15T09:00:00Z",
"locked": false,
"invitable": false,
"create_timestamp": "2026-10-15T09:00:00Z"
},
"user_limit": 0,
"bitrate": 8000,
"age_restricted": false
}
ChannelKind
Type: string
One of text, voice, category, public_thread, private_thread
ChannelList
Type: object
| Field | Type | Description |
|---|---|---|
| channelsRequired | array of Channel |
{
"channels": [
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"name": "string",
"kind": "text",
"position": 0,
"parent_id": "string",
"topic": "string",
"created_at": "2026-10-15T09:00:00Z",
"overwrites": [
{
"type": "role",
"id": {},
"allow": {},
"deny": {}
}
],
"owner_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"message_count": 0,
"member_count": 0,
"thread_metadata": {
"archived": false,
"auto_archive_duration": 60,
"archive_timestamp": "2026-10-15T09:00:00Z",
"locked": false,
"invitable": false,
"create_timestamp": "2026-10-15T09:00:00Z"
},
"user_limit": 0,
"bitrate": 8000,
"age_restricted": false
}
]
}
ChannelPinsUpdate
Type: object
Payload of the channel_pins_update gateway event, sent when a message in the channel is pinned or unpinned, or a pinned message is deleted. community_id is absent in a DM.
| Field | Type | Description |
|---|---|---|
| channel_idRequired | ID | |
| community_id | ID | |
| last_pin_timestampRequired | string (date-time) or null | When the newest remaining pin was made; null when nothing is pinned. |
{
"channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"last_pin_timestamp": "2026-10-15T09:00:00Z"
}
ChannelPosition
Type: object
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| positionRequired | integer | |
| parent_idRequired | string or null |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"position": 0,
"parent_id": "string"
}
ChannelPositions
Type: object
Gateway channel_positions: the position and parent of every channel the recipient can see, after a reorder.
| Field | Type | Description |
|---|---|---|
| community_idRequired | ID | |
| channelsRequired | array of ChannelPosition |
{
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"channels": [
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"position": 0,
"parent_id": "string"
}
]
}
ChannelState
Type: object
A channel or thread with the caller's state in it. member is set on a thread the caller has joined. last_message_id and last_pin_timestamp are null without Read Message History in the channel (in the parent for a thread).
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| community_idRequired | ID | |
| nameRequired | string | |
| kindRequired | ChannelKind | |
| positionRequired | integer | |
| parent_idRequired | string or null | |
| topicRequired | ChannelTopic | |
| created_atRequired | string (date-time) | |
| overwritesRequired | array of Overwrite | |
| owner_id | ID | |
| message_count | integer | at least 0 |
| member_count | integer | at least 0 |
| thread_metadata | ThreadMetadata | |
| last_message_idRequired | ID or null | A ULID. Sorts lexically in creation order. |
| last_read_message_idRequired | ID or null | A ULID. Sorts lexically in creation order. |
| mention_countRequired | integer | at least 0 |
| last_pin_timestampRequired | string (date-time) or null | |
| member | ThreadMember |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"name": "string",
"kind": "text",
"position": 0,
"parent_id": "string",
"topic": "string",
"created_at": "2026-10-15T09:00:00Z",
"overwrites": [
{
"type": "role",
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"allow": "2748678791",
"deny": "2748678791"
}
],
"owner_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"message_count": 0,
"member_count": 0,
"thread_metadata": {
"archived": false,
"auto_archive_duration": 60,
"archive_timestamp": "2026-10-15T09:00:00Z",
"locked": false,
"invitable": false,
"create_timestamp": "2026-10-15T09:00:00Z"
},
"last_message_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"last_read_message_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"mention_count": 0,
"last_pin_timestamp": "2026-10-15T09:00:00Z",
"member": {
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"user_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"join_timestamp": "2026-10-15T09:00:00Z",
"flags": 0,
"member": {
"user": {},
"nickname": "string",
"avatar": {},
"avatar_dark": {},
"banner": {},
"bio": "string",
"pronouns": "string",
"roles": [],
"joined_at": "2026-10-15T09:00:00Z",
"timeout_until": "2026-10-15T09:00:00Z",
"bot_presence_intent": false
}
}
}
ChannelTopic
Type: string
The channel's description (Discord's channel topic). Line breaks are normalized to \n (including U+2028 and U+2029) and surrounding whitespace is trimmed; then at most 1024 characters, where every line follows the same rules as names: no control characters other than the line break, and no bidirectional overrides, isolates or other invisible formatting characters (ZWJ and ZWNJ only inside emoji and words, as in names).
at most 1024 characters
Command
Type: object
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| bot_idRequired | ID | |
| community_idRequired | ID or null | Null for a global command. |
| nameRequired | string | pattern ^[a-z0-9_-]{1,32}$ |
| descriptionRequired | string | |
| optionsRequired | array of CommandOption | at most 25 items |
| created_atRequired | string (date-time) | |
| updated_atRequired | string (date-time) |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"bot_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"name": "string",
"description": "string",
"options": [
{
"name": "string",
"description": "string",
"type": "string",
"required": false,
"min_length": 1,
"max_length": 1,
"min_value": 0,
"max_value": 0
}
],
"created_at": "2026-10-15T09:00:00Z",
"updated_at": "2026-10-15T09:00:00Z"
}
CommandList
Type: object
| Field | Type | Description |
|---|---|---|
| commandsRequired | array of Command |
{
"commands": [
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"bot_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"name": "string",
"description": "string",
"options": [
{
"name": "string",
"description": "string",
"type": {},
"required": false,
"min_length": 1,
"max_length": 1,
"min_value": 0,
"max_value": 0
}
],
"created_at": "2026-10-15T09:00:00Z",
"updated_at": "2026-10-15T09:00:00Z"
}
]
}
CommandOption
Type: object
| Field | Type | Description |
|---|---|---|
| nameRequired | string | pattern ^[a-z0-9_-]{1,32}$ |
| descriptionRequired | string | 1-100 characters. |
| typeRequired | CommandOptionType | |
| requiredRequired | boolean | Required options must come before optional ones. |
| min_length | integer | Strings only. at least 1; at most 4000 |
| max_length | integer | Strings only. at least 1; at most 4000 |
| min_value | integer | Integers only. |
| max_value | integer | Integers only. |
{
"name": "string",
"description": "string",
"type": "string",
"required": false,
"min_length": 1,
"max_length": 1,
"min_value": 0,
"max_value": 0
}
CommandOptionType
Type: string
One of string, integer, boolean, user, channel, role
Community
Type: object
Shown to people as a "server".
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| nameRequired | string | |
| owner_idRequired | ID | |
| iconRequired | ImageHash or null | |
| icon_darkRequired | ImageHash or null | The optional dark mode icon (same |
| bannerRequired | ImageHash or null | |
| mfa_levelRequired | integer | 1 when "Require 2FA for moderator actions" is on: members without MFA (for a bot, its owner) lose Administrator, Kick, Ban, Moderate Members, Manage Messages, Manage Channels, Manage Roles, Manage Community, Manage Webhooks, Manage Threads, Mute, Deafen and Move Members, and actions that need them answer 403 One of |
| default_notification_levelRequired | DefaultNotificationLevel | |
| bot_presence_allowedRequired | boolean | Whether bots with the presence intent receive this community's presence (true for new communities, like Discord's unverified bots). Changed with Manage Community; when false, bots get no |
| tierRequired | Tier | |
| limitsRequired | CommunityLimits | |
| perksRequired | array of Perk | |
| featuresRequired | array of FeatureKey | The feature flags on for this server, like Discord's guild |
| vanity_codeRequired | string or null | The vanity invite code, shown to every member; the link is |
| organizationRequired | OrganizationRef or null | The verified organization this community belongs to, for the "official" badge. |
| created_atRequired | string (date-time) | |
| directory | DirectoryState | Only in |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"name": "string",
"owner_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"icon": "string",
"icon_dark": "string",
"banner": "string",
"mfa_level": 0,
"default_notification_level": "all",
"bot_presence_allowed": false,
"tier": "standard",
"limits": {
"members": 0,
"channels": 0,
"roles": 0,
"upload_bytes": 0,
"emoji_slots": 0,
"sticker_slots": 0
},
"perks": [
"vanity_invite"
],
"features": [
"threads"
],
"vanity_code": "string",
"organization": {
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"name": "string",
"domain": "string"
},
"created_at": "2026-10-15T09:00:00Z",
"directory": {
"status": "pending",
"paused": false,
"reason": "string",
"visible": false,
"needs_attention": false,
"updated_at": "2026-10-15T09:00:00Z"
}
}
CommunityAck
Type: object
| Field | Type | Description |
|---|---|---|
| community_idRequired | ID | |
| read_statesRequired | array of ReadState |
{
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"read_states": [
{
"channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"last_read_message_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"mention_count": 0
}
]
}
CommunityLimits
Type: object
| Field | Type | Description |
|---|---|---|
| membersRequired | integer | Joins are refused with |
| channelsRequired | integer | |
| rolesRequired | integer | Roles other than |
| upload_bytesRequired | integer | The largest file a member can attach in this community. |
| emoji_slotsRequired | integer | Custom emoji slots, enforced once custom emoji exist. |
| sticker_slotsRequired | integer | Server sticker slots, enforced when adding a sticker. |
{
"members": 0,
"channels": 0,
"roles": 0,
"upload_bytes": 0,
"emoji_slots": 0,
"sticker_slots": 0
}
CommunityList
Type: object
| Field | Type | Description |
|---|---|---|
| communitiesRequired | array of Community |
{
"communities": [
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"name": "string",
"owner_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"icon": "string",
"icon_dark": "string",
"banner": "string",
"mfa_level": 0,
"default_notification_level": "all",
"bot_presence_allowed": false,
"tier": "standard",
"limits": {
"members": 0,
"channels": 0,
"roles": 0,
"upload_bytes": 0,
"emoji_slots": 0,
"sticker_slots": 0
},
"perks": [
"vanity_invite"
],
"features": [
"threads"
],
"vanity_code": "string",
"organization": {
"id": {},
"name": "string",
"domain": "string"
},
"created_at": "2026-10-15T09:00:00Z",
"directory": {
"status": {},
"paused": false,
"reason": "string",
"visible": false,
"needs_attention": false,
"updated_at": "2026-10-15T09:00:00Z"
}
}
]
}
CreateAttachmentSlotsRequest
Type: object
| Field | Type | Description |
|---|---|---|
| filesRequired | array of UploadFile | at least 1 items; at most 10 items |
{
"files": [
{
"filename": "string",
"size": 1,
"content_type": "string"
}
]
}
CreateAutoModerationRuleRequest
Type: object
| Field | Type | Description |
|---|---|---|
| nameRequired | string | |
| event_type | string | One of |
| trigger_typeRequired | AutoModerationTriggerType | |
| trigger_metadata | AutoModerationTriggerMetadata | |
| actionsRequired | array of AutoModerationAction | |
| enabled | boolean | default true |
| exempt_roles | array of string | IDs that are not roles of the community are dropped. |
| exempt_channels | array of string | IDs that are not text channels or categories of the community are dropped. |
{
"name": "string",
"event_type": "message_send",
"trigger_type": "keyword",
"trigger_metadata": {
"keyword_filter": [
"string"
],
"regex_patterns": [
"string"
],
"presets": [
"profanity"
],
"allow_list": [
"string"
],
"mention_total_limit": 1,
"mention_raid_protection_enabled": false
},
"actions": [
{
"type": "block_message",
"metadata": {
"custom_message": "string",
"channel_id": {},
"duration_seconds": 1
}
}
],
"enabled": true,
"exempt_roles": [
"string"
],
"exempt_channels": [
"string"
]
}
CreateChannelRequest
Type: object
| Field | Type | Description |
|---|---|---|
| nameRequired | string | Trimmed, then 1 to 100 characters with no control or invisible formatting characters. Text channel names are lowercased and each run of whitespace becomes a single |
| kind | ChannelKind | One of |
| parent_id | string or null | A category in the same community to create the channel in. Not allowed for a category. |
| topic | ChannelTopic or null | Text channels only. Omitted, null or empty means no topic. |
| user_limit | integer | Voice channels only ( at least 0; at most 99 |
| bitrate | integer | Voice channels only ( at least 8000; at most 96000 |
| age_restricted | boolean | Text and voice channels only ( |
{
"name": "string",
"kind": "text",
"parent_id": "string",
"topic": "string",
"user_limit": 0,
"bitrate": 8000,
"age_restricted": false
}
CreateInviteRequest
Type: object
| Field | Type | Description |
|---|---|---|
| max_uses | integer or null | Omit or null for unlimited uses. at least 1; at most 1000 |
| expires_in_seconds | integer | Defaults to 7 days. 0 means never. At most 30 days. at least 0; at most 2592000; default 604800 |
{
"max_uses": 1,
"expires_in_seconds": 604800
}
CreateMessageRequest
Type: object
| Field | Type | Description |
|---|---|---|
| content | string | Trailing whitespace is removed and line breaks are normalized to |
| nonce | string | Optional, up to 64 printable ASCII characters (no spaces), echoed back in the response and in the at most 64 characters |
| attachments | array of AttachmentRef | Finalized uploads to attach. Needs Attach Files as well as Send Messages. at most 10 items |
| message_reference | ReplyReference | |
| allowed_mentions | AllowedMentions | |
| sticker_ids | array of string | At most one sticker, as on Discord, with optional at most 1 items |
| gif_url | string | Set by the GIF picker only: the media URL of the chosen GIF, which at most 2048 characters |
{
"content": "string",
"nonce": "string",
"attachments": [
{
"upload_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"filename": "string",
"description": "string",
"spoiler": false
}
],
"message_reference": {
"message_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"fail_if_not_exists": true
},
"allowed_mentions": {
"replied_user": false
},
"sticker_ids": [
"string"
],
"gif_url": "string"
}
CreateRoleRequest
Type: object
| Field | Type | Description |
|---|---|---|
| nameRequired | string | Trimmed, then 1 to 100 characters with no control or invisible formatting characters. Emoji are allowed. At most 4 combining marks may sit on one character, a zero-width joiner is only accepted inside an emoji sequence or between letters of a script that uses joiners, a variation selector only where it changes how its character is drawn, tag characters only in the England, Scotland and Wales flags, and line and paragraph separators, private use and unassigned characters are refused; the name needs one visible character. Names that fold to |
| color | integer or null | at least 0; at most 16777215 |
| permissions | Permissions | A 64-bit permission set as a decimal string. See the |
| hoist | boolean | default false |
| mentionable | boolean | default false |
{
"name": "string",
"color": 0,
"permissions": "2748678791",
"hoist": false,
"mentionable": false
}
CreateThreadRequest
Type: object
| Field | Type | Description |
|---|---|---|
| nameRequired | string | 1-100 characters after trimming, with no control characters and no bidirectional overrides, isolates or other invisible formatting characters, as for channel names. Unlike text channel names it keeps its case and spaces. While at least 1 characters; at most 100 characters |
| kind | string | Defaults to One of |
| auto_archive_duration | integer | Defaults to 1440 (24 hours). One of |
| invitable | boolean | Private threads only; defaults to true. |
{
"name": "string",
"kind": "public_thread",
"auto_archive_duration": 60,
"invitable": false
}
CreateUploadRequest
Type: object
| Field | Type | Description |
|---|---|---|
| purposeRequired | string | The One of |
| community_id | ID | Required for the community purposes |
| filenameRequired | string | |
| sizeRequired | integer | at least 1 |
| content_typeRequired | string |
{
"purpose": "avatar",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"filename": "string",
"size": 1,
"content_type": "string"
}
CurrentUser
Type: object
The authenticated user, with what only they can see. A deleted account elsewhere in the API is a PublicUser named d-<id> with the display name "Deleted User".
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| usernameRequired | string | |
| display_nameRequired | string | |
| kindRequired | UserKind | |
| avatarRequired | ImageHash or null | |
| avatar_darkRequired | ImageHash or null | The optional dark mode avatar (same |
| bannerRequired | ImageHash or null | |
| bioRequired | string | at most 190 characters |
| pronounsRequired | string | at most 40 characters |
| banner_colorRequired | BannerColor or null | |
| instance_roleRequired | InstanceRole or null | |
| created_atRequired | string (date-time) | |
| emailRequired | string or null | The account's email address, or null. Always null for bots. |
| email_verifiedRequired | boolean | Whether the address was confirmed through the link sent to it. Only a verified address receives password reset links and security notices. |
| addressRequired | string |
|
| handleRequired | string | The handle shown to others; the address unless an alias domain handle is in use. |
| terms_version_acceptedRequired | string or null | The terms of service version this account last accepted, or null. |
| terms_accepted_atRequired | string (date-time) or null | When that version was accepted, or null. |
| terms_acceptance_requiredRequired | boolean | True when the instance has a terms version ( |
| featuresRequired | array of FeatureKey | The |
| mfa_enabledRequired | boolean | Whether the account has a second factor. Always false for bots. |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"username": "string",
"display_name": "string",
"kind": "user",
"avatar": "string",
"avatar_dark": "string",
"banner": "string",
"bio": "string",
"pronouns": "string",
"banner_color": 0,
"instance_role": "owner",
"created_at": "2026-10-15T09:00:00Z",
"email": "string",
"email_verified": false,
"address": "string",
"handle": "string",
"terms_version_accepted": "string",
"terms_accepted_at": "2026-10-15T09:00:00Z",
"terms_acceptance_required": false,
"features": [
"threads"
],
"mfa_enabled": false
}
CustomStatus
Type: object
A custom status (for bots, their activity). Hide it once expires_at has passed; no event is sent when it expires.
| Field | Type | Description |
|---|---|---|
| textRequired | string | at least 1 characters; at most 128 characters |
| expires_atRequired | string (date-time) or null |
{
"text": "string",
"expires_at": "2026-10-15T09:00:00Z"
}
DefaultNotificationLevel
Type: string
What notifies members who have not chosen a level for this community. mentions for new communities. Changed with Manage Community.
One of all, mentions
DirectoryCategory
Type: string
One of gaming, music, entertainment, art_design, science_tech, education, books_writing, anime_manga, sports_fitness, hobbies_crafts, food_drink, travel_outdoors, local_community, support_wellbeing, creators, open_source, other
DirectoryLanguage
Type: string
One of ar, cs, da, de, el, en, es, fi, fr, he, hi, hu, id, it, ja, ko, nl, no, pl, pt, ro, ru, sv, th, tr, uk, vi, zh
DirectoryListingDetail
Type: object
A listing with its review state, for its managers and instance admins.
| Field | Type | Description |
|---|---|---|
| owner_idRequired | ID | |
| rules_channel_idRequired | string or null | |
| statusRequired | ListingStatus | |
| pausedRequired | boolean | |
| status_reasonRequired | string or null | |
| visibleRequired | boolean | |
| needs_attentionRequired | boolean | Hidden because the rules channel is gone or not public; see |
| revisionRequired | string | A hash of what review covers: the description, categories, keywords, language and rules channel, and the community's name, icon and banner. Send it with |
| weekly_joinsRequired | integer | |
| submitted_atRequired | string (date-time) | |
| reviewed_atRequired | string (date-time) or null | |
| listed_atRequired | string (date-time) | |
| updated_atRequired | string (date-time) | |
| idRequired | ID | |
| nameRequired | string | |
| iconRequired | ImageHash or null | |
| icon_darkRequired | ImageHash or null | The community's optional dark mode icon; null means use |
| bannerRequired | ImageHash or null | |
| descriptionRequired | string | at most 300 characters |
| primary_categoryRequired | DirectoryCategory | |
| secondary_categoriesRequired | array of DirectoryCategory | at most 3 items |
| keywordsRequired | array of string | at most 10 items |
| languageRequired | DirectoryLanguage | |
| member_countRequired | integer | Refreshed every 5 minutes. |
| online_countRequired | integer | Members with a visible presence, refreshed every 5 minutes. |
| featuredRequired | boolean | The community's tier has the |
| partnerRequired | boolean | |
| vanity_codeRequired | string or null | |
| organizationRequired | OrganizationRef or null | A verified organization, for its badge. |
| created_atRequired | string (date-time) | When the community was created. |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"name": "string",
"icon": "string",
"icon_dark": "string",
"banner": "string",
"description": "string",
"primary_category": "gaming",
"secondary_categories": [
"gaming"
],
"keywords": [
"string"
],
"language": "ar",
"member_count": 0,
"online_count": 0,
"featured": false,
"partner": false,
"vanity_code": "string",
"organization": {
"id": {},
"name": "string",
"domain": "string"
},
"created_at": "2026-10-15T09:00:00Z",
"owner_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"rules_channel_id": "string",
"status": "pending",
"paused": false,
"status_reason": "string",
"visible": false,
"needs_attention": false,
"revision": "string",
"weekly_joins": 0,
"submitted_at": "2026-10-15T09:00:00Z",
"reviewed_at": "2026-10-15T09:00:00Z",
"listed_at": "2026-10-15T09:00:00Z",
"updated_at": "2026-10-15T09:00:00Z"
}
DirectoryListingPatch
Type: object
| Field | Type | Description |
|---|---|---|
| description | string | |
| primary_category | DirectoryCategory | |
| secondary_categories | array of DirectoryCategory | at most 3 items |
| keywords | array of string | at most 10 items |
| language | DirectoryLanguage | |
| rules_channel_id | string or null | |
| paused | boolean |
{
"description": "string",
"primary_category": "gaming",
"secondary_categories": [
"gaming"
],
"keywords": [
"string"
],
"language": "ar",
"rules_channel_id": "string",
"paused": false
}
DirectoryListingRequest
Type: object
| Field | Type | Description |
|---|---|---|
| descriptionRequired | string | 1 to 300 characters, one line, no control or invisible formatting characters. |
| primary_categoryRequired | DirectoryCategory | |
| secondary_categories | array of DirectoryCategory | at most 3 items |
| keywords | array of string | 2 to 32 letters, digits, spaces or hyphens each; lowercased and deduplicated. at most 10 items |
| languageRequired | DirectoryLanguage | |
| rules_channel_id | string or null | A text channel of the community; |
| paused | boolean |
{
"description": "string",
"primary_category": "gaming",
"secondary_categories": [
"gaming"
],
"keywords": [
"string"
],
"language": "ar",
"rules_channel_id": "string",
"paused": false
}
DirectoryRequirement
Type: object
| Field | Type | Description |
|---|---|---|
| keyRequired | string |
One of |
| metRequired | boolean | |
| requiredRequired | integer or null | |
| actualRequired | integer or null |
{
"key": "members",
"met": false,
"required": 0,
"actual": 0
}
DirectorySettings
Type: object
| Field | Type | Description |
|---|---|---|
| listingRequired | DirectoryListingDetail or null | A listing with its review state, for its managers and instance admins. |
| requirementsRequired | array of DirectoryRequirement | |
| enabledRequired | boolean | Whether the instance has a directory. |
| auto_approveRequired | boolean | Whether listings that meet every requirement skip review. |
{
"listing": {
"id": {},
"name": "string",
"icon": {},
"icon_dark": {},
"banner": {},
"description": "string",
"primary_category": {},
"secondary_categories": [],
"keywords": [],
"language": {},
"member_count": 0,
"online_count": 0,
"featured": false,
"partner": false,
"vanity_code": "string",
"organization": {},
"created_at": "2026-10-15T09:00:00Z",
"owner_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"rules_channel_id": "string",
"status": "pending",
"paused": false,
"status_reason": "string",
"visible": false,
"needs_attention": false,
"revision": "string",
"weekly_joins": 0,
"submitted_at": "2026-10-15T09:00:00Z",
"reviewed_at": "2026-10-15T09:00:00Z",
"listed_at": "2026-10-15T09:00:00Z",
"updated_at": "2026-10-15T09:00:00Z"
},
"requirements": [
{
"key": "members",
"met": false,
"required": 0,
"actual": 0
}
],
"enabled": false,
"auto_approve": false
}
DirectoryState
Type: object
A listing's review state, for members with Manage Community.
| Field | Type | Description |
|---|---|---|
| statusRequired | ListingStatus | |
| pausedRequired | boolean | |
| reasonRequired | string or null | The admins' reason for a rejection or delisting. |
| visibleRequired | boolean | Whether the listing shows in the directory now. |
| needs_attentionRequired | boolean | The rules channel is gone or no longer readable by |
| updated_atRequired | string (date-time) |
{
"status": "pending",
"paused": false,
"reason": "string",
"visible": false,
"needs_attention": false,
"updated_at": "2026-10-15T09:00:00Z"
}
DMChannelList
Type: object
| Field | Type | Description |
|---|---|---|
| channelsRequired | array of DMChannelState |
{
"channels": [
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"kind": "dm",
"recipients": [
{
"id": {},
"username": "string",
"display_name": "string",
"kind": {},
"avatar": {},
"avatar_dark": {}
}
],
"created_at": "2026-10-15T09:00:00Z",
"last_message_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"last_read_message_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"mention_count": 0,
"last_pin_timestamp": "2026-10-15T09:00:00Z"
}
]
}
DMChannelState
Type: object
A DM with the caller's read state, as listed over REST and in ready.
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| kindRequired | string | One of |
| recipientsRequired | array of PublicUser | Every participant, the caller included, ordered by ID. |
| created_atRequired | string (date-time) | |
| last_message_idRequired | ID or null | The newest message; null if there is none. |
| last_read_message_idRequired | ID or null | The newest message the caller has read; null if none. |
| mention_countRequired | integer | Messages from the other participants since the caller last acked. Every DM message counts. at least 0 |
| last_pin_timestampRequired | string (date-time) or null | When the newest pin in this DM was made; null when nothing is pinned. |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"kind": "dm",
"recipients": [
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"username": "string",
"display_name": "string",
"kind": "user",
"avatar": "string",
"avatar_dark": "string"
}
],
"created_at": "2026-10-15T09:00:00Z",
"last_message_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"last_read_message_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"mention_count": 0,
"last_pin_timestamp": "2026-10-15T09:00:00Z"
}
Error
Type: object
| Field | Type | Description |
|---|---|---|
| errorRequired | ErrorDetail |
{
"error": {
"code": "account_moved",
"message": "string",
"auto_moderation": {
"trigger_type": "keyword",
"custom_message": "string"
},
"missing_permissions": "2748678791",
"timeout_until": "2026-10-15T09:00:00Z"
}
}
ErrorDetail
Type: object
| Field | Type | Description |
|---|---|---|
| codeRequired | string | One of |
| messageRequired | string | |
| auto_moderation | AutoModerationBlock | |
| missing_permissions | Permissions | With |
| timeout_until | string (date-time) | With |
{
"code": "account_moved",
"message": "string",
"auto_moderation": {
"trigger_type": "keyword",
"custom_message": "string"
},
"missing_permissions": "2748678791",
"timeout_until": "2026-10-15T09:00:00Z"
}
ExecuteWebhookMultipart
Type: object
As on Discord: payload_json holds the JSON body, and up to 10 file parts named files[0] to files[9], each with a filename and a content type. Files are processed like other uploads and recorded as uploads of the webhook's creator. As on Discord, a webhook attaches files whatever the channel's Attach Files permission says: whoever can manage webhooks there decided to allow it.
| Field | Type | Description |
|---|---|---|
| payload_json | string | |
| files[0] | string (binary) | |
| files[1] | string (binary) | |
| files[2] | string (binary) | |
| files[3] | string (binary) | |
| files[4] | string (binary) | |
| files[5] | string (binary) | |
| files[6] | string (binary) | |
| files[7] | string (binary) | |
| files[8] | string (binary) | |
| files[9] | string (binary) |
{
"payload_json": "string",
"files[0]": "(file contents)",
"files[1]": "(file contents)",
"files[2]": "(file contents)",
"files[3]": "(file contents)",
"files[4]": "(file contents)",
"files[5]": "(file contents)",
"files[6]": "(file contents)",
"files[7]": "(file contents)",
"files[8]": "(file contents)",
"files[9]": "(file contents)"
}
ExecuteWebhookRequest
Type: object
| Field | Type | Description |
|---|---|---|
| content | string | Required unless files are attached. |
| username | string | A name for this message only, 1-80 characters, the same rules as other names. |
| message_reference | ReplyReference | Posts the message as a reply to a message in the webhook's channel, as for |
| allowed_mentions | AllowedMentions | |
| attachments | array of object | Only with multipart. Describes the files by their |
| attachments[].idRequired | integer | at least 0; at most 9 |
| attachments[].description | string | |
| attachments[].filename | string | A display name to use instead of the part's; the stored extension stays, as for |
{
"content": "string",
"username": "string",
"message_reference": {
"message_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"fail_if_not_exists": true
},
"allowed_mentions": {
"replied_user": false
},
"attachments": [
{
"id": 0,
"description": "string",
"filename": "string"
}
]
}
FeatureKey
Type: string
A registered feature flag. New flags are added to this list as they ship.
One of threads, automod, discord_templates, account_content_deletion, dark_images, animated_banners, search, emoji_names, markdown, voice, oidc, public_channels, risky_files, platform_admin, community_backup, mfa, malware_scan, sensitive_media, reactions, replies, gifs, stickers, system_notices
FeatureScope
Type: string
What a flag is decided for: a server (community), an account (user), both (community_and_user: a server's own images and settings by the server, a person's own profile by the person), or the whole instance (instance: on in mode everyone, off in mode off; the other modes are refused with invalid_feature_mode and there are no beta lists).
One of community, user, community_and_user, instance
FollowupRequest
Type: object
| Field | Type | Description |
|---|---|---|
| contentRequired | string | |
| ephemeral | boolean | default false |
{
"content": "string",
"ephemeral": false
}
ID
Type: string
A ULID. Sorts lexically in creation order.
pattern ^[0-9A-HJKMNP-TV-Z]{26}$
ImageHash
Type: string
An image of a user or community, or null for none. Build the URL from media.base_url in GET /instance; see InstanceInfo.media. A hash starting with a_ is animated and also has original.gif.
pattern ^(a_)?[0-9a-f]{32}$
InstanceFeature
Type: object
| Field | Type | Description |
|---|---|---|
| keyRequired | FeatureKey | |
| scopeRequired | FeatureScope | |
| availableRequired | boolean | Whether the flag can be on for anyone here (its ceiling is on, it is not killed and its mode is not |
| everyoneRequired | boolean | Whether it is on for every server and account. |
| min_tierRequired | Tier or null | The lowest tier that unlocks it while the flag is in One of |
{
"key": "threads",
"scope": "community",
"available": false,
"everyone": false,
"min_tier": "standard"
}
InstanceInfo
Type: object
The *_enabled booleans are kept for older clients and mean "available on this instance" (the flag's available in features). Whether a feature is on for a given server or account is in the community's and the account's features.
| Field | Type | Description |
|---|---|---|
| featuresRequired | array of InstanceFeature | Every registered feature flag, in registry order. |
| gif_providerRequired | string or null | The GIF provider behind the GIF picker, or null when no provider and key are configured or the One of |
| gif_modeRequired | string or null | How the GIF picker reaches the provider, or null when One of |
| registrationRequired | Registration | |
| require_emailRequired | boolean | Whether signup needs an email address. |
| email_deliveryRequired | boolean | Whether the instance actually sends email. When false, verification and reset links never arrive, so the client can hide "forgot password". |
| captchaRequired | object | |
| captcha.providerRequired | string | One of |
| captcha.site_keyRequired | string or null | The site key to render the widget with. Null when the provider is |
| account_deletion_grace_secondsRequired | integer | How long a deleted account can still be restored. |
| export_cooldown_secondsRequired | integer | The minimum time between two data exports. |
| export_available_for_secondsRequired | integer | How long a finished export can be downloaded. |
| identity_domainRequired | string | The domain after the @ in addresses on this instance. |
| account_moves_enabledRequired | boolean | Whether people may mark their own account as moved ( |
| directory_enabledRequired | boolean | Whether the server directory exists, so clients can hide Discover. |
| automod_enabledRequired | boolean | Whether AutoMod is available here ( |
| search_enabledRequired | boolean | Whether message search is available here ( |
| emoji_names_enabledRequired | boolean | Whether the Discord-style name normalization is available here ( |
| oidc_enabledRequired | boolean | Whether Log in with Palloo is on: the OpenID Connect endpoints, Settings, Authorized Apps and the admin OAuth Apps page. Clients hide those pages while it is false; every OpenID Connect route then answers 404 |
| markdown_enabledRequired | boolean | Whether Discord-style markdown is available here ( |
| voice_enabledRequired | boolean | Whether voice channels are available here ( |
| threads_enabledRequired | boolean | Whether threads are available here ( |
| dark_images_enabledRequired | boolean | Whether new dark mode avatars, server avatars and server icons can be set ( |
| animated_banners_enabledRequired | boolean | Whether banners keep their animation ( |
| terms_urlRequired | string (uri) or null | The terms of service ( |
| privacy_urlRequired | string (uri) or null | The privacy policy ( |
| terms_versionRequired | string or null | The current terms version ( |
| mediaRequired | object | Uploads and images. Images of users and communities are public at
|
| media.base_urlRequired | string (uri) | Always an absolute URL on a host separate from the app: the CDN or bucket address with S3 storage, or |
| media.max_upload_bytesRequired | integer | |
| media.daily_upload_bytesRequired | integer | 0 for no daily quota. |
| media.max_attachmentsRequired | integer | |
| media.attachment_url_ttl_secondsRequired | integer | How long signed attachment URLs work, at least. |
| tiersRequired | array of TierInfo | Every community tier with its limits and perks, lowest first. |
| discord_templates_enabledRequired | boolean | Whether creating a server from a Discord template is available ( |
| account_content_deletion_enabledRequired | boolean | Whether |
{
"features": [
{
"key": "threads",
"scope": "community",
"available": false,
"everyone": false,
"min_tier": "standard"
}
],
"gif_provider": "giphy",
"gif_mode": "proxy",
"registration": "open",
"require_email": false,
"email_delivery": false,
"captcha": {
"provider": "none",
"site_key": "string"
},
"account_deletion_grace_seconds": 0,
"export_cooldown_seconds": 0,
"export_available_for_seconds": 0,
"identity_domain": "string",
"account_moves_enabled": false,
"directory_enabled": false,
"automod_enabled": false,
"search_enabled": false,
"emoji_names_enabled": false,
"oidc_enabled": false,
"markdown_enabled": false,
"voice_enabled": false,
"threads_enabled": false,
"dark_images_enabled": false,
"animated_banners_enabled": false,
"terms_url": "https://app.palloo.app/",
"privacy_url": "https://app.palloo.app/",
"terms_version": "string",
"media": {
"base_url": "https://app.palloo.app/",
"max_upload_bytes": 0,
"daily_upload_bytes": 0,
"max_attachments": 0,
"attachment_url_ttl_seconds": 0
},
"tiers": [
{
"tier": "standard",
"limits": {
"members": 0,
"channels": 0,
"roles": 0,
"upload_bytes": 0,
"emoji_slots": 0,
"sticker_slots": 0
},
"perks": [
"vanity_invite"
],
"features": [
"threads"
]
}
],
"discord_templates_enabled": false,
"account_content_deletion_enabled": false
}
InstanceRole
Type: string
The account's role on this instance. Null for everyone without one. Exactly one local user is the owner; bots and remote users never have a role.
One of owner, admin,
InteractionCallbackRequest
Type: object
| Field | Type | Description |
|---|---|---|
| typeRequired | string | One of |
| content | string | Required with |
| ephemeral | boolean | default false |
{
"type": "message",
"content": "string",
"ephemeral": false
}
InteractionCreate
Type: object
Payload of the interaction_create gateway event, which only the command's bot receives. token answers it.
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| tokenRequired | string | pattern ^palloo_int_ |
| community_idRequired | ID | |
| channel_idRequired | ID | |
| commandRequired | object | |
| command.idRequired | ID | |
| command.nameRequired | string | |
| userRequired | PublicUser | |
| optionsRequired | array of object | |
| options[].nameRequired | string | |
| options[].typeRequired | CommandOptionType | |
| options[].valueRequired | any | The checked value; IDs are uppercase. |
| resolvedRequired | object | |
| resolved.usersRequired | array of PublicUser | |
| resolved.channelsRequired | array of ResolvedChannel | |
| resolved.rolesRequired | array of Role | |
| created_atRequired | string (date-time) | |
| respond_byRequired | string (date-time) | |
| expires_atRequired | string (date-time) |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"token": "palloo_int_...",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"command": {
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"name": "string"
},
"user": {
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"username": "string",
"display_name": "string",
"kind": "user",
"avatar": "string",
"avatar_dark": "string"
},
"options": [
{
"name": "string",
"type": "string",
"value": {}
}
],
"resolved": {
"users": [
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"username": "string",
"display_name": "string",
"kind": "user",
"avatar": "string",
"avatar_dark": {}
}
],
"channels": [
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"name": "string",
"kind": "text"
}
],
"roles": [
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"name": "string",
"color": 0,
"position": 0,
"permissions": "2748678791",
"hoist": false,
"mentionable": false,
"managed": false,
"bot_id": {}
}
]
},
"created_at": "2026-10-15T09:00:00Z",
"respond_by": "2026-10-15T09:00:00Z",
"expires_at": "2026-10-15T09:00:00Z"
}
InteractionDeferred
Type: object
Payload of interaction_deferred, sent to the person who used the command.
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| community_idRequired | ID | |
| channel_idRequired | ID | |
| ephemeralRequired | boolean |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"ephemeral": false
}
InteractionFailure
Type: object
Payload of interaction_failure, sent to the person who used the command.
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| community_idRequired | ID | |
| channel_idRequired | ID | |
| reasonRequired | string |
One of |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"reason": "timeout"
}
Invite
Type: object
| Field | Type | Description |
|---|---|---|
| codeRequired | string | Case-sensitive. pattern ^[0-9A-Za-z]{8}$ |
| community_idRequired | ID | |
| created_byRequired | ID | |
| usesRequired | integer | at least 0 |
| max_usesRequired | integer or null | Null means unlimited. at least 1; at most 1000 |
| expires_atRequired | string (date-time) or null | Null means the invite never expires. |
| created_atRequired | string (date-time) |
{
"code": "string",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"created_by": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"uses": 0,
"max_uses": 1,
"expires_at": "2026-10-15T09:00:00Z",
"created_at": "2026-10-15T09:00:00Z"
}
InviteList
Type: object
| Field | Type | Description |
|---|---|---|
| invitesRequired | array of Invite |
{
"invites": [
{
"code": "string",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"created_by": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"uses": 0,
"max_uses": 1,
"expires_at": "2026-10-15T09:00:00Z",
"created_at": "2026-10-15T09:00:00Z"
}
]
}
InvitePreview
Type: object
| Field | Type | Description |
|---|---|---|
| codeRequired | string | |
| community_idRequired | ID | |
| community_nameRequired | string | |
| iconRequired | ImageHash or null | |
| icon_darkRequired | ImageHash or null | |
| bannerRequired | ImageHash or null | The community banner ( |
| member_countRequired | integer | at least 0 |
| vanityRequired | boolean | Whether the code is the community's vanity code. |
{
"code": "string",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_name": "string",
"icon": "string",
"icon_dark": "string",
"banner": "string",
"member_count": 0,
"vanity": false
}
JoinVoiceRequest
Type: object
| Field | Type | Description |
|---|---|---|
| self_mute | boolean | default false |
| self_deaf | boolean | default false |
{
"self_mute": false,
"self_deaf": false
}
ListingStatus
Type: string
One of pending, approved, rejected, delisted
Member
Type: object
| Field | Type | Description |
|---|---|---|
| userRequired | PublicUser | |
| nicknameRequired | string or null | Shown instead of the display name in this community, when set. |
| avatarRequired | ImageHash or null | The server avatar, shown instead of the user's avatar in this community. Its files live under the |
| avatar_darkRequired | ImageHash or null | The optional dark mode server avatar ( |
| bannerRequired | ImageHash or null | The server banner ( |
| bioRequired | string | The server About Me, shown instead of the user's About Me here when not empty. at most 190 characters |
| pronounsRequired | string | The server pronouns, shown instead of the user's pronouns here when not empty. at most 40 characters |
| rolesRequired | array of ID | IDs of the member's roles, ordered by ID. |
| joined_atRequired | string (date-time) | |
| timeout_untilRequired | string (date-time) or null | When the member's timeout ends, or null when they are not timed out (an ended timeout reads as null). Clients can schedule their own update for that moment; no event is sent when it ends. |
| bot_presence_intent | boolean | Present only for bot members: whether the bot's owner turned on the presence intent, so the bot receives members' status when the community allows it ( |
{
"user": {
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"username": "string",
"display_name": "string",
"kind": "user",
"avatar": "string",
"avatar_dark": "string"
},
"nickname": "string",
"avatar": "string",
"avatar_dark": "string",
"banner": "string",
"bio": "string",
"pronouns": "string",
"roles": [
"01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
],
"joined_at": "2026-10-15T09:00:00Z",
"timeout_until": "2026-10-15T09:00:00Z",
"bot_presence_intent": false
}
MemberPage
Type: object
| Field | Type | Description |
|---|---|---|
| membersRequired | array of Member | |
| nextRequired | string or null | Pass as pattern ^[0-9A-HJKMNP-TV-Z]{26}$ |
{
"members": [
{
"user": {
"id": {},
"username": "string",
"display_name": "string",
"kind": {},
"avatar": {},
"avatar_dark": {}
},
"nickname": "string",
"avatar": "string",
"avatar_dark": "string",
"banner": "string",
"bio": "string",
"pronouns": "string",
"roles": [
"01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
],
"joined_at": "2026-10-15T09:00:00Z",
"timeout_until": "2026-10-15T09:00:00Z",
"bot_presence_intent": false
}
],
"next": "string"
}
Message
Type: object
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| channel_idRequired | ID | |
| community_id | ID | The channel's community. Absent for messages in direct messages. |
| authorRequired | MessageAuthor | |
| webhook_id | ID | Set when a webhook posted the message; |
| contentRequired | string | Empty for a bot without the message content permission, unless the bot wrote the message or is in |
| attachmentsRequired | array of Attachment | In upload order. Empty for a bot without the message content permission, as with at most 10 items |
| sticker_items | array of StickerItem | The sticker the message was sent with; left out when it has none. at most 1 items |
| gif_url | string | The GIF the message was sent with through the picker; left out otherwise, and dropped when an edit removes the URL from |
| created_atRequired | string (date-time) | |
| edited_atRequired | string (date-time) or null | When the content was last edited; null if never. |
| mentionsRequired | array of PublicUser | Users mentioned with |
| mention_rolesRequired | array of ID | Roles mentioned with |
| mention_everyoneRequired | boolean | True when the content has |
| mention_hereRequired | boolean | True when |
| interaction | MessageInteraction | Set on a bot's answer to a slash command; who used which command. |
| ephemeral | boolean | True on an ephemeral answer to a slash command: it only reaches the person who used the command, over the gateway, and is never stored (history never returns it, and it is gone after a reload). |
| nonce | string | Only on the response to the send that carried it, and on the matching |
| kindRequired | string |
One of |
| pinnedRequired | boolean | Whether the message is pinned in its channel. See |
| reactions | array of Reaction | The message's reactions, oldest emoji first, with at most 20 items |
| message_reference | MessageReference | On system messages: the pinned message, the thread ( |
| thread | Channel | The public thread started from this message, or announced by a |
| referenced_message | Message | On a |
| auto_moderation | AutoModerationAlert | Only on an |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"author": {
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"username": "string",
"display_name": "string",
"kind": "user",
"avatar": "string",
"avatar_dark": "string"
},
"webhook_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"content": "string",
"attachments": [
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"filename": "string",
"description": "string",
"content_type": "string",
"size": 1,
"url": "string",
"thumbnail_url": "string",
"width": 0,
"height": 0,
"placeholder": "string",
"spoiler": false,
"risk": "none",
"sensitive": "none",
"quarantined": false
}
],
"sticker_items": [
{
"id": "string",
"name": "string",
"format": "string",
"animated": false,
"community_id": "string",
"pack_id": "string",
"hash": "string",
"available": false
}
],
"gif_url": "string",
"created_at": "2026-10-15T09:00:00Z",
"edited_at": "2026-10-15T09:00:00Z",
"mentions": [
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"username": "string",
"display_name": "string",
"kind": "user",
"avatar": "string",
"avatar_dark": "string"
}
],
"mention_roles": [
"01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
],
"mention_everyone": false,
"mention_here": false,
"interaction": {
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"name": "string",
"user": {
"id": {},
"username": "string",
"display_name": "string",
"kind": {},
"avatar": {},
"avatar_dark": {}
}
},
"ephemeral": false,
"nonce": "string",
"kind": "default",
"pinned": false,
"reactions": [
{
"emoji": {
"id": "string",
"name": "string"
},
"count": 1,
"me": false
}
],
"message_reference": {
"message_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
},
"thread": {
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"name": "string",
"kind": "text",
"position": 0,
"parent_id": "string",
"topic": "string",
"created_at": "2026-10-15T09:00:00Z",
"overwrites": [
{
"type": "role",
"id": {},
"allow": {},
"deny": {}
}
],
"owner_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"message_count": 0,
"member_count": 0,
"thread_metadata": {
"archived": false,
"auto_archive_duration": 60,
"archive_timestamp": "2026-10-15T09:00:00Z",
"locked": false,
"invitable": false,
"create_timestamp": "2026-10-15T09:00:00Z"
},
"user_limit": 0,
"bitrate": 8000,
"age_restricted": false
},
"referenced_message": {},
"auto_moderation": {
"rule_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"rule_name": "string",
"trigger_type": "keyword",
"channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"message_id": "string",
"blocked": false,
"edit": false,
"matched_keyword": "string",
"matched_content": "string",
"content": "string",
"content_hidden": false,
"content_removed": false,
"attachments": [
"string"
],
"timeout_seconds": 0,
"timeout_until": "2026-10-15T09:00:00Z"
}
}
MessageAuthor
Type: object
Who posted a message: a user or bot (the PublicUser fields), or a webhook (kind: "webhook", id is the webhook's ID and both names are the name it posted with).
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| usernameRequired | string | |
| display_nameRequired | string | |
| kindRequired | string | One of |
| avatarRequired | ImageHash or null | Always null for a webhook. |
| avatar_darkRequired | ImageHash or null | The dark mode avatar. Always null for a webhook. |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"username": "string",
"display_name": "string",
"kind": "user",
"avatar": "string",
"avatar_dark": "string"
}
MessageDeleteBulk
Type: object
Payload of the message_delete_bulk gateway event, sent to the same connections as message_delete, for several messages of one channel at once (at most 500), for example when a deleted account's messages are removed. last_message_id is the channel's newest message after the deletion, or null when none is left. community_id is absent for DMs. A viewer without Read Message History gets only the IDs of messages sent after their connection loaded the community, and last_message_id null.
| Field | Type | Description |
|---|---|---|
| idsRequired | array of ID | at most 500 items |
| channel_idRequired | ID | |
| community_id | ID | |
| last_message_idRequired | ID or null | A ULID. Sorts lexically in creation order. |
{
"ids": [
"01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
],
"channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"last_message_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
}
MessageInteraction
Type: object
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| nameRequired | string | The command's name. |
| userRequired | PublicUser |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"name": "string",
"user": {
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"username": "string",
"display_name": "string",
"kind": "user",
"avatar": "string",
"avatar_dark": "string"
}
}
MessageList
Type: object
| Field | Type | Description |
|---|---|---|
| messagesRequired | array of Message |
{
"messages": [
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"author": {
"id": {},
"username": "string",
"display_name": "string",
"kind": "user",
"avatar": {},
"avatar_dark": {}
},
"webhook_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"content": "string",
"attachments": [
{
"id": {},
"filename": "string",
"description": "string",
"content_type": "string",
"size": 1,
"url": "string",
"thumbnail_url": "string",
"width": 0,
"height": 0,
"placeholder": "string",
"spoiler": false,
"risk": {},
"sensitive": {},
"quarantined": false
}
],
"sticker_items": [
{
"id": "string",
"name": "string",
"format": "string",
"animated": false,
"community_id": "string",
"pack_id": "string",
"hash": "string",
"available": false
}
],
"gif_url": "string",
"created_at": "2026-10-15T09:00:00Z",
"edited_at": "2026-10-15T09:00:00Z",
"mentions": [
{
"id": {},
"username": "string",
"display_name": "string",
"kind": {},
"avatar": {},
"avatar_dark": {}
}
],
"mention_roles": [
"01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
],
"mention_everyone": false,
"mention_here": false,
"interaction": {
"id": {},
"name": "string",
"user": {}
},
"ephemeral": false,
"nonce": "string",
"kind": "default",
"pinned": false,
"reactions": [
{
"emoji": {},
"count": 1,
"me": false
}
],
"message_reference": {
"message_id": {},
"channel_id": {}
},
"thread": {
"id": {},
"community_id": {},
"name": "string",
"kind": {},
"position": 0,
"parent_id": "string",
"topic": {},
"created_at": "2026-10-15T09:00:00Z",
"overwrites": [],
"owner_id": {},
"message_count": 0,
"member_count": 0,
"thread_metadata": {},
"user_limit": 0,
"bitrate": 8000,
"age_restricted": false
},
"referenced_message": {},
"auto_moderation": {
"rule_id": {},
"rule_name": "string",
"trigger_type": {},
"channel_id": {},
"message_id": "string",
"blocked": false,
"edit": false,
"matched_keyword": "string",
"matched_content": "string",
"content": "string",
"content_hidden": false,
"content_removed": false,
"attachments": [],
"timeout_seconds": 0,
"timeout_until": "2026-10-15T09:00:00Z"
}
}
]
}
MessageReference
Type: object
{
"message_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
}
ModerateVoiceStateRequest
Type: object
| Field | Type | Description |
|---|---|---|
| mute | boolean | |
| deaf | boolean | |
| channel_id | string or null | Move the member to this voice channel, or disconnect them with null. |
{
"mute": false,
"deaf": false,
"channel_id": "string"
}
ModerationAction
Type: string
One of community.update, community.transfer_ownership, community.vanity_update, community.directory_update, channel.create, channel.update, channel.delete, channel.reorder, channel.overwrite_update, channel.overwrite_delete, role.create, role.update, role.delete, role.reorder, member.role_add, member.role_remove, member.nickname, member.profile_reset, member.kick, member.ban, member.unban, member.timeout, member.timeout_remove, message.delete, message.pin, message.unpin, bot.add, report.update, attachment.quarantine, thread.create, thread.update, thread.delete, auto_moderation.rule_create, auto_moderation.rule_update, auto_moderation.rule_delete, auto_moderation.block_message, auto_moderation.flag_to_channel, auto_moderation.timeout, voice.mute, voice.deafen, voice.move, voice.disconnect, public_web.update, public_web.channel, public_web.hide, public_web.show, public_web.answer, sticker.create, sticker.update, sticker.delete
ModerationLogEntry
Type: object
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| community_idRequired | ID | |
| actionRequired | ModerationAction | |
| actor_idRequired | ID | |
| actor_kindRequired | string |
One of |
| actorRequired | PublicUser or null | The actor as they are now; null once the account is gone. |
| target_typeRequired | string | One of |
| target_idRequired | ID | |
| target_userRequired | PublicUser or null | For a |
| report_idRequired | string or null | The report the action was taken from. Always null for callers without Moderate Members. |
| reasonRequired | string or null | |
| detailsRequired | object | Action-specific. Updates record each change as |
| created_atRequired | string (date-time) |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"action": "community.update",
"actor_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"actor_kind": "member",
"actor": {
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"username": "string",
"display_name": "string",
"kind": "user",
"avatar": "string",
"avatar_dark": "string"
},
"target_type": "community",
"target_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"target_user": {
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"username": "string",
"display_name": "string",
"kind": "user",
"avatar": "string",
"avatar_dark": "string"
},
"report_id": "string",
"reason": "string",
"details": {},
"created_at": "2026-10-15T09:00:00Z"
}
ModerationLogPage
Type: object
| Field | Type | Description |
|---|---|---|
| entriesRequired | array of ModerationLogEntry | |
| nextRequired | string or null | Pass as pattern ^[0-9A-HJKMNP-TV-Z]{26}$ |
{
"entries": [
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"action": "community.update",
"actor_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"actor_kind": "member",
"actor": {
"id": {},
"username": "string",
"display_name": "string",
"kind": {},
"avatar": {},
"avatar_dark": {}
},
"target_type": "community",
"target_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"target_user": {
"id": {},
"username": "string",
"display_name": "string",
"kind": {},
"avatar": {},
"avatar_dark": {}
},
"report_id": "string",
"reason": "string",
"details": {},
"created_at": "2026-10-15T09:00:00Z"
}
],
"next": "string"
}
OAuthError
Type: object
The OAuth 2.0 error shape (RFC 6749), used by the token, userinfo and revocation endpoints.
| Field | Type | Description |
|---|---|---|
| errorRequired | string | |
| error_description | string |
{
"error": "string",
"error_description": "string"
}
OAuthTokenRequest
Type: object
| Field | Type | Description |
|---|---|---|
| grant_typeRequired | string | One of |
| code | string | |
| redirect_uri | string | |
| code_verifier | string | |
| refresh_token | string | |
| scope | string | |
| client_id | string | |
| client_assertion_type | string | One of |
| client_assertion | string |
{
"grant_type": "authorization_code",
"code": "string",
"redirect_uri": "string",
"code_verifier": "string",
"refresh_token": "string",
"scope": "string",
"client_id": "string",
"client_assertion_type": "urn:ietf:params:oauth:client-assertion-type:jwt-bearer",
"client_assertion": "string"
}
OAuthTokens
Type: object
| Field | Type | Description |
|---|---|---|
| access_tokenRequired | string | Opaque; only opens the userinfo endpoint. Valid 10 minutes. |
| token_typeRequired | string | One of |
| expires_inRequired | integer | |
| refresh_tokenRequired | string | Single use; valid 30 days. |
| id_tokenRequired | string | A JWT valid 5 minutes, signed with the app's |
| scopeRequired | string |
{
"access_token": "string",
"token_type": "Bearer",
"expires_in": 0,
"refresh_token": "string",
"id_token": "string",
"scope": "string"
}
OAuthUserinfo
Type: object
The scope claims, read live on every call; they are never in the ID token.
| Field | Type | Description |
|---|---|---|
| subRequired | string | The user ID; it never changes. |
| preferred_username | string | With |
| name | string | With |
| picture | string | With |
| string | With |
|
| email_verified | boolean | With |
| palloo_instance_role | string or null | With One of |
{
"sub": "string",
"preferred_username": "string",
"name": "string",
"picture": "string",
"email": "string",
"email_verified": false,
"palloo_instance_role": "owner"
}
OnlineMember
Type: object
Gateway only, an entry of online_members.
| Field | Type | Description |
|---|---|---|
| memberRequired | Member | |
| presenceRequired | Presence | |
| hoisted_role_idRequired | ID or null | The member's highest role (by position) with |
{
"member": {
"user": {
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"username": "string",
"display_name": "string",
"kind": "user",
"avatar": "string",
"avatar_dark": {}
},
"nickname": "string",
"avatar": "string",
"avatar_dark": "string",
"banner": "string",
"bio": "string",
"pronouns": "string",
"roles": [
"01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
],
"joined_at": "2026-10-15T09:00:00Z",
"timeout_until": "2026-10-15T09:00:00Z",
"bot_presence_intent": false
},
"presence": {
"user_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"status": "online",
"custom_status": {
"text": "string",
"expires_at": "2026-10-15T09:00:00Z"
},
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
},
"hoisted_role_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
}
OnlineMembers
Type: object
Gateway only: the online_members payload, the answer to request_online_members. A page of the community's members who are not offline, sorted for a member list: by the position of hoisted_role_id (highest first, members without one last), then by name (nickname, else display name, else username, case-insensitively), then by user ID. offset and total refer to that sorted list, which the server builds at most every 5 seconds per server process; between builds, members who leave, are removed or go offline drop out at once and status changes show at once, while members who come online appear with the next build. members can be shorter than asked when the page holds blocked users, who are left out. truncated means the community has more than 10,000 members online and only 10,000 were listed.
| Field | Type | Description |
|---|---|---|
| community_idRequired | ID | |
| offsetRequired | integer | at least 0 |
| totalRequired | integer | at least 0 |
| truncatedRequired | boolean | |
| membersRequired | array of OnlineMember | at most 100 items |
{
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"offset": 0,
"total": 0,
"truncated": false,
"members": [
{
"member": {
"user": {},
"nickname": "string",
"avatar": {},
"avatar_dark": {},
"banner": {},
"bio": "string",
"pronouns": "string",
"roles": [],
"joined_at": "2026-10-15T09:00:00Z",
"timeout_until": "2026-10-15T09:00:00Z",
"bot_presence_intent": false
},
"presence": {
"user_id": {},
"status": {},
"custom_status": {},
"community_id": {}
},
"hoisted_role_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
}
]
}
OpenDMRequest
Type: object
| Field | Type | Description |
|---|---|---|
| recipient_idRequired | string |
{
"recipient_id": "string"
}
Organization
Type: object
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| nameRequired | string | |
| descriptionRequired | string or null | |
| owner_idRequired | ID | |
| owner_usernameRequired | string | |
| domainRequired | string | |
| domain_idRequired | string or null | The domain claim it was verified with; null once the claim is removed. |
| statusRequired | string | One of |
| verifiedRequired | boolean | Approved and its domain claim is active now; only then do members and communities show the badge. |
| submitted_atRequired | string (date-time) | |
| reviewed_atRequired | string (date-time) or null | |
| decision_reasonRequired | string or null | |
| communitiesRequired | array of object | |
| communities[].idRequired | ID | |
| communities[].nameRequired | string | |
| membersRequired | array of OrganizationMember | Active members; the owner and instance admins also see invitations. |
| my_stateRequired | string or null | One of |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"name": "string",
"description": "string",
"owner_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"owner_username": "string",
"domain": "string",
"domain_id": "string",
"status": "pending",
"verified": false,
"submitted_at": "2026-10-15T09:00:00Z",
"reviewed_at": "2026-10-15T09:00:00Z",
"decision_reason": "string",
"communities": [
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"name": "string"
}
],
"members": [
{
"user": {
"id": {},
"username": "string",
"display_name": "string",
"kind": {},
"avatar": {},
"avatar_dark": {}
},
"state": "invited",
"invited_at": "2026-10-15T09:00:00Z",
"joined_at": "2026-10-15T09:00:00Z"
}
],
"my_state": "invited"
}
OrganizationMember
Type: object
| Field | Type | Description |
|---|---|---|
| userRequired | PublicUser | |
| stateRequired | string | One of |
| invited_atRequired | string (date-time) | |
| joined_atRequired | string (date-time) or null |
{
"user": {
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"username": "string",
"display_name": "string",
"kind": "user",
"avatar": "string",
"avatar_dark": "string"
},
"state": "invited",
"invited_at": "2026-10-15T09:00:00Z",
"joined_at": "2026-10-15T09:00:00Z"
}
OrganizationRef
Type: object
A verified organization, for its badge.
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| nameRequired | string | |
| domainRequired | string | The organization's verified domain, in its ASCII (punycode) form. |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"name": "string",
"domain": "string"
}
Overwrite
Type: object
| Field | Type | Description |
|---|---|---|
| typeRequired | string | One of |
| idRequired | ID | The role ID (the community ID for |
| allowRequired | Permissions | |
| denyRequired | Permissions |
{
"type": "role",
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"allow": "2748678791",
"deny": "2748678791"
}
OverwriteRequest
Type: object
Only channel permissions may appear (View Channel, Send Messages, Read Message History, Manage Messages, Manage Channels, Manage Roles, Mention Everyone), and no bit may be both allowed and denied.
| Field | Type | Description |
|---|---|---|
| allow | Permissions | A 64-bit permission set as a decimal string. See the |
| deny | Permissions | A 64-bit permission set as a decimal string. See the |
{
"allow": "2748678791",
"deny": "2748678791"
}
Perk
Type: string
One of vanity_invite, partner_badge, featured
Permissions
Type: string
A 64-bit permission set as a decimal string. See the roles tag for the bits.
pattern ^[0-9]{1,20}$
PermissionSet
Type: object
| Field | Type | Description |
|---|---|---|
| community_idRequired | ID | |
| permissionsRequired | Permissions | Community-wide permissions (everything for the owner and for Administrator). |
| channelsRequired | array of object | Effective permissions in each channel the caller can view, in channel order. Channels the caller cannot view are left out. |
| channels[].channel_idRequired | ID | |
| channels[].permissionsRequired | Permissions | |
| timeout_untilRequired | string (date-time) or null | When the caller's timeout ends, or null. While timed out, |
{
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"permissions": "2748678791",
"channels": [
{
"channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"permissions": "2748678791"
}
],
"timeout_until": "2026-10-15T09:00:00Z"
}
Pin
Type: object
| Field | Type | Description |
|---|---|---|
| pinned_atRequired | string (date-time) | |
| messageRequired | Message |
{
"pinned_at": "2026-10-15T09:00:00Z",
"message": {
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"author": {
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"username": "string",
"display_name": "string",
"kind": "user",
"avatar": {},
"avatar_dark": {}
},
"webhook_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"content": "string",
"attachments": [
{
"id": {},
"filename": "string",
"description": "string",
"content_type": "string",
"size": 1,
"url": "string",
"thumbnail_url": "string",
"width": 0,
"height": 0,
"placeholder": "string",
"spoiler": false,
"risk": {},
"sensitive": {},
"quarantined": false
}
],
"sticker_items": [
{
"id": "string",
"name": "string",
"format": "string",
"animated": false,
"community_id": "string",
"pack_id": "string",
"hash": "string",
"available": false
}
],
"gif_url": "string",
"created_at": "2026-10-15T09:00:00Z",
"edited_at": "2026-10-15T09:00:00Z",
"mentions": [
{
"id": {},
"username": "string",
"display_name": "string",
"kind": {},
"avatar": {},
"avatar_dark": {}
}
],
"mention_roles": [
"01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
],
"mention_everyone": false,
"mention_here": false,
"interaction": {
"id": {},
"name": "string",
"user": {}
},
"ephemeral": false,
"nonce": "string",
"kind": "default",
"pinned": false,
"reactions": [
{
"emoji": {},
"count": 1,
"me": false
}
],
"message_reference": {
"message_id": {},
"channel_id": {}
},
"thread": {
"id": {},
"community_id": {},
"name": "string",
"kind": {},
"position": 0,
"parent_id": "string",
"topic": {},
"created_at": "2026-10-15T09:00:00Z",
"overwrites": [],
"owner_id": {},
"message_count": 0,
"member_count": 0,
"thread_metadata": {},
"user_limit": 0,
"bitrate": 8000,
"age_restricted": false
},
"referenced_message": {},
"auto_moderation": {
"rule_id": {},
"rule_name": "string",
"trigger_type": {},
"channel_id": {},
"message_id": "string",
"blocked": false,
"edit": false,
"matched_keyword": "string",
"matched_content": "string",
"content": "string",
"content_hidden": false,
"content_removed": false,
"attachments": [],
"timeout_seconds": 0,
"timeout_until": "2026-10-15T09:00:00Z"
}
}
}
PinList
Type: object
| Field | Type | Description |
|---|---|---|
| pinsRequired | array of Pin | Newest pin first. at most 50 items |
{
"pins": [
{
"pinned_at": "2026-10-15T09:00:00Z",
"message": {
"id": {},
"channel_id": {},
"community_id": {},
"author": {},
"webhook_id": {},
"content": "string",
"attachments": [],
"sticker_items": [],
"gif_url": "string",
"created_at": "2026-10-15T09:00:00Z",
"edited_at": "2026-10-15T09:00:00Z",
"mentions": [],
"mention_roles": [],
"mention_everyone": false,
"mention_here": false,
"interaction": {},
"ephemeral": false,
"nonce": "string",
"kind": "default",
"pinned": false,
"reactions": [],
"message_reference": {},
"thread": {},
"referenced_message": {},
"auto_moderation": {}
}
}
]
}
Presence
Type: object
Gateway only: the presence_update payload and an entry of ready.presences, presence_list and online_members. A user without an entry is offline.
| Field | Type | Description |
|---|---|---|
| user_idRequired | ID | |
| statusRequired | PresenceStatus | |
| custom_statusRequired | CustomStatus or null | A custom status (for bots, their activity). Hide it once |
| community_id | ID | Only on a |
{
"user_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"status": "online",
"custom_status": {
"text": "string",
"expires_at": "2026-10-15T09:00:00Z"
},
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
}
PresenceList
Type: object
Gateway only: the presence_list payload, sent when a connection starts following a community with subscribe_presence. Lists members who are not offline, at most 1,000; truncated means there were more.
| Field | Type | Description |
|---|---|---|
| community_idRequired | ID | |
| presencesRequired | array of Presence | |
| truncatedRequired | boolean |
{
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"presences": [
{
"user_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"status": "online",
"custom_status": {
"text": "string",
"expires_at": "2026-10-15T09:00:00Z"
},
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
}
],
"truncated": false
}
PresenceStatus
Type: string
A user's status as others see it. invisible is never sent to anyone but the user's own connections; others see offline.
One of online, idle, dnd, offline
Profile
Type: object
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| usernameRequired | string | |
| display_nameRequired | string | |
| kindRequired | UserKind | |
| avatarRequired | ImageHash or null | |
| avatar_darkRequired | ImageHash or null | The optional dark mode avatar (same |
| bannerRequired | ImageHash or null | |
| bioRequired | string | at most 190 characters |
| pronounsRequired | string | at most 40 characters |
| banner_colorRequired | BannerColor or null | |
| created_atRequired | string (date-time) | When the account was created. |
| addressRequired | string | |
| handleRequired | string | |
| moved_toRequired | string or null | Set when the account moved; clients should look the new address up instead. |
| signing_keyRequired | SigningKey or null | |
| verified_domainsRequired | array of string | Active domain claims the account shows, in ASCII (punycode) form; show mixed-script names as punycode. Empty when the account hides the |
| badgesRequired | array of Badge | Visible badges in display order. |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"username": "string",
"display_name": "string",
"kind": "user",
"avatar": "string",
"avatar_dark": "string",
"banner": "string",
"bio": "string",
"pronouns": "string",
"banner_color": 0,
"created_at": "2026-10-15T09:00:00Z",
"address": "string",
"handle": "string",
"moved_to": "string",
"signing_key": {
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"algorithm": "ed25519",
"public_key": "string",
"created_at": "2026-10-15T09:00:00Z",
"retired_at": "2026-10-15T09:00:00Z",
"retire_reason": "rotated"
},
"verified_domains": [
"string"
],
"badges": [
{
"key": "staff",
"name": "string",
"description": "string",
"label": "string",
"kind": "automatic",
"issuer": "string",
"tier": {
"key": "string",
"name": "string",
"level": 1
},
"next_tier": {
"key": "string",
"name": "string",
"requirement": "string"
},
"active": false,
"hidden": false,
"hideable": false,
"granted_at": "2026-10-15T09:00:00Z",
"expires_at": "2026-10-15T09:00:00Z",
"organization": {
"id": {},
"name": "string",
"domain": "string"
},
"domains": [
"string"
]
}
]
}
Pronouns
Type: string
Trimmed, then at most 40 characters with no control or invisible formatting characters. Null or an empty string clears them.
PublicUser
Type: object
What any member of a shared community can see about a user.
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| usernameRequired | string | |
| display_nameRequired | string | |
| kindRequired | UserKind | |
| avatarRequired | ImageHash or null | |
| avatar_darkRequired | ImageHash or null | The optional dark mode avatar (same |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"username": "string",
"display_name": "string",
"kind": "user",
"avatar": "string",
"avatar_dark": "string"
}
PublicWebChannelState
Type: object
| Field | Type | Description |
|---|---|---|
| channel_idRequired | ID | |
| threadRequired | boolean | |
| publishedRequired | boolean | The channel (or a thread's parent) is published. |
| liveRequired | boolean | The page is served right now. |
| urlRequired | string or null | |
| hiddenRequired | boolean | A thread hidden from the web. |
| answer_message_idRequired | ID or null | A ULID. Sorts lexically in creation order. |
| hidden_message_idsRequired | array of ID | |
| can_publishRequired | boolean | |
| can_hideRequired | boolean | |
| can_answerRequired | boolean |
{
"channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"thread": false,
"published": false,
"live": false,
"url": "string",
"hidden": false,
"answer_message_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"hidden_message_ids": [
"01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
],
"can_publish": false,
"can_hide": false,
"can_answer": false
}
PublicWebSettings
Type: object
A community's public web settings.
| Field | Type | Description |
|---|---|---|
| community_idRequired | ID | |
| enabledRequired | boolean | The master switch. |
| name_displayRequired | string | How authors are named on public pages; One of |
| invite_codeRequired | string or null | The invite the join button uses when there is no vanity invite. Only for Manage Community. |
| urlRequired | string | The community's public page. |
| liveRequired | boolean | Whether the community's pages are served right now. |
| can_manageRequired | boolean | |
| requirementsRequired | array of object | What must hold before pages are served, only for members with Manage Community (empty for everyone else). |
| requirements[].keyRequired | string | One of |
| requirements[].metRequired | boolean | |
| channelsRequired | array of object | |
| channels[].channel_idRequired | ID | |
| channels[].urlRequired | string | |
| channels[].liveRequired | boolean | Served right now: the community is live and |
{
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"enabled": false,
"name_display": "member",
"invite_code": "string",
"url": "string",
"live": false,
"can_manage": false,
"requirements": [
{
"key": "upload_scanner",
"met": false
}
],
"channels": [
{
"channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"url": "string",
"live": false
}
]
}
QuarantineRequest
Type: object
| Field | Type | Description |
|---|---|---|
| reason | string | Up to 512 characters, for the moderation log. |
{
"reason": "string"
}
Reaction
Type: object
One emoji on a message, as on Discord.
| Field | Type | Description |
|---|---|---|
| emojiRequired | ReactionEmoji | |
| countRequired | integer | How many people reacted with it. at least 1 |
| meRequired | boolean | Whether the caller is one of them. |
{
"emoji": {
"id": "string",
"name": "string"
},
"count": 1,
"me": false
}
ReactionEmoji
Type: object
| Field | Type | Description |
|---|---|---|
| idRequired | string or null | Always null for now; reserved for custom emoji. |
| nameRequired | string | The Unicode emoji. at least 1 characters; at most 64 characters |
{
"id": "string",
"name": "string"
}
ReactionUserList
Type: object
| Field | Type | Description |
|---|---|---|
| usersRequired | array of PublicUser | In the order they reacted. at most 100 items |
{
"users": [
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"username": "string",
"display_name": "string",
"kind": "user",
"avatar": "string",
"avatar_dark": "string"
}
]
}
ReadState
Type: object
The caller's read state in one channel. The channel is unread when its newest message ID is greater than last_read_message_id, or there is a newest message and this is null.
| Field | Type | Description |
|---|---|---|
| channel_idRequired | ID | |
| community_id | ID | Absent for direct messages. |
| last_read_message_idRequired | ID or null | The newest message the caller has read; null if none. |
| mention_countRequired | integer | Messages that pinged the caller since the channel was last acked. In a DM every message from another participant counts. at least 0 |
{
"channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"last_read_message_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"mention_count": 0
}
RegisterCommandRequest
Type: object
| Field | Type | Description |
|---|---|---|
| nameRequired | string | |
| descriptionRequired | string | |
| options | array of CommandOption |
{
"name": "string",
"description": "string",
"options": [
{
"name": "string",
"description": "string",
"type": "string",
"required": false,
"min_length": 1,
"max_length": 1,
"min_value": 0,
"max_value": 0
}
]
}
Registration
Type: string
open: anyone can sign up. invite: signup needs a valid community invite code, and the new account joins that community. closed: no signup; accounts are created with palloo admin create-user.
One of open, invite, closed
ReorderChannelsRequest
Type: object
| Field | Type | Description |
|---|---|---|
| channelsRequired | array of object | at least 1 items; at most 500 items |
| channels[].idRequired | ID | |
| channels[].positionRequired | integer | at least 0; at most 9999 |
| channels[].parent_id | string or null | A category in the same community, or null for none. Omit to keep the parent. |
| channels[].lock_permissions | boolean | With a category default false |
{
"channels": [
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"position": 0,
"parent_id": "string",
"lock_permissions": false
}
]
}
ReorderRolesRequest
Type: object
| Field | Type | Description |
|---|---|---|
| rolesRequired | array of object | at least 1 items |
| roles[].idRequired | ID | |
| roles[].positionRequired | integer | Distinct, from 1 to the number of roles other than at least 1 |
{
"roles": [
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"position": 1
}
]
}
ReplyReference
Type: object
Makes the message a reply, as on Discord. The message must be a default message in the same channel, thread or DM; replying to a message in another channel and to system messages is refused. Replying needs Read Message History as well as Send Messages, and the replies flag on for the server (in a DM, for the sender).
| Field | Type | Description |
|---|---|---|
| message_idRequired | ID | |
| channel_id | ID | Optional; when given it must be the channel the reply is sent to. |
| fail_if_not_exists | boolean | When false, a reply whose message no longer exists (or never did) is sent as a plain message instead of being refused with default true |
{
"message_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"fail_if_not_exists": true
}
ResolvedChannel
Type: object
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| nameRequired | string | |
| kindRequired | ChannelKind |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"name": "string",
"kind": "text"
}
Role
Type: object
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| community_idRequired | ID | |
| nameRequired | string | |
| colorRequired | integer or null | An RGB color as a number (0xRRGGBB), or null for none. at least 0; at most 16777215 |
| positionRequired | integer | 0 for at least 0 |
| permissionsRequired | Permissions | |
| hoistRequired | boolean | Show members with this role separately in the member list. |
| mentionableRequired | boolean | Whether anyone may mention the role. Stored now, used when mentions exist. |
| managedRequired | boolean | True for the role created when a bot was added. It cannot be deleted, assigned or removed by hand, and disappears when the bot leaves. |
| bot_idRequired | ID or null | The bot a managed role belongs to; null for every other role. |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"name": "string",
"color": 0,
"position": 0,
"permissions": "2748678791",
"hoist": false,
"mentionable": false,
"managed": false,
"bot_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
}
RoleList
Type: object
| Field | Type | Description |
|---|---|---|
| rolesRequired | array of Role |
{
"roles": [
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"name": "string",
"color": 0,
"position": 0,
"permissions": "2748678791",
"hoist": false,
"mentionable": false,
"managed": false,
"bot_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
}
]
}
SetVanityRequest
Type: object
| Field | Type | Description |
|---|---|---|
| codeRequired | string | 3 to 32 letters, digits and single hyphens, not starting or ending with a hyphen. Lowercased. |
{
"code": "string"
}
SigningKey
Type: object
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| algorithmRequired | string | One of |
| public_keyRequired | string | The 32 byte Ed25519 public key in base64url without padding. |
| created_atRequired | string (date-time) | |
| retired_atRequired | string (date-time) or null | |
| retire_reasonRequired | string or null | One of |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"algorithm": "ed25519",
"public_key": "string",
"created_at": "2026-10-15T09:00:00Z",
"retired_at": "2026-10-15T09:00:00Z",
"retire_reason": "rotated"
}
StickerItem
Type: object
The sticker a message carries. available is false once a server sticker was deleted: clients show "Unknown sticker", and the other fields are empty.
| Field | Type | Description |
|---|---|---|
| idRequired | string | |
| nameRequired | string | |
| formatRequired | string |
|
| animatedRequired | boolean | |
| community_idRequired | string or null | |
| pack_idRequired | string or null | |
| hashRequired | string or null | |
| availableRequired | boolean |
{
"id": "string",
"name": "string",
"format": "string",
"animated": false,
"community_id": "string",
"pack_id": "string",
"hash": "string",
"available": false
}
ThreadAnswerRequest
Type: object
| Field | Type | Description |
|---|---|---|
| message_idRequired | ID |
{
"message_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
}
ThreadDelete
Type: object
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| community_idRequired | ID | |
| parent_idRequired | ID | |
| kindRequired | string | One of |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"parent_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"kind": "public_thread"
}
ThreadList
Type: object
| Field | Type | Description |
|---|---|---|
| threadsRequired | array of ChannelState | |
| has_moreRequired | boolean | Archived lists only; always false for the active list. |
{
"threads": [
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"name": "string",
"kind": "text",
"position": 0,
"parent_id": "string",
"topic": "string",
"created_at": "2026-10-15T09:00:00Z",
"overwrites": [
{
"type": "role",
"id": {},
"allow": {},
"deny": {}
}
],
"owner_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"message_count": 0,
"member_count": 0,
"thread_metadata": {
"archived": false,
"auto_archive_duration": 60,
"archive_timestamp": "2026-10-15T09:00:00Z",
"locked": false,
"invitable": false,
"create_timestamp": "2026-10-15T09:00:00Z"
},
"last_message_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"last_read_message_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"mention_count": 0,
"last_pin_timestamp": "2026-10-15T09:00:00Z",
"member": {
"id": {},
"user_id": {},
"join_timestamp": "2026-10-15T09:00:00Z",
"flags": 0,
"member": {}
}
}
],
"has_more": false
}
ThreadListSync
Type: object
The active threads of channel_ids the connection can now see, replacing what it had for those channels. Sent when the connection gains access to a channel or loses or gains Manage Threads in it.
| Field | Type | Description |
|---|---|---|
| community_idRequired | ID | |
| channel_idsRequired | array of ID | |
| threadsRequired | array of ChannelState |
{
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"channel_ids": [
"01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
],
"threads": [
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"name": "string",
"kind": "text",
"position": 0,
"parent_id": "string",
"topic": "string",
"created_at": "2026-10-15T09:00:00Z",
"overwrites": [
{
"type": "role",
"id": {},
"allow": {},
"deny": {}
}
],
"owner_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"message_count": 0,
"member_count": 0,
"thread_metadata": {
"archived": false,
"auto_archive_duration": 60,
"archive_timestamp": "2026-10-15T09:00:00Z",
"locked": false,
"invitable": false,
"create_timestamp": "2026-10-15T09:00:00Z"
},
"last_message_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"last_read_message_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"mention_count": 0,
"last_pin_timestamp": "2026-10-15T09:00:00Z",
"member": {
"id": {},
"user_id": {},
"join_timestamp": "2026-10-15T09:00:00Z",
"flags": 0,
"member": {}
}
}
]
}
ThreadMember
Type: object
| Field | Type | Description |
|---|---|---|
| idRequired | ID | The thread's ID. |
| user_idRequired | ID | |
| join_timestampRequired | string (date-time) | |
| flagsRequired | integer | Always 0 for now. |
| member | Member | The community member, in the thread member list only. |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"user_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"join_timestamp": "2026-10-15T09:00:00Z",
"flags": 0,
"member": {
"user": {
"id": {},
"username": "string",
"display_name": "string",
"kind": {},
"avatar": {},
"avatar_dark": {}
},
"nickname": "string",
"avatar": "string",
"avatar_dark": "string",
"banner": "string",
"bio": "string",
"pronouns": "string",
"roles": [
"01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
],
"joined_at": "2026-10-15T09:00:00Z",
"timeout_until": "2026-10-15T09:00:00Z",
"bot_presence_intent": false
}
}
ThreadMemberList
Type: object
| Field | Type | Description |
|---|---|---|
| membersRequired | array of ThreadMember | |
| nextRequired | string or null | Pass as |
{
"members": [
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"user_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"join_timestamp": "2026-10-15T09:00:00Z",
"flags": 0,
"member": {
"user": {},
"nickname": "string",
"avatar": {},
"avatar_dark": {},
"banner": {},
"bio": "string",
"pronouns": "string",
"roles": [],
"joined_at": "2026-10-15T09:00:00Z",
"timeout_until": "2026-10-15T09:00:00Z",
"bot_presence_intent": false
}
}
],
"next": "string"
}
ThreadMembersUpdate
Type: object
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| community_idRequired | ID | |
| member_countRequired | integer | at least 0 |
| added_membersRequired | array of ThreadMember | |
| removed_member_idsRequired | array of ID |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"member_count": 0,
"added_members": [
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"user_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"join_timestamp": "2026-10-15T09:00:00Z",
"flags": 0,
"member": {
"user": {},
"nickname": "string",
"avatar": {},
"avatar_dark": {},
"banner": {},
"bio": "string",
"pronouns": "string",
"roles": [],
"joined_at": "2026-10-15T09:00:00Z",
"timeout_until": "2026-10-15T09:00:00Z",
"bot_presence_intent": false
}
}
],
"removed_member_ids": [
"01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
]
}
ThreadMemberUpdate
Type: object
The caller's own membership of a thread changed.
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| user_idRequired | ID | |
| join_timestampRequired | string (date-time) | |
| flagsRequired | integer | |
| community_idRequired | ID | |
| joinedRequired | boolean | True when the caller joined or was added, false when they left or were removed. |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"user_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"join_timestamp": "2026-10-15T09:00:00Z",
"flags": 0,
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"joined": false
}
ThreadMetadata
Type: object
Threads only.
| Field | Type | Description |
|---|---|---|
| archivedRequired | boolean | |
| auto_archive_durationRequired | integer | Minutes without a message after which the thread archives itself. One of |
| archive_timestampRequired | string (date-time) | When the thread was last archived or unarchived (its creation if never). |
| lockedRequired | boolean | Only members with Manage Threads can send, unarchive or change it. |
| invitable | boolean | Private threads only. Whether members without Manage Threads can add people to the thread. |
| create_timestampRequired | string (date-time) |
{
"archived": false,
"auto_archive_duration": 60,
"archive_timestamp": "2026-10-15T09:00:00Z",
"locked": false,
"invitable": false,
"create_timestamp": "2026-10-15T09:00:00Z"
}
Tier
Type: string
A community's tier: the highest community entitlement in force (community_level_1 to community_level_3, community_partner), standard without one.
One of standard, level_1, level_2, level_3, partner
TierInfo
Type: object
| Field | Type | Description |
|---|---|---|
| tierRequired | Tier | |
| limitsRequired | CommunityLimits | |
| perksRequired | array of Perk | |
| featuresRequired | array of FeatureKey | The feature flags this tier unlocks right now (flags in |
{
"tier": "standard",
"limits": {
"members": 0,
"channels": 0,
"roles": 0,
"upload_bytes": 0,
"emoji_slots": 0,
"sticker_slots": 0
},
"perks": [
"vanity_invite"
],
"features": [
"threads"
]
}
TimeoutRequest
Type: object
Exactly one of until and duration_seconds.
| Field | Type | Description |
|---|---|---|
| until | string (date-time) | When the timeout ends. In the future and at most 28 days after the server's clock. |
| duration_seconds | integer | How long the timeout lasts, counted from the server's clock. Prefer this for presets. at least 1; at most 2419200 |
| reason | string or null | Recorded in the moderation log. At most 512 characters with no control or invisible formatting characters. |
{
"until": "2026-10-15T09:00:00Z",
"duration_seconds": 1,
"reason": "string"
}
TypingStart
Type: object
Gateway only, the typing_start payload. community_id is absent in a DM.
| Field | Type | Description |
|---|---|---|
| channel_idRequired | ID | |
| community_id | ID | |
| user_idRequired | ID | |
| started_atRequired | string (date-time) |
{
"channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"user_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"started_at": "2026-10-15T09:00:00Z"
}
UpdateAutoModerationRuleRequest
Type: object
| Field | Type | Description |
|---|---|---|
| name | string | |
| event_type | string | One of |
| trigger_type | AutoModerationTriggerType | Accepted only when it is the rule's own trigger type. One of |
| trigger_metadata | AutoModerationTriggerMetadata | |
| actions | array of AutoModerationAction | |
| enabled | boolean | |
| exempt_roles | array of string | |
| exempt_channels | array of string |
{
"name": "string",
"event_type": "message_send",
"trigger_type": "keyword",
"trigger_metadata": {
"keyword_filter": [
"string"
],
"regex_patterns": [
"string"
],
"presets": [
"profanity"
],
"allow_list": [
"string"
],
"mention_total_limit": 1,
"mention_raid_protection_enabled": false
},
"actions": [
{
"type": "block_message",
"metadata": {
"custom_message": "string",
"channel_id": {},
"duration_seconds": 1
}
}
],
"enabled": false,
"exempt_roles": [
"string"
],
"exempt_channels": [
"string"
]
}
UpdateChannelRequest
Type: object
| Field | Type | Description |
|---|---|---|
| name | string | Same rules as when creating the channel. |
| parent_id | string or null | Move the channel into this category, or out of its category with null. |
| topic | ChannelTopic or null | Text channels only. Null or an empty string clears the topic. |
| user_limit | integer | Voice channels only ( at least 0; at most 99 |
| bitrate | integer | Voice channels only ( at least 8000; at most 96000 |
| age_restricted | boolean | Text and voice channels only ( |
| archived | boolean | Threads only. Archive or unarchive. The owner or Manage Threads can archive; unarchiving needs Manage Threads when the thread is locked. |
| locked | boolean | Threads only. Needs Manage Threads. |
| auto_archive_duration | integer | Threads only. The owner or Manage Threads. One of |
| invitable | boolean | Private threads only. Needs Manage Threads. |
{
"name": "string",
"parent_id": "string",
"topic": "string",
"user_limit": 0,
"bitrate": 8000,
"age_restricted": false,
"archived": false,
"locked": false,
"auto_archive_duration": 60,
"invitable": false
}
UpdateCommunityRequest
Type: object
| Field | Type | Description |
|---|---|---|
| name | string | Trimmed, then 1 to 100 characters with no control or invisible formatting characters. |
| default_notification_level | DefaultNotificationLevel | |
| bot_presence_allowed | boolean | Whether bots with the presence intent receive this community's presence. |
| icon | string or null | A finalized |
| icon_dark | string or null | A finalized |
| banner | string or null | A finalized |
{
"name": "string",
"default_notification_level": "all",
"bot_presence_allowed": false,
"icon": "string",
"icon_dark": "string",
"banner": "string"
}
UpdateCurrentUserRequest
Type: object
| Field | Type | Description |
|---|---|---|
| display_name | string or null | Trimmed, then at most 64 characters with no control or invisible formatting characters. Null or an empty string goes back to the username. |
| bio | AboutMe or null | |
| pronouns | Pronouns or null | |
| banner_color | BannerColor or null | |
| avatar | string or null | A finalized |
| avatar_dark | string or null | A finalized |
| banner | string or null | A finalized |
{
"display_name": "string",
"bio": "string",
"pronouns": "string",
"banner_color": 0,
"avatar": "string",
"avatar_dark": "string",
"banner": "string"
}
UpdateMemberRequest
Type: object
| Field | Type | Description |
|---|---|---|
| nickname | string or null | Trimmed, then at most 32 characters with no control or invisible formatting characters. Null or an empty string clears the nickname. |
| avatar | string or null | A finalized |
| avatar_dark | string or null | A finalized |
| banner | string or null | A finalized |
| bio | AboutMe or null | |
| pronouns | Pronouns or null |
{
"nickname": "string",
"avatar": "string",
"avatar_dark": "string",
"banner": "string",
"bio": "string",
"pronouns": "string"
}
UpdateMessageRequest
Type: object
Give content, attachments or both.
| Field | Type | Description |
|---|---|---|
| content | string | Same rules as when sending. |
| attachments | array of object | The attachments to keep, by ID; the others are removed. Attachments cannot be added. |
| attachments[].idRequired | ID |
{
"content": "string",
"attachments": [
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
}
]
}
UpdateMyVoiceStateRequest
Type: object
| Field | Type | Description |
|---|---|---|
| self_mute | boolean | |
| self_deaf | boolean |
{
"self_mute": false,
"self_deaf": false
}
UpdatePublicWebRequest
Type: object
| Field | Type | Description |
|---|---|---|
| enabled | boolean | |
| name_display | string | One of |
| invite_code | string or null |
{
"enabled": false,
"name_display": "member",
"invite_code": "string"
}
UpdateRoleRequest
Type: object
| Field | Type | Description |
|---|---|---|
| name | string | Same rules as when creating. |
| color | integer or null | Null removes the color. at least 0; at most 16777215 |
| permissions | Permissions | |
| hoist | boolean | |
| mentionable | boolean |
{
"name": "string",
"color": 0,
"permissions": "2748678791",
"hoist": false,
"mentionable": false
}
Upload
Type: object
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| purposeRequired | string | One of |
| stateRequired | string | One of |
| filenameRequired | string | |
| sizeRequired | integer | |
| content_typeRequired | string | |
| channel_idRequired | string or null | |
| community_idRequired | string or null | |
| widthRequired | integer or null | |
| heightRequired | integer or null | |
| placeholderRequired | string or null | |
| animatedRequired | boolean | |
| expires_atRequired | string (date-time) | Use the upload before this, or it is deleted. |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"purpose": "attachment",
"state": "ready",
"filename": "string",
"size": 0,
"content_type": "string",
"channel_id": "string",
"community_id": "string",
"width": 0,
"height": 0,
"placeholder": "string",
"animated": false,
"expires_at": "2026-10-15T09:00:00Z"
}
UploadFile
Type: object
| Field | Type | Description |
|---|---|---|
| filenameRequired | string | The original name; any path is removed. |
| sizeRequired | integer | The exact size in bytes. at least 1 |
| content_typeRequired | string | The type the client believes the file has. The upload must be sent with exactly this |
{
"filename": "string",
"size": 1,
"content_type": "string"
}
UploadSlot
Type: object
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| filenameRequired | string | |
| sizeRequired | integer | |
| content_typeRequired | string | |
| upload_urlRequired | string | Where to send the bytes. |
| upload_methodRequired | string | One of |
| upload_headersRequired | map of string | Send exactly these headers with the upload, and no |
| upload_expires_atRequired | string (date-time) | When |
| expires_atRequired | string (date-time) | When the slot expires; finalize before then. |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"filename": "string",
"size": 0,
"content_type": "string",
"upload_url": "string",
"upload_method": "PUT",
"upload_headers": {
"key": "string"
},
"upload_expires_at": "2026-10-15T09:00:00Z",
"expires_at": "2026-10-15T09:00:00Z"
}
UploadSlotList
Type: object
| Field | Type | Description |
|---|---|---|
| attachmentsRequired | array of UploadSlot |
{
"attachments": [
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"filename": "string",
"size": 0,
"content_type": "string",
"upload_url": "string",
"upload_method": "PUT",
"upload_headers": {
"key": "string"
},
"upload_expires_at": "2026-10-15T09:00:00Z",
"expires_at": "2026-10-15T09:00:00Z"
}
]
}
UserKind
Type: string
Bots are accounts driven by a program rather than a person.
One of user, bot
UserUpdate
Type: object
The user_update gateway payload: a user changed their global profile. Sent to their own connections, to every community they are in, to their friends and to everyone they share a direct message with.
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| usernameRequired | string | |
| display_nameRequired | string | |
| kindRequired | UserKind | |
| avatarRequired | ImageHash or null | |
| avatar_darkRequired | ImageHash or null | The optional dark mode avatar (same |
| bannerRequired | ImageHash or null | |
| bioRequired | string | at most 190 characters |
| pronounsRequired | string | at most 40 characters |
| banner_colorRequired | BannerColor or null |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"username": "string",
"display_name": "string",
"kind": "user",
"avatar": "string",
"avatar_dark": "string",
"banner": "string",
"bio": "string",
"pronouns": "string",
"banner_color": 0
}
VanityInvite
Type: object
| Field | Type | Description |
|---|---|---|
| community_idRequired | ID | |
| codeRequired | string | Lowercase; the link is |
| usesRequired | integer | |
| created_atRequired | string (date-time) | |
| lapsed_atRequired | string (date-time) or null | When the tier stopped including the perk. The code keeps working for 14 days. |
| release_atRequired | string (date-time) or null | When a lapsed code is released unless the tier comes back. |
{
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"code": "string",
"uses": 0,
"created_at": "2026-10-15T09:00:00Z",
"lapsed_at": "2026-10-15T09:00:00Z",
"release_at": "2026-10-15T09:00:00Z"
}
VoiceJoin
Type: object
| Field | Type | Description |
|---|---|---|
| urlRequired | string | The LiveKit server to connect to ( |
| tokenRequired | string | The LiveKit access token. Secret to the caller; never log it. |
| expires_atRequired | string (date-time) | |
| voice_stateRequired | VoiceState | |
| bitrateRequired | integer | The channel's audio bitrate, for publishing the microphone. |
| can_speakRequired | boolean | Speak, and not server muted or deafened. Without it no audio can be published: neither the microphone nor a screen share's audio. |
| can_videoRequired | boolean | Video. Without it the camera and screen share cannot be published. A screen share carries audio only when |
| voice_activityRequired | boolean | Use Voice Activity. Without it the client must use push to talk, as on Discord. |
| priority_speakerRequired | boolean | Priority Speaker. Clients lower other people while this member speaks. |
{
"url": "string",
"token": "string",
"expires_at": "2026-10-15T09:00:00Z",
"voice_state": {
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"channel_id": "string",
"user_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"session_id": "string",
"mute": false,
"deaf": false,
"self_mute": false,
"self_deaf": false,
"self_video": false,
"self_stream": false,
"joined_at": "2026-10-15T09:00:00Z"
},
"bitrate": 0,
"can_speak": false,
"can_video": false,
"voice_activity": false,
"priority_speaker": false
}
VoiceState
Type: object
A user's voice state in a server, the voice_state_update payload. channel_id is null when the user left voice. mute and deaf are server mute and deafen, set by moderators. self_video and self_stream come from LiveKit: whether a camera or a screen share is being published.
| Field | Type | Description |
|---|---|---|
| community_idRequired | ID | |
| channel_idRequired | string or null | |
| user_idRequired | ID | |
| session_idRequired | string | Changes on every join; empty after leaving. |
| muteRequired | boolean | |
| deafRequired | boolean | |
| self_muteRequired | boolean | |
| self_deafRequired | boolean | |
| self_videoRequired | boolean | |
| self_streamRequired | boolean | |
| joined_atRequired | string (date-time) or null | When the user joined this channel; null after leaving. |
{
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"channel_id": "string",
"user_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"session_id": "string",
"mute": false,
"deaf": false,
"self_mute": false,
"self_deaf": false,
"self_video": false,
"self_stream": false,
"joined_at": "2026-10-15T09:00:00Z"
}
Webhook
Type: object
| Field | Type | Description |
|---|---|---|
| idRequired | ID | |
| channel_idRequired | ID | |
| community_idRequired | ID | |
| nameRequired | string | |
| created_byRequired | ID or null | Who created it; null once that account is gone. |
| created_atRequired | string (date-time) |
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"name": "string",
"created_by": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"created_at": "2026-10-15T09:00:00Z"
}
WebhookList
Type: object
| Field | Type | Description |
|---|---|---|
| webhooksRequired | array of Webhook |
{
"webhooks": [
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"name": "string",
"created_by": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"created_at": "2026-10-15T09:00:00Z"
}
]
}
WebhookNameRequest
Type: object
| Field | Type | Description |
|---|---|---|
| nameRequired | string | 1-80 characters, the same rules as other names. |
{
"name": "string"
}
WebhookWithToken
Type: object
| Field | Type | Description |
|---|---|---|
| webhookRequired | Webhook | |
| tokenRequired | string | The token for pattern ^palloo_wh_ |
{
"webhook": {
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"name": "string",
"created_by": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
"created_at": "2026-10-15T09:00:00Z"
},
"token": "palloo_wh_..."
}