Quests are a way for Discord to promote games and other content to users. Users can receive rewards for completing quests, such as redeemable codes, in-game items, or collectibles.
A sponsored quest.
Field Type Description id snowflake The ID of the quest config quest config objectThe configuration and metadata for the quest user_status ?quest user status object The user's quest progress, if it has been accepted targeted_content 1 ?array[integer] The content areas where the quest can be shown preview boolean Whether the quest is unreleased and in preview for Discord employees
1 Some quest content areas may be dismissed using the Dismiss Quest Content endpoint.
Field Type Description id snowflake The ID of the quest
The quest definition.
The config structure has multiple distinct versions with different field sets. Only actively used versions are kept documented. As of now, only the latest version is available.
Field Type Description rollout ?string The name of the experiment that controls the quest's rollout targeting ?string The name of the experiment that controls the quest's targeting preview ?string The name of the experiment that controls the quest's preview availability
Field Type Description id snowflake The ID of the application name string The name of the application link string The link to the game's page
An object holding CDN asset names .
Field Type Description hero string The quest's hero image hero_video ?string A video representation of the hero image quest_bar_hero string The hero image used in the quest popup that appears when launching the game before accepting the quest quest_bar_hero_video ?string A video representation of the quest bar hero image game_tile string The game's icon logotype string The game's logo
A 2-point gradient with a and color.
Field Type Description primary string The hex-encoded primary color of the gradient secondary string The hex-encoded secondary color of the gradient
Field Type Description quest_name string The name of the quest game_title string The title of the game the quest is for game_publisher string The publisher of the game the quest is for
Field Type Description type integer The type of task configuration join_operator 1 string The eligibility operator used to join multiple tasks ( or ) enrollment_url? string The third-party link to the quest tasks enrollment page developer_application_id? snowflake The ID of the developer application for the quest tasks integration tasks map[string, quest task object] The tasks required to complete the quest, keyed by their event name
1 For a task to be considered complete, the user must complete either all tasks (when is ) or at least one task (when is ).
Field Type Description event_name string The type of task event target integer The required duration (in seconds) external_ids? array[string] The IDs of the games on third-party platforms description? string The third-party task description
Value Name Description 1 FIRST_PARTY The tasks are first-party 2 THIRD_PARTY The tasks are third-party
Value Description STREAM_ON_DESKTOP The user must play and stream the game on desktop to at least one other user for a certain duration (see Update Activity Session ) PLAY_ON_DESKTOP The user must play the game on desktop for a certain duration (see Update Activity Session ) PLAY_ON_DESKTOP_V2 The user must play the game on desktop for a certain duration (see Update Activity Session ) PLAY_ON_XBOX The user must play the game on Xbox for a certain duration PLAY_ON_PLAYSTATION The user must play the game on PlayStation for a certain duration WATCH_VIDEO The user must watch a video for a certain duration PLAY_ACTIVITY The user must play the embedded activity for a certain duration
Field Type Description assignment_method integer How the rewards are assigned rewards array[quest reward object] The possible rewards for the quest, ordered by tier (if applicable) rewards_expire_at ?ISO8601 timestamp When the reward claiming period ends platforms array[integer] The platforms the rewards can be redeemed on
Field Type Description type integer The reward's type sku_id snowflake The ID of the SKU awarded asset? ?string The reward's media asset asset_video? ?string The reward's video asset messages quest reward messages objectHuman-readable metadata for the reward approximate_count? 1 ?integer An approximate count of how many users can claim the reward redemption_link? ?string The link to redeem the reward expires_at? ?ISO8601 timestamp When the reward expires expires_at_premium? ?ISO8601 timestamp When the reward expires for premium users expiration_mode? integer The expiration mode orb_quantity? integer The amount of Discord Orbs awarded quantity? integer The days of fractional premium awarded
1 If the amount of users who claimed the awards exceeds this count, then all future claimers will be assigned the next reward tier in the list.
Field Type Description name string The reward's name name_with_article string The article variant of the name (e.g. a Cybernetic Headgear Decoration) reward_redemption_instructions_by_platform? map[integer, string] The instrutions on redeeming the reward per-platform
The method used to assign the reward to a user.
Value Name Description 1 ALL All rewards are assigned to the user upon completion 2 TIERED The rewards are assigned in tiers
The type of reward that the user will receive.
Value Name Description 1 REWARD_CODE The reward is a redeemable code 2 IN_GAME The reward is automatically given to the user in the promoted game 3 COLLECTIBLE The reward is a Discord collectible (e.g. an avatar decoration) 4 VIRTUAL_CURRENCY The reward is a virtual currency (Discord Orbs) 5 FRACTIONAL_PREMIUM The reward is a limited free premium (Nitro) trial for a fraction of a billing period
Controls the expiration behavior of rewards.
Value Name Description 1 NORMAL The reward expires after a set period of time 2 PREMIUM_EXTENSION The reward lasts longer for premium (Nitro) users 3 PREMIUM_PERMANENT The reward is permanent for premium (Nitro) users, even after their subscription has ended
Field Type Description video_title string The title of the video video_end_cta_title string The title of the call-to-action at the end of the video video_end_cta_subtitle string The subtitle of the call-to-action at the end of the video video_end_cta_button_label string The label of the call-to-action button at the end of the video
Field Type Description video_player_video_hls ?string The HLS video asset for the video player video_player_video string The video asset for the video player video_player_thumbnail ?string The thumbnail asset for the video player video_player_video_low_res string The low-resolution video asset for the video player video_player_caption string The caption asset for the video player video_player_transcript string The transcript asset for the video player quest_bar_preview_video ?string The video asset for the quest bar preview quest_bar_preview_thumbnail ?string The thumbnail asset for the quest bar preview quest_home_video ?string The video asset for the quest home page
The version of the quest configuration.
Value Status 2 Active 1 Discontinued
Areas where the quest can be shown in the Discord client.
Value Name Description Dismissable 0 GIFT_INVENTORY_SETTINGS_BADGE This quest is shown as a badge in User Settings Yes 1 QUEST_BAR This quest is shown as a bar above the user popout Yes 2 QUEST_INVENTORY_CARD This quest is shown as a card in the user's gift inventory No 3 QUESTS_EMBED This quest is shown as an embed in chat No 4 ACTIVITY_PANEL This quest is shown in the Active Now page Yes 5 QUEST_LIVE_STREAM This quest is shown while watching a stream Yes 6 MEMBERS_LIST This quest is shown in the member list No 7 QUEST_BADGE This quest is shown on the quest profile badge upsell No 8 GIFT_INVENTORY_FOR_YOU This quest is featured in the user's gift inventory for you section No 9 GIFT_INVENTORY_OTHER This quest is featured in the user's gift inventory No 10 QUEST_BAR_V2 This quest is shown in the new quest bar design Yes 11 QUEST_HOME_DESKTOP This quest is shown on the desktop Quest discovery page No 12 QUEST_HOME_MOBILE This quest is shown on the mobile Quest discovery page No 13 QUEST_BAR_MOBILE This quest is shown in the mobile Quest bar design Yes 14 THIRD_PARTY_APP This quest is shown in a third-party app No 15 QUEST_BOTTOM_SHEET This quest is shown in the bottom sheet No 16 QUEST_EMBED_MOBILE This quest is shown in the mobile Quest embed No 17 QUEST_HOME_MOVE_CALLOUT This quest is shown in the move callout on the Quest discovery page No 18 DISCOVERY_SIDEBAR This quest is shown in the discovery sidebar No 19 QUEST_SHARE_LINK This quest is eligible to be shared as a link No 20 CONNECTIONS_MODAL This quest is shown in the user connections modal No 21 DISCOVERY_COMPASS This quest is shown on the discovery button No 22 TROPHY_CASE_CARD This quest is shown as a card in the user's trophy case No 23 VIDEO_MODAL This quest has a video modal No 24 VIDEO_MODAL_END_CARD This quest has an end card in the video modal No 25 REWARD_MODAL This quest is shown in the reward modal No 26 EXCLUDED_QUEST_EMBED This quest is excluded from the Quest embed No 27 VIDEO_MODAL_MOBILE This quest is shown in the mobile video modal No
Specifies the platforms that the quest reward can be redeemed on.
Value Name Description 0 CROSS_PLATFORM This reward can be redeemed on all platforms 1 XBOX This reward can be redeemed on Xbox 2 PLAYSTATION This reward can be redeemed on PlayStation 3 SWITCH This reward can be redeemed on Nintendo Switch 4 PC This reward can be redeemed on PC
A behavioral variant for a quest.
Value Name Description 1 POST_ENROLLMENT_CTA The quest has a post-enrollment call-to-action 2 PLAYTIME_CRITERIA The quest has a playtime criteria 3 QUEST_BAR_V2 The quest uses the new quest bar design 4EXCLUDE_MINORSThe quest is not shown to minors5 EXCLUDE_RUSSIA The quest is not shown in Russia 6 IN_HOUSE_CONSOLE_QUEST The console quest is first-party 7 MOBILE_CONSOLE_QUEST The console quest is available on mobile 8 START_QUEST_CTA The quest has a start call-to-action 9 REWARD_HIGHLIGHTING The quest has reward highlighting 10 FRACTIONS_QUEST The quest offers fractional rewards 11 ADDITIONAL_REDEMPTION_INSTRUCTIONS The quest has additional redemption instructions 12 PACING_V2 The quest uses the new pacing system 13 DISMISSAL_SURVEY The quest presents a survey upon dismissal 14 MOBILE_QUEST_DOCK The quest is shown in the mobile quest dock 15 QUESTS_CDN The quest uses the CDN for assets 16 PACING_CONTROLLER The quest uses the pacing controller 17 QUEST_HOME_FORCE_STATIC_IMAGE The quest displays a static image on the Quest Home 18 VIDEO_QUEST_FORCE_HLS_VIDEO The video quest forces HLS video playback
{
"id" : "8206816794116096000" ,
"config" : {
"id" : "8206816794116096000" ,
"config_version" : 2 ,
"starts_at" : "2025-02-21T18:00:00+00:00" ,
"expires_at" : "2025-02-28T01:00:00+00:00" ,
"features" : [ 3 , 9 , 12 , 14 , 15 , 16 ] ,
"experiments" : {
"rollout" : "2025-02_alien" ,
"targeting" : null ,
"preview" : "2025-02_alien_preview"
} ,
"application" : {
"link" : "https://alien.studios/cyberalien" ,
"id" : "891436233903964161" ,
"name" : "Cyberalien 2077"
} ,
"assets" : {
"hero" : "hero.jpg" ,
"hero_video" : "hero.mp4" ,
"quest_bar_hero" : "questbar.jpg" ,
"quest_bar_hero_video" : "questbar.mp4" ,
"game_tile" : "gametile.jpg" ,
"logotype" : "wordmark.png"
} ,
"colors" : {
"primary" : "#E944D4" ,
"secondary" : "#5318A7"
} ,
"messages" : {
"quest_name" : "Kill the Aliens" ,
"game_title" : "Cyberalien 2077" ,
"game_publisher" : "Alien Studios"
} ,
"task_config" : {
"type" : 1 ,
"join_operator" : "or" ,
"tasks" : {
"PLAY_ON_DESKTOP" : {
"event_name" : "PLAY_ON_DESKTOP" ,
"target" : 900 ,
"external_ids" : [ ]
} ,
"PLAY_ON_XBOX" : {
"event_name" : "PLAY_ON_XBOX" ,
"target" : 900 ,
"external_ids" : [ "267696969" ]
} ,
"PLAY_ON_PLAYSTATION" : {
"event_name" : "PLAY_ON_PLAYSTATION" ,
"target" : 900 ,
"external_ids" : [ "CUSA42069_00" ]
}
}
} ,
"rewards_config" : {
"assignment_method" : 1 ,
"rewards" : [
{
"type" : 1 ,
"sku_id" : "1342624440894361624" ,
"asset" : "CYBERNETIC_HEADGEAR_HELL_YEAHHH.png" ,
"asset_video" : null ,
"messages" : {
"name" : "Cybernetic Headgear" ,
"name_with_article" : "a Cybernetic Headgear" ,
"redemption_instructions_by_platform" : {
"0" : "Reward Instructions:\nGo to https://alien.studios/redeem\nEnter your code\nClaim your reward!"
}
} ,
"approximate_count" : null ,
"redemption_link" : "https://alien.studios/redeem"
}
] ,
"rewards_expire_at" : "2025-03-28T00:00:00+00:00" ,
"platforms" : [ 0 ]
}
} ,
"user_status" : null ,
"targeted_content" : [ ] ,
"preview" : false
}
A claimed quest.
Field Type Description id snowflake The ID of the quest config claimed quest config objectThe configuration and metadata for the quest user_status quest user status objectThe user's quest progress
Field Type Description id snowflake The ID of the quest starts_at ISO8601 timestamp When the quest period starts expires_at ISO8601 timestamp When the quest period ends features array[integer] The quest features enabled for the quest colors quest gradient objectThe accent colors for the quest assets quest assets objectObject that holds the quest's assets messages quest messages objectHuman-readable metadata for the quest rewards array[claimed quest reward object] The claimed rewards for the quest
Field Type Description type integer The reward's type sku_id snowflake The ID of the SKU awarded name string The reward's name name_with_article string The article variant of the name (e.g. a Cybernetic Headgear Decoration) asset string The reward's media asset asset_video ?string The reward's video asset orb_quantity ?integer The amount of Discord Orbs awarded collectible_product? collectible object The collectible product awarded
{
"id" : "8206816794116096000" ,
"config" : {
"id" : "8206816794116096000" ,
"starts_at" : "2025-02-21T18:00:00+00:00" ,
"expires_at" : "2025-02-28T01:00:00+00:00" ,
"features" : [ 3 , 9 , 12 , 14 , 15 , 16 ] ,
"colors" : {
"primary" : "#E944D4" ,
"secondary" : "#5318A7"
} ,
"assets" : {
"hero" : "hero.jpg" ,
"hero_video" : "hero.mp4" ,
"quest_bar_hero" : "questbar.jpg" ,
"quest_bar_hero_video" : "questbar.mp4" ,
"game_tile" : "gametile.jpg" ,
"logotype" : "wordmark.png"
} ,
"messages" : {
"quest_name" : "Kill the Aliens" ,
"game_title" : "Cyberalien 2077" ,
"game_publisher" : "Alien Studios"
} ,
"rewards" : [
{
"sku_id" : "1342624440894361624" ,
"type" : 1 ,
"name" : "Cybernetic Headgear" ,
"name_with_article" : "a Cybernetic Headgear" ,
"asset" : "CYBERNETIC_HEADGEAR_HELL_YEAHHH.png" ,
"asset_video" : null ,
"orb_quantity" : null
}
]
} ,
"user_status" : null
}
The user's quest progression.
Field Type Description user_id snowflake The ID of the user quest_id snowflake The ID of the quest enrolled_at ISO8601 timestamp When the user accepted the quest completed_at ?ISO8601 timestamp When the user completed the quest claimed_at ?ISO8601 timestamp When the user claimed the quest's reward claimed_tier ?integer Which reward tier the user has claimed, if the quest's is last_stream_heartbeat_at 1 ?ISO8601 timestamp When the last heartbeat was received stream_progress_seconds 1 ISO8601 timestamp Duration (in seconds) the user has streamed the game for since the quest was accepted dismissed_quest_content integer The content areas the user has dismissed for the quest progress map[string, quest task progress object] The user's progress for each task in the quest, keyed by their event name
1 These fields are only used for quest config version 1, where the event is always .
Field Type Description event_name string The type of task event value integer The completed duration (in seconds) updated_at ISO8601 timestamp When the task was last updated completed_at ?ISO8601 timestamp When the task was completed heartbeat 1 ?quest task heartbeat object The task's heartbeat data
1 Heartbeats are only present for events , , , and .
Field Type Description last_beat_at ISO8601 timestamp When the last heartbeat was received expires_at ?ISO8601 timestamp When the task progress expires
Dismissed quest content areas .
Value Name Description 1 << 0 GIFT_INVENTORY_SETTINGS_BADGE User has dismissed the quest from User Settings 1 << 1 QUEST_BAR 1 User has dismissed the quest from the Quest Bar 1 << 2 ACTIVITY_PANEL User has dismissed the quest from the Active Now page 1 << 3 QUEST_LIVE_STREAM User has dismissed the quest from the stream overlay
1 This flag dismisses any content area, including , , and .
{
"user_id" : "222069018507345921" ,
"quest_id" : "8206816794116096000" ,
"enrolled_at" : "2077-01-01T11:59:59+00:00" ,
"completed_at" : "2077-01-01T11:59:59+00:00" ,
"claimed_at" : "2077-01-01T11:59:59+00:00" ,
"claimed_tier" : null ,
"last_stream_heartbeat_at" : null ,
"stream_progress_seconds" : 0 ,
"dismissed_quest_content" : 0 ,
"progress" : {
"PLAY_ON_DESKTOP" : {
"value" : 900 ,
"event_name" : "PLAY_ON_DESKTOP" ,
"updated_at" : "2025-03-11T18:19:54.189229+00:00" ,
"completed_at" : "2025-03-11T18:19:54.189231+00:00" ,
"heartbeat" : {
"last_beat_at" : "2077-01-01T11:59:59+00:000" ,
"expires_at" : null
}
}
}
}
An object that holds the quest's reward code.
Field Type Description quest_id snowflake The ID of the quest code string The redeem code platform string The platform this redeem code applies to user_id snowflake The ID of the user who this code belongs to claimed_at ISO8601 timestamp When the user claimed the quest's reward tier ?integer Which reward tier the code belongs to, if the quest's is set to
{
"quest_id" : "8206816794116096000" ,
"code" : "111-1111111" ,
"platform" : 0 ,
"user_id" : "222069018507345921" ,
"claimed_at" : "2077-01-01T18:41:29.706194+00:00" ,
"tier" : null
}
GET
/quests/@me
Returns information on the current quests for the current user.
Field Type Description quests array[quest object] The current quests for the user excluded_quests array[partial quest object] The quests that the user cannot participate in
GET
/quests/@me/claimed
Returns information on the claimed quests for the current user.
Field Type Description quests array[claimed quest object] The claimed quests for the user
GET
/quests/{quest.id}
Returns a quest config object for the specified quest. Quest must be currently active.
GET
/quests/decision
Returns the quest that should be shown to the user in a specific placement.
Field Type Description placement integer The quest placement area to get the quest for client_heartbeat_session_id? string A client-generated UUID unique to the current session
Value Name Description 1 DESKTOP_ACCOUNT_PANEL_AREA Account panel on desktop 2 MOBILE_HOME_DOCK_AREA Home dock on mobile
Field Type Description request_id string The decision ID quest ?quest object The quest to show to the user
POST
/quests/{quest.id}/enroll
Accepts a quest and returns a quest user status object. Fires a Quests User Status Update Gateway event.
Field Type Description location integer The content location where the action was initiated
POST
/quests/{quest.id}/claim-reward
Claims the quest's rewards, setting the and fields of the quest user status to the current timestamp.
Fires a Quests User Status Update Gateway event.
Field Type Description location integer The content location where the action was initiated platform string The platform to claim the reward for
Field Type Description claimed_at ?ISO8601 timestamp When the rewards were claimed entitlement_expiration_metadata map[snowflake, entitlement expiration metadata object] The expiration metadata for each entitlement entitlements array[entitlement object] The entitlements the user received errors array[JSON error ] The errors that occured while claiming the reward
Field Type Description extended boolean Whether the entitlement expiration has been extended due to a premium subscription extendable boolean Whether the entitlement expiration can be extended due to a premium subscription
{
"claimed_at" : "2024-04-17T23:30:41.000321+00:00" ,
"entitlement_expiration_metadata" : {
"1230299425620885624" : {
"extended" : false ,
"extendable" : true
}
} ,
"entitlements" : [
{
"id" : "1230299425620885624" ,
"sku_id" : "1226939756617793606" ,
"application_id" : "1242265603276800000" ,
"user_id" : "222069018507345921" ,
"deleted" : false ,
"starts_at" : null ,
"ends_at" : null ,
"type" : 10 ,
"tenant_metadata" : { } ,
"gift_code_flags" : 0 ,
"promotion_id" : null
}
] ,
"errors" : [ ]
}
GET
/quests/{quest.id}/reward-code
Retrieves the reward code for the specified platform. Returns a quest reward code object on success.
POST
/quests/{quest.id}/heartbeat
Tells the server to update the and fields of the current task. Used for keeping track of how long the stream has been running for, and for checking if the user has met the task duration requirement .
Returns a quest user status object on success. Fires a Quests User Status Update Gateway event.
The field within the quest task progress object is incremented by the amount of seconds since the last heartbeat request, up to 2 minutes at once.
Heartbeated quest tasks may only be completed from desktop clients. If the requesting user-agent does not include electron version info (e.g. ), the request will fail with a 401 unauthorized error.
Field Type Description stream_key 1 string The encoded key of the stream (e.g ) terminal? boolean Whether this is the last heartbeat in the sequence
1 For heartbeats without an associated stream, a special stream key of should be used, where is the ID of the quest.
POST
/quests/{quest.id}/video-progress
Tells the server to update the field of the current video task. Used for keeping track of how long the video has been watched for, and for checking if the user has met the task duration requirement .
Returns a quest user status object on success. Fires a Quests User Status Update Gateway event.
Quest video progress should be submitted in small intervals (e.g. every 10-15 seconds a video plays).
Field Type Description timestamp integer How far into the video the user is (in seconds)
POST
/quests/{quest.id}/console/start
Starts completing a quest on console. Fires a Quests User Status Update Gateway event.
Field Type Description preview? boolean Whether the quest is in preview mode (default false)
Field Type Description started boolean Whether the quest was successfully started quest_user_status ?quest user status object The user's quest progress error_hints ?array[string] The errors that occurred while starting the quest error_hints_v2 ?array[quest error hint object] The errors that occurred while starting the quest
Field Type Description type string The type of error message string The error message connected_account_id snowflake The ID of the connection the console account is linked to connected_account_type string The type of connection the console account is linked to
{
"started" : false ,
"quest_user_status" : null ,
"error_hints" : [ "Xbox account DiscordGamer seems to be offline." ] ,
"error_hints_v2" : [
{
"type" : "no_game_offline" ,
"message" : "Xbox account DiscordGamer seems to be offline." ,
"connected_account_id" : "3076467402341699" ,
"connected_account_type" : "xbox"
}
]
}
POST
/quests/{quest.id}/console/stop
Stops completing a quest on console. Returns a 204 empty response on success. Fires a Quests User Status Update Gateway event.
POST
/quests/{quest.id}/preview/complete
Forcefully completes the quest for the current user. Returns a quest user status object. Fires a Quests User Status Update Gateway event.
DELETE
/quests/{quest.id}/preview/status
Resets the quest's status for the current user. Returns a quest user status object. Fires a Quests User Status Update Gateway event.
POST
/quests/{quest.id}/dismissible-content/{quest_content_type}/dismiss
Dismisses the specified quest content area for the current user. Not all content areas can be dismissed.
Returns a quest user status object. Fires a Quests User Status Update Gateway event.
DELETE
/quests/{quest.id}/preview/dismissibility
Resets the dismissibility of the quest's content areas for the current user (sets the field to 0).
Returns a quest user status object. Fires a Quests User Status Update Gateway event.