Presence Resource

A user's presence is their current status and activity. Presences are usually per-guild, but user accounts also receive overall user presences for friends and implicit relationships (depending on the NO_AFFINE_USER_IDS Gateway capability).

Presence Object

Presence Structure
FieldTypeDescription
userpartial user objectThe user whose presence is being updated
guild_id?snowflakeID of the guild the presence was updated in, if this is a guild presence
statusstringThe status of the user
activitiesarray[activity object]The current activities the user is partaking in
client_statusclient status objectThe platform-dependent status of the user
Status Type
ValueDescription
onlineOnline
dndDo Not Disturb
idleAFK
invisible 1Shown as offline
offline 1Offline
unknown 2Unknown

1 invisible can only be sent and never received. offline can only be received and never sent.

2 This value can only be sent, and is used when the user's initial presence is unknown and should be assigned by the Gateway.

Client Status Object

Active sessions are indicated with a status per platform. If a user is offline or invisible, the corresponding field is not present.

FieldTypeDescription
desktop?stringThe user's status on an active desktop (Windows, Linux, Mac) application session
mobile?stringThe user's status on an active mobile (iOS, Android) application session
web? 1stringThe user's status on an active web (browser) application session
embedded?stringThe user's status on an active embedded (Xbox, PlayStation) session

1 Used as the default when the platform is not known.

Activity Object

Activity Structure
FieldTypeDescription
idstringThe ID of the activity; only unique across a single user's activities
name 1stringThe name of the activity
typeintegerThe activity type
url? 2?stringThe stream URL
created_atintegerUnix timestamp (in milliseconds) of when the activity was added to the user's session
session_id??stringThe ID of the session associated with the activity
platform? 3stringThe platform the activity is being played on
supported_platforms?array[string]The platforms the activity is supported on
timestamps?activity timestamps objectUnix timestamps (in milliseconds) for start and/or end of the game
application_id?snowflakeThe ID of the application representing the game the user is playing
details??stringWhat the user is currently doing
state? 4?stringThe user's current party status
sync_id?stringThe ID of the synced activity (e.g. Spotify song ID)
flags?integerThe activity's flags
buttons?array[string]Custom buttons shown in rich presence (max 2)
emoji??activity emoji objectThe emoji used for a custom/hang status
party?activity party objectInformation for the current party of the user
assets?activity assets objectImages for the presence and their hover texts
secrets? 5activity secrets objectSecrets for rich presence joining and spectating
metadata? 5activity metadata objectAdditional metadata for the activity

1 The name of a CUSTOM activity should always be "Custom Status". The name of a HANG activity should always be "Hang Status".

2 The STREAMING type currently only supports Twitch and YouTube. Only https://twitch.tv/ and https://youtube.com/ URLs will work.

3 This field is not commonly used for traditional presences (i.e. presences sent by regular clients over the Gateway) and is instead used to differentiate between various headless and embedded activities.

4 In the case of the HANG type, this field should be one of the hang status types. If set to custom, the details field should be used to specify the custom text, and the emoji field should be used to specify the custom emoji.

5 These fields are send-only. For retrieving rich presence metadata, see Get Activity Metadata. For retrieving secrets, see Get Activity Secret.

Activity Type
ValueNameFormatExample
0PLAYINGPlaying {name}"Playing Rocket League"
1STREAMINGStreaming {details}"Streaming Rocket League"
2LISTENINGListening to {name}"Listening to Spotify"
3WATCHINGWatching {name}"Watching YouTube Together"
4CUSTOM{emoji} {state}"😃 I am cool"
5COMPETINGCompeting in {name}"Competing in Arena World Champions"
6HANG 1{state} or {emoji} {details} 2"Chilling"

1 This type is only displayed if the user has an active voice state.

2 See activity hang status type for more information.

Activity Platform Type
ValueDescription
desktopDesktop (headless)
xboxXbox integration
samsungSamsung integration
iosiOS
androidAndroid
embeddedEmbedded session
ps4PlayStation 4 integration
ps5PlayStation 5 integration
Activity Hang Status Type

When a HANG activity's state is set to one of these values, a built-in corresponding emoji will be used instead of the custom emoji field.

ValueExample
chillingChilling
gamingGAMING
focusingIn the zone
brbGonna BRB
eatingGrubbin
in-transitWandering IRL
watchingWatchin' stuff
custom{details}
Activity Flags
ValueNameDescription
1 << 0INSTANCEThis activity is an instanced game session (a match that will end)
1 << 1JOINThis activity can be joined by other users
1 << 2SPECTATE (deprecated) 1This activity can be spectated by other users
1 << 3JOIN_REQUEST 2This activity requires a request to join
1 << 4SYNCThis activity can be synced
1 << 5PLAYThis activity can be played
1 << 6PARTY_PRIVACY_FRIENDSThis activity's party can be joined by friends
1 << 7PARTY_PRIVACY_VOICE_CHANNELThis activity's party can be joined by users in the same voice channel
1 << 8EMBEDDEDThis activity is embedded within the Discord client

1 Spectating has been removed from official clients and is no longer supported.

2 Activities no longer need to be explicitly flagged as join requestable.

Activity Action Type
ValueNameDescription
1JOIN 1Allows others to join a game with the user
2SPECTATE (deprecated) 1 2Allows others to spectate a game the user is playing
3LISTENAllows others to listen to a song with the user
4WATCHAllows others to join a stream with the user
5JOIN_REQUEST 3Asks others to invite the user to a game

1 These rich presence invites can be used with the Get Activity Secret endpoint to join/spectate the activity.

2 Spectating has been removed from official clients and is no longer supported.

3 This action type is special in that instead of inviting others to a party, it asks existing party members to invite the user to join their party. Inviting users is done by sending a message back with a rich presence invite.

Activity Timestamps Structure
FieldTypeDescription
start?stringUnix time (in milliseconds) of when the activity starts
end?stringUnix time (in milliseconds) of when the activity ends
Activity Emoji Structure
FieldTypeDescription
namestringThe name of the emoji
id?snowflakeThe ID of the emoji
animated?booleanWhether this emoji is animated
Activity Party Structure
FieldTypeDescription
id?stringThe ID of the party
size?array[integer, integer]The party's current and maximum size (current_size, max_size)
Activity Assets Structure
FieldTypeDescription
large_image?stringThe large activity asset image
large_text?stringText displayed when hovering over the large image of the activity
small_image?stringThe small activity asset image
small_text?stringText displayed when hovering over the small image of the activity
Activity Asset Image

Activity asset images are arbitrary strings which usually contain snowflake IDs or prefixed image IDs. Treat data within this field carefully, as it is user-specifiable and not sanitized.

To use an external image via media proxy, specify the URL as the field's value when sending. You will only receive the mp:-prefixed value via the Gateway.

TypeFormatImage URL
Application Asset{application_asset_id}See application asset image formatting
Media Proxymp:{image_id}https://media.discordapp.net/{image_id}
Twitchtwitch:{username}https://static-cdn.jtvnw.net/previews-ttv/live_user_{username}-{width}x{height}.jpg
YouTubeyoutube:{video_id}https://i.ytimg.com/vi/{video_id}/{thumbnail_type}.jpg
Activity Secrets Structure
FieldTypeDescription
join?stringThe secret for joining a party
spectate? (deprecated) 1stringThe secret for spectating a game
match?stringThe secret for a specific instanced match

1 Spectating has been removed from official clients and is no longer supported.

Operating System Type
ValueDescription
win32Windows
darwinmacOS
linuxLinux
Example Activity
{
"id": "d11307d8c0abb136",
"created_at": "1695164784863",
"details": "24H RL Stream for Charity",
"state": "Rocket League",
"name": "Twitch",
"type": 1,
"url": "https://www.twitch.tv/discord",
"assets": {
"large_image": "twitch:discord"
}
}
Example Activity with Rich Presence
{
"id": "d11307d8c0abb135",
"name": "Rocket League",
"type": 0,
"created_at": "1695164784863",
"session_id": "30f32c5d54ae86130fc4a215c7474263",
"application_id": "379286085710381999",
"state": "In a Match",
"details": "Ranked Duos: 2-1",
"platform": "xbox",
"flags": 0,
"timestamps": {
"start": "1695164482423"
},
"party": {
"id": "9dd6594e-81b3-49f6-a6b5-a679e6a060d3",
"size": [2, 2]
},
"assets": {
"large_image": "351371005538729000",
"large_text": "DFH Stadium",
"small_image": "351371005538729111",
"small_text": "Silver III"
},
"secrets": {
"join": "025ed05c71f639de8bfaa0d679d7c94b2fdce12f"
}
}

Activity Metadata Object

Activity Metadata Structure
FieldTypeDescription
button_urls?array[string]The URLs corresponding to the custom buttons shown in rich presence (max 2)
artist_ids?array[string]The Spotify IDs of the artists of the song being played
album_id?stringThe Spotify ID of the album of the song being played
context_uri?stringThe Spotify URI of the current player context

Endpoints

Get Presences

GET/presences

Returns the overall user presence for all of the user's non-offline friends and implicit relationships.

Response Body
FieldTypeDescription
presencesarray[presence object]The overall user presences of the user's non-offline friends and implicit relationships
applicationsarray[partial application object]The found game applications in the presences

Update Presence

POST/presences

Updates the current user's mobile game activity. Returns a 204 empty response on success. Fires a Sessions Replace Gateway event.

JSON Params
FieldTypeDescription
package_namestringThe package name of the game (e.g. com.supercell.clashofclans)
update?stringThe type of update (default UPDATE)
Presence Update Type
ValueDescription
STARTStart a new game session
UPDATEUpdate the current game session
STOPStop the current game session

Get Activity Metadata

GET/users/{user.id}/sessions/{session_id}/activities/{application.id}/metadata

Returns the activity metadata for a given activity, or a 204 empty response if no metadata is found.

Get Activity Secret

GET/users/{user.id}/sessions/{session_id}/activities/{activity.id}/{activity_action_type}

Returns an activity secret that can be used to join or spectate the game. Only supports the JOIN and SPECTATE action types.

Query String Params
FieldTypeDescription
channel_id?snowflakeThe ID of the channel the rich presence invite has been sent in
message_id?snowflakeThe ID of the rich presence invite message
Response Body
FieldTypeDescription
secretstringThe activity secret
Example Response
{ "secret": "025ed05c71f639de8bfaa0d679d7c94b2fdce12f" }