Quests
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.
Quest Object
A sponsored quest.
Quest Structure
| Field | Type | Description |
|---|---|---|
| id | snowflake | The ID of the quest |
| config | quest config object | The configuration and metadata for the quest |
| user_status | ?quest user status object | The user's quest progress, if it has been accepted |
| targeted_content (deprecated) 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.
Partial Quest Structure
| Field | Type | Description |
|---|---|---|
| id | snowflake | The ID of the quest |
Quest Config Object
The quest definition.
Quest Config Structure
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 |
|---|---|---|
| id | snowflake | The ID of the quest |
| config_version | integer | Quest configuration version |
| 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 |
| application | quest application object | The application metadata for the quest |
| assets | quest assets object | Object that holds the quest's assets |
| colors | quest gradient object | The accent colors for the quest |
| messages | quest messages object | Human-readable metadata for the quest |
| task_config | quest task config object | The task configuration for the quest |
| rewards_config | quest rewards config object | Specifies rewards for the quest (e.g. collectibles) |
| video_metadata? | quest video metadata object | The configuration for the video quest |
| cosponsor_metadata? | quest cosponsor metadata object | The configuration for the quest co-sponsor |
Quest Application Structure
| 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 |
Quest Assets Structure
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 |
Quest Gradient Structure
A 2-point gradient with a primary and secondary color.
| Field | Type | Description |
|---|---|---|
| primary | string | The hex-encoded primary color of the gradient |
| secondary | string | The hex-encoded secondary color of the gradient |
Quest Messages Structure
| 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 |
Quest Task Config Structure
| Field | Type | Description |
|---|---|---|
| type | integer | The type of task configuration |
| join_operator 1 | string | The eligibility operator used to join multiple tasks (and or or) |
| tasks | map[string, quest task object] | Tasks required to complete the quest, keyed by their event name |
| 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 join_operator is and) or at least one task (when join_operator is or).
Quest Task Structure
| Field | Type | Description |
|---|---|---|
| event_name | string | The type of task event |
| 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.
Quest Task Config Type
| Value | Name | Description |
|---|---|---|
| 1 | FIRST_PARTY | The tasks are first-party |
| 2 | THIRD_PARTY | The tasks are third-party |
Quest Task Event Name
| 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 |
| 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
| 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 |
Quest Reward Structure
| 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 object | Human-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.
Quest Reward Messages Structure
| 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 |
Quest Reward Assignment Method
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 |
Quest Reward Type
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 |
Quest Reward Expiration Mode
Controls the expiration behavior of COLLECTIBLE 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 |
Quest Video Metadata Structure
| Field | Type | Description |
|---|---|---|
| messages | quest video messages object | Human-readable metadata for the video quest |
| assets | quest video assets object | Object that holds the quest's video assets |
Quest Video Messages Structure
| 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 |
Quest Video Assets Structure
| 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 |
Quest Cosponsor Metadata Structure
| Field | Type | Description |
|---|---|---|
| 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 |
Quest Config Version
The version of the quest configuration.
| Value | Status |
|---|---|
| 2 | Active |
| 1 | Discontinued |
Quest Content Type
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 |
Quest Platform Type
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 |
Quest Feature
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 |
| 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 |
Example Quest
{ "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}Claimed Quest Object
A claimed quest.
Claimed Quest Structure
| Field | Type | Description |
|---|---|---|
| id | snowflake | The ID of the quest |
| config | claimed quest config object | The configuration and metadata for the quest |
| user_status | quest user status object | The user's quest progress |
Claimed Quest Config Structure
| 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 object | The accent colors for the quest |
| assets | quest assets object | Object that holds the quest's assets |
| messages | quest messages object | Human-readable metadata for the quest |
| rewards | array[claimed quest reward object] | The claimed rewards for the quest |
Claimed Quest Reward Structure
| 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 |
Example Claimed Quest
{ "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}Quest User Status Object
The user's quest progression.
Quest User Status Structure
| 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 assignment_method is TIERED |
| 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 STREAM_ON_DESKTOP.
Quest Task Progress Structure
| Field | Type | Description |
|---|---|---|
| event_name | string | The type of task event |
| 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 |
| heartbeat? 2 | ?quest task heartbeat object | The task's heartbeat data |
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 target value.
2 Heartbeats are only present for events STREAM_ON_DESKTOP, PLAY_ON_DESKTOP, PLAY_ON_DESKTOP_V2, and PLAY_ACTIVITY.
Quest Task Heartbeat Structure
| Field | Type | Description |
|---|---|---|
| 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.
| 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 QUEST_BAR content area, including QUEST_BAR, QUEST_BAR_V2, and QUEST_BAR_MOBILE.
Example Quest User Status
{ "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 } } }}Quest Reward Code Object
An object that holds the quest's reward code.
Quest Reward Code Structure
| 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 assignment_method is set to TIERED |
Example Quest Reward Code
{ "quest_id": "8206816794116096000", "code": "111-1111111", "platform": 0, "user_id": "222069018507345921", "claimed_at": "2077-01-01T18:41:29.706194+00:00", "tier": null}Endpoints
Get Current User Quests
GET/quests/@meReturns information on the current quests for the current user.
Response Body
| 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 |
| quest_enrollment_blocked_until | ?ISO8601 timestamp | When the user can enroll in quests again |
Get Claimed Quests
GET/quests/@me/claimedReturns information on the claimed quests for the current user.
Response Body
| Field | Type | Description |
|---|---|---|
| quests | array[claimed quest object] | The claimed quests for the user |
Get Quest Config
GET/quests/{quest.id}Returns a quest config object for the specified quest. Quest must be currently active.
Get Quest Placement
GET/quests/decisionReturns the sponsored quest that should be shown to the user in a specific placement.
Query Params
| Field | Type | Description |
|---|---|---|
| placement | integer | The quest placement area to get the quest for |
| 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.
Quest Placement Area
| Value | Name | Description |
|---|---|---|
| 1 | DESKTOP_ACCOUNT_PANEL_AREA | Account panel on desktop |
| 2 | MOBILE_HOME_DOCK_AREA | Home dock on mobile |
Response Body
| Field | Type | Description |
|---|---|---|
| request_id | string | The advertisement decision ID |
| quest | ?quest object | The quest to show to the user |
| ad_identifiers | ?quest ad identifiers object | The advertisement identifiers for the delivered quest |
| ad_context | ?quest ad context object | The advertisement context for the delivered quest |
| metadata_raw | ?string | Base64-encoded protobuf metadata for the advertisement |
Quest Ad Identifiers Structure
| Field | Type | Description |
|---|---|---|
| campaign_id | snowflake | The ID of the advertisement campaign |
| ad_set_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 Ad Context Structure
| Field | Type | Description |
|---|---|---|
| is_campaign_ias_enabled | boolean | Whether the campaign has Integral Ad Science enabled |
Accept Quest
POST/quests/{quest.id}/enrollAccepts a quest and returns a quest user status object. Fires a Quests User Status Update Gateway event.
JSON Params
| Field | Type | Description |
|---|---|---|
| location | integer | The content location where the action was initiated |
Claim Quest Reward
POST/quests/{quest.id}/claim-rewardClaims the quest's rewards, setting the completed_at and claimed_at fields of the quest user status to the current timestamp.
Fires a Quests User Status Update Gateway event.
JSON Params
| Field | Type | Description |
|---|---|---|
| location | integer | The content location where the action was initiated |
| platform | string | The platform to claim the reward for |
Response Body
| 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 object] | The errors that occured while claiming the reward |
Entitlement Expiration Metadata Structure
| 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 |
Example Response
{ "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 Quest Reward Code
GET/quests/{quest.id}/reward-codeRetrieves the reward code for the specified platform. Returns a quest reward code object on success.
Send Quest Heartbeat
POST/quests/{quest.id}/heartbeatTells the server to update the value and heartbeat 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.
JSON Params
| Field | Type | Description |
|---|---|---|
| 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 call:<quest_id>:1 should be used, where <quest_id> is the ID of the quest.
Send Quest Video Progress
POST/quests/{quest.id}/video-progressTells the server to update the value 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.
JSON Params
| Field | Type | Description |
|---|---|---|
| timestamp | integer | How far into the video the user is (in seconds) |
Start Console Quest
POST/quests/{quest.id}/console/startStarts completing a quest on console. Fires a Quests User Status Update Gateway event.
Query Params
| Field | Type | Description |
|---|---|---|
| preview? | boolean | Whether the quest is in preview mode (default false) |
Response Body
| 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 |
Quest Error Hint Structure
| 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 |
Example Response
{ "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" } ]}Stop Console Quest
POST/quests/{quest.id}/console/stopStops completing a quest on console. Returns a 204 empty response on success. Fires a Quests User Status Update Gateway event.
Complete Quest
POST/quests/{quest.id}/preview/completeForcefully completes the quest for the current user. Returns a quest user status object. Fires a Quests User Status Update Gateway event.
Reset Quest
DELETE/quests/{quest.id}/preview/statusResets the quest's status for the current user. Returns a quest user status object. Fires a Quests User Status Update Gateway event.
Dismiss Quest Content
POST/quests/{quest.id}/dismissible-content/{quest_content_type}/dismissDismisses 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.
Reset Quest Dismissibility
DELETE/quests/{quest.id}/preview/dismissibilityResets the dismissibility of the quest's content areas for the current user (sets the dismissed_quest_content field to 0).
Returns a quest user status object. Fires a Quests User Status Update Gateway event.