{"openapi":"3.0.0","info":{"title":"SideQuest API","description":"API for interacting with SideQuest","contact":{},"license":{"name":"Private"},"version":"0.2.0"},"paths":{"/v2/developers":{"summary":"Developers","get":{"summary":"Developers","description":"Developers developers developers developers","responses":{"302":{"description":"Developers","content":{"text/plain":{"schema":{"type":"string"}}}}},"tags":["Developers"]}},"/v2/apps":{"summary":"Apps","get":{"summary":"Get Apps","description":"Retrieves a listing of apps","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AppModelBase"}}}}},"400":{"description":"The data provided to the call was incorrect or incomplete.","content":{"text/plain":{"schema":{"type":"string"}}}},"403":{"description":"Access denied- the authorization token provided does not have access to the resource.","content":{"text/plain":{"schema":{"type":"string"}}}},"404":{"description":"No resource was found at the target path or the authorization token provided does not have access to know that it exists.","content":{"text/plain":{"schema":{"type":"string"}}}}},"tags":["Apps"],"parameters":[{"name":"app_categories","description":"A comma-separated list of app categories\n","schema":{"type":"string"},"in":"query","required":false},{"name":"hide_sidelined","description":"only shows apps that have not been sidelined\n","schema":{"type":"string"},"in":"query","required":false},{"name":"app_license","description":"A comma-separated list of license types\n * FREE - Free app\n * PAID - Paid app\n * OPENSOURCE - Open source app\n * DEMO - Demo app\n","schema":{"type":"string","enum":["FREE","PAID","OPENSOURCE","DEMO"],"description":"\n * FREE - Free app\n * PAID - Paid app\n * OPENSOURCE - Open source app\n * DEMO - Demo app\n"},"in":"query","required":false},{"name":"app_platform","description":"A comma-separated list of supported app platforms\n * 1 - Oculus Quest\n * 2 - Oculus Go\n * 3 - WebXR\n * 4 - Oculus Link\n * 5 - Other\n * 6 - Pico\n * 7 - Magic Leap\n","schema":{"type":"string","enum":["1","2","3","4","5","6","7"],"description":"\n * 1 - Oculus Quest\n * 2 - Oculus Go\n * 3 - WebXR\n * 4 - Oculus Link\n * 5 - Other\n * 6 - Pico\n * 7 - Magic Leap\n"},"in":"query","required":false},{"name":"app_comfort_level","description":"A comma-separated list of comfort levels\n * 0 - Comfortable\n * 1 - Moderate\n * 2 - Average\n * 3 - Exciting\n * 4 - Intense\n","schema":{"type":"string","enum":["0","1","2","3","4"],"description":"\n * 0 - Comfortable\n * 1 - Moderate\n * 2 - Average\n * 3 - Exciting\n * 4 - Intense\n"},"in":"query","required":false},{"name":"app_download_method","description":"A comma-separated list of download methods to query on\n * 1 - AppLab\n * 2 - Oculus Store\n * 3 - SideQuest, Itch, or other (requires sideloading)\n","schema":{"type":"string","enum":["1","2","3"],"description":"\n * 1 - AppLab\n * 2 - Oculus Store\n * 3 - SideQuest, Itch, or other (requires sideloading)\n"},"in":"query","required":false},{"name":"app_ids","description":"A comma-separated list of app ids\n","schema":{"type":"string"},"in":"query","required":false},{"name":"skip","description":"Skips a number of objects from the start of the list. Used for paging.","in":"query","required":false,"schema":{"type":"integer"}},{"name":"limit","description":"Limits the number of objects returned.","in":"query","required":false,"schema":{"type":"integer"}},{"name":"staff_picks","description":"Filters the returned rows by whether the app is selected as a staff pick.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"supports_quest","description":"Filters the returned rows by whether the app supports the Quest/Quest2.","in":"query","required":false,"schema":{"type":"object"}},{"name":"supports_pico","description":"Filters the returned rows by whether the app supports the Pico.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"supports_magic_leap","description":"Filters the returned rows by whether the app supports the Magic Leap.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"is_webxr","description":"Filters the returned rows by whether the app supports WebXR.","in":"query","required":false,"schema":{"type":"object"}},{"name":"supports_link","description":"Filters the returned rows by whether the app supports Oculus Link.","in":"query","required":false,"schema":{"type":"object"}},{"name":"has_oculus_url","description":"Filters the returned rows by whether the app has an Oculus URL and is an App Lab or Oculus Store app.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"early_access","description":"Filters the returned rows by whether the app is marked as early access.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"updated_since","description":"Filters the returned rows by those that have been updated after the provided unix UTC timestamp IN MILLISECONDS.","in":"query","required":false,"schema":{"type":"integer"}},{"name":"created_since","description":"Filters the returned rows by those that have created after the provided unix UTC timestamp IN MILLISECONDS.","in":"query","required":false,"schema":{"type":"integer"}},{"name":"search","description":"Filters the returned rows by a search phrase to quickly find apps by name and search tags.","in":"query","required":false,"schema":{"type":"string"}},{"name":"full_search","description":"Filters the returned rows by a search phrase to search the name, search tags, summary and description for an app.","in":"query","required":false,"schema":{"type":"string"}},{"name":"sortOn","description":"Sorts the returned object by one or more parameters. Multiple values can be separated by a comma for sorting on multiple fields.\n * name - The app name\n * created - The app created date\n * updated - The last date the app was updated\n * sort_rating - A rating for apps\n * hot_sort_rating - A 'hot' rating for apps\n * early_access - Whether the app is early access or not\n * downloads - How many downloads the app has\n * search_rank - The search rank when 'search' is specified as a filter\n * full_search_rank - the search rank when 'full_search' is specified as a filter\n","schema":{"type":"string"},"in":"query","required":false},{"name":"descending","description":"Orders the results in descending order based on the sortOn specified. If there are multiple sortOns specified, multiple values can be separated by a comma for each corresponding sortOn.","schema":{"type":"string"},"in":"query","required":false}]}},"/v2/users/{route_users_id}":{"summary":"Users","get":{"summary":"Get User Profile","description":"Retrieves a users profile information, only returns public info for requests made with a scoped token.\n\n```\nRequired Scopes:\n-user.basic_profile.read\n```","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Composite_UserModel_UserLevelingInfo"}}}},"400":{"description":"The data provided to the call was incorrect or incomplete.","content":{"text/plain":{"schema":{"type":"string"}}}},"403":{"description":"Access denied- the authorization token provided does not have access to the resource.","content":{"text/plain":{"schema":{"type":"string"}}}},"404":{"description":"No resource was found at the target path or the authorization token provided does not have access to know that it exists.","content":{"text/plain":{"schema":{"type":"string"}}}}},"tags":["Users"],"security":[{"userAuth":["user.basic_profile.read"]}],"parameters":[{"name":"route_users_id","description":"The users unique ID or \"me\"\n","schema":{"type":"string"},"in":"path","required":true}]}},"/v2/users/{route_users_id}/view-profile":{"summary":"Users","get":{"summary":"View User Profile","description":"Gets a users public profile.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Composite_PublicUserModel_UserLevelingInfo"}}}},"400":{"description":"The data provided to the call was incorrect or incomplete.","content":{"text/plain":{"schema":{"type":"string"}}}},"403":{"description":"Access denied- the authorization token provided does not have access to the resource.","content":{"text/plain":{"schema":{"type":"string"}}}},"404":{"description":"No resource was found at the target path or the authorization token provided does not have access to know that it exists.","content":{"text/plain":{"schema":{"type":"string"}}}}},"tags":["Users"],"parameters":[{"name":"route_users_id","description":"The users unique ID or \"me\"\n","schema":{"type":"string"},"in":"path","required":true}]}},"/v2/users/{route_users_id}/apps/{apps_id}/achievements":{"summary":"UsersApps","get":{"summary":"Get User App Achievements","description":"Gets a listing of achievements a user has unlocked for an app\n\n```\nRequired Scopes:\n-user.app_achievements.read\n```","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Achievement"}}}},"400":{"description":"The data provided to the call was incorrect or incomplete.","content":{"text/plain":{"schema":{"type":"string"}}}},"403":{"description":"Access denied- the authorization token provided does not have access to the resource.","content":{"text/plain":{"schema":{"type":"string"}}}},"404":{"description":"No resource was found at the target path or the authorization token provided does not have access to know that it exists.","content":{"text/plain":{"schema":{"type":"string"}}}}},"tags":["UsersApps"],"security":[{"userAuth":["user.app_achievements.read"]}],"parameters":[{"name":"route_users_id","description":"The unique user ID or \"me\"\n","schema":{"type":"string"},"in":"path","required":true},{"name":"apps_id","description":"The unique app ID or \"me\"\n","schema":{"type":"string"},"in":"path","required":true},{"name":"skip","description":"Skips a number of objects from the start of the list. Used for paging.","in":"query","required":false,"schema":{"type":"integer"}},{"name":"limit","description":"Limits the number of objects returned.","in":"query","required":false,"schema":{"type":"integer"}},{"name":"name","description":"Filters the returned rows by the name of the achievement. The % (url encoded as %25) can be included in the string as a wildcard.","in":"query","required":false,"schema":{"type":"string"}},{"name":"sortOn","description":"Sorts the returned object by one or more parameters. Multiple values can be separated by a comma for sorting on multiple fields.\n * created_at - The timestamp when the achievement was created\n * name - The name of the achievement\n * status - The status of the achievement\n","schema":{"type":"string"},"in":"query","required":false},{"name":"descending","description":"Orders the results in descending order based on the sortOn specified. If there are multiple sortOns specified, multiple values can be separated by a comma for each corresponding sortOn.","schema":{"type":"string"},"in":"query","required":false}]}},"/v2/oauth/token":{"summary":"OAuth2","post":{"summary":"Token","description":"Used by the client to obtain an access token by presenting an authorization grant or refresh token","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthAccessTokenResponse"}}}},"400":{"description":"Most likely an invalid refresh token","content":{"text/plain":{"schema":{"type":"string"}}}}},"tags":["OAuth2"],"requestBody":{"description":"The request body for a token request","content":{"application/x-www-url-formencoded":{"schema":{"$ref":"#/components/schemas/OAuthTokenRequest"}}}}}},"/v2/oauth/getshortcode":{"summary":"OAuth2","post":{"summary":"Get Login Short Code","description":"Generates a new login short code","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShortCodeDetails"}}}},"400":{"description":"The data provided to the call was incorrect or incomplete.","content":{"text/plain":{"schema":{"type":"string"}}}}},"tags":["OAuth2"],"requestBody":{"description":"The request details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetShortCodeRequest"}}}}}},"/v2/oauth/checkshortcode":{"summary":"OAuth2","post":{"summary":"Check Short Code","description":"Check the status of a short code that was generated, retrieving auth credentials if it's been redeemed and device_id matches","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthFullTokenResponse"}}}},"204":{"description":"The short code request has not yet been completed by the user","content":{"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"The short code request is not valid or has expired","content":{"text/plain":{"schema":{"type":"string"}}}}},"tags":["OAuth2"],"requestBody":{"description":"Details about the short code to check","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckShortCodeRequest"}}}}}}},"servers":[{"url":"https://api.sidequestvr.com/"}],"components":{"schemas":{"Composite_UserModel_UserLevelingInfo":{"type":"object","properties":{"tag_line":{"type":"object","description":"The users tag line"},"users_id":{"type":"integer","description":"The users unique ID"},"name":{"type":"object","description":"The users display name"},"preview_image":{"type":"string","description":"The users avatar preview image"},"score_points":{"type":"object","description":"The users total score points"},"bio":{"type":"object","description":"The users bio"},"banner_image":{"type":"object","description":"The users banner image"},"donate_url":{"type":"object","description":"The users donate url"},"profile_type":{"type":"object","enum":["Gamer","Developer","Streamer","Influencer"],"description":"The users profile type\n * Gamer - Normal SideQuest user\n * Developer - An app developer\n * Streamer - A streamer or content creator\n * Influencer - A public influencer\n"},"created":{"type":"object","description":"The time this user was created"},"xp":{"type":"object","description":"The users current xp amount"},"level":{"type":"integer","description":"The users current level"},"user_title":{"type":"string","description":"The users current title"},"has_custom_title":{"type":"boolean","description":"Whether or not the user has a custom title"}},"required":["tag_line","users_id","name","preview_image","score_points","bio","banner_image","donate_url","profile_type","created","xp","level","user_title","has_custom_title"],"description":"represents a user"},"Composite_PublicUserModel_UserLevelingInfo":{"type":"object","properties":{"profile_type":{"type":"string","enum":["Gamer","Developer","Streamer","Influencer"],"description":"The users profile type\n * Gamer - Normal SideQuest user\n * Developer - An app developer\n * Streamer - A streamer or content creator\n * Influencer - A public influencer\n"},"users_id":{"type":"integer","description":"The users unique ID"},"name":{"type":"object","description":"The users display name"},"preview_image":{"type":"string","description":"The users avatar preview image"},"score_points":{"type":"object","description":"The users total score points"},"tag_line":{"type":"object","description":"The users tag line"},"created":{"type":"object","description":"The time this user was created"},"bio":{"type":"object","description":"The users bio"}},"required":["profile_type","users_id","name","preview_image","score_points","tag_line","created","bio"],"description":"public representation of a user"},"ResolvedHardwarePlatformModel":{"description":"Hardware platform info for an app","properties":{},"required":[]},"AgeRatingModel":{"description":"Age rating entry from a rating system (ESRB, PEGI, IARC, etc.)","properties":{"system":{"type":"string","description":"Rating system identifier (e.g., 'esrb', 'pegi', 'iarc')"},"rating":{"type":"string","description":"Rating value from the system (e.g., 'T', 'M', '12', '18')"},"required_age":{"type":"integer","description":"Required age in years"},"descriptors":{"type":"array","items":{"type":"string"},"description":"Content descriptors explaining the rating"},"is_adult_content":{"type":"boolean","description":"Whether this content is marked as adult-only"},"metadata":{"type":"object","description":"Additional metadata from the rating system"}},"required":["system"]},"SimilarAppV3Model":{"description":"Similar app card data for v3 response","properties":{"apps_id":{"type":"integer","description":"App identifier"},"name":{"type":"string","description":"App name"},"rating":{"type":"integer","description":"App rating (0-5)"},"rating_count":{"type":"integer","description":"Total rating count"},"hero_image_url":{"type":"string","description":"Hero image URL (falls back to legacy image_url)"},"platforms_ids":{"type":"array","items":{"type":"integer"},"description":"Platform IDs the app has links for"},"initial_price":{"type":"integer","description":"Initial price (minor currency units)"},"discount_price":{"type":"integer","description":"Discounted price (minor currency units)"},"language_code":{"type":"string","description":"Language code"},"country_code":{"type":"string","description":"Country code"},"currency_code":{"type":"string","description":"Currency code"},"can_sideload":{"type":"boolean","description":"True when the app currently has a sideload binary; gates legacy_license PAID rendering on the FE card"},"legacy_license":{"type":"object","description":"Legacy license string from apps.license — combined with can_sideload to decide the PAID indicator on cards"},"_explanation":{"type":"object","description":"Elasticsearch explanation"},"_score":{"type":"integer","description":"Elasticsearch score"}},"required":["apps_id","platforms_ids","language_code","country_code","currency_code"]},"AppUrlsModel":{"description":"Describes an app url entry in the db","properties":{},"required":[]},"AppMediaItemV3":{"description":"App media item (v3)","properties":{"id":{"type":"integer","description":"Media item identifier"},"apps_id":{"type":"integer","description":"App identifier"},"platforms_id":{"type":"object","description":"Platform identifier (nullable)"},"media_type":{"type":"string","description":"Media type"},"url":{"type":"string","description":"Public URL to the media"},"preview_url":{"type":"object","description":"Preview image URL (if available)"},"source_preview_url":{"type":"object","description":"Original source preview URL (admin only)"},"bytes":{"type":"object","description":"File size in bytes (if available)"},"content_type":{"type":"object","description":"Content type (if available)"},"updated_at":{"type":"string","description":"Last update timestamp (ISO)"},"checksum_sha256_original":{"type":"object","description":"Original SHA-256 checksum (if available)"},"checksum_sha256_normalized":{"type":"object","description":"Normalized SHA-256 checksum (if available)"},"phash":{"type":"object","description":"Perceptual hash (if available)"},"hash_version":{"type":"object","description":"Hash version (if available)"},"source_url":{"type":"object","description":"Source URL used for ingestion (admin only)"}},"required":["id","apps_id","media_type","url","updated_at"]},"ReviewAsPostV3Model":{"description":"Review presented as a locked post","properties":{"platforms_id":{"type":"integer","description":"Platform identifier for this review"},"posts_id":{"type":"integer","description":"The unique posts_id associated with the post"},"platform_name":{"type":"string","description":"Platform name for this review"},"five_star_rating":{"type":"object","description":"Five star rating for this review"},"video_url":{"type":"string","description":"Video URL for this review"},"review_metadata":{"type":"object","description":"Review identifier from platform (stored in metadata)"}},"required":["posts_id"]},"StarRatingDistributionModel":{"description":"Star rating distribution percentages","properties":{"one_star":{"type":"integer","description":"Percentage of 1-star reviews"},"two_star":{"type":"integer","description":"Percentage of 2-star reviews"},"three_star":{"type":"integer","description":"Percentage of 3-star reviews"},"four_star":{"type":"integer","description":"Percentage of 4-star reviews"},"five_star":{"type":"integer","description":"Percentage of 5-star reviews"}},"required":["one_star","two_star","three_star","four_star","five_star"]},"AppModelBase":{"description":"An app listing base","properties":{"apps_id":{"type":"integer","description":"The unique identifier of the app listing."},"name":{"type":"object","description":"The name of the app."},"summary":{"type":"object","description":"A short summary of the app."},"description":{"type":"object","description":"The detailed description of the app."},"image_url":{"type":"object","description":"An absolute URL to the logo image of the app."},"video_url":{"type":"object","description":"An absolute URL to a video associated with the app."},"website":{"type":"object","description":"The URL of the app's web site."},"supports_go":{"type":"object","description":"True if the app supports the Oculus Go."},"supports_quest":{"type":"object","description":"True if the app supports the Oculus Quest/Quest2."},"supports_pico":{"type":"boolean","description":"True if the app supports the Pico."},"supports_magic_leap":{"type":"boolean","description":"True if the app supports the Magic Leap"},"supports_link":{"type":"object","description":"True if the app supports Oculus Link."},"supports_other":{"type":"object","description":"True if the app supports other VR platforms."},"is_webxr":{"type":"object","description":"True if the app supports WebXR."},"created":{"type":"object","description":"The timestamp of when the app listing was created."},"updated":{"type":"object","description":"The timestamp of when the app listing was last updated."},"license":{"type":"object","enum":["FREE","PAID","OPENSOURCE","DEMO"],"description":"The license type of the app.\n * FREE - Free app\n * PAID - Paid app\n * OPENSOURCE - Open source app\n * DEMO - Demo app\n"},"oculus_url":{"type":"object","description":"The Oculus URL of the App Lab or Oculus Store app."},"external_listing_url":{"type":"object","description":"The link to an external listing URL for sites like itch.io, App Lab, etc."},"oculus_sync_enabled":{"type":"boolean","description":"True if Oculus listing syncing is enabled"},"last_oculus_sync":{"type":"object","description":"The last timestamp when the Oculus listing was synced, or null if it never has been"}},"required":["apps_id","name","summary","description","image_url","video_url","website","supports_go","supports_quest","supports_pico","supports_magic_leap","supports_link","supports_other","is_webxr","created","updated","license","oculus_url","external_listing_url","oculus_sync_enabled","last_oculus_sync"]},"Achievement":{"description":"represents an achievement","properties":{"achievement_identifier":{"type":"string","description":"The string ID of the achievement"},"name":{"type":"string","description":"The name of the achievement"},"description":{"type":"object","description":"The description of the achievement"},"image":{"type":"string","description":"An image url associated with the achievement"},"icon":{"type":"object","description":"An icon url associated with the achievement"},"status":{"type":"string","enum":["hidden","active","deleted"],"description":"The status of the achievement\n * hidden - Achievement is hidden, but can still be earned\n * active - Achievement is active\n * deleted - Achievement has been deleted\n"},"created_at":{"type":"string","format":"date-time","example":"1970-04-20 07:10:00+00","description":"The timestamp when the achievement was created"},"unlocked_at":{"type":"string","format":"date-time","example":"1970-04-20 07:10:00+00","description":"The timestamp when the achievement was unlocked"}},"required":["achievement_identifier","name","image","icon","status","created_at"]},"AuthAccessTokenResponse":{"description":"A response containing details about an authorization access token","properties":{"access_token":{"type":"string","description":"The access token which is used as a bearer token in the Authorization header"},"access_token_expires_at":{"type":"string","format":"date-time","example":"1970-04-20 07:10:00+00","description":"The date and time when the access token expires and is no longer valid"},"scopes":{"type":"array","items":{"type":"string","enum":["user.basic_profile.read","user.app_achievements.read","user.app_achievements.write","user.avatars.read","user.avatars.write","user.friends.read","user.friends.write","user.rich_presence.write","user.communities.read","user.communities.write","user.messages.read","user.messages.write","user.messagehistory.read"],"description":"\n * user.basic_profile.read - The basic user profile can be read\n * user.app_achievements.read - The user's achievements for the scoped app can be read\n * user.app_achievements.write - The user's achievements for the scoped app can be written\n * user.avatars.read - Read the users avatars\n * user.avatars.write - Write the users avatar\n * user.friends.read - Read the users friends list\n * user.friends.write - Add and remove friends\n * user.rich_presence.write - Update the users rich presence status\n * user.communities.read - Get info about communities the user is a member of\n * user.communities.write - Join and leave communities\n * user.messages.read - Receive messages from other users\n * user.messages.write - Send messages to other users\n * user.messagehistory.read - Read the full message history of the user\n"},"description":"A list of scopes that this token has access to"},"users_id":{"type":"integer","description":"The identifier for the user this token is for"},"apps_id":{"type":"integer","description":"When the token is scoped, the identifier for the app that the token is scoped to"},"client_id":{"type":"string","description":"The id of the API client this token is issued for"}},"required":["access_token","access_token_expires_at","scopes","users_id","apps_id","client_id"]},"OAuthTokenRequest":{"description":"An OAuth token request","properties":{"grant_type":{"type":"string","enum":["refresh_token"],"description":"The grant type\n * refresh_token - Generate a new access token by providing a refresh token\n"},"refresh_token":{"type":"string","description":"The refresh token to get a new access token for when grant_type is refresh"},"client_id":{"type":"string","description":"The client id associated with the oauth client"}},"required":["grant_type","refresh_token","client_id"]},"ShortCodeDetails":{"description":"Details about a generated short code login request","properties":{"code":{"type":"string","description":"The short code that should be displayed to a user to use for login"},"device_id":{"type":"string","description":"The identifier for this device's request that will be needed to check the status of the short code login"},"expires_at":{"type":"string","format":"date-time","example":"1970-04-20 07:10:00+00","description":"The date and time at which the short code has expired and is no longer valid"},"interval":{"type":"integer","description":"How often (in seconds) you may poll to check the short code's status"},"verification_url":{"type":"string","description":"The URL that the user should visit to enter their short code"}},"required":["code","device_id","expires_at","interval","verification_url"]},"GetShortCodeRequest":{"description":"Details needed to generate a login short code","properties":{"client_id":{"type":"string","description":"The API client id generated from your app management dashboard."},"scopes":{"type":"array","items":{"type":"string","enum":["user.basic_profile.read","user.app_achievements.read","user.app_achievements.write","user.avatars.read","user.avatars.write","user.friends.read","user.friends.write","user.rich_presence.write","user.communities.read","user.communities.write","user.messages.read","user.messages.write","user.messagehistory.read"],"description":"\n * user.basic_profile.read - The basic user profile can be read\n * user.app_achievements.read - The user's achievements for the scoped app can be read\n * user.app_achievements.write - The user's achievements for the scoped app can be written\n * user.avatars.read - Read the users avatars\n * user.avatars.write - Write the users avatar\n * user.friends.read - Read the users friends list\n * user.friends.write - Add and remove friends\n * user.rich_presence.write - Update the users rich presence status\n * user.communities.read - Get info about communities the user is a member of\n * user.communities.write - Join and leave communities\n * user.messages.read - Receive messages from other users\n * user.messages.write - Send messages to other users\n * user.messagehistory.read - Read the full message history of the user\n"},"description":"The list of scopes to request from the user."},"version":{"type":"integer","enum":["1","2"],"description":"Determines the format of the shortcode returned (defaults to v1)\n * 1 - a 6 digit numeric shortcode\n * 2 - a 6 digit code consisting of numbers and uppercase letters, excluding 1, I, 0, and O\n"}},"required":["client_id","scopes"]},"AuthFullTokenResponse":{"description":"A full token response including refresh and access tokens","properties":{"refresh_token":{"type":"string","description":"The refresh token which can be used to retrieve new access tokens"},"access_token":{"type":"string","description":"The access token which is used as a bearer token in the Authorization header"},"access_token_expires_at":{"type":"string","format":"date-time","example":"1970-04-20 07:10:00+00","description":"The date and time when the access token expires and is no longer valid"},"scopes":{"type":"array","items":{"type":"string","enum":["user.basic_profile.read","user.app_achievements.read","user.app_achievements.write","user.avatars.read","user.avatars.write","user.friends.read","user.friends.write","user.rich_presence.write","user.communities.read","user.communities.write","user.messages.read","user.messages.write","user.messagehistory.read"],"description":"\n * user.basic_profile.read - The basic user profile can be read\n * user.app_achievements.read - The user's achievements for the scoped app can be read\n * user.app_achievements.write - The user's achievements for the scoped app can be written\n * user.avatars.read - Read the users avatars\n * user.avatars.write - Write the users avatar\n * user.friends.read - Read the users friends list\n * user.friends.write - Add and remove friends\n * user.rich_presence.write - Update the users rich presence status\n * user.communities.read - Get info about communities the user is a member of\n * user.communities.write - Join and leave communities\n * user.messages.read - Receive messages from other users\n * user.messages.write - Send messages to other users\n * user.messagehistory.read - Read the full message history of the user\n"},"description":"A list of scopes that this token has access to"},"users_id":{"type":"integer","description":"The identifier for the user this token is for"},"apps_id":{"type":"integer","description":"When the token is scoped, the identifier for the app that the token is scoped to"},"client_id":{"type":"string","description":"The id of the API client this token is issued for"},"refresh_token_expires_at":{"type":"string","format":"date-time","example":"1970-04-20 07:10:00+00","description":"The date and time when the refresh token is no longer valid."}},"required":["refresh_token","access_token","access_token_expires_at","scopes","users_id","apps_id","client_id","refresh_token_expires_at"]},"CheckShortCodeRequest":{"description":"Details about a short code login request to check","properties":{"device_id":{"type":"string","description":"The device_id returned from the creation of a short code"},"code":{"type":"string","description":"The short code"}},"required":["device_id","code"]}},"securitySchemes":{"userAuth":{"type":"http","scheme":"bearer"}}}}