Misiones
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.
id
snowflake
The ID of the quest
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.
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.
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
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.
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
A 2-point gradient with a and color.
primary
string
The hex-encoded primary color of the gradient
secondary
string
The hex-encoded secondary color of the gradient
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
join_operator 1
string
The eligibility operator used to join multiple tasks (and
or or
)
enrollment_url?
string
A link to the third-party quest tasks enrollment page
developer_application_id?
snowflake
The ID of the embedded activity for the third-party task
1 For a task to be considered complete, the user must complete either all tasks (when is ) or at least one task (when is ).
target 1
integer
The required value
external_ids?
array[string]
IDs of the target game on console platforms
title?
string
The third-party task title
description?
string
The third-party task description
1 While this is an opaque value, for duration-based tasks, this will be a duration in seconds.
1
FIRST_PARTY
The tasks are first-party
2
THIRD_PARTY
The tasks are third-party
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
WATCH_VIDEO_ON_MOBILE
The user must watch a video on mobile for a certain duration
PLAY_ACTIVITY
The user must play the embedded activity for a certain duration
ACHIEVEMENT_IN_GAME
The user must complete an achievement in the game
ACHIEVEMENT_IN_ACTIVITY
The user must complete an achievement in the embedded activity
progress 1
The user must complete a certain number of tasks in an embedded activity
1 Completion of this task is tracked by the embedded activity itself.
Quest Rewards Config Structure
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
sku_id
snowflake
The ID of the SKU awarded
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
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.
Quest Reward Messages Structure
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
Quest Reward Assignment Method
The method used to assign the reward to a user.
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.
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.
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
Quest Video Metadata Structure
Quest Video Messages Structure
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
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
name
string
The name of the co-sponsor
logotype
string
The co-sponsor's logo asset
redemption_instructions
string
The co-sponsor's redemption instructions
The version of the quest configuration.
2
Active
1
Discontinued
Areas where the quest can be shown in the Discord client.
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.
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.
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
4
EXCLUDE_MINORS
The quest is not shown to minors
5
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.
id
snowflake
The ID of the quest
Claimed Quest Config Structure
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
Claimed Quest Reward Structure
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)
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.
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'sis
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
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 .
value 1
integer
The current task value
updated_at
ISO8601 timestamp
When the task was last updated
completed_at
?ISO8601 timestamp
When the task was completed
1 While this is an opaque value, for duration-based tasks, this will be a duration in seconds. To complete the task, this value must match the value.
2 Heartbeats are only present for events , , , and .
Quest Task Heartbeat Structure
last_beat_at
ISO8601 timestamp
When the last heartbeat was received
expires_at
?ISO8601 timestamp
When the task progress expires
Dismissible Quest Content Flags
Dismissed quest content areas.
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.
quest_id
snowflake
The ID of the quest
code
string
The redeem code
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'sis 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.
GET/quests/@me/claimed
Returns information on the claimed quests for the current user.
GET/quests/{quest.id}
Returns a quest config object for the specified quest. Quest must be currently active.
GET/quests/decision
Returns the sponsored quest that should be shown to the user in a specific placement.
client_heartbeat_session_id? 1
string
A client-generated UUID representing the current persisted analytics heartbeat
1 This value is also sent in the client properties.
1
DESKTOP_ACCOUNT_PANEL_AREA
Account panel on desktop
2
MOBILE_HOME_DOCK_AREA
Home dock on mobile
request_id
string
The advertisement decision ID
campaign_id
snowflake
The ID of the advertisement campaign
adset_id
snowflake
The ID of the advertisement set
ad_id
snowflake
The ID of the advertisement
creative_id
snowflake
The ID of the advertisement creative
creative_type
integer
The type of advertisement creative
quest_id
snowflake
The ID of the delivered quest
POST/quests/{quest.id}/enroll
Accepts a quest and returns a quest user status object. Fires a Quests User Status Update Gateway event.
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.
claimed_at
?ISO8601 timestamp
When the rewards were claimed
entitlement_expiration_metadata
map[snowflake, entitlement expiration metadata object]
The expiration metadata for each entitlement
Entitlement Expiration Metadata Structure
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.
stream_key 1
string
The encoded key of the stream (e.g guild:169256939211980800:1050497861969793164:222069018507345921
)
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.
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.
preview?
boolean
Whether the quest is in preview mode (default false)
started
boolean
Whether the quest was successfully started
error_hints
?array[string]
The errors that occurred while starting the quest
type
string
The type of error
message
string
The error message
{ "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.