taking longer than usual.

skip to content
sometimes/ developers

developers / bots / resources

profiles and settings

profile changes cover the complete Profile page except username. settings changes exclude profile, testing, stickers and account.

API 1 · REST + gatewaydownload reference

profile fields

GET /me/profile needs profile.read_self; GET /profiles/{user} needs the matching self/others read grant and ordinary profile visibility. PATCH /me/profile needs profile.write and returns changed fields plus id and revision. a write-only bot can get its concurrency revision from /me/profile/revision without reading the profile. writable fields are display_name, about, pronouns, avatar_asset_id, banner_asset_id, background_gradient, profile_art, nameplate_name_color, nameplate_background_color, online_indicator_color, nameplate_art and announcement_pack. null clears optional photo/banner/art/color fields. username, email, phone, badges, roles, points and counters are rejected even under administrator.

profile validation and artwork

display_name follows the current 20-character weighted limit; about is at most 200 weighted characters and six lines; pronouns are at most 40 weighted characters. background_gradient is {top,bottom} with validated #rrggbb colors. nameplate and indicator colors use the existing palette IDs or theme default. announcement_pack is an available catalogue ID (the empty string selects the default pack). artwork uses the existing ProfileArt v2 schema: strokes plus positioned emoji/sticker items; profile canvas is 428×549 within a 440×561 card, nameplate canvas is 280×64. profile limits are 1,500 strokes/40 items/180,000 total points/1,500,000 encoded characters; nameplate limits are 400 strokes/8 emoji-only items/24,000 total points/240,000 characters. profile writes allow 1,756,384 JSON bytes; other JSON requests retain their normal cap. preserve current palette, geometry, safety and ownership validation. modifying a profile never downloads private sticker bytes without its corresponding access.

allowed settings

GET /me/settings and PATCH /me/settings require settings.write. expose only allowlisted setting fields; do not return reports, contact details, sessions, export data or account/security controls. account settings include online/typing visibility, incoming friend/shared-group DM preferences, quiet-hour schedule and timed pause. appearance includes theme and current account appearance preferences. instance settings include push/in-app/category alerts and previews, ringtone, text size/spacing, motion, autoplay/load-media/subtle-drawing preferences, enter-to-send, quick reaction/emoji preference where supported, audio mode, device choices, join-muted, feedback sounds, volume and own-camera-preview preference. GET /limits lists every supported account and instance field with its constraints.

device-specific settings

instance-only changes require an explicit opaque target_id obtained from GET /me/settings/targets. targets expose a device label and known device_choices, never session tokens, IP addresses or raw hardware IDs. only already-known device choices can be selected; bots cannot trigger microphone/camera capture or OS permission dialogs. account writes do not overwrite every device implicitly. removed targets return 404; changing theme does not change profile artwork. blocks require user.blocks.write, chat mutes require chats.mute and friend-request actions need their own grants.

profile and settings routes

profile and settings patches are atomic, use If-Match, retain existing cooldowns and return field errors without partial saves. GET /limits provides supported field enums, numerical bounds and current remaining quota, so a developer can validate before making a write.

scroll the table horizontally to see all columns.

method and pathrequestresult
GET /me/profilenone; permission 18Profile + ETag
GET /profiles/{user}none; permission 18/19visible Profile + ETag
PATCH /me/profileallowlisted Profile patch; If-Match; permission 20changed fields + id + revision
GET /me/profile/revisionpermission 20{id,revision}; no profile contents
GET /profiles/{user}/assets/{asset}profile access grantauthorized image/art bytes
GET /announcement-packspermission 20{id,name} catalogue; no private account data
GET /me/settingstarget_id?; permission 21allowed settings + ETag
GET /me/settings/targetscursor, limit; permission 21opaque settings target IDs + labels + permitted values
PATCH /me/settingstarget_id? and allowlisted patch; If-Match; permission 21changed settings + revision
GET /chats/{chat}/mutepermission 22{muted,revision}
PUT /chats/{chat}/mutemuted:boolean; If-Match; permission 22{muted,revision}