openapi: 3.0.3 info: title: VRChat API Documentation version: 1.20.5 contact: name: Unofficial VRChat API Documentation Project url: https://github.com/VRChatAPI email: vrchatapi.lpv0t@aries.fyi termsOfService: https://vrchat.com/legal/ license: url: https://github.com/vrchatapi/specification/blob/master/LICENSE name: MIT description: |- ![VRChat API Banner](https://vrchatapi.github.io/assets/img/api_banner_1500x400.png) # Welcome to the VRChat API Before we begin, we would like to state this is a **COMMUNITY DRIVEN PROJECT**. This means that everything you read on here was written by the community itself and is **not** officially supported by VRChat. The documentation is provided "AS IS", and any action you take towards VRChat is completely your own responsibility. The documentation and additional libraries SHALL ONLY be used for applications interacting with VRChat's API in accordance with their [Terms of Service](https://hello.vrchat.com/legal) and [Community Guidelines](https://hello.vrchat.com/community-guidelines), and MUST NOT be used for modifying the client, "avatar ripping", or other illegal activities. Malicious usage or spamming the API may result in account termination. Certain parts of the API are also more sensitive than others, for example moderation, so please tread extra carefully and read the warnings when present. ![Tupper Policy on API](https://i.imgur.com/yLlW7Ok.png) Finally, use of the API using applications other than the approved methods (website, VRChat application, Unity SDK) is not officially supported. VRChat provides no guarantee or support for external applications using the API. Access to API endpoints may break **at any time, without notice**. Therefore, please **do not ping** VRChat Staff in the VRChat Discord if you are having API problems, as they do not provide API support. We will make a best effort in keeping this documentation and associated language libraries up to date, but things might be outdated or missing. If you find that something is no longer valid, please contact us on Discord or [create an issue](https://github.com/vrchatapi/specification/issues) and tell us so we can fix it. # Getting Started The VRChat API can be used to programmatically retrieve or update information regarding your profile, friends, avatars, worlds and more. The API consists of two parts, "Photon" which is only used in-game, and the "Web API" which is used by both the game and the website. This documentation focuses only on the Web API. The API is designed around the REST ideology, providing semi-simple and usually predictable URIs to access and modify objects. Requests support standard HTTP methods like GET, PUT, POST, and DELETE and standard status codes. Response bodies are always UTF-8 encoded JSON objects, unless explicitly documented otherwise.
šŸ›‘ Warning! Do not touch Photon!
Photon is only used by the in-game client and should not be touched. Doing so may result in permanent account termination.
ā„¹ļø Authentication
Read Authentication for how to log in.
# Using the API For simply exploring what the API can do it is strongly recommended to download [Insomnia](https://insomnia.rest/download), a free and open-source API client that's great for sending requests to the API in an orderly fashion. Insomnia allows you to send data in the format that's required for VRChat's API. It is also possible to try out the API in your browser, by first logging in at [vrchat.com/home](https://vrchat.com/home/) and then going to [vrchat.com/api/1/auth/user](https://vrchat.com/api/1/auth/user), but the information will be much harder to work with. For more permanent operation such as software development it is instead recommended to use one of the existing language SDKs. This community project maintains API libraries in several languages, which allows you to interact with the API with simple function calls rather than having to implement the HTTP protocol yourself. Most of these libraries are automatically generated from the API specification, sometimes with additional helpful wrapper code to make usage easier. This allows them to be almost automatically updated and expanded upon as soon as a new feature is introduced in the specification itself. The libraries can be found on [GitHub](https://github.com/vrchatapi) or following: * [NodeJS (JavaScript)](https://www.npmjs.com/package/vrchat) * [Dart](https://pub.dev/packages/vrchat_dart) * [Rust](https://crates.io/crates/vrchatapi) * [C#](https://github.com/vrchatapi/vrchatapi-csharp) * [Python](https://github.com/vrchatapi/vrchatapi-python) # Pagination Most endpoints enforce pagination, meaning they will only return 10 entries by default, and never more than 100.
Using both the limit and offset parameters allows you to easily paginate through a large number of objects. | Query Parameter | Type | Description | | ----------|--|------- | | `n` | integer | The number of objects to return. This value often defaults to 10. Highest limit is always 100.| | `offset` | integer | A zero-based offset from the default object sorting.| If a request returns fewer objects than the `limit` parameter, there are no more items available to return. # Contribution Do you want to get involved in the documentation effort? Do you want to help improve one of the language API libraries? This project is an [OPEN Open Source Project](https://openopensource.org)! This means that individuals making significant and valuable contributions are given commit-access to the project. It also means we are very open and welcoming of new people making contributions, unlike some more guarded open-source projects. [![Discord](https://img.shields.io/static/v1?label=vrchatapi&message=discord&color=blueviolet&style=for-the-badge)](https://discord.gg/qjZE9C9fkB) servers: - url: https://api.vrchat.cloud/api/1 tags: - name: authentication description: Authentication Docs Here - name: avatars description: Avatars Docs Here - name: calendar description: Calendar docs here - name: economy description: Economy Docs Here - name: favorites description: Favorites Docs Here - name: files description: Files Docs Here - name: friends description: Friends Docs Here - name: groups description: Group Docs Here - name: inventory description: The inventory manages collectable items, such as drop bundles and their contents. - name: invite description: Invite Docs Here - name: instances description: Instances Docs Here - name: jams description: Jams Docs Here - name: notifications description: Notifiations Docs - name: playermoderation description: |- There are two different moderation API's, "moderation" for Staff actions, and "playermoderation" for players. PlayerModerations are user-generated actions towards others, such as muting them, blocking, or toggling interaction. Your global permission settings are stored locally on your computer. Only player-specific moderations (when you target a player, and allow them specifically to interact with you) are stored in the API. ## Implementation details There are three different user-targetted permission options: - Mode 1: interactOn/unmute/unblock - Mode 2: interactOff/mute/block - *Default setting* **Example:** Force On (`interactOn`) and Force Off (`interactOff`) always or never allow that person to interact with you. These are stored as PlayerModerations. When you select a player and select "Force On", it creates a playerModeration of type `interactOn`. **Important order:** 1. When switching between one mode from the other, e.g. "Force On" and "Force Off", **the previous playerModeration MUST first be deleted before creating the second.** The game sends these in sequence, first delete the old, then create the new. Attempting to create both `interactOn` and `interactOff` is UNDOCUMENTED behavior. 2. "Use Current Setting" **does not have it's own enum**. The game removes any previous playerModeration of same type. No playerModeration of either type means fallback to the global setting. ## Deprecation notice As of October 2022, `showAvatar` and `hideAvatar` has been moved to local storage. Sending these types to the API will result in a 200 OK response, but the API will **not** store them. More information is avaiable on VRChat's official [documentation on Local Storage](https://docs.vrchat.com/docs/local-vrchat-storage). - name: prints description: Prints are a way to print photos directly from the VRChat camera. - name: props description: Props are interactable items users can spawn into instances. - name: users description: Users Docs Here - name: worlds description: Worlds Docs Here - name: miscellaneous description: Miscellaneous endpoints that do not fit into any other category. paths: /Admin/transactions/{transactionId}: parameters: - $ref: '#/components/parameters/transactionId' /Steam/transactions: get: operationId: getSteamTransactions summary: List Steam Transactions description: Get all own Steam transactions. tags: - economy security: - authCookie: [] responses: '200': $ref: '#/components/responses/TransactionListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /Steam/transactions/{transactionId}: parameters: - $ref: '#/components/parameters/transactionId' get: operationId: getSteamTransaction deprecated: true summary: Get Steam Transaction description: Get a single Steam transactions by ID. This returns the exact same information as `getSteamTransactions`, so no point in using this endpoint. tags: - economy security: - authCookie: [] responses: '200': $ref: '#/components/responses/TransactionResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /adminassetbundles/{adminAssetBundleId}: get: operationId: getAdminAssetBundle summary: Get AdminAssetBundle description: Returns an AdminAssetBundle tags: - files parameters: - $ref: '#/components/parameters/adminAssetBundleId' security: - authCookie: [] responses: '200': $ref: '#/components/responses/AdminAssetBundleResponse' /analysis/{fileId}/{versionId}: parameters: - $ref: '#/components/parameters/fileId' - $ref: '#/components/parameters/versionId' get: operationId: getFileAnalysis summary: Get File Version Analysis description: Get the performance analysis for the uploaded assets of an avatar tags: - files security: - authCookie: [] responses: '200': $ref: '#/components/responses/FileAnalysisResponse' '202': $ref: '#/components/responses/AnalysisNotYetAvailableError' '404': $ref: '#/components/responses/FileNotFoundError' /analysis/{fileId}/{versionId}/security: parameters: - $ref: '#/components/parameters/fileId' - $ref: '#/components/parameters/versionId' get: operationId: getFileAnalysisSecurity summary: Get File Version Analysis Security description: Get the security performance analysis for the uploaded assets of an avatar tags: - files security: - authCookie: [] responses: '200': $ref: '#/components/responses/FileAnalysisResponse' '202': $ref: '#/components/responses/AnalysisNotYetAvailableError' '404': $ref: '#/components/responses/FileNotFoundError' /analysis/{fileId}/{versionId}/standard: parameters: - $ref: '#/components/parameters/fileId' - $ref: '#/components/parameters/versionId' get: operationId: getFileAnalysisStandard summary: Get File Version Analysis Standard description: Get the standard performance analysis for the uploaded assets of an avatar tags: - files security: - authCookie: [] responses: '200': $ref: '#/components/responses/FileAnalysisResponse' '202': $ref: '#/components/responses/AnalysisNotYetAvailableError' '404': $ref: '#/components/responses/FileNotFoundError' /auth: get: operationId: verifyAuthToken summary: Verify Auth Token description: Verify whether the currently provided Auth Token is valid. tags: - authentication parameters: [] security: - authCookie: [] responses: '200': $ref: '#/components/responses/VerifyAuthTokenResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /auth/confirmEmail: get: operationId: confirmEmail summary: Confirm Email description: Confirms the email address for a user tags: - authentication parameters: - $ref: '#/components/parameters/confirmEmailUserId' - $ref: '#/components/parameters/confirmEmailToken' responses: '302': $ref: '#/components/responses/ConfirmEmailResponse' /auth/exists: get: operationId: checkUserExists summary: Check User Exists description: |- Checks if a user by a given `username`, `displayName` or `email` exist. This is used during registration to check if a username has already been taken, during change of displayName to check if a displayName is available, and during change of email to check if the email is already used. In the later two cases the `excludeUserId` is used to exclude oneself, otherwise the result would always be true. It is **REQUIRED** to include **AT LEAST** `username`, `displayName` **or** `email` query parameter. Although they can be combined - in addition with `excludeUserId` (generally to exclude yourself) - to further fine-tune the search. tags: - authentication parameters: - $ref: '#/components/parameters/email' - $ref: '#/components/parameters/displayName' - $ref: '#/components/parameters/usernameQuery' - $ref: '#/components/parameters/excludeUserId' responses: '200': $ref: '#/components/responses/UserExistsResponse' '400': $ref: '#/components/responses/MissingParameterError' /auth/permissions: parameters: [] get: operationId: getAssignedPermissions summary: Get Assigned Permissions description: Returns a list of all permissions currently granted by the user. Permissions are assigned e.g. by subscribing to VRC+. tags: - miscellaneous security: - authCookie: [] responses: '200': $ref: '#/components/responses/PermissionListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /auth/register: post: operationId: registerUserAccount deprecated: true summary: Register User Account description: |- ~~Register a new user account.~~ **DEPRECATED:** Automated creation of accounts has no legitimate public third-party use case, and would be in violation of ToS §13.2: *By using the Platform, you agree not to: i. [...] use the Platform in a manner inconsistent with individual human usage* This endpoint is documented in the interest of completeness tags: - authentication parameters: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/RegisterUserAccountRequest' responses: '200': $ref: '#/components/responses/CurrentUserLoginResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /auth/twofactorauth: delete: operationId: disable2FA summary: Disable 2FA description: Disables 2FA for the currently logged in account tags: - authentication security: - authCookie: [] responses: '200': $ref: '#/components/responses/Disable2FAResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /auth/twofactorauth/emailotp/verify: post: operationId: verify2FAEmailCode summary: Verify 2FA email code description: Finishes the login sequence with an 2FA email code. tags: - authentication parameters: [] requestBody: required: true content: application/json: examples: {} schema: $ref: '#/components/schemas/TwoFactorEmailCode' security: - authCookie: [] responses: '200': $ref: '#/components/responses/Verify2FAEmailCodeResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /auth/twofactorauth/otp/verify: post: operationId: verifyRecoveryCode summary: Verify 2FA code with Recovery code description: Finishes the login sequence with an OTP (One Time Password) recovery code for accounts with 2FA-protection enabled. tags: - authentication requestBody: required: true content: application/json: examples: {} schema: $ref: '#/components/schemas/TwoFactorAuthCode' security: - authCookie: [] responses: '200': $ref: '#/components/responses/Verify2FAResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /auth/twofactorauth/totp/pending: delete: operationId: cancelPending2FA summary: Cancel pending enabling of time-based 2FA codes description: Cancels the sequence for enabling time-based 2FA. tags: - authentication parameters: [] security: - authCookie: [] responses: '200': $ref: '#/components/responses/Disable2FAResponse' '401': $ref: '#/components/responses/MissingCredentialsError' post: operationId: enable2FA summary: Enable time-based 2FA codes description: Begins the sequence for enabling time-based 2FA. tags: - authentication parameters: [] security: - authCookie: [] responses: '200': $ref: '#/components/responses/Pending2FAResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /auth/twofactorauth/totp/pending/verify: post: operationId: verifyPending2FA summary: Verify Pending 2FA code description: Finishes sequence for enabling time-based 2FA. tags: - authentication parameters: [] requestBody: required: true content: application/json: examples: {} schema: $ref: '#/components/schemas/TwoFactorAuthCode' security: - authCookie: [] responses: '200': $ref: '#/components/responses/Verify2FAResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /auth/twofactorauth/totp/verify: post: operationId: verify2FA summary: Verify 2FA code description: Finishes the login sequence with a normal 2FA-generated code for accounts with 2FA-protection enabled. tags: - authentication parameters: [] requestBody: required: true content: application/json: examples: {} schema: $ref: '#/components/schemas/TwoFactorAuthCode' security: - authCookie: [] responses: '200': $ref: '#/components/responses/Verify2FAResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /auth/user: get: operationId: getCurrentUser summary: Login and/or Get Current User Info description: |- This endpoint does the following two operations: 1) Checks if you are already logged in by looking for a valid `auth` cookie. If you are have a valid auth cookie then no additional auth-related actions are taken. If you are **not** logged in then it will log you in with the `Authorization` header and set the `auth` cookie. The `auth` cookie will only be sent once. 2) If logged in, this function will also return the CurrentUser object containing detailed information about the currently logged in user. The auth string after `Authorization: Basic {string}` is a base64-encoded string of the username and password, both individually url-encoded, and then joined with a colon. > base64(urlencode(username):urlencode(password)) **WARNING: Session Limit:** Each authentication with login credentials counts as a separate session, out of which you have a limited amount. Make sure to save and reuse the `auth` cookie if you are often restarting the program. The provided API libraries automatically save cookies during runtime, but does not persist during restart. While it can be fine to use username/password during development, expect in production to very fast run into the rate-limit and be temporarily blocked from making new sessions until older ones expire. The exact number of simultaneous sessions is unknown/undisclosed. tags: - authentication parameters: [] security: - authHeader: [] - authHeader: [] twoFactorAuthCookie: [] - authCookie: [] responses: '200': $ref: '#/components/responses/CurrentUserLoginResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /auth/user/avatarmoderations: delete: operationId: deleteGlobalAvatarModeration summary: Delete Global Avatar Moderation description: Globally unmoderates an avatar. tags: - authentication parameters: - $ref: '#/components/parameters/targetAvatarId' - $ref: '#/components/parameters/avatarModerationType' security: - authCookie: [] responses: '200': $ref: '#/components/responses/DeleteAvatarModerationResponse' '401': $ref: '#/components/responses/MissingCredentialsError' get: operationId: getGlobalAvatarModerations summary: Get Global Avatar Moderations description: Returns list of globally moderated avatars. tags: - authentication security: - authCookie: [] responses: '200': $ref: '#/components/responses/GetAvatarModerationsResponse' '401': $ref: '#/components/responses/MissingCredentialsError' post: operationId: createGlobalAvatarModeration summary: Create Global Avatar Moderation description: Globally moderates an avatar. tags: - authentication requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateAvatarModerationRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/CreateAvatarModerationResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /auth/user/favoritelimits: parameters: [] get: operationId: getFavoriteLimits summary: Get Favorite Limits description: Return information about a specific Favorite. tags: - favorites parameters: [] security: - authCookie: [] responses: '200': $ref: '#/components/responses/FavoriteLimitsResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /auth/user/friends: get: operationId: getFriends summary: List Friends description: List information about friends. tags: - friends parameters: - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offline' security: - authCookie: [] responses: '200': $ref: '#/components/responses/LimitedUserFriendListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /auth/user/friends/{userId}: parameters: - $ref: '#/components/parameters/userId' delete: operationId: unfriend summary: Unfriend description: Unfriend a user by ID. tags: - friends security: - authCookie: [] responses: '200': $ref: '#/components/responses/UnfriendSuccess' '400': $ref: '#/components/responses/NotFriendsError' '401': $ref: '#/components/responses/MissingCredentialsError' /auth/user/notifications: get: operationId: getNotifications summary: List Notifications description: Retrieve all of the current user's notifications. tags: - notifications parameters: - name: type deprecated: true description: Only send notifications of this type (can use `all` for all). This parameter no longer does anything, and is deprecated. in: query schema: type: string example: all - name: sent deprecated: true description: Return notifications sent by the user. Must be false or omitted. in: query schema: type: boolean - name: hidden description: Whether to return hidden or non-hidden notifications. True only allowed on type `friendRequest`. in: query schema: type: boolean - name: after description: Only return notifications sent after this Date. Ignored if type is `friendRequest`. in: query schema: type: string example: five_minutes_ago - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' security: - authCookie: [] responses: '200': $ref: '#/components/responses/NotificationListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /auth/user/notifications/clear: put: operationId: clearNotifications summary: Clear All Notifications description: Clear **all** notifications. tags: - notifications security: - authCookie: [] responses: '200': $ref: '#/components/responses/ClearNotificationsSuccess' '401': $ref: '#/components/responses/MissingCredentialsError' /auth/user/notifications/{notificationId}: parameters: - $ref: '#/components/parameters/notificationId' get: operationId: getNotification summary: Show notification description: Get a notification by notification `not_` ID. tags: - notifications security: - authCookie: [] responses: '200': $ref: '#/components/responses/NotificationResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/NotificationNotFoundError' /auth/user/notifications/{notificationId}/accept: parameters: - $ref: '#/components/parameters/notificationId' put: operationId: acceptFriendRequest summary: Accept Friend Request description: Accept a friend request by notification `frq_` ID. Friend requests can be found using the NotificationsAPI `getNotifications` by filtering of type `friendRequest`. tags: - notifications security: - authCookie: [] responses: '200': $ref: '#/components/responses/FriendSuccess' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/AcceptFriendRequestError' /auth/user/notifications/{notificationId}/hide: parameters: - $ref: '#/components/parameters/notificationId' put: operationId: deleteNotification summary: Delete Notification description: Delete a notification. tags: - notifications security: - authCookie: [] responses: '200': $ref: '#/components/responses/NotificationResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /auth/user/notifications/{notificationId}/see: parameters: - $ref: '#/components/parameters/notificationId' put: operationId: markNotificationAsRead summary: Mark Notification As Read description: Mark a notification as seen. tags: - notifications security: - authCookie: [] responses: '200': $ref: '#/components/responses/NotificationResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /auth/user/playermoderations: delete: operationId: clearAllPlayerModerations summary: Clear All Player Moderations description: āš ļø **This will delete every single player moderation you've ever made.** tags: - playermoderation security: - authCookie: [] responses: '200': $ref: '#/components/responses/PlayerModerationClearAllSuccess' '401': $ref: '#/components/responses/MissingCredentialsError' get: operationId: getPlayerModerations summary: Search Player Moderations description: |- Returns a list of all player moderations made by **you**. This endpoint does not have pagination, and will return *all* results. Use query parameters to limit your query if needed. tags: - playermoderation parameters: - name: type description: Must be one of PlayerModerationType. in: query schema: $ref: '#/components/schemas/PlayerModerationType' - name: targetUserId description: Must be valid UserID. in: query schema: $ref: '#/components/schemas/UserID' security: - authCookie: [] responses: '200': $ref: '#/components/responses/PlayerModerationListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' post: operationId: moderateUser summary: Moderate User description: |- Moderate a user, e.g. unmute them or show their avatar. Please see the [Player Moderation docs](https://vrchatapi.github.io/docs/api/#tag--playermoderation) on what playerModerations are, and how they differ from staff moderations. tags: - playermoderation requestBody: description: '' required: true content: application/json: schema: $ref: '#/components/schemas/ModerateUserRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/PlayerModerationResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /auth/user/resendEmail: post: operationId: resendEmailConfirmation summary: Resend Email Confirmation description: Requests a resend of pending email address confirmation email tags: - authentication parameters: [] security: - authCookie: [] responses: '200': $ref: '#/components/responses/ResendVerificationEmailSuccess' '401': $ref: '#/components/responses/MissingCredentialsError' /auth/user/subscription: get: operationId: getCurrentSubscriptions summary: Get Current Subscriptions description: Get a list of all current user subscriptions. tags: - economy security: - authCookie: [] responses: '200': $ref: '#/components/responses/UserSubscriptionListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /auth/user/twofactorauth/otp: get: operationId: getRecoveryCodes summary: Get 2FA Recovery codes description: Gets the OTP (One Time Password) recovery codes for accounts with 2FA-protection enabled. tags: - authentication security: - authCookie: [] responses: '200': $ref: '#/components/responses/Get2FARecoveryCodesResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /auth/user/unplayermoderate: put: operationId: unmoderateUser summary: Unmoderate User description: Removes a player moderation previously added through `moderateUser`. E.g if you previously have shown their avatar, but now want to reset it to default. tags: - playermoderation requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ModerateUserRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/PlayerModerationUnmoderatedSuccess' '401': $ref: '#/components/responses/MissingCredentialsError' /auth/verifyLoginPlace: get: operationId: verifyLoginPlace summary: Verify Login Place description: Verifies a login attempt for a user tags: - authentication parameters: - $ref: '#/components/parameters/userIdQuery' - $ref: '#/components/parameters/verifyLoginPlaceToken' responses: '302': $ref: '#/components/responses/VerifyLoginPlaceResponse' /avatarStyles: get: operationId: getAvatarStyles summary: Get Avatar Styles description: List avatar styles. tags: - avatars responses: '200': $ref: '#/components/responses/AvatarStyleListResponse' /avatars: get: operationId: searchAvatars summary: Search Avatars description: Search and list avatars by query filters. You can only search your own or featured avatars. It is not possible as a normal user to search other peoples avatars. tags: - avatars parameters: - $ref: '#/components/parameters/featured' - $ref: '#/components/parameters/sort' - name: user description: Set to `me` for searching own avatars. required: false in: query schema: type: string enum: - me - $ref: '#/components/parameters/userIdQuery' - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/order' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/tag' - $ref: '#/components/parameters/notag' - $ref: '#/components/parameters/releaseStatus' - $ref: '#/components/parameters/maxUnityVersion' - $ref: '#/components/parameters/minUnityVersion' - $ref: '#/components/parameters/platform' security: - authCookie: [] responses: '200': $ref: '#/components/responses/AvatarListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' post: operationId: createAvatar summary: Create Avatar description: Create an avatar. It's possible to optionally specify a ID if you want a custom one. Attempting to create an Avatar with an already claimed ID will result in a DB error. tags: - avatars requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateAvatarRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/AvatarResponse' '400': $ref: '#/components/responses/UnableToCreateAvatarNowError' '401': $ref: '#/components/responses/FeaturedSetNotAdminError' /avatars/favorites: get: operationId: getFavoritedAvatars summary: List Favorited Avatars description: Search and list favorited avatars by query filters. tags: - avatars parameters: - $ref: '#/components/parameters/featured' - $ref: '#/components/parameters/sort' - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/order' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/search' - $ref: '#/components/parameters/tag' - $ref: '#/components/parameters/notag' - $ref: '#/components/parameters/releaseStatus' - $ref: '#/components/parameters/maxUnityVersion' - $ref: '#/components/parameters/minUnityVersion' - $ref: '#/components/parameters/platform' - $ref: '#/components/parameters/userIdAdmin' security: - authCookie: [] responses: '200': $ref: '#/components/responses/AvatarListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/AvatarSeeOtherUserFavoritesError' /avatars/impostor/queue/stats: get: operationId: getImpostorQueueStats summary: Get Impostor Queue Stats description: Gets service stats for queued impostor. tags: - avatars security: - authCookie: [] responses: '200': $ref: '#/components/responses/AvatarImpostorQueueStatsResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /avatars/licensed: get: operationId: getLicensedAvatars summary: List Licensed Avatars description: List licensed avatars. tags: - avatars parameters: - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' security: - authCookie: [] responses: '200': $ref: '#/components/responses/AvatarListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /avatars/{avatarId}: parameters: - $ref: '#/components/parameters/avatarId' get: operationId: getAvatar summary: Get Avatar description: Get information about a specific Avatar. tags: - avatars security: - authCookie: [] responses: '200': $ref: '#/components/responses/AvatarResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/AvatarNotFoundError' put: operationId: updateAvatar summary: Update Avatar description: Update information about a specific avatar. tags: - avatars requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateAvatarRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/AvatarResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/AvatarNotFoundError' delete: operationId: deleteAvatar summary: Delete Avatar description: Delete an avatar. Notice an avatar is never fully "deleted", only its ReleaseStatus is set to "hidden" and the linked Files are deleted. The AvatarID is permanently reserved. tags: - avatars security: - authCookie: [] responses: '200': $ref: '#/components/responses/AvatarResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/AvatarNotFoundError' /avatars/{avatarId}/impostor: parameters: - $ref: '#/components/parameters/avatarId' delete: operationId: deleteImpostor summary: Delete generated Impostor description: Delete generated Impostor for that avatar. tags: - avatars security: - authCookie: [] responses: '200': description: The Impostors generated for that avatar are deleted. '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/AvatarNotFoundError' /avatars/{avatarId}/impostor/enqueue: parameters: - $ref: '#/components/parameters/avatarId' post: operationId: enqueueImpostor summary: Enqueue Impostor generation description: Enqueue Impostor generation for that avatar. tags: - avatars security: - authCookie: [] responses: '200': $ref: '#/components/responses/AvatarImpostorEnqueueResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/AvatarNotFoundError' /avatars/{avatarId}/select: parameters: - $ref: '#/components/parameters/avatarId' put: operationId: selectAvatar summary: Select Avatar description: Switches into that avatar. tags: - avatars security: - authCookie: [] responses: '200': $ref: '#/components/responses/CurrentUserResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/AvatarNotFoundError' /avatars/{avatarId}/selectFallback: parameters: - $ref: '#/components/parameters/avatarId' put: operationId: selectFallbackAvatar deprecated: true summary: Select Fallback Avatar description: Switches into that avatar as your fallback avatar. tags: - avatars security: - authCookie: [] responses: '200': $ref: '#/components/responses/CurrentUserResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/AvatarNotTaggedAsFallbackError' '404': $ref: '#/components/responses/AvatarNotFoundError' /calendar: get: operationId: getCalendarEvents summary: List calendar events description: Get a list of a user's calendar events for the month in ?date tags: - calendar parameters: - $ref: '#/components/parameters/monthDate' - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' security: - authCookie: [] responses: '200': $ref: '#/components/responses/CalendarEventListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /calendar/featured: get: operationId: getFeaturedCalendarEvents summary: List featured calendar events description: Get a list of a featured calendar events for the month in ?date tags: - calendar parameters: - $ref: '#/components/parameters/monthDate' - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' security: - authCookie: [] responses: '200': $ref: '#/components/responses/CalendarEventListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /calendar/following: get: operationId: getFollowedCalendarEvents summary: List followed calendar events description: Get a list of a followed calendar events for the month in ?date tags: - calendar parameters: - $ref: '#/components/parameters/monthDate' - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' security: - authCookie: [] responses: '200': $ref: '#/components/responses/CalendarEventListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /calendar/search: get: operationId: searchCalendarEvents summary: Search for calendar events description: Get a list of calendar events by search terms tags: - calendar parameters: - $ref: '#/components/parameters/calendarSearchTerm' - $ref: '#/components/parameters/utcOffset' - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' security: - authCookie: [] responses: '200': $ref: '#/components/responses/CalendarEventListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /calendar/{groupId}: get: operationId: getGroupCalendarEvents summary: List a group's calendar events description: Get a list of a group's calendar events tags: - calendar parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/monthDate' - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' security: - authCookie: [] responses: '200': $ref: '#/components/responses/CalendarEventListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /calendar/{groupId}/event: parameters: - $ref: '#/components/parameters/groupId' post: operationId: createGroupCalendarEvent summary: Create a calendar event description: Creates an event for a group on the calendar tags: - calendar requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateCalendarEventRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/CalendarEventResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /calendar/{groupId}/{calendarId}: delete: operationId: deleteGroupCalendarEvent summary: Delete a calendar event description: Delete a group calendar event tags: - calendar parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/calendarId' security: - authCookie: [] responses: '200': $ref: '#/components/responses/DeleteCalendarEventSuccess' '401': $ref: '#/components/responses/MissingCredentialsError' get: operationId: getGroupCalendarEvent summary: Get a calendar event description: Get a group calendar event tags: - calendar parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/calendarId' security: - authCookie: [] responses: '200': $ref: '#/components/responses/CalendarEventResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /calendar/{groupId}/{calendarId}.ics: get: operationId: getGroupCalendarEventICS summary: Download calendar event as ICS description: Returns the specified calendar in iCalendar (ICS) format. tags: - calendar parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/calendarId' responses: '200': $ref: '#/components/responses/ICSResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/ICSNotFoundError' /calendar/{groupId}/{calendarId}/event: parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/calendarId' put: operationId: updateGroupCalendarEvent summary: Update a calendar event description: Updates an event for a group on the calendar tags: - calendar requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateCalendarEventRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/CalendarEventResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /calendar/{groupId}/{calendarId}/follow: parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/calendarId' post: operationId: followGroupCalendarEvent summary: Follow a calendar event description: Follow or unfollow an event on a group's calendar tags: - calendar requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/FollowCalendarEventRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/CalendarEventResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /config: get: operationId: getConfig summary: Fetch API Config description: |- API config contains configuration that the clients needs to work properly. Currently the most important value here is `clientApiKey` which is used for all other API endpoints. tags: - miscellaneous security: [] responses: '200': $ref: '#/components/responses/APIConfigResponse' /css/app.css: get: operationId: getCSS summary: Download CSS description: Fetches the CSS code to the frontend React website. tags: - miscellaneous parameters: - $ref: '#/components/parameters/variant' - $ref: '#/components/parameters/branch' responses: '200': description: '**Note:** VRChat uses 302 Redirect to Cloudfront. The implementing library **must** support and follow redirects natively.' content: text/css: schema: type: string '400': $ref: '#/components/responses/DownloadSourceCodeAccessError' /economy/licenses/active: get: operationId: getActiveLicenses summary: Get Active Licenses description: Gets active licenses tags: - economy security: - authCookie: [] responses: '200': $ref: '#/components/responses/LicenseListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /economy/store: parameters: - $ref: '#/components/parameters/storeId' - $ref: '#/components/parameters/hydrateListings' - $ref: '#/components/parameters/hydrateProducts' get: operationId: getStore summary: Get Store description: Gets a store tags: - economy security: - authCookie: [] responses: '200': $ref: '#/components/responses/StoreResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /economy/store/shelves: parameters: - $ref: '#/components/parameters/storeId' - $ref: '#/components/parameters/hydrateListings' - $ref: '#/components/parameters/storeView' get: operationId: getStoreShelves summary: Get Store Shelves description: Gets the shelves for a store tags: - economy security: - authCookie: [] responses: '200': $ref: '#/components/responses/StoreShelfListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /favorite/group/{favoriteGroupType}/{favoriteGroupName}/{userId}: parameters: - $ref: '#/components/parameters/favoriteGroupType' - $ref: '#/components/parameters/favoriteGroupName' - $ref: '#/components/parameters/userId' get: operationId: getFavoriteGroup summary: Show Favorite Group description: Fetch information about a specific favorite group. tags: - favorites security: - authCookie: [] responses: '200': $ref: '#/components/responses/FavoriteGroupResponse' put: operationId: updateFavoriteGroup summary: Update Favorite Group description: Update information about a specific favorite group. tags: - favorites requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateFavoriteGroupRequest' security: - authCookie: [] responses: '200': description: OK delete: operationId: clearFavoriteGroup summary: Clear Favorite Group description: Clear ALL contents of a specific favorite group. tags: - favorites security: - authCookie: [] responses: '200': $ref: '#/components/responses/FavoriteGroupClearedSuccess' /favorite/groups: get: operationId: getFavoriteGroups summary: List Favorite Groups description: Return a list of favorite groups owned by a user. Returns the same information as `getFavoriteGroups`. tags: - favorites parameters: - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/userIdAdmin' - name: ownerId description: The owner of whoms favorite groups to return. Must be a UserID. in: query schema: type: string security: - authCookie: [] responses: '200': $ref: '#/components/responses/FavoriteGroupListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /favorites: get: operationId: getFavorites summary: List Favorites description: Returns a list of favorites. tags: - favorites parameters: - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' - name: type description: The type of favorites to return, FavoriteType. in: query schema: type: string - $ref: '#/components/parameters/tag' security: - authCookie: [] responses: '200': $ref: '#/components/responses/FavoriteListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' post: operationId: addFavorite summary: Add Favorite description: |- Add a new favorite. Friend groups are named `group_0` through `group_3`. Avatar and World groups are named `avatars1` to `avatars4` and `worlds1` to `worlds4`. You cannot add people whom you are not friends with to your friends list. Destroying a friendship removes the person as favorite on both sides. tags: - favorites requestBody: description: '' content: application/json: examples: Example Favorite Avatar: value: type: avatar favoriteId: avtr_912d66a4-4714-43b8-8407-7de2cafbf55b tags: - avatars1 Example Favorite Friend: value: type: friend favoriteId: usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469 tags: - group_0 schema: $ref: '#/components/schemas/AddFavoriteRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/FavoriteResponse' '400': $ref: '#/components/responses/FavoriteAddAlreadyFavoritedError' '403': $ref: '#/components/responses/FavoriteAddNotFriendsError' /favorites/{favoriteId}: parameters: - $ref: '#/components/parameters/favoriteId' delete: operationId: removeFavorite summary: Remove Favorite description: Remove a favorite from your favorites list. tags: - favorites security: - authCookie: [] responses: '200': $ref: '#/components/responses/FavoriteRemovedSuccess' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/FavoriteNotFoundError' /file: post: operationId: createFile summary: Create File description: Creates a new File object tags: - files requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateFileRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/FileResponse' /file/image: post: operationId: uploadImage summary: Upload gallery image, icon, emoji or sticker description: Upload an image, which can be an icon, gallery image, sticker or emoji tags: - files requestBody: content: multipart/form-data: schema: type: object properties: animationStyle: type: string description: Animation style for sticker, required for emoji. example: bats file: type: string description: The binary blob of the png file. format: binary frames: type: integer description: Required for emojianimated. Total number of frames to be animated (2-64) framesOverTime: type: integer description: Required for emojianimated. Animation frames per second (1-64) maskTag: type: string description: Mask of the sticker, optional for emoji. example: square tag: type: string description: Needs to be either icon, gallery, sticker, emoji, or emojianimated required: - file - tag security: - authCookie: [] responses: '200': $ref: '#/components/responses/FileResponse' /file/{fileId}: parameters: - $ref: '#/components/parameters/fileId' get: operationId: getFile summary: Show File description: Shows general information about the "File" object. Each File can have several "Version"'s, and each Version can have multiple real files or "Data" blobs. tags: - files security: - authCookie: [] responses: '200': $ref: '#/components/responses/FileResponse' '404': $ref: '#/components/responses/FileNotFoundError' post: operationId: createFileVersion summary: Create File Version description: Creates a new FileVersion. Once a Version has been created, proceed to the `/file/{fileId}/{versionId}/file/start` endpoint to start a file upload. tags: - files requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateFileVersionRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/FileResponse' delete: operationId: deleteFile summary: Delete File description: Deletes a File object. tags: - files security: - authCookie: [] responses: '200': $ref: '#/components/responses/FileResponse' '404': $ref: '#/components/responses/FileDeletedError' /file/{fileId}/{versionId}: parameters: - $ref: '#/components/parameters/fileId' - $ref: '#/components/parameters/versionId' get: operationId: downloadFileVersion summary: Download File Version description: |- Downloads the file with the provided version number. **Version Note:** Version 0 is always when the file was created. The real data is usually always located in version 1 and up. **Extension Note:** Files are not guaranteed to have a file extensions. UnityPackage files tends to have it, images through this endpoint do not. You are responsible for appending file extension from the `extension` field when neccesary. tags: - files security: - authCookie: [] responses: '200': $ref: '#/components/responses/RawFileResponse' '404': $ref: '#/components/responses/FileNotFoundError' delete: operationId: deleteFileVersion summary: Delete File Version description: Delete a specific version of a file. You can only delete the latest version. tags: - files security: - authCookie: [] responses: '200': $ref: '#/components/responses/FileResponse' '400': $ref: '#/components/responses/FileVersionDeleteInitialError' '500': $ref: '#/components/responses/FileVersionDeleteMiddleError' /file/{fileId}/{versionId}/{fileType}/finish: parameters: - $ref: '#/components/parameters/fileId' - $ref: '#/components/parameters/versionId' - $ref: '#/components/parameters/fileType' put: operationId: finishFileDataUpload summary: Finish FileData Upload description: Finish an upload of a FileData. This will mark it as "complete". After uploading the `file` for Avatars and Worlds you then have to upload a `signature` file. tags: - files requestBody: description: |- Please see documentation on ETag's: [https://teppen.io/2018/06/23/aws_s3_etags/](https://teppen.io/2018/06/23/aws_s3_etags/) ETag's should NOT be present when uploading a `signature`. content: application/json: examples: Example Request: value: etags: - xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy maxParts: '0' nextPartNumber: '0' schema: $ref: '#/components/schemas/FinishFileDataUploadRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/FileResponse' /file/{fileId}/{versionId}/{fileType}/start: parameters: - $ref: '#/components/parameters/fileId' - $ref: '#/components/parameters/versionId' - $ref: '#/components/parameters/fileType' put: operationId: startFileDataUpload summary: Start FileData Upload description: |- Starts an upload of a specific FilePart. This endpoint will return an AWS URL which you can PUT data to. You need to call this and receive a new AWS API URL for each `partNumber`. Please see AWS's REST documentation on "PUT Object to S3" on how to upload. Once all parts has been uploaded, proceed to `/finish` endpoint. **Note:** `nextPartNumber` seems like it is always ignored. Despite it returning 0, first partNumber is always 1. tags: - files parameters: - name: partNumber deprecated: true description: The part number to start uploading. If not provided, the first part will be started. required: false in: query schema: type: integer example: 1 minimum: 0 security: - authCookie: [] responses: '200': $ref: '#/components/responses/FileUploadURLResponse' '400': $ref: '#/components/responses/FileUploadAlreadyFinishedError' /file/{fileId}/{versionId}/{fileType}/status: parameters: - $ref: '#/components/parameters/fileId' - $ref: '#/components/parameters/versionId' - $ref: '#/components/parameters/fileType' get: operationId: getFileDataUploadStatus summary: Check FileData Upload Status description: Retrieves the upload status for file upload. Can currently only be accessed when `status` is `waiting`. Trying to access it on a file version already uploaded currently times out. tags: - files security: - authCookie: [] responses: '200': $ref: '#/components/responses/FileVersionUploadStatusResponse' /files: get: operationId: getFiles summary: List Files description: Returns a list of files tags: - files parameters: - name: tag description: Tag, for example "icon" or "gallery", not included by default. in: query schema: type: string minLength: 1 - name: userId deprecated: true description: UserID, will always generate a 500 permission error. in: query schema: type: string - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' security: - authCookie: [] responses: '200': $ref: '#/components/responses/FileListResponse' /gallery: post: operationId: uploadGalleryImage summary: Upload gallery image description: Upload a gallery image tags: - files requestBody: content: multipart/form-data: schema: type: object properties: file: type: string description: The binary blob of the png file. format: binary required: - file security: - authCookie: [] responses: '200': $ref: '#/components/responses/FileResponse' /groups: get: operationId: searchGroups summary: Search Group description: Searches Groups by name or shortCode tags: - groups parameters: - name: query description: Query to search for, can be either Group Name or Group shortCode required: false in: query schema: type: string - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/number' responses: '200': $ref: '#/components/responses/LimitedGroupListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' post: operationId: createGroup summary: Create Group description: Creates a Group and returns a Group object. **Requires VRC+ Subscription.** tags: - groups requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateGroupRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /groups/roleTemplates: get: operationId: getGroupRoleTemplates summary: Get Group Role Templates description: Obtain predefined templates for group roles tags: - groups security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupRoleTemplatesResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /groups/{groupId}: parameters: - $ref: '#/components/parameters/groupId' get: operationId: getGroup summary: Get Group by ID description: Returns a single Group by ID. tags: - groups parameters: - name: includeRoles description: Include roles for the Group object. Defaults to false. required: false in: query schema: type: boolean security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' put: operationId: updateGroup summary: Update Group description: Updates a Group and returns it. tags: - groups requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateGroupRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' delete: operationId: deleteGroup summary: Delete Group description: Deletes a Group. tags: - groups security: - authCookie: [] responses: '200': $ref: '#/components/responses/DeleteGroupSuccess' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' /groups/{groupId}/announcement: parameters: - $ref: '#/components/parameters/groupId' get: operationId: getGroupAnnouncements summary: Get Group Announcement description: |- Returns the announcement for a Group. If no announcement has been made, then it returns **empty object**. If an announcement exists, then it will always return all fields except `imageId` and `imageUrl` which may be null. tags: - groups security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupAnnouncementResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' post: operationId: createGroupAnnouncement summary: Create Group Announcement description: 'Creates an Announcement for a Group. Warning: This will also remove all announcements. To make proper announcements, use the posts endpoint instead' tags: - groups requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateGroupAnnouncementRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupAnnouncementResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' delete: operationId: deleteGroupAnnouncement summary: Delete Group Announcement description: Deletes the announcement for a Group. tags: - groups security: - authCookie: [] responses: '200': $ref: '#/components/responses/DeleteGroupAnnouncementSuccess' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' /groups/{groupId}/auditLogs: parameters: - $ref: '#/components/parameters/groupId' get: operationId: getGroupAuditLogs summary: Get Group Audit Logs description: Returns a list of audit logs for a Group. tags: - groups parameters: - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/startDate' - $ref: '#/components/parameters/endDate' - $ref: '#/components/parameters/actorIds' - $ref: '#/components/parameters/eventTypes' - $ref: '#/components/parameters/targetIds' security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupAuditLogListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' /groups/{groupId}/bans: parameters: - $ref: '#/components/parameters/groupId' get: operationId: getGroupBans summary: Get Group Bans description: Returns a list of banned users for a Group. tags: - groups parameters: - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupMemberListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/NoPermission' '404': $ref: '#/components/responses/GroupNotFoundError' post: operationId: banGroupMember summary: Ban Group Member description: Bans a user from a Group. tags: - groups requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/BanGroupMemberRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupMemberResponse' '400': $ref: '#/components/responses/BanGroupMemberBadRequestError' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' /groups/{groupId}/bans/{userId}: parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/userId' delete: operationId: unbanGroupMember summary: Unban Group Member description: Unbans a user from a Group. tags: - groups security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupMemberResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' /groups/{groupId}/galleries: parameters: - $ref: '#/components/parameters/groupId' post: operationId: createGroupGallery summary: Create Group Gallery description: Creates a gallery for a Group. tags: - groups requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateGroupGalleryRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupGalleryResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' /groups/{groupId}/galleries/{groupGalleryId}: parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/groupGalleryId' get: operationId: getGroupGalleryImages summary: Get Group Gallery Images description: Returns a list of images for a Group gallery. tags: - groups parameters: - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' - name: approved description: If specified, only returns images that have been approved or not approved. required: false in: query schema: type: boolean security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupGalleryImageListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' put: operationId: updateGroupGallery summary: Update Group Gallery description: Updates a gallery for a Group. tags: - groups requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateGroupGalleryRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupGalleryResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' delete: operationId: deleteGroupGallery summary: Delete Group Gallery description: Deletes a gallery for a Group. tags: - groups security: - authCookie: [] responses: '200': $ref: '#/components/responses/DeleteGroupGallerySuccess' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' /groups/{groupId}/galleries/{groupGalleryId}/images: parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/groupGalleryId' post: operationId: addGroupGalleryImage summary: Add Group Gallery Image description: Adds an image to a Group gallery. tags: - groups requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AddGroupGalleryImageRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupGalleryImageResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' /groups/{groupId}/galleries/{groupGalleryId}/images/{groupGalleryImageId}: parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/groupGalleryId' - $ref: '#/components/parameters/groupGalleryImageId' delete: operationId: deleteGroupGalleryImage summary: Delete Group Gallery Image description: Deletes an image from a Group gallery. tags: - groups security: - authCookie: [] responses: '200': $ref: '#/components/responses/DeleteGroupGalleryImageSuccess' '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/GroupGalleryImageDeleteForbiddenError' '404': $ref: '#/components/responses/GroupNotFoundError' /groups/{groupId}/instances: parameters: - $ref: '#/components/parameters/groupId' get: operationId: getGroupInstances summary: Get Group Instances description: Returns a list of group instances tags: - groups security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupInstanceListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' /groups/{groupId}/invites: parameters: - $ref: '#/components/parameters/groupId' get: operationId: getGroupInvites summary: Get Group Invites Sent description: Returns a list of members that have been invited to the Group. tags: - groups parameters: - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupMemberListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/GroupNotMemberError' '404': $ref: '#/components/responses/GroupNotFoundError' post: operationId: createGroupInvite summary: Invite User to Group description: Sends an invite to a user to join the group. tags: - groups requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateGroupInviteRequest' security: - authCookie: [] responses: '200': description: OK '400': $ref: '#/components/responses/GroupInviteBadRequestError' '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/GroupInviteForbiddenError' '404': $ref: '#/components/responses/GroupNotFoundError' /groups/{groupId}/invites/{userId}: parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/userId' delete: operationId: deleteGroupInvite summary: Delete User Invite description: Deletes an Group invite sent to a User tags: - groups security: - authCookie: [] responses: '200': description: OK '400': $ref: '#/components/responses/DeleteGroupInviteBadRequestError' '401': $ref: '#/components/responses/MissingCredentialsError' /groups/{groupId}/join: parameters: - $ref: '#/components/parameters/groupId' post: operationId: joinGroup summary: Join Group description: Join a Group by ID and returns the member object. tags: - groups security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupMemberResponse' '400': $ref: '#/components/responses/GroupAlreadyMemberError' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' /groups/{groupId}/leave: parameters: - $ref: '#/components/parameters/groupId' post: operationId: leaveGroup summary: Leave Group description: Leave a group by ID. tags: - groups security: - authCookie: [] responses: '200': description: OK '403': $ref: '#/components/responses/GroupNotMemberError' '404': $ref: '#/components/responses/GroupNotFoundError' /groups/{groupId}/members: parameters: - $ref: '#/components/parameters/groupId' get: operationId: getGroupMembers summary: List Group Members description: |- Returns a List of all **other** Group Members. This endpoint will never return the user calling the endpoint. Information about the user calling the endpoint must be found in the `myMember` field of the Group object. tags: - groups parameters: - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/groupMemberSort' - $ref: '#/components/parameters/groupMemberRoleFilter' security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupMemberListResponse' '400': $ref: '#/components/responses/UsersInvalidSearchError' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' /groups/{groupId}/members/{userId}: parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/userId' get: operationId: getGroupMember summary: Get Group Member description: Returns a LimitedGroup Member. tags: - groups security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupLimitedMemberResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/GroupNotMemberError' '404': $ref: '#/components/responses/GroupNotFoundError' put: operationId: updateGroupMember summary: Update Group Member description: Updates a Group Member tags: - groups requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateGroupMemberRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupLimitedMemberResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' delete: operationId: kickGroupMember summary: Kick Group Member description: Kicks a Group Member from the Group. The current user must have the "Remove Group Members" permission. tags: - groups security: - authCookie: [] responses: '200': description: OK '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/GroupNotMemberError' '404': $ref: '#/components/responses/GroupNotFoundError' /groups/{groupId}/members/{userId}/roles/{groupRoleId}: parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/userId' - $ref: '#/components/parameters/groupRoleId' put: operationId: addGroupMemberRole summary: Add Role to GroupMember description: Adds a Role to a Group Member tags: - groups security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupRoleIDListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' delete: operationId: removeGroupMemberRole summary: Remove Role from GroupMember description: Removes a Role from a Group Member tags: - groups security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupRoleIDListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' /groups/{groupId}/permissions: parameters: - $ref: '#/components/parameters/groupId' get: operationId: getGroupPermissions summary: List Group Permissions description: Returns a List of all possible/available permissions for a Group. tags: - groups security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupPermissionListResponse' '400': $ref: '#/components/responses/UsersInvalidSearchError' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' /groups/{groupId}/posts: parameters: - $ref: '#/components/parameters/groupId' get: operationId: getGroupPosts summary: Get posts from a Group description: Get posts from a Group tags: - groups parameters: - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' - name: publicOnly description: See public posts only. in: query schema: type: boolean security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupPostsResponse' '401': $ref: '#/components/responses/MissingCredentialsError' post: operationId: addGroupPost summary: Create a post in a Group description: Create a post in a Group. tags: - groups requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateGroupPostRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupPostResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /groups/{groupId}/posts/{notificationId}: parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/notificationId' put: operationId: updateGroupPost summary: Edits a Group post description: Edits a Group post tags: - groups requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateGroupPostRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupPostResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupPostResponseSuccess' delete: operationId: deleteGroupPost summary: Delete a Group post description: Delete a Group post tags: - groups security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupPostResponseSuccess' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupPostResponseSuccess' /groups/{groupId}/representation: parameters: - $ref: '#/components/parameters/groupId' put: operationId: updateGroupRepresentation summary: Update Group Representation description: |- Updates whether the user is representing the group. When `isRepresenting` is set to `true`, this flag will be set to `false` for all other groups tags: - groups requestBody: required: true content: application/json: schema: type: object properties: isRepresenting: type: boolean description: Whether the user is representing the group. required: - isRepresenting security: - authCookie: [] responses: '200': $ref: '#/components/responses/UpdateGroupRepresentationSuccess' '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/GroupNotMemberError' /groups/{groupId}/requests: parameters: - $ref: '#/components/parameters/groupId' get: operationId: getGroupRequests summary: Get Group Join Requests description: Returns a list of members that have requested to join the Group. tags: - groups parameters: - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' - name: blocked description: See blocked join requests in: query schema: type: boolean security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupMemberListResponse' '400': $ref: '#/components/responses/GroupJoinRequestResponseBadRequestError' '403': $ref: '#/components/responses/GroupNotMemberError' '404': $ref: '#/components/responses/GroupNotFoundError' delete: operationId: cancelGroupRequest summary: Cancel Group Join Request description: Cancels a request sent to join the group. tags: - groups security: - authCookie: [] responses: '200': description: OK '400': description: You can't cancel a join request if you didn't request to join․ '403': $ref: '#/components/responses/GroupNotMemberError' '404': $ref: '#/components/responses/GroupNotFoundError' /groups/{groupId}/requests/{userId}: parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/userId' put: operationId: respondGroupJoinRequest summary: Respond Group Join request description: Responds to a Group Join Request with Accept/Deny tags: - groups requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/RespondGroupJoinRequest' security: - authCookie: [] responses: '200': description: OK '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' /groups/{groupId}/roles: parameters: - $ref: '#/components/parameters/groupId' get: operationId: getGroupRoles summary: Get Group Roles description: Returns a Group Role by ID. tags: - groups security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupRoleListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' post: operationId: createGroupRole summary: Create GroupRole description: Create a Group role. tags: - groups requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateGroupRoleRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupRoleResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' /groups/{groupId}/roles/{groupRoleId}: parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/groupRoleId' put: operationId: updateGroupRole summary: Update Group Role description: Updates a group role by ID. tags: - groups requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateGroupRoleRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupRoleListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' delete: operationId: deleteGroupRole summary: Delete Group Role description: Deletes a Group Role by ID and returns the remaining roles. tags: - groups security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupRoleListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotMemberError' /health: get: operationId: getHealth deprecated: true summary: Check API Health description: |- ~~Gets the overall health status, the server name, and the current build version tag of the API.~~ **DEPRECATED:** VRChat has suddenly restricted this endpoint for unknown reasons, and now always return 401 Unauthorized. tags: - miscellaneous security: [] responses: '200': $ref: '#/components/responses/APIHealthResponse' /icon: post: operationId: uploadIcon summary: Upload icon description: Upload an icon tags: - files requestBody: content: multipart/form-data: schema: type: object properties: file: type: string description: The binary blob of the png file. format: binary required: - file security: - authCookie: [] responses: '200': $ref: '#/components/responses/FileResponse' /infoPush: get: operationId: getInfoPush summary: Show Information Notices description: |- IPS (Info Push System) is a system for VRChat to push out dynamic information to the client. This is primarily used by the Quick-Menu info banners, but can also be used to e.g. alert you to update your game to the latest version. `include` is used to query what Information Pushes should be included in the response. If include is missing or empty, then no notices will normally be returned. This is an "any of" search. `require` is used to limit what Information Pushes should be included in the response. This is usually used in combination with `include`, and is an "all of" search. tags: - miscellaneous parameters: - $ref: '#/components/parameters/require' - $ref: '#/components/parameters/include' responses: '200': $ref: '#/components/responses/InfoPushListResponse' x-badges: - color: gold label: 'Status: Early Access (Still Under Development)' /instances: post: operationId: createInstance summary: Create Instance description: Create an instance tags: - instances requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateInstanceRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/InstanceResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /instances/recent: get: operationId: getRecentLocations summary: List Recent Locations description: Returns a list of recently visited locations. tags: - instances parameters: - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' security: - authCookie: [] responses: '200': $ref: '#/components/responses/LocationIDListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /instances/s/{shortName}: parameters: - name: shortName description: Must be a valid instance short name. required: true in: path schema: type: string get: operationId: getInstanceByShortName summary: Get Instance By Short Name description: Returns an instance. Please read [Instances Tutorial](https://vrchatapi.github.io/tutorials/instances/) for more information on Instances. tags: - instances security: - authCookie: [] responses: '200': $ref: '#/components/responses/InstanceResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/InstanceNotFoundError' /instances/{worldId}:{instanceId}: parameters: - $ref: '#/components/parameters/worldId' - $ref: '#/components/parameters/instanceId' get: operationId: getInstance summary: Get Instance description: |- Returns an instance. Please read [Instances Tutorial](https://vrchatapi.github.io/tutorials/instances/) for more information on Instances. If an invalid instanceId is provided, this endpoint will simply return "null"! tags: - instances security: - authCookie: [] responses: '200': $ref: '#/components/responses/InstanceResponse' '401': $ref: '#/components/responses/MissingCredentialsError' delete: operationId: closeInstance summary: Close Instance description: |- Close an instance or update the closedAt time when it will be closed. You can only close an instance if the ownerId is yourself or if the instance owner is a group and you have the `group-instance-manage` permission. tags: - instances parameters: - name: hardClose description: Whether to hard close the instance. Defaults to false. required: false in: query schema: type: boolean - name: closedAt description: |- The time after which users won't be allowed to join the instances. If omitted, the instance will be closed immediately. in: query schema: type: string format: date-time security: - authCookie: [] responses: '200': $ref: '#/components/responses/InstanceResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/InstanceCloseForbiddenError' '404': $ref: '#/components/responses/InstanceNotFoundError' /instances/{worldId}:{instanceId}/shortName: parameters: - $ref: '#/components/parameters/worldId' - $ref: '#/components/parameters/instanceId' get: operationId: getShortName summary: Get Instance Short Name description: Returns an instance short name. tags: - instances security: - authCookie: [] responses: '200': $ref: '#/components/responses/InstanceShortNameResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /inventory: parameters: - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/inventoryHolderId' - $ref: '#/components/parameters/inventoryEquipSlot' - $ref: '#/components/parameters/inventorySortOrder' - $ref: '#/components/parameters/inventoryItemTags' - $ref: '#/components/parameters/inventoryItemTypes' - $ref: '#/components/parameters/inventoryItemFlags' - $ref: '#/components/parameters/inventoryItemNotTypes' - $ref: '#/components/parameters/inventoryItemNotFlags' - $ref: '#/components/parameters/inventoryItemArchived' get: operationId: getInventory summary: Get Inventory description: Returns an Inventory object. tags: - inventory security: - authCookie: [] responses: '200': $ref: '#/components/responses/InventoryResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/NoPermission' /inventory/cloning/direct: parameters: - $ref: '#/components/parameters/inventoryPedestalItemId' - $ref: '#/components/parameters/inventoryPedestalDuration' post: operationId: shareInventoryItemDirect summary: Share Inventory Item Direct description: Share content directly with other users. tags: - inventory requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ShareInventoryItemDirectRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/InventoryShareResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /inventory/cloning/pedestal: parameters: - $ref: '#/components/parameters/inventoryPedestalItemId' - $ref: '#/components/parameters/inventoryPedestalDuration' get: operationId: shareInventoryItemPedestal summary: Share Inventory Item by Pedestal description: Returns an InventorySpawn object. tags: - inventory security: - authCookie: [] responses: '200': $ref: '#/components/responses/InventorySpawnResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /inventory/drops: parameters: - $ref: '#/components/parameters/active' get: operationId: getInventoryDrops summary: List Inventory Drops description: Returns a list of InventoryDrop objects. tags: - inventory security: - authCookie: [] responses: '200': $ref: '#/components/responses/InventoryDropListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /inventory/spawn: parameters: - $ref: '#/components/parameters/inventorySpawnItemId' get: operationId: spawnInventoryItem summary: Spawn Inventory Item description: Returns an InventorySpawn object. tags: - inventory security: - authCookie: [] responses: '200': $ref: '#/components/responses/InventorySpawnResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /inventory/template/{inventoryTemplateId}: parameters: - $ref: '#/components/parameters/inventoryTemplateId' get: operationId: getInventoryTemplate summary: Get Inventory Template description: Returns an InventoryTemplate object. tags: - inventory security: - authCookie: [] responses: '200': $ref: '#/components/responses/InventoryTemplateResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /inventory/{inventoryItemId}: parameters: - $ref: '#/components/parameters/inventoryItemId' get: operationId: getOwnInventoryItem summary: Get Own Inventory Item description: Returns an InventoryItem object held by the currently logged in user. tags: - inventory security: - authCookie: [] responses: '200': $ref: '#/components/responses/InventoryItemResponse' '401': $ref: '#/components/responses/MissingCredentialsError' put: operationId: updateOwnInventoryItem summary: Update Own Inventory Item description: Returns the modified InventoryItem object as held by the currently logged in user. tags: - inventory requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateInventoryItemRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/InventoryItemResponse' '401': $ref: '#/components/responses/MissingCredentialsError' delete: operationId: deleteOwnInventoryItem summary: Delete Own Inventory Item description: Deletes an InventoryItem from the inventory of the currently logged in user. tags: - inventory security: - authCookie: [] responses: '200': $ref: '#/components/responses/DeleteInventoryItemResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /invite/myself/to/{worldId}:{instanceId}: parameters: - $ref: '#/components/parameters/worldId' - $ref: '#/components/parameters/instanceId' post: operationId: inviteMyselfTo summary: Invite Myself To Instance description: Sends self an invite to an instance tags: - invite security: - authCookie: [] responses: '200': $ref: '#/components/responses/SendNotificationResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/InstanceNotFoundError' /invite/{notificationId}/response: parameters: - $ref: '#/components/parameters/notificationId' post: operationId: respondInvite summary: Respond Invite description: |- Respond to an invite or invite request without accepting it. `:notificationId` is the ID of the requesting notification. In case the notification being replied to is an invite, the `responseSlot` refers to a response message from the the `message` collection. In case the notification is an invite request, it will refer to one from the `requestResponse` collection instead. tags: - invite requestBody: description: Slot number of the Response Message to use when responding to a user. required: true content: application/json: schema: $ref: '#/components/schemas/InviteResponse' security: - authCookie: [] responses: '200': $ref: '#/components/responses/NotificationResponse' '400': $ref: '#/components/responses/InviteResponse400Error' /invite/{notificationId}/response/photo: parameters: - $ref: '#/components/parameters/notificationId' post: operationId: respondInviteWithPhoto summary: Respond Invite with photo description: |- Respond with photo to an invite or invite request without accepting it. `:notificationId` is the ID of the requesting notification. In case the notification being replied to is an invite, the `responseSlot` refers to a response message from the the `message` collection. In case the notification is an invite request, it will refer to one from the `requestResponse` collection instead.' tags: - invite requestBody: required: true content: multipart/form-data: schema: type: object properties: data: $ref: '#/components/schemas/InviteResponse' image: type: string description: The binary blob of the png file. format: binary required: - data - image security: - authCookie: [] responses: '200': $ref: '#/components/responses/NotificationResponse' '400': $ref: '#/components/responses/InviteResponse400Error' /invite/{userId}: parameters: - $ref: '#/components/parameters/userId' post: operationId: inviteUser summary: Invite User description: Sends an invite to a user. Returns the Notification of type `invite` that was sent. tags: - invite requestBody: description: Slot number of the Invite Message to use when inviting a user. required: true content: application/json: schema: $ref: '#/components/schemas/InviteRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/SendNotificationResponse' '403': $ref: '#/components/responses/InviteMustBeFriendsError' /invite/{userId}/photo: parameters: - $ref: '#/components/parameters/userId' post: operationId: inviteUserWithPhoto summary: Invite User with photo description: Sends an photo invite to a user. Returns the Notification of type `invite` that was sent. tags: - invite requestBody: required: true content: multipart/form-data: schema: type: object properties: data: $ref: '#/components/schemas/InviteRequest' image: type: string description: The binary blob of the png file. format: binary required: - data - image security: - authCookie: [] responses: '200': $ref: '#/components/responses/SendNotificationResponse' '403': $ref: '#/components/responses/InviteMustBeFriendsError' /jams: get: operationId: getJams summary: Show jams list description: |- Lists World Jams or Avatar Jams, both currently running and ones that have ended. `isActive` is used to select only active or already ended jams. `type` is used to select only world or avatar jams, and can only take `world` or `avatar`. `` tags: - jams parameters: - name: type description: Only show jams of this type (`avatar` or `world`). in: query schema: type: string example: avatar security: - authCookie: [] responses: '200': $ref: '#/components/responses/JamListResponse' /jams/{jamId}: parameters: - $ref: '#/components/parameters/jamId' get: operationId: getJam summary: Show jam information description: Returns a jam. tags: - jams security: - authCookie: [] responses: '200': $ref: '#/components/responses/JamResponse' '404': $ref: '#/components/responses/JamNotFoundError' /jams/{jamId}/submissions: parameters: - $ref: '#/components/parameters/jamId' get: operationId: getJamSubmissions summary: Show jam submissions description: Returns all submissions of a jam. tags: - jams security: - authCookie: [] responses: '200': $ref: '#/components/responses/SubmissionListResponse' '404': $ref: '#/components/responses/JamNotFoundError' /js/app.js: get: operationId: getJavaScript summary: Download JavaScript description: Fetches the JavaScript code to the frontend React website. tags: - miscellaneous parameters: - $ref: '#/components/parameters/variant' - $ref: '#/components/parameters/branch' responses: '200': description: '**Note:** VRChat uses 302 Redirect to Cloudfront. The implementing library **must** support and follow redirects natively.' content: application/javascript: schema: type: string '400': $ref: '#/components/responses/DownloadSourceCodeAccessError' /licenseGroups/{licenseGroupId}: parameters: - $ref: '#/components/parameters/licenseGroupId' get: operationId: getLicenseGroup summary: Get License Group description: Get a single License Group by given ID. tags: - economy security: - authCookie: [] responses: '200': $ref: '#/components/responses/LicenseGroupResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /listing/{productId}: parameters: - $ref: '#/components/parameters/productId' - $ref: '#/components/parameters/hydrate' get: operationId: getProductListing summary: Get Product Listing description: Gets a product listing tags: - economy security: - authCookie: [] responses: '200': $ref: '#/components/responses/ProductListingResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /logout: put: operationId: logout summary: Logout description: Invalidates the login session. tags: - authentication security: - authCookie: [] responses: '200': $ref: '#/components/responses/LogoutSuccess' '401': $ref: '#/components/responses/MissingCredentialsError' /message/{userId}/{messageType}: parameters: - $ref: '#/components/parameters/userId' - $ref: '#/components/parameters/messageType' get: operationId: getInviteMessages summary: List Invite Messages description: |- Returns a list of all the users Invite Messages. Admin Credentials are required to view messages of other users! Message type refers to a different collection of messages, used during different types of responses. * `message` = Message during a normal invite * `response` = Message when replying to a message * `request` = Message when requesting an invite * `requestResponse` = Message when replying to a request for invite tags: - invite security: - authCookie: [] responses: '200': $ref: '#/components/responses/InviteMessageListResponse' '400': $ref: '#/components/responses/InviteMessageInvalidSlotNumberError' '401': $ref: '#/components/responses/NotAuthorizedActionError' /message/{userId}/{messageType}/{slot}: parameters: - $ref: '#/components/parameters/userId' - $ref: '#/components/parameters/messageType' - $ref: '#/components/parameters/slot' get: operationId: getInviteMessage summary: Get Invite Message description: |- Returns a single Invite Message. This returns the exact same information but less than `getInviteMessages`. Admin Credentials are required to view messages of other users! Message type refers to a different collection of messages, used during different types of responses. * `message` = Message during a normal invite * `response` = Message when replying to a message * `request` = Message when requesting an invite * `requestResponse` = Message when replying to a request for invite tags: - invite security: - authCookie: [] responses: '200': $ref: '#/components/responses/InviteMessageResponse' '400': $ref: '#/components/responses/InviteMessageGetNegativeSlotError' '401': $ref: '#/components/responses/NotAuthorizedActionError' '404': $ref: '#/components/responses/InviteMessageGetTooHighSlotError' put: operationId: updateInviteMessage summary: Update Invite Message description: |- Updates a single Invite Message and then returns a list of all of them. Admin Credentials are required to update messages of other users! Updating a message automatically sets the cooldown timer to 60 minutes. Trying to edit a message before the cooldown timer expires results in a 429 "Too Fast Error". Message type refers to a different collection of messages, used during different types of responses. * `message` = Message during a normal invite * `response` = Message when replying to a message * `request` = Message when requesting an invite * `requestResponse` = Message when replying to a request for invite tags: - invite requestBody: description: Message of what to set the invite message to. content: application/json: schema: $ref: '#/components/schemas/UpdateInviteMessageRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/InviteMessageListResponse' '400': $ref: '#/components/responses/InviteMessageInvalidSlotNumberError' '401': $ref: '#/components/responses/NotAuthorizedActionError' '429': $ref: '#/components/responses/InviteMessageUpdateRateLimitError' delete: operationId: resetInviteMessage summary: Reset Invite Message description: |- Resets a single Invite Message back to its original message, and then returns a list of all of them. Admin Credentials are required to update messages of other users! Resetting a message respects the rate-limit, so it is not possible to reset within the 60 minutes countdown. Resetting it does however not set the rate-limit to 60 like when editing it. It is possible to edit it right after resetting it. Trying to edit a message before the cooldown timer expires results in a 429 "Too Fast Error". Message type refers to a different collection of messages, used during different types of responses. * `message` = Message during a normal invite * `response` = Message when replying to a message * `request` = Message when requesting an invite * `requestResponse` = Message when replying to a request for invite The DELETE endpoint does not have/require any request body. tags: - invite security: - authCookie: [] responses: '200': $ref: '#/components/responses/InviteMessageListResponse' '400': $ref: '#/components/responses/InviteMessageInvalidSlotNumberError' '401': $ref: '#/components/responses/NotAuthorizedActionError' '404': $ref: '#/components/responses/InviteMessageNoEntryForSlotError' '429': $ref: '#/components/responses/InviteMessageUpdateRateLimitError' /permissions/{permissionId}: parameters: - $ref: '#/components/parameters/permissionId' get: operationId: getPermission summary: Get Permission description: Returns a single permission. This endpoint is pretty useless, as it returns the exact same information as `/auth/permissions`. tags: - miscellaneous security: - authCookie: [] responses: '200': $ref: '#/components/responses/PermissionResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /prints: post: operationId: uploadPrint summary: Upload Print description: Uploads and creates a print. tags: - prints requestBody: content: multipart/form-data: schema: type: object properties: image: type: string description: The binary blob of the png file. format: binary note: type: string description: The caption for the image. timestamp: type: string description: The time the image was captured. format: date-time worldId: type: string description: The id of the world in which the image was captured. worldName: type: string description: The name of the world in which the image was captured. required: - image - timestamp security: - authCookie: [] responses: '200': $ref: '#/components/responses/PrintResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /prints/user/{userId}: parameters: - $ref: '#/components/parameters/userId' get: operationId: getUserPrints summary: Get Own Prints description: Returns a list of all prints of the user. User id has to be your own userId, as you can't request other user's prints. tags: - prints security: - authCookie: [] responses: '200': $ref: '#/components/responses/PrintListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/UnableToRequestOtherUsersPrintsError' /prints/{printId}: parameters: - $ref: '#/components/parameters/printId' get: operationId: getPrint summary: Get Print description: Returns a print. tags: - prints security: - authCookie: [] responses: '200': $ref: '#/components/responses/PrintResponse' '401': $ref: '#/components/responses/MissingCredentialsError' post: operationId: editPrint summary: Edit Print description: Edits a print. tags: - prints requestBody: content: multipart/form-data: schema: type: object properties: image: type: string description: The binary blob of the png file. format: binary note: type: string description: The caption for the image. required: - image security: - authCookie: [] responses: '200': $ref: '#/components/responses/PrintResponse' '401': $ref: '#/components/responses/MissingCredentialsError' delete: operationId: deletePrint summary: Delete Print description: Returns a print. tags: - prints security: - authCookie: [] responses: '200': description: Empty response if successful '401': $ref: '#/components/responses/MissingCredentialsError' /props/{propId}: parameters: - $ref: '#/components/parameters/propId' get: operationId: getProp summary: Get Prop description: Returns a Prop object. tags: - props security: - authCookie: [] responses: '200': $ref: '#/components/responses/PropResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /requestInvite/{userId}: parameters: - $ref: '#/components/parameters/userId' post: operationId: requestInvite summary: Request Invite description: Requests an invite from a user. Returns the Notification of type `requestInvite` that was sent. tags: - invite requestBody: description: Slot number of the Request Message to use when request an invite. content: application/json: schema: $ref: '#/components/schemas/RequestInviteRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/NotificationResponse' '403': $ref: '#/components/responses/InviteMustBeFriendsError' /requestInvite/{userId}/photo: parameters: - $ref: '#/components/parameters/userId' post: operationId: requestInviteWithPhoto summary: Request Invite with photo description: Requests with photo an invite from a user. Returns the Notification of type `requestInvite` that was sent. tags: - invite requestBody: content: multipart/form-data: schema: type: object properties: data: $ref: '#/components/schemas/RequestInviteRequest' image: type: string description: The binary blob of the png file. format: binary required: - data - image security: - authCookie: [] responses: '200': $ref: '#/components/responses/NotificationResponse' '403': $ref: '#/components/responses/InviteMustBeFriendsError' /subscriptions: get: operationId: getSubscriptions summary: List Subscriptions description: List all existing Subscriptions. For example, "vrchatplus-monthly" and "vrchatplus-yearly". tags: - economy security: - authCookie: [] responses: '200': $ref: '#/components/responses/SubscriptionListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /tilia/status: get: operationId: getTiliaStatus summary: Get Tilia Status description: Gets the status of Tilia integration tags: - economy security: - authCookie: [] responses: '200': $ref: '#/components/responses/TiliaStatusResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /time: get: operationId: getSystemTime summary: Current System Time description: |- Returns the current time of the API server. **NOTE:** The response type is not a JSON object, but a simple JSON string. tags: - miscellaneous security: [] responses: '200': $ref: '#/components/responses/SystemTimeResponse' /tokenBundles: get: operationId: getTokenBundles summary: List Token Bundles description: Gets the list of token bundles tags: - economy security: - authCookie: [] responses: '200': $ref: '#/components/responses/TokenBundleListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /user/bulk/gift/purchases: parameters: - $ref: '#/components/parameters/mostRecentFlag' get: operationId: getBulkGiftPurchases summary: Get Bulk Gift Purchases description: Get bulk gift purchases made by the user. tags: - economy security: - authCookie: [] responses: '200': $ref: '#/components/responses/BulkPurchasesListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /user/subscription/recent: get: operationId: getRecentSubscription summary: Get Recent Subscription description: Get the most recent user subscription. tags: - economy security: - authCookie: [] responses: '200': $ref: '#/components/responses/UserSubscriptionResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /user/{userId}/balance: parameters: - $ref: '#/components/parameters/userId' get: operationId: getBalance summary: Get Balance description: Gets the balance of a user tags: - economy security: - authCookie: [] responses: '200': $ref: '#/components/responses/BalanceResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /user/{userId}/balance/earnings: parameters: - $ref: '#/components/parameters/userId' get: operationId: getBalanceEarnings summary: Get Balance Earnings description: Gets the balance of a user from earnings tags: - economy security: - authCookie: [] responses: '200': $ref: '#/components/responses/BalanceResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /user/{userId}/economy/account: parameters: - $ref: '#/components/parameters/userId' get: operationId: getEconomyAccount summary: Get Economy Account description: Gets the economy account of a user tags: - economy security: - authCookie: [] responses: '200': $ref: '#/components/responses/EconomyAccountResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /user/{userId}/friendRequest: parameters: - $ref: '#/components/parameters/userId' post: operationId: friend summary: Send Friend Request description: Send a friend request to another user. tags: - friends security: - authCookie: [] responses: '200': $ref: '#/components/responses/NotificationResponse' '400': $ref: '#/components/responses/FriendBadRequestError' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/UserDoesntExistError' delete: operationId: deleteFriendRequest summary: Delete Friend Request description: Deletes an outgoing pending friend request to another user. To delete an incoming friend request, use the `deleteNotification` endpoint instead. tags: - friends security: - authCookie: [] responses: '200': $ref: '#/components/responses/DeleteFriendSuccess' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/DeleteFriendRequestError' /user/{userId}/friendStatus: parameters: - $ref: '#/components/parameters/userId' get: operationId: getFriendStatus summary: Check Friend Status description: Retrieve if the user is currently a friend with a given user, if they have an outgoing friend request, and if they have an incoming friend request. The proper way to receive and accept friend request is by checking if the user has an incoming `Notification` of type `friendRequest`, and then accepting that notification. tags: - friends security: - authCookie: [] responses: '200': $ref: '#/components/responses/FriendStatusResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /user/{userId}/listings: parameters: - $ref: '#/components/parameters/userId' - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/hydrate' - $ref: '#/components/parameters/groupIdFilter' - $ref: '#/components/parameters/active' get: operationId: getProductListings summary: Get User Product Listings description: Gets the product listings of a given user tags: - economy security: - authCookie: [] responses: '200': $ref: '#/components/responses/ProductListingListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /user/{userId}/tilia/tos: parameters: - $ref: '#/components/parameters/userId' get: operationId: getTiliaTos summary: Get Tilia TOS Agreement Status description: Gets the status of the agreement of a user to the Tilia TOS tags: - economy security: - authCookie: [] responses: '200': $ref: '#/components/responses/TiliaTOSResponse' '401': $ref: '#/components/responses/MissingCredentialsError' put: operationId: updateTiliaTos summary: Update Tilia TOS Agreement Status description: Updates the status of the agreement of a user to the Tilia TOS tags: - economy requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateTiliaTOSRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/UpdateTiliaTOSResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /userNotes: get: operationId: getUserNotes summary: Get User Notes description: Get recently updated user notes tags: - users parameters: - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' security: - authCookie: [] responses: '200': $ref: '#/components/responses/UserNoteListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' post: operationId: updateUserNote summary: Update User Note description: Updates the currently authenticated user's note on a user tags: - users requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateUserNoteRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/UserNoteResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /userNotes/{userNoteId}: parameters: - $ref: '#/components/parameters/userNoteId' get: operationId: getUserNote summary: Get User Note description: Get a particular user note tags: - users security: - authCookie: [] responses: '200': $ref: '#/components/responses/UserNoteResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /users: get: operationId: searchUsers summary: Search All Users description: Search and list any users by text query tags: - users parameters: - name: search description: Searches by `displayName`. Will return empty array if search query is empty or missing. in: query schema: type: string minLength: 0 - name: developerType description: Active user by developer type, none for normal users and internal for moderators in: query schema: type: string - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' security: - authCookie: [] responses: '200': $ref: '#/components/responses/LimitedUserSearchListResponse' '400': $ref: '#/components/responses/UsersInvalidSearchError' '401': $ref: '#/components/responses/MissingCredentialsError' /users/{userId}: parameters: - $ref: '#/components/parameters/userId' get: operationId: getUser summary: Get User by ID description: Get public user information about a specific user using their ID. tags: - users security: - authCookie: [] responses: '200': $ref: '#/components/responses/UserResponse' '401': $ref: '#/components/responses/MissingCredentialsError' put: operationId: updateUser summary: Update User Info description: Update a users information such as the email and birthday. tags: - users requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateUserRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/CurrentUserResponse' '400': $ref: '#/components/responses/CurrentPasswordRequiredError' '401': $ref: '#/components/responses/MissingCredentialsError' /users/{userId}/addTags: parameters: - $ref: '#/components/parameters/userId' post: operationId: addTags summary: Add User Tags description: Adds tags to the user's profile tags: - users requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ChangeUserTagsRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/CurrentUserResponse' '400': $ref: '#/components/responses/UserTagInvalidError' '401': $ref: '#/components/responses/MissingCredentialsError' /users/{userId}/avatar: parameters: - $ref: '#/components/parameters/userId' get: operationId: getOwnAvatar summary: Get Own Avatar description: Get the current avatar for the user. This will return an error for any other user than the one logged in. tags: - avatars security: - authCookie: [] responses: '200': $ref: '#/components/responses/AvatarResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/AvatarSeeOtherUserCurrentAvatarError' /users/{userId}/badges/{badgeId}: parameters: - $ref: '#/components/parameters/userId' - $ref: '#/components/parameters/badgeId' put: operationId: updateBadge summary: Update User Badge description: Updates a user's badge tags: - users requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateUserBadgeRequest' security: - authCookie: [] responses: '200': description: The user's badge is updated. '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/UserMustBeOwnError' '404': description: The user does not have the badge. /users/{userId}/credits/eligible: parameters: - $ref: '#/components/parameters/userId' - $ref: '#/components/parameters/subscriptionId' get: operationId: getUserCreditsEligible summary: Get User Credits Eligiblity description: Get the user's eligibility status for subscriptions based on available credits. tags: - economy security: - authCookie: [] responses: '200': $ref: '#/components/responses/UserCreditsEligibleResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /users/{userId}/delete: parameters: - $ref: '#/components/parameters/userId' put: operationId: deleteUser summary: Delete User description: |- Deletes the account with given ID. Normal users only have permission to delete their own account. Account deletion is 14 days from this request, and will be cancelled if you do an authenticated request with the account afterwards. **VRC+ NOTE:** Despite the 14-days cooldown, any VRC+ subscription will be cancelled **immediately**. **METHOD NOTE:** Despite this being a Delete action, the method type required is PUT. tags: - authentication security: - authCookie: [] responses: '200': $ref: '#/components/responses/DeleteUserResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /users/{userId}/feedback: parameters: - $ref: '#/components/parameters/userId' - $ref: '#/components/parameters/contentId' - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' get: operationId: getUserFeedback deprecated: true summary: Get User Feedback description: Get user's submitted feedback tags: - users security: - authCookie: [] responses: '200': $ref: '#/components/responses/FeedbackListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /users/{userId}/groups: parameters: - $ref: '#/components/parameters/userId' get: operationId: getUserGroups summary: Get User Groups description: Get user's public groups tags: - users security: - authCookie: [] responses: '200': $ref: '#/components/responses/LimitedUserGroupListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /users/{userId}/groups/represented: parameters: - $ref: '#/components/parameters/userId' get: operationId: getUserRepresentedGroup summary: Get user's current represented group description: Returns the current group that the user is currently representing tags: - users security: - authCookie: [] responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/representedGroup' '401': $ref: '#/components/responses/MissingCredentialsError' /users/{userId}/groups/requested: parameters: - $ref: '#/components/parameters/userId' get: operationId: getUserGroupRequests summary: Get User Group Requests description: Returns a list of Groups the user has requested to be invited into. tags: - users security: - authCookie: [] responses: '200': $ref: '#/components/responses/GroupListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /users/{userId}/instances/groups: parameters: - $ref: '#/components/parameters/userId' get: operationId: getUserGroupInstances summary: Get User Group Instances description: Returns a list of group instances for a user tags: - users security: - authCookie: [] responses: '200': $ref: '#/components/responses/UserGroupInstanceListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/UserMustBeOwnError' /users/{userId}/instances/groups/{groupId}: parameters: - $ref: '#/components/parameters/userId' - $ref: '#/components/parameters/groupId' get: operationId: getUserGroupInstancesForGroup summary: Get User Group Instances for a specific Group description: Returns a list of a group's instances for a user tags: - users security: - authCookie: [] responses: '200': $ref: '#/components/responses/UserGroupInstanceListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/UserMustBeOwnError' /users/{userId}/removeTags: parameters: - $ref: '#/components/parameters/userId' post: operationId: removeTags summary: Remove User Tags description: Removes tags from the user's profile tags: - users requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ChangeUserTagsRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/CurrentUserResponse' '400': $ref: '#/components/responses/UserTagInvalidError' '401': $ref: '#/components/responses/MissingCredentialsError' /users/{userId}/subscription/eligible: parameters: - $ref: '#/components/parameters/userId' - $ref: '#/components/parameters/steamId' get: operationId: getUserSubscriptionEligible summary: Get User Subscription Eligiblity description: Get the user's eligibility status for subscriptions. tags: - economy security: - authCookie: [] responses: '200': $ref: '#/components/responses/UserSubscriptionEligibleResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /users/{userId}/{worldId}/persist: parameters: - $ref: '#/components/parameters/userId' - $ref: '#/components/parameters/worldId' delete: operationId: deleteUserPersistence summary: Delete User Persistence description: Deletes the user's persistence data for a given world tags: - users - worlds security: - authCookie: [] responses: '200': description: The user's persistence data for the given world is deleted. '401': $ref: '#/components/responses/MissingCredentialsError' '404': description: The user does not have persistence data for the given world. /users/{userId}/{worldId}/persist/exists: parameters: - $ref: '#/components/parameters/userId' - $ref: '#/components/parameters/worldId' get: operationId: checkUserPersistenceExists summary: Check User Persistence Exists description: Checks whether the user has persistence data for a given world tags: - users - worlds security: - authCookie: [] responses: '200': description: The user has persistence data for the given world. '401': $ref: '#/components/responses/MissingCredentialsError' '404': description: The user does not have persistence data for the given world. /users/{username}/name: parameters: - name: username description: Username of the user required: true in: path schema: type: string get: operationId: getUserByName deprecated: true summary: Get User by Username description: |- ~~Get public user information about a specific user using their name.~~ **DEPRECATED:** VRChat API no longer return usernames of other users. [See issue by Tupper for more information](https://github.com/pypy-vrc/VRCX/issues/429). This endpoint now require Admin Credentials. tags: - users security: - authCookie: [] responses: '200': $ref: '#/components/responses/UserResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /visits: get: operationId: getCurrentOnlineUsers summary: Current Online Users description: |- Returns the current number of online users. **NOTE:** The response type is not a JSON object, but a simple JSON integer. tags: - miscellaneous security: [] responses: '200': $ref: '#/components/responses/CurrentOnlineUsersResponse' /worlds: get: operationId: searchWorlds summary: Search All Worlds description: Search and list any worlds by query filters. tags: - worlds parameters: - $ref: '#/components/parameters/featured' - $ref: '#/components/parameters/sort' - name: user description: Set to `me` for searching own worlds. required: false in: query schema: type: string enum: - me - $ref: '#/components/parameters/userIdQuery' - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/order' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/search' - $ref: '#/components/parameters/tag' - $ref: '#/components/parameters/notag' - $ref: '#/components/parameters/releaseStatus' - $ref: '#/components/parameters/maxUnityVersion' - $ref: '#/components/parameters/minUnityVersion' - $ref: '#/components/parameters/platform' - $ref: '#/components/parameters/noplatform' - $ref: '#/components/parameters/fuzzy' - $ref: '#/components/parameters/avatarSpecific' security: - authCookie: [] responses: '200': $ref: '#/components/responses/LimitedWorldListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' post: operationId: createWorld summary: Create World description: Create a new world. This endpoint requires `assetUrl` to be a valid File object with `.vrcw` file extension, and `imageUrl` to be a valid File object with an image file extension. tags: - worlds requestBody: description: '' content: application/json: schema: $ref: '#/components/schemas/CreateWorldRequest' responses: '200': $ref: '#/components/responses/WorldResponse' '400': $ref: '#/components/responses/WorldCreateNotAllowedYetError' '401': $ref: '#/components/responses/MissingCredentialsError' /worlds/active: get: operationId: getActiveWorlds summary: List Active Worlds description: Search and list currently Active worlds by query filters. tags: - worlds parameters: - $ref: '#/components/parameters/featured' - $ref: '#/components/parameters/sort' - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/order' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/search' - $ref: '#/components/parameters/tag' - $ref: '#/components/parameters/notag' - $ref: '#/components/parameters/releaseStatus' - $ref: '#/components/parameters/maxUnityVersion' - $ref: '#/components/parameters/minUnityVersion' - $ref: '#/components/parameters/platform' - $ref: '#/components/parameters/noplatform' security: - authCookie: [] responses: '200': $ref: '#/components/responses/LimitedWorldListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /worlds/favorites: get: operationId: getFavoritedWorlds summary: List Favorited Worlds description: Search and list favorited worlds by query filters. tags: - worlds parameters: - $ref: '#/components/parameters/featured' - $ref: '#/components/parameters/sort' - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/order' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/search' - $ref: '#/components/parameters/tag' - $ref: '#/components/parameters/notag' - $ref: '#/components/parameters/releaseStatus' - $ref: '#/components/parameters/maxUnityVersion' - $ref: '#/components/parameters/minUnityVersion' - $ref: '#/components/parameters/platform' - $ref: '#/components/parameters/userIdAdmin' security: - authCookie: [] responses: '200': $ref: '#/components/responses/FavoritedWorldListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/WorldSeeOtherUserFavoritesError' /worlds/recent: get: operationId: getRecentWorlds summary: List Recent Worlds description: Search and list recently visited worlds by query filters. tags: - worlds parameters: - $ref: '#/components/parameters/featured' - $ref: '#/components/parameters/sort' - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/order' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/search' - $ref: '#/components/parameters/tag' - $ref: '#/components/parameters/notag' - $ref: '#/components/parameters/releaseStatus' - $ref: '#/components/parameters/maxUnityVersion' - $ref: '#/components/parameters/minUnityVersion' - $ref: '#/components/parameters/platform' - $ref: '#/components/parameters/userIdAdmin' security: - authCookie: [] responses: '200': $ref: '#/components/responses/LimitedWorldListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/WorldSeeOtherUserRecentsError' /worlds/{worldId}: parameters: - $ref: '#/components/parameters/worldId' get: operationId: getWorld summary: Get World by ID description: |- Get information about a specific World. Works unauthenticated but when so will always return `0` for certain fields. tags: - worlds responses: '200': $ref: '#/components/responses/WorldResponse' '404': $ref: '#/components/responses/WorldNotFoundError' put: operationId: updateWorld summary: Update World description: Update information about a specific World. tags: - worlds requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateWorldRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/WorldResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/WorldNotFoundError' delete: operationId: deleteWorld summary: Delete World description: Delete a world. Notice a world is never fully "deleted", only its ReleaseStatus is set to "hidden" and the linked Files are deleted. The WorldID is permanently reserved. tags: - worlds security: - authCookie: [] responses: '200': description: OK '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/WorldNotFoundError' /worlds/{worldId}/metadata: parameters: - $ref: '#/components/parameters/worldId' get: operationId: getWorldMetadata deprecated: true summary: Get World Metadata description: Return a worlds custom metadata. This is currently believed to be unused. Metadata can be set with `updateWorld` and can be any arbitrary object. tags: - worlds security: - authCookie: [] responses: '200': $ref: '#/components/responses/WorldMetadataResponse' '404': $ref: '#/components/responses/WorldNotFoundError' /worlds/{worldId}/publish: parameters: - $ref: '#/components/parameters/worldId' get: operationId: getWorldPublishStatus summary: Get World Publish Status description: Returns a worlds publish status. tags: - worlds security: - authCookie: [] responses: '200': $ref: '#/components/responses/WorldPublishStatusResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/WorldNotFoundError' put: operationId: publishWorld summary: Publish World description: Publish a world. You can only publish one world per week. tags: - worlds security: - authCookie: [] responses: '200': description: TODO '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/WorldNotFoundError' delete: operationId: unpublishWorld summary: Unpublish World description: Unpublish a world. tags: - worlds security: - authCookie: [] responses: '200': description: OK '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/WorldNotFoundError' /worlds/{worldId}/{instanceId}: parameters: - $ref: '#/components/parameters/worldId' - $ref: '#/components/parameters/instanceId' get: operationId: getWorldInstance summary: Get World Instance description: Returns a worlds instance. tags: - worlds security: - authCookie: [] responses: '200': $ref: '#/components/responses/InstanceResponse' '401': $ref: '#/components/responses/MissingCredentialsError' components: schemas: TransactionAgreement: title: TransactionAgreement type: object description: Represents a single Transaction, which is likely between VRChat and Steam. properties: agreement: type: string agreementId: type: string minLength: 1 billingType: type: string minLength: 1 currency: type: string minLength: 1 endDate: type: string minLength: 1 failedAttempts: type: integer frequency: type: integer itemId: type: integer lastAmount: type: number lastAmountVat: type: number lastPayment: type: string minLength: 1 nextPayment: type: string minLength: 1 outstanding: type: integer period: type: string minLength: 1 recurringAmt: type: number startDate: type: string minLength: 1 status: type: string description: This is NOT TransactionStatus, but whatever Steam return. minLength: 1 timeCreated: type: string minLength: 1 required: - agreement - agreementId - billingType - currency - endDate - failedAttempts - frequency - itemId - lastAmount - lastAmountVat - lastPayment - nextPayment - outstanding - period - recurringAmt - startDate - status - timeCreated TransactionID: title: TransactionID type: string example: txn_e5c72948-e735-4880-8245-24b2a41198b0 TransactionStatus: title: TransactionStatus type: string enum: - active - chargeback - expired - failed default: active TransactionSteamWalletInfo: title: TransactionSteamWalletInfo type: object description: '' properties: country: type: string default: US example: SE minLength: 2 currency: type: string default: USD example: EUR minLength: 3 state: type: string status: type: string example: Trusted minLength: 1 required: - country - currency - state - status example: country: SE currency: EUR state: '' status: Trusted TransactionSteamInfo: title: TransactionSteamInfo type: object description: '' properties: orderId: type: string description: Steam Order ID minLength: 1 steamId: type: string description: Steam User ID minLength: 1 steamUrl: type: string description: Empty transId: type: string description: Steam Transaction ID, NOT the same as VRChat TransactionID minLength: 1 walletInfo: $ref: '#/components/schemas/TransactionSteamWalletInfo' required: - orderId - steamId - steamUrl - transId - walletInfo SubscriptionPeriod: title: SubscriptionPeriod type: string enum: - day - hour - month - week - year default: month Subscription: title: Subscription type: object description: '' properties: amount: type: number appleProductId: type: string minLength: 1 description: type: string googlePlanId: type: string googleProductId: type: string minLength: 1 id: type: string minLength: 1 oculusSku: type: string minLength: 1 period: $ref: '#/components/schemas/SubscriptionPeriod' picoSku: type: string minLength: 1 steamItemId: type: string minLength: 1 tier: type: integer required: - amount - description - id - period - steamItemId - tier example: id: vrchatplus-yearly description: VRChat Plus (Yearly) amount: 9999 period: year steamItemId: '5000' tier: 5 UserID: title: UserID type: string description: A users unique ID, usually in the form of `usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469`. Legacy players can have old IDs in the form of `8JoV9XEdpo`. The ID can never be changed. example: usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469 Transaction: title: Transaction type: object description: '' properties: agreement: $ref: '#/components/schemas/TransactionAgreement' created_at: type: string format: date-time error: type: string nullable: true id: $ref: '#/components/schemas/TransactionID' isGift: type: boolean default: false isTokens: type: boolean default: false sandbox: type: boolean default: false status: $ref: '#/components/schemas/TransactionStatus' steam: $ref: '#/components/schemas/TransactionSteamInfo' subscription: $ref: '#/components/schemas/Subscription' updated_at: type: string format: date-time userDisplayName: type: string userId: $ref: '#/components/schemas/UserID' required: - created_at - error - id - sandbox - status - subscription - updated_at Response: title: Response type: object properties: message: type: string minLength: 1 status_code: type: integer minimum: 100 required: - status_code Error: title: Error type: object properties: error: $ref: '#/components/schemas/Response' ReleaseStatus: title: ReleaseStatus type: string enum: - all - hidden - private - public default: public example: public Tag: title: Tag type: string description: |- Tags are a way to grant various access, assign restrictions or other kinds of metadata to various to objects such as worlds, users and avatars. System tags starting with `system_` are granted automatically by the system, while admin tags with `admin_` are granted manually. More prefixes such as `language_ ` (to indicate that a player can speak the tagged language), and `author_tag_` (provided by a world author for search and sorting) exist as well. minLength: 1 Platform: title: Platform type: string description: This can be `standalonewindows` or `android`, but can also pretty much be any random Unity verison such as `2019.2.4-801-Release` or `2019.2.2-772-Release` or even `unknownplatform`. example: standalonewindows AdminUnityPackage: title: AdminUnityPackage type: object description: '' properties: assetUrl: type: string example: https://assets.vrchat.com/adminfiles/adfl_fba880f3-7d8c-4429-87e6-0e2d50000076ie_chad_rat_standalonewindows assetVersion: type: integer example: 4 minimum: 0 platform: $ref: '#/components/schemas/Platform' unityVersion: type: string default: 2022.3.22f1-DWR example: 2022.3.22f1-DWR minLength: 1 variant: type: string required: - assetUrl - assetVersion - platform - unityVersion - variant AdminAssetBundle: title: AdminAssetBundle type: object description: '' properties: _created_at: type: string format: date-time _updated_at: type: string format: date-time assetType: type: string authorId: $ref: '#/components/schemas/UserID' authorName: type: string description: type: string imageUrl: type: string name: type: string releaseStatus: $ref: '#/components/schemas/ReleaseStatus' tags: type: array items: $ref: '#/components/schemas/Tag' thumbnailImageUrl: type: string unityPackageUrl: type: string nullable: true unityPackages: type: array items: $ref: '#/components/schemas/AdminUnityPackage' minItems: 1 uniqueItems: true required: - _created_at - _updated_at - assetType - authorId - authorName - description - imageUrl - name - releaseStatus - tags - thumbnailImageUrl - unityPackageUrl - unityPackages FileAnalysisAvatarStats: title: FileAnalysisAvatarStats type: object properties: animatorCount: type: integer audioSourceCount: type: integer blendShapeCount: type: integer boneCount: type: integer bounds: type: array items: type: number cameraCount: type: integer clothCount: type: integer constraintCount: type: integer constraintDepth: type: integer contactCount: type: integer customExpressions: type: boolean customizeAnimationLayers: type: boolean enableEyeLook: type: boolean lightCount: type: integer lineRendererCount: type: integer lipSync: type: integer materialCount: type: integer materialSlotsUsed: type: integer meshCount: type: integer meshIndices: type: integer meshParticleMaxPolygons: type: integer meshPolygons: type: integer meshVertices: type: integer particleCollisionEnabled: type: boolean particleSystemCount: type: integer particleTrailsEnabled: type: boolean physBoneColliderCount: type: integer physBoneCollisionCheckCount: type: integer physBoneComponentCount: type: integer physBoneTransformCount: type: integer physicsColliders: type: integer physicsRigidbodies: type: integer skinnedMeshCount: type: integer skinnedMeshIndices: type: integer skinnedMeshPolygons: type: integer skinnedMeshVertices: type: integer totalClothVertices: type: integer totalIndices: type: integer totalMaxParticles: type: integer totalPolygons: type: integer totalTextureUsage: type: integer totalVertices: type: integer trailRendererCount: type: integer writeDefaultsUsed: type: boolean required: - animatorCount - audioSourceCount - blendShapeCount - boneCount - bounds - clothCount - constraintCount - constraintDepth - contactCount - customExpressions - customizeAnimationLayers - enableEyeLook - lightCount - lineRendererCount - lipSync - materialCount - materialSlotsUsed - meshCount - meshIndices - meshParticleMaxPolygons - meshPolygons - meshVertices - particleCollisionEnabled - particleSystemCount - particleTrailsEnabled - physBoneColliderCount - physBoneCollisionCheckCount - physBoneComponentCount - physBoneTransformCount - physicsColliders - physicsRigidbodies - skinnedMeshCount - skinnedMeshIndices - skinnedMeshPolygons - skinnedMeshVertices - totalClothVertices - totalIndices - totalMaxParticles - totalPolygons - totalTextureUsage - totalVertices - trailRendererCount - writeDefaultsUsed FileAnalysis: title: FileAnalysis type: object properties: avatarStats: $ref: '#/components/schemas/FileAnalysisAvatarStats' created_at: type: string format: date-time encryptionKey: type: string fileSize: type: integer performanceRating: type: string success: type: boolean uncompressedSize: type: integer required: - avatarStats - fileSize - success - uncompressedSize VerifyAuthTokenResult: title: VerifyAuthTokenResult type: object properties: ok: type: boolean token: type: string minLength: 1 required: - ok - token UserExists: title: UserExists type: object description: Status object representing if a queried user by username or userId exists or not. This model is primarily used by the `/auth/exists` endpoint, which in turn is used during registration. Please see the documentation on that endpoint for more information on usage. properties: nameOk: type: boolean description: Is the username valid? default: false userExists: type: boolean description: Status if a user exist with that username or userId. default: false required: - userExists PermissionID: title: PermissionID type: string example: prms_804ba021-9f47-4e25-9847-1f42fdb2e6ff Permission: title: Permission type: object description: '' properties: data: type: object description: type: string displayName: type: string id: $ref: '#/components/schemas/PermissionID' name: type: string example: permission-invite-photos minLength: 1 ownerDisplayName: type: string ownerId: $ref: '#/components/schemas/UserID' type: type: string required: - id - name - ownerDisplayName - ownerId RegisterUserAccountRequest: title: RegisterUserAccountRequest type: object properties: acceptedTOSVersion: type: integer description: The most recent version of the TOS captchaCode: type: string description: Captcha code day: type: string description: Birth day of month email: type: string description: Email address month: type: string description: Birth month of year password: type: string description: Password minLength: 8 subscribe: type: boolean description: Whether to recieve promotional emails username: type: string description: Display Name / Username (Username is a sanitized version) maxLength: 15 minLength: 4 year: type: string description: Birth year required: - acceptedTOSVersion - captchaCode - day - email - month - password - subscribe - username - year AccountDeletionLog: title: AccountDeletionLog type: object properties: dateTime: type: string description: Date and time of the deletion request. format: date-time deletionScheduled: type: string description: When the deletion is scheduled to happen, standard is 14 days after the request. nullable: true format: date-time message: type: string description: Typically "Deletion requested" or "Deletion canceled". Other messages like "Deletion completed" may exist, but are these are not possible to see as a regular user. default: Deletion requested example: Deletion requested AgeVerificationStatus: title: AgeVerificationStatus type: string description: | `verified` is obsolete. User who have verified and are 18+ can switch to `plus18` status. enum: - 18+ - hidden - verified x-enum-varnames: - hidden - plus18 - verified AgeVerified: title: AgeVerified type: boolean description: '`true` if, user is age verified (not 18+).' BadgeID: title: BadgeID type: string example: bdg_a60e514a-8cb7-4702-8f24-2786992be1a8 Badge: title: Badge type: object properties: assignedAt: type: string description: only present in CurrentUser badges nullable: true format: date-time badgeDescription: type: string badgeId: $ref: '#/components/schemas/BadgeID' badgeImageUrl: type: string description: direct url to image badgeName: type: string hidden: type: boolean description: only present in CurrentUser badges nullable: true showcased: type: boolean updatedAt: type: string description: only present in CurrentUser badges nullable: true format: date-time required: - badgeDescription - badgeId - badgeImageUrl - badgeName - showcased AvatarID: title: AvatarID type: string example: avtr_912d66a4-4714-43b8-8407-7de2cafbf55b CurrentAvatarImageUrl: title: CurrentAvatarImageUrl type: string description: When profilePicOverride is not empty, use it instead. example: https://api.vrchat.cloud/api/1/file/file_ae46d521-7281-4b38-b365-804b32a1d6a7/1/file CurrentAvatarThumbnailImageUrl: title: CurrentAvatarThumbnailImageUrl type: string description: When profilePicOverride is not empty, use it instead. example: https://api.vrchat.cloud/api/1/image/file_aae83ed9-d42d-4d72-9f4b-9f1e41ed17e1/1/256 DeveloperType: title: DeveloperType type: string description: |- "none" User is a normal user "trusted" Unknown "internal" Is a VRChat Developer "moderator" Is a VRChat Moderator Staff can hide their developerType at will. enum: - internal - moderator - none - trusted default: none DiscordID: title: DiscordID type: string description: https://discord.com/developers/docs/reference#snowflakes example: '1280064052206370848' DiscordDetails: title: DiscordDetails type: object description: '' properties: global_name: type: string id: $ref: '#/components/schemas/DiscordID' WorldID: title: WorldID type: string description: WorldID be "offline" on User profiles if you are not friends with that user. example: wrld_4432ea9b-729c-46e3-8eaf-846aa0a37fdd PastDisplayName: title: PastDisplayName type: object properties: displayName: type: string minLength: 1 updated_at: type: string format: date-time required: - displayName - updated_at GroupID: title: GroupID type: string example: grp_71a7ff59-112c-4e78-a990-c7cc650776e5 LocationID: title: LocationID type: string description: Represents a unique location, consisting of a world identifier and an instance identifier, or "offline" if the user is not on your friends list. example: wrld_4432ea9b-729c-46e3-8eaf-846aa0a37fdd:12345~hidden(usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469)~region(eu)~nonce(27e8414a-59a0-4f3d-af1f-f27557eb49a2) CurrentUserPresence: title: CurrentUserPresence type: object properties: avatarThumbnail: type: string nullable: true currentAvatarTags: type: array items: $ref: '#/components/schemas/Tag' debugflag: type: string displayName: type: string groups: type: array nullable: true items: $ref: '#/components/schemas/GroupID' id: $ref: '#/components/schemas/UserID' instance: type: string nullable: true instanceType: type: string description: either an InstanceType or an empty string nullable: true isRejoining: type: string nullable: true platform: $ref: '#/components/schemas/Platform' description: either a Platform or an empty string nullable: true profilePicOverride: type: string nullable: true status: type: string description: either a UserStatus or empty string nullable: true travelingToInstance: type: string nullable: true travelingToWorld: $ref: '#/components/schemas/LocationID' nullable: true userIcon: type: string nullable: true world: $ref: '#/components/schemas/WorldID' nullable: true UserState: title: UserState type: string description: |- * "online" User is online in VRChat * "active" User is online, but not in VRChat * "offline" User is offline Always offline when returned through `getCurrentUser` (/auth/user). enum: - active - offline - online default: offline UserStatus: title: UserStatus type: string description: Defines the User's current status, for example "ask me", "join me" or "offline. This status is a combined indicator of their online activity and privacy preference. enum: - active - ask me - busy - join me - offline default: offline CurrentUser: title: CurrentUser type: object properties: acceptedPrivacyVersion: type: integer example: 0 minimum: 0 acceptedTOSVersion: type: integer example: 7 minimum: 0 accountDeletionDate: type: string nullable: true format: date accountDeletionLog: type: array description: ' ' nullable: true items: $ref: '#/components/schemas/AccountDeletionLog' activeFriends: type: array description: ' ' items: $ref: '#/components/schemas/UserID' ageVerificationStatus: $ref: '#/components/schemas/AgeVerificationStatus' ageVerified: $ref: '#/components/schemas/AgeVerified' allowAvatarCopying: type: boolean authToken: type: string description: The auth token for NEWLY REGISTERED ACCOUNTS ONLY (/auth/register) badges: type: array description: ' ' items: $ref: '#/components/schemas/Badge' bio: type: string bioLinks: type: array description: ' ' items: type: string contentFilters: type: array description: These tags begin with `content_` and control content gating items: $ref: '#/components/schemas/Tag' currentAvatar: $ref: '#/components/schemas/AvatarID' currentAvatarImageUrl: $ref: '#/components/schemas/CurrentAvatarImageUrl' currentAvatarTags: type: array items: $ref: '#/components/schemas/Tag' currentAvatarThumbnailImageUrl: $ref: '#/components/schemas/CurrentAvatarThumbnailImageUrl' date_joined: type: string format: date developerType: $ref: '#/components/schemas/DeveloperType' discordDetails: $ref: '#/components/schemas/DiscordDetails' discordId: $ref: '#/components/schemas/DiscordID' displayName: type: string emailVerified: type: boolean fallbackAvatar: deprecated: true $ref: '#/components/schemas/AvatarID' friendGroupNames: deprecated: true type: array description: Always empty array. items: type: string friendKey: type: string friends: type: array items: $ref: '#/components/schemas/UserID' googleDetails: type: object googleId: type: string hasBirthday: type: boolean hasEmail: type: boolean hasLoggedInFromClient: type: boolean hasPendingEmail: type: boolean hideContentFilterSettings: type: boolean homeLocation: $ref: '#/components/schemas/WorldID' id: $ref: '#/components/schemas/UserID' isAdult: type: boolean isBoopingEnabled: type: boolean default: true isFriend: type: boolean default: false last_activity: type: string format: date-time last_login: type: string format: date-time last_mobile: type: string nullable: true format: date-time last_platform: $ref: '#/components/schemas/Platform' obfuscatedEmail: type: string obfuscatedPendingEmail: type: string oculusId: type: string offlineFriends: type: array items: $ref: '#/components/schemas/UserID' onlineFriends: type: array items: $ref: '#/components/schemas/UserID' pastDisplayNames: type: array description: ' ' items: $ref: '#/components/schemas/PastDisplayName' picoId: type: string platform_history: type: array items: type: object properties: isMobile: type: boolean platform: $ref: '#/components/schemas/Platform' nullable: true recorded: type: string format: date-time presence: $ref: '#/components/schemas/CurrentUserPresence' profilePicOverride: type: string profilePicOverrideThumbnail: type: string pronouns: type: string pronounsHistory: type: array items: type: string queuedInstance: type: string nullable: true receiveMobileInvitations: type: boolean state: $ref: '#/components/schemas/UserState' status: $ref: '#/components/schemas/UserStatus' statusDescription: type: string statusFirstTime: type: boolean statusHistory: type: array items: type: string steamDetails: type: object steamId: type: string tags: type: array items: $ref: '#/components/schemas/Tag' twoFactorAuthEnabled: type: boolean twoFactorAuthEnabledDate: type: string nullable: true format: date-time unsubscribe: type: boolean updated_at: type: string format: date-time userIcon: type: string userLanguage: type: string nullable: true userLanguageCode: type: string nullable: true username: deprecated: true type: string description: '-| **DEPRECATED:** VRChat API no longer return usernames of other users. [See issue by Tupper for more information](https://github.com/pypy-vrc/VRCX/issues/429).' viveId: type: string required: - acceptedTOSVersion - ageVerificationStatus - ageVerified - allowAvatarCopying - bio - bioLinks - currentAvatar - currentAvatarImageUrl - currentAvatarTags - currentAvatarThumbnailImageUrl - date_joined - developerType - displayName - emailVerified - friendGroupNames - friendKey - friends - hasBirthday - hasEmail - hasLoggedInFromClient - hasPendingEmail - homeLocation - id - isAdult - isFriend - last_login - last_mobile - last_platform - obfuscatedEmail - obfuscatedPendingEmail - oculusId - pastDisplayNames - profilePicOverride - profilePicOverrideThumbnail - pronouns - pronounsHistory - state - status - statusDescription - statusFirstTime - statusHistory - steamDetails - steamId - tags - twoFactorAuthEnabled - unsubscribe - userIcon Disable2FAResult: title: Disable2FAResult type: object properties: removed: type: boolean required: - removed TwoFactorEmailCode: title: TwoFactorEmailCode type: object properties: code: type: string required: - code Verify2FAEmailCodeResult: title: Verify2FAEmailCodeResult type: object properties: verified: type: boolean required: - verified TwoFactorAuthCode: title: TwoFactorAuthCode type: object properties: code: type: string required: - code Verify2FAResult: title: Verify2FAResult type: object properties: enabled: type: boolean default: true verified: type: boolean required: - verified Pending2FAResult: title: Pending2FAResult type: object properties: qrCodeDataUrl: type: string secret: type: string required: - qrCodeDataUrl - secret AvatarModerationType: title: AvatarModerationType type: string enum: - block example: block AvatarModeration: title: AvatarModeration type: object properties: avatarModerationType: $ref: '#/components/schemas/AvatarModerationType' created: type: string format: date-time targetAvatarId: $ref: '#/components/schemas/AvatarID' required: - avatarModerationType - created - targetAvatarId CreateAvatarModerationRequest: title: CreateAvatarModerationRequest type: object properties: avatarModerationType: $ref: '#/components/schemas/AvatarModerationType' targetAvatarId: $ref: '#/components/schemas/AvatarID' required: - avatarModerationType - targetAvatarId AvatarModerationCreated: title: AvatarModerationCreated type: object properties: avatarModerationType: $ref: '#/components/schemas/AvatarModerationType' created: type: integer description: Timestamp in milliseconds since Unix epoch format: int64 targetAvatarId: $ref: '#/components/schemas/AvatarID' required: - avatarModerationType - created - targetAvatarId OkStatus2: title: OkStatus2 type: object description: Another status response consisting of solely a string description of whether the result of an operation was ok. properties: OK: type: string description: The actual status itself required: - OK FavoriteGroupLimits: title: FavoriteGroupLimits type: object properties: avatar: type: integer friend: type: integer world: type: integer required: - avatar - friend - world FavoriteLimits: title: FavoriteLimits type: object properties: defaultMaxFavoriteGroups: type: integer defaultMaxFavoritesPerGroup: type: integer maxFavoriteGroups: $ref: '#/components/schemas/FavoriteGroupLimits' maxFavoritesPerGroup: $ref: '#/components/schemas/FavoriteGroupLimits' required: - defaultMaxFavoriteGroups - defaultMaxFavoritesPerGroup - maxFavoriteGroups - maxFavoritesPerGroup LimitedUserFriend: title: LimitedUserFriend type: object description: User object received when querying your friends list properties: bio: type: string bioLinks: type: array description: ' ' items: type: string currentAvatarImageUrl: $ref: '#/components/schemas/CurrentAvatarImageUrl' currentAvatarTags: type: array items: $ref: '#/components/schemas/Tag' currentAvatarThumbnailImageUrl: $ref: '#/components/schemas/CurrentAvatarThumbnailImageUrl' developerType: $ref: '#/components/schemas/DeveloperType' displayName: type: string friendKey: type: string id: $ref: '#/components/schemas/UserID' imageUrl: type: string isFriend: type: boolean last_activity: type: string nullable: true format: date-time last_login: type: string nullable: true format: date-time last_mobile: type: string nullable: true format: date-time last_platform: $ref: '#/components/schemas/Platform' location: type: string platform: type: string profilePicOverride: type: string profilePicOverrideThumbnail: type: string status: $ref: '#/components/schemas/UserStatus' statusDescription: type: string tags: type: array description: <- Always empty. items: $ref: '#/components/schemas/Tag' userIcon: type: string required: - developerType - displayName - friendKey - id - imageUrl - isFriend - last_activity - last_login - last_mobile - last_platform - location - platform - status - statusDescription - tags Success: title: Success type: object properties: success: $ref: '#/components/schemas/Response' NotificationType: title: NotificationType type: string enum: - friendRequest - invite - inviteResponse - message - requestInvite - requestInviteResponse - votetokick default: friendRequest Notification: title: Notification type: object description: '' properties: created_at: type: string format: date-time details: type: string description: '**NOTICE:** This is not a JSON object when received from the REST API, but it is when received from the Websocket API. When received from the REST API, this is a json **encoded** object, meaning you have to json-de-encode to get the NotificationDetail object depending on the NotificationType.' default: '{}' example: 'OneOf: {}, NotificationDetailInvite, NotificationDetailInviteResponse, NotificationDetailRequestInvite, NotificationDetailRequestInviteResponse, NotificationDetailVoteToKick' id: type: string minLength: 1 message: type: string description: '' example: This is a generated invite to VRChat Hub receiverUserId: $ref: '#/components/schemas/UserID' description: Not included in notification objects received from the REST API seen: type: boolean description: Not included in notification objects received from the Websocket API default: false senderUserId: $ref: '#/components/schemas/UserID' senderUsername: deprecated: true type: string description: '-| **DEPRECATED:** VRChat API no longer return usernames of other users. [See issue by Tupper for more information](https://github.com/pypy-vrc/VRCX/issues/429).' minLength: 1 type: $ref: '#/components/schemas/NotificationType' required: - created_at - details - id - message - senderUserId - type PlayerModerationType: title: PlayerModerationType type: string enum: - block - hideAvatar - interactOff - interactOn - mute - muteChat - showAvatar - unmute - unmuteChat default: unmute example: unmute PlayerModerationID: title: PlayerModerationID type: string example: pmod_25551a8d-6f5d-430a-88d3-9c0ce08b5244 PlayerModeration: title: PlayerModeration type: object properties: created: type: string format: date-time id: $ref: '#/components/schemas/PlayerModerationID' sourceDisplayName: type: string minLength: 1 sourceUserId: $ref: '#/components/schemas/UserID' targetDisplayName: type: string minLength: 1 targetUserId: $ref: '#/components/schemas/UserID' type: $ref: '#/components/schemas/PlayerModerationType' required: - created - id - sourceDisplayName - sourceUserId - targetDisplayName - targetUserId - type ModerateUserRequest: title: ModerateUserRequest type: object additionalProperties: false properties: moderated: $ref: '#/components/schemas/UserID' type: $ref: '#/components/schemas/PlayerModerationType' required: - moderated - type LicenseGroupID: title: LicenseGroupID type: string example: lgrp_608513da-b213-4e15-80af-bd88c27f0979 UserSubscription: title: UserSubscription type: object description: '' properties: active: type: boolean default: true amount: type: number example: 9999 created_at: type: string format: date-time description: type: string example: VRChat Plus (Yearly) expires: type: string format: date-time id: type: string example: vrchatplus-yearly minLength: 1 isBulkGift: type: boolean default: false isGift: type: boolean default: false licenseGroups: type: array items: $ref: '#/components/schemas/LicenseGroupID' period: $ref: '#/components/schemas/SubscriptionPeriod' starts: type: string status: $ref: '#/components/schemas/TransactionStatus' steamItemId: type: string example: '5000' minLength: 1 store: type: string description: Which "Store" it came from. Right now only Stores are "Steam" and "Admin". example: Steam minLength: 1 tier: type: integer example: 5 transactionId: $ref: '#/components/schemas/TransactionID' updated_at: type: string format: date-time required: - active - amount - created_at - description - expires - id - isBulkGift - isGift - licenseGroups - period - status - store - tier - transactionId - updated_at TwoFactorRecoveryCodes: title: TwoFactorRecoveryCodes type: object properties: otp: type: array items: type: object properties: code: type: string used: type: boolean required: - code - used requiresTwoFactorAuth: type: array items: type: string AvatarStyleID: title: AvatarStyleID type: string example: avst_f0659ed2-094d-48fb-9e40-de05564d96c7 AvatarStyle: title: AvatarStyle type: object description: '' properties: id: $ref: '#/components/schemas/AvatarStyleID' styleName: type: string required: - id - styleName SortOption: title: SortOption type: string enum: - _created_at - _updated_at - created - favorites - heat - labsPublicationDate - magic - name - order - popularity - publicationDate - random - relevance - reportCount - reportScore - shuffle - trust - updated default: popularity example: popularity OrderOption: title: OrderOption type: string enum: - ascending - descending default: descending example: descending UnityPackageID: title: UnityPackageID type: string example: unp_52b12c39-4163-457d-a4a9-630e7aff1bff PerformanceRatings: title: PerformanceRatings type: string description: Avatar Performance ratings. enum: - Excellent - Good - Medium - None - Poor - VeryPoor example: Excellent UnityPackage: title: UnityPackage type: object description: '' properties: assetUrl: type: string nullable: true example: https://api.vrchat.cloud/api/1/file/file_cd0caa7b-69ba-4715-8dfe-7d667a9d2537/65/file assetUrlObject: type: object example: {} assetVersion: type: integer example: 4 minimum: 0 created_at: type: string example: '2020-09-10T06:13:27.777Z' format: date-time id: $ref: '#/components/schemas/UnityPackageID' impostorUrl: type: string nullable: true impostorizerVersion: type: string example: 0.17.0 performanceRating: $ref: '#/components/schemas/PerformanceRatings' platform: $ref: '#/components/schemas/Platform' pluginUrl: type: string example: '' pluginUrlObject: type: object example: {} scanStatus: type: string unitySortNumber: type: integer example: 20180414000 format: int64 minimum: 0 unityVersion: type: string default: 5.3.4p1 example: 2022.3.6f1 minLength: 1 variant: type: string worldSignature: type: string nullable: true example: AHiPAWerwCpeYrxDthF5TU2SdUWEWnm43UAn8PKRXlS8k8tVRQ== required: - assetVersion - id - platform - unityVersion Avatar: title: Avatar type: object description: '' properties: acknowledgements: type: string assetUrl: type: string description: Not present from general search `/avatars`, only on specific requests `/avatars/{avatarId}`. minLength: 1 assetUrlObject: type: object description: |- Not present from general search `/avatars`, only on specific requests `/avatars/{avatarId}`. **Deprecation:** `Object` has unknown usage/fields, and is always empty. Use normal `Url` field instead. authorId: $ref: '#/components/schemas/UserID' authorName: type: string minLength: 1 created_at: type: string format: date-time description: type: string minLength: 0 featured: type: boolean default: false highestPrice: type: integer id: $ref: '#/components/schemas/AvatarID' imageUrl: type: string minLength: 1 listingDate: type: string nullable: true lock: type: boolean lowestPrice: type: integer name: type: string minLength: 1 performance: type: object properties: android: type: string android-sort: type: integer ios: type: string ios-sort: type: integer standalonewindows: type: string standalonewindows-sort: type: integer productId: type: string publishedListings: type: array items: type: object properties: description: type: string displayName: type: string imageId: type: string listingId: type: string listingType: type: string priceTokens: type: integer releaseStatus: $ref: '#/components/schemas/ReleaseStatus' searchable: type: boolean default: false styles: type: object properties: primary: type: string nullable: true secondary: type: string nullable: true supplementary: type: array items: type: string tags: type: array description: ' ' items: $ref: '#/components/schemas/Tag' thumbnailImageUrl: type: string minLength: 1 unityPackageUrl: type: string unityPackageUrlObject: deprecated: true type: object description: '**Deprecation:** `Object` has unknown usage/fields, and is always empty. Use normal `Url` field instead.' properties: unityPackageUrl: type: string unityPackages: type: array items: $ref: '#/components/schemas/UnityPackage' minItems: 1 uniqueItems: true updated_at: type: string format: date-time version: type: integer default: 0 example: 68 minimum: 0 required: - authorId - authorName - created_at - description - featured - id - imageUrl - listingDate - name - performance - releaseStatus - styles - tags - thumbnailImageUrl - unityPackageUrl - unityPackageUrlObject - unityPackages - updated_at - version LocalDateTime: title: LocalDateTime type: string description: A date and time of the pattern `M/d/yyyy h:mm:ss tt` (see C Sharp `System.DateTime`) example: 12/12/2021 1:23:43 AM CreateAvatarRequest: title: CreateAvatarRequest type: object properties: assetUrl: type: string assetVersion: type: string created_at: $ref: '#/components/schemas/LocalDateTime' description: type: string minLength: 1 id: $ref: '#/components/schemas/AvatarID' imageUrl: type: string minLength: 1 name: type: string minLength: 1 platform: $ref: '#/components/schemas/Platform' releaseStatus: $ref: '#/components/schemas/ReleaseStatus' tags: type: array description: ' ' items: $ref: '#/components/schemas/Tag' thumbnailImageUrl: type: string minLength: 1 unityPackageUrl: type: string unityVersion: type: string default: 5.3.4p1 example: 2022.3.6f1 minLength: 1 updated_at: $ref: '#/components/schemas/LocalDateTime' version: type: integer default: 1 minimum: 0 required: - imageUrl - name ServiceQueueStats: title: ServiceQueueStats type: object description: Statistics about the user's currently queued service request properties: estimatedServiceDurationSeconds: type: integer required: - estimatedServiceDurationSeconds UpdateAvatarRequest: title: UpdateAvatarRequest type: object properties: assetUrl: type: string description: type: string minLength: 1 id: $ref: '#/components/schemas/AvatarID' imageUrl: type: string minLength: 1 name: type: string minLength: 1 releaseStatus: $ref: '#/components/schemas/ReleaseStatus' tags: type: array description: ' ' items: $ref: '#/components/schemas/Tag' unityPackageUrl: type: string unityVersion: type: string default: 5.3.4p1 example: 2022.3.6f1 minLength: 1 version: type: integer default: 1 minimum: 0 ServiceStatus: title: ServiceStatus type: object description: Status information for a service request properties: created_at: type: string format: date-time id: type: string description: The id of this service, NOT the id of the thing this service was requested for. progress: type: array items: type: object requesterUserId: $ref: '#/components/schemas/UserID' description: The id of the user who requested this service. state: type: string subjectId: type: string description: The id of the thing this service was requested for. subjectType: type: string description: The kind of the thing this service was requested for. type: type: string description: The kind of service that was requested. updated_at: type: string format: date-time required: - created_at - id - progress - requesterUserId - state - subjectId - subjectType - type - updated_at CalendarID: title: CalendarID type: string example: cal_6b182f0c-61ef-4bdf-97fe-94f63bcba27b FileID: title: FileID type: string example: file_ce35d830-e20a-4df0-a6d4-5aaef4508044 GroupRoleID: title: GroupRoleID type: string example: grol_459d3911-f672-44bc-b84d-e54ffe7960fe CalendarEvent: title: CalendarEvent type: object description: '' properties: accessType: type: string example: group category: type: string example: performance closeInstanceAfterEndMinutes: type: integer createdAt: type: string format: date-time deletedAt: type: string nullable: true format: date-time description: type: string endsAt: type: string format: date-time featured: type: boolean guestEarlyJoinMinutes: type: integer hostEarlyJoinMinutes: type: integer id: $ref: '#/components/schemas/CalendarID' imageId: $ref: '#/components/schemas/FileID' nullable: true imageUrl: type: string nullable: true interestedUserCount: type: integer isDraft: type: boolean languages: type: array description: ' ' items: type: string ownerId: $ref: '#/components/schemas/GroupID' platforms: type: array description: ' ' items: type: string roleIds: type: array description: ' ' nullable: true items: $ref: '#/components/schemas/GroupRoleID' startsAt: type: string format: date-time tags: type: array description: ' ' items: $ref: '#/components/schemas/Tag' title: type: string minLength: 1 type: type: string example: event updatedAt: type: string format: date-time userInterest: type: object properties: createdAt: type: string format: date-time isFollowing: type: boolean updatedAt: type: string format: date-time usesInstanceOverflow: type: boolean required: - accessType - category - description - endsAt - id - startsAt - title PaginatedCalendarEventList: title: PaginatedCalendarEventList type: object properties: hasNext: type: boolean description: Whether there are more results after this page. results: type: array description: ' ' items: $ref: '#/components/schemas/CalendarEvent' totalCount: type: integer description: The total number of results that the query would return if there were no pagination. CreateCalendarEventRequest: title: CreateCalendarEventRequest type: object properties: accessType: type: string enum: - group - public category: type: string example: performance closeInstanceAfterEndMinutes: type: integer example: 5 description: type: string minLength: 1 endsAt: type: string description: Time the event ends at format: date-time featured: type: boolean guestEarlyJoinMinutes: type: integer example: 5 hostEarlyJoinMinutes: type: integer example: 60 imageId: $ref: '#/components/schemas/FileID' isDraft: type: boolean languages: type: array items: type: string parentId: type: string platforms: type: array items: type: string roleIds: type: array items: type: string sendCreationNotification: type: boolean description: Send notification to group members. example: false startsAt: type: string description: Time the event starts at format: date-time tags: type: array items: type: string title: type: string description: Event title example: Performance Event! minLength: 1 usesInstanceOverflow: type: boolean example: true required: - accessType - category - description - endsAt - sendCreationNotification - startsAt - title UpdateCalendarEventRequest: title: UpdateCalendarEventRequest type: object properties: category: type: string example: performance closeInstanceAfterEndMinutes: type: integer example: 5 description: type: string minLength: 1 endsAt: type: string description: Time the vent starts at format: date-time featured: type: boolean guestEarlyJoinMinutes: type: integer example: 5 hostEarlyJoinMinutes: type: integer example: 60 imageId: $ref: '#/components/schemas/FileID' isDraft: type: boolean languages: type: array items: type: string parentId: type: string platforms: type: array items: type: string roleIds: type: array items: type: string sendCreationNotification: type: boolean description: Send notification to group members. default: false example: false startsAt: type: string description: Time the vent starts at format: date-time tags: type: array items: type: string title: type: string description: Event title example: Performance Event! minLength: 1 usesInstanceOverflow: type: boolean example: true FollowCalendarEventRequest: title: FollowCalendarEventRequest type: object properties: isFollowing: type: boolean example: true required: - isFollowing APIConfigAnnouncement: title: APIConfigAnnouncement deprecated: true type: object description: Public Announcement properties: name: type: string description: Announcement name minLength: 1 text: type: string description: Announcement text minLength: 1 required: - name - text PerformanceLimiterInfo: title: PerformanceLimiterInfo type: object description: Info about the performance limits on a platform properties: maxSeats: type: integer description: Maximum amount of seats. -1 means no limit. required: - maxSeats APIConfigConstants: title: APIConfigConstants type: object description: Constants properties: GROUPS: type: object description: Group-related constants properties: CAPACITY: type: integer description: Maximum group capacity default: 100000 GROUP_TRANSFER_REQUIREMENTS: type: array description: Requirements for transferring group ownership items: type: string description: Requirement for transferring group ownership MAX_INVITES_REQUESTS: type: integer description: Maximum number of invite requests default: 50 MAX_JOINED: type: integer description: Maximum number of joined groups default: 100 MAX_JOINED_PLUS: type: integer description: Maximum number of joined groups for VRChat Plus members default: 200 MAX_LANGUAGES: type: integer description: Maximum number of supported languages default: 10 MAX_LINKS: type: integer description: Maximum number of group links default: 3 MAX_MANAGEMENT_ROLES: type: integer description: Maximum number of management roles in a group default: 5 MAX_OWNED: type: integer description: Maximum number of groups a user can own default: 5 MAX_ROLES: type: integer description: Maximum number of roles in a group default: 50 INSTANCE: type: object description: Instance-related constants properties: POPULATION_BRACKETS: type: object description: Population brackets based on instance population properties: CROWDED: type: object description: Crowded population range properties: max: type: integer description: Maximum population for a crowded instance min: type: integer description: Minimum population for a crowded instance FEW: type: object description: Few population range properties: max: type: integer description: Maximum population for a few instance min: type: integer description: Minimum population for a few instance MANY: type: object description: Many population range properties: max: type: integer description: Maximum population for a many instance min: type: integer description: Minimum population for a many instance LANGUAGE: type: object description: Language-related constants properties: SPOKEN_LANGUAGE_OPTIONS: type: object description: Supported spoken language options additionalProperties: type: string required: - GROUPS - INSTANCE - LANGUAGE APIConfigDownloadURLList: title: APIConfigDownloadURLList type: object description: Download links for various development assets. additionalProperties: false properties: bootstrap: type: string description: Download link for ??? minLength: 1 sdk2: deprecated: true type: string description: Download link for legacy SDK2 minLength: 1 sdk3-avatars: type: string description: Download link for SDK3 for Avatars minLength: 1 sdk3-worlds: type: string description: Download link for SDK3 for Worlds minLength: 1 vcc: type: string description: Download link for the Creator Companion minLength: 1 required: - bootstrap - sdk2 - sdk3-avatars - sdk3-worlds - vcc DynamicContentRow: title: DynamicContentRow type: object properties: index: type: integer minimum: 0 name: type: string minLength: 1 platform: $ref: '#/components/schemas/Platform' description: Usually "ThisPlatformSupported", but can also be other values such as "all" or platform specific identifiers. minLength: 1 sortHeading: type: string minLength: 1 sortOrder: type: string minLength: 1 sortOwnership: type: string minLength: 1 tag: $ref: '#/components/schemas/Tag' description: Tag to filter content for this row. minLength: 1 type: type: string description: Type is not present if it is a world. example: avatar required: - name - platform - sortHeading - sortOrder - sortOwnership APIConfigEvents: title: APIConfigEvents type: object properties: distanceClose: type: integer description: Unknown distanceFactor: type: integer description: Unknown distanceFar: type: integer description: Unknown groupDistance: type: integer description: Unknown maximumBunchSize: type: integer description: Unknown notVisibleFactor: type: integer description: Unknown playerOrderBucketSize: type: integer description: Unknown playerOrderFactor: type: integer description: Unknown slowUpdateFactorThreshold: type: integer description: Unknown viewSegmentLength: type: integer description: Unknown required: - distanceClose - distanceFactor - distanceFar - groupDistance - maximumBunchSize - notVisibleFactor - playerOrderBucketSize - playerOrderFactor - slowUpdateFactorThreshold - viewSegmentLength PlatformBuildInfo: title: PlatformBuildInfo type: object description: Build information for a platform properties: minBuildNumber: type: integer description: Minimum build number required for the platform redirectionAddress: type: string description: Redirection URL for updating the app required: - minBuildNumber ReportCategory: title: ReportCategory type: object description: A category used for reporting content properties: description: type: string description: The description of the report category text: type: string description: The label of the report category title: type: string description: The title of the report category tooltip: type: string description: The tooltip that describes the category required: - text - tooltip ReportReason: title: ReportReason type: object description: A reason used for reporting users properties: text: type: string description: The label or name of the report reason tooltip: type: string description: A brief explanation of what this reason entails required: - text - tooltip APIConfig: title: APIConfig type: object description: '' properties: VoiceEnableDegradation: type: boolean description: Unknown, probably voice optimization testing default: false VoiceEnableReceiverLimiting: type: boolean description: Unknown, probably voice optimization testing default: true accessLogsUrls: type: object properties: Default: type: string example: https://help.vrchat.com/hc/en-us/articles/9521522810899-Where-do-I-find-my-output-logs#h_01HT1ZV67JGKX5AE4R1P28XMXR format: uri Pico: type: string example: https://help.vrchat.com/hc/en-us/articles/9521522810899-Where-do-I-find-my-output-logs#h_01HT1ZV67JGKX5AE4R1P28XMXR format: uri Quest: type: string example: https://help.vrchat.com/hc/en-us/articles/9521522810899-Where-do-I-find-my-output-logs#h_01HT1ZV67JGKX5AE4R1P28XMXR format: uri XRElite: type: string example: https://help.vrchat.com/hc/en-us/articles/9521522810899-Where-do-I-find-my-output-logs#h_01HT1ZV67JGKX5AE4R1P28XMXR format: uri address: type: string description: VRChat's office address minLength: 1 ageVerificationInviteVisible: type: boolean ageVerificationP: type: boolean ageVerificationStatusVisible: type: boolean analysisMaxRetries: type: integer description: Max retries for avatar analysis requests analysisRetryInterval: type: integer description: Interval between retries for avatar analysis requests analyticsSegment_NewUI_PctOfUsers: type: integer description: Unknown analyticsSegment_NewUI_Salt: type: string description: Unknown announcements: type: array description: Public Announcements items: $ref: '#/components/schemas/APIConfigAnnouncement' minItems: 0 uniqueItems: true availableLanguageCodes: type: array description: List of supported Languages items: type: string availableLanguages: type: array description: List of supported Languages items: type: string avatarPerfLimiter: type: object properties: AndroidMobile: $ref: '#/components/schemas/PerformanceLimiterInfo' PC: $ref: '#/components/schemas/PerformanceLimiterInfo' Pico: $ref: '#/components/schemas/PerformanceLimiterInfo' Quest: $ref: '#/components/schemas/PerformanceLimiterInfo' XRElite: $ref: '#/components/schemas/PerformanceLimiterInfo' iOSMobile: $ref: '#/components/schemas/PerformanceLimiterInfo' required: - AndroidMobile - PC - Pico - Quest - XRElite - iOSMobile chatboxLogBufferSeconds: type: integer description: Unknown default: 40 clientApiKey: type: string description: apiKey to be used for all other requests minLength: 1 clientBPSCeiling: type: integer description: Unknown default: 18432 clientDisconnectTimeout: type: integer description: Unknown default: 30000 clientNetDispatchThread: type: boolean description: Unknown default: false clientNetDispatchThreadMobile: type: boolean description: Unknown default: true clientNetInThread: type: boolean description: Unknown default: false clientNetInThread2: type: boolean description: Unknown default: false clientNetInThreadMobile: type: boolean description: Unknown default: false clientNetInThreadMobile2: type: boolean description: Unknown default: false clientNetOutThread: type: boolean description: Unknown default: false clientNetOutThread2: type: boolean description: Unknown default: false clientNetOutThreadMobile: type: boolean description: Unknown default: false clientNetOutThreadMobile2: type: boolean description: Unknown default: false clientQR: type: integer description: Unknown default: 1 clientReservedPlayerBPS: type: integer description: Unknown default: 7168 clientSentCountAllowance: type: integer description: Unknown default: 15 constants: $ref: '#/components/schemas/APIConfigConstants' contactEmail: type: string description: VRChat's contact email minLength: 1 copyrightEmail: type: string description: VRChat's copyright-issues-related email minLength: 1 currentPrivacyVersion: type: integer description: Current version number of the Privacy Agreement default: 1 currentTOSVersion: type: integer description: Current version number of the Terms of Service example: 7 minimum: 0 defaultAvatar: $ref: '#/components/schemas/AvatarID' defaultStickerSet: type: string devLanguageCodes: type: array description: Unknown items: type: string devSdkUrl: deprecated: true type: string description: Link to download the development SDK, use downloadUrls instead minLength: 1 devSdkVersion: deprecated: true type: string description: Version of the development SDK minLength: 1 dis-countdown: type: string description: Unknown, "dis" maybe for disconnect? format: date-time disableAVProInProton: type: boolean description: Unknown default: false disableAvatarCopying: type: boolean description: Toggles if copying avatars should be disabled default: false disableAvatarGating: type: boolean description: Toggles if avatar gating should be disabled. Avatar gating restricts uploading of avatars to people with the `system_avatar_access` Tag or `admin_avatar_access` Tag default: false disableCaptcha: type: boolean description: Unknown default: true disableCommunityLabs: type: boolean description: Toggles if the Community Labs should be disabled default: false disableCommunityLabsPromotion: type: boolean description: Toggles if promotion out of Community Labs should be disabled default: false disableEmail: type: boolean description: Unknown default: false disableEventStream: type: boolean description: Toggles if Analytics should be disabled. default: false disableFeedbackGating: type: boolean description: Toggles if feedback gating should be disabled. Feedback gating restricts submission of feedback (reporting a World or User) to people with the `system_feedback_access` Tag. default: false disableFrontendBuilds: type: boolean description: Unknown, probably toggles compilation of frontend web builds? So internal flag? default: false disableGiftDrops: type: boolean description: Toggles if gift drops should be disabled default: false disableHello: type: boolean description: Unknown default: false disableOculusSubs: type: boolean description: Toggles if signing up for Subscriptions in Oculus is disabled or not. default: false disableRegistration: type: boolean description: Toggles if new user account registration should be disabled. default: false disableSteamNetworking: type: boolean description: Toggles if Steam Networking should be disabled. VRChat these days uses Photon Unity Networking (PUN) instead. default: true disableTwoFactorAuth: deprecated: true type: boolean description: Toggles if 2FA should be disabled. default: false disableUdon: type: boolean description: Toggles if Udon should be universally disabled in-game. default: false disableUpgradeAccount: type: boolean description: Toggles if account upgrading "linking with Steam/Oculus" should be disabled. default: false downloadLinkWindows: type: string description: Download link for game on the Oculus Rift website. minLength: 1 downloadUrls: $ref: '#/components/schemas/APIConfigDownloadURLList' dynamicWorldRows: type: array description: Array of DynamicWorldRow objects, used by the game to display the list of world rows items: $ref: '#/components/schemas/DynamicContentRow' minItems: 1 uniqueItems: true economyPauseEnd: type: string description: Unknown economyPauseStart: type: string description: Unknown economyState: type: integer description: Unknown default: 1 events: $ref: '#/components/schemas/APIConfigEvents' forceUseLatestWorld: type: boolean description: Unknown default: true giftDisplayType: type: string description: Display type of gifts googleApiClientId: type: string description: Unknown default: 827942544393-r2ouvckvouldn9dg9uruseje575e878f.apps.googleusercontent.com homeWorldId: $ref: '#/components/schemas/WorldID' homepageRedirectTarget: type: string description: Redirect target if you try to open the base API domain in your browser default: https://hello.vrchat.com minLength: 1 hubWorldId: $ref: '#/components/schemas/WorldID' imageHostUrlList: type: array description: A list of explicitly allowed origins that worlds can request images from via the Udon's [VRCImageDownloader#DownloadImage](https://creators.vrchat.com/worlds/udon/image-loading/#downloadimage). items: type: string jobsEmail: type: string description: VRChat's job application email minLength: 1 minSupportedClientBuildNumber: type: object description: Minimum supported client build number for various platforms properties: AppStore: $ref: '#/components/schemas/PlatformBuildInfo' Default: $ref: '#/components/schemas/PlatformBuildInfo' Firebase: $ref: '#/components/schemas/PlatformBuildInfo' FirebaseiOS: $ref: '#/components/schemas/PlatformBuildInfo' GooglePlay: $ref: '#/components/schemas/PlatformBuildInfo' PC: $ref: '#/components/schemas/PlatformBuildInfo' PicoStore: $ref: '#/components/schemas/PlatformBuildInfo' QuestAppLab: $ref: '#/components/schemas/PlatformBuildInfo' QuestStore: $ref: '#/components/schemas/PlatformBuildInfo' TestFlight: $ref: '#/components/schemas/PlatformBuildInfo' XRElite: $ref: '#/components/schemas/PlatformBuildInfo' required: - AppStore - Default - Firebase - FirebaseiOS - GooglePlay - PC - PicoStore - QuestAppLab - QuestStore - TestFlight - XRElite minimumUnityVersionForUploads: type: string description: Minimum Unity version required for uploading assets default: 2019.0.0f1 moderationEmail: type: string description: VRChat's moderation related email minLength: 1 notAllowedToSelectAvatarInPrivateWorldMessage: type: string description: Used in-game to notify a user they aren't allowed to select avatars in private worlds minLength: 1 offlineAnalysis: type: object description: Whether to allow offline analysis properties: android: type: boolean description: Whether to allow offline analysis default: true standalonewindows: type: boolean description: Whether to allow offline analysis default: true photonNameserverOverrides: type: array description: Unknown items: type: string photonPublicKeys: type: array description: Unknown items: type: string player-url-resolver-sha1: type: string description: Currently used youtube-dl.exe hash in SHA1-delimited format minLength: 1 player-url-resolver-version: type: string description: Currently used youtube-dl.exe version minLength: 1 publicKey: type: string description: Public key, hex encoded reportCategories: type: object description: Categories available for reporting objectionable content properties: avatar: $ref: '#/components/schemas/ReportCategory' avatarpage: $ref: '#/components/schemas/ReportCategory' behavior: $ref: '#/components/schemas/ReportCategory' chat: $ref: '#/components/schemas/ReportCategory' emoji: $ref: '#/components/schemas/ReportCategory' environment: $ref: '#/components/schemas/ReportCategory' groupstore: $ref: '#/components/schemas/ReportCategory' image: $ref: '#/components/schemas/ReportCategory' sticker: $ref: '#/components/schemas/ReportCategory' text: $ref: '#/components/schemas/ReportCategory' warnings: $ref: '#/components/schemas/ReportCategory' worldimage: $ref: '#/components/schemas/ReportCategory' worldstore: $ref: '#/components/schemas/ReportCategory' required: - avatar - behavior - chat - environment - groupstore - image - text - warnings - worldimage - worldstore reportFormUrl: type: string description: URL to the report form default: https://help.vrchat.com/hc/en-us/requests/new?ticket_form_id=1500000182242&tf_360056455174=user_report&tf_360057451993={userId}&tf_1500001445142={reportedId}&tf_subject={reason} {category} By {contentType} {reportedName}&tf_description={description} reportOptions: type: object description: Options for reporting content properties: avatar: type: object properties: avatar: type: array items: type: string avatarpage: type: array items: type: string warnings: type: array items: type: string group: type: object properties: groupstore: type: array items: type: string image: type: array items: type: string text: type: array items: type: string user: type: object properties: behavior: type: array items: type: string chat: type: array items: type: string emoji: type: array items: type: string image: type: array items: type: string sticker: type: array items: type: string text: type: array items: type: string world: type: object properties: environment: type: array items: type: string text: type: array items: type: string warnings: type: array items: type: string worldimage: type: array items: type: string worldstore: type: array items: type: string reportReasons: type: object description: Reasons available for reporting users properties: billing: $ref: '#/components/schemas/ReportReason' botting: $ref: '#/components/schemas/ReportReason' cancellation: $ref: '#/components/schemas/ReportReason' copyright: $ref: '#/components/schemas/ReportReason' fraud: $ref: '#/components/schemas/ReportReason' gore: $ref: '#/components/schemas/ReportReason' hacking: $ref: '#/components/schemas/ReportReason' harassing: $ref: '#/components/schemas/ReportReason' hateful: $ref: '#/components/schemas/ReportReason' impersonation: $ref: '#/components/schemas/ReportReason' inappropriate: $ref: '#/components/schemas/ReportReason' leaking: $ref: '#/components/schemas/ReportReason' malicious: $ref: '#/components/schemas/ReportReason' missing: $ref: '#/components/schemas/ReportReason' nudity: $ref: '#/components/schemas/ReportReason' renewal: $ref: '#/components/schemas/ReportReason' security: $ref: '#/components/schemas/ReportReason' service: $ref: '#/components/schemas/ReportReason' sexual: $ref: '#/components/schemas/ReportReason' technical: $ref: '#/components/schemas/ReportReason' threatening: $ref: '#/components/schemas/ReportReason' visuals: $ref: '#/components/schemas/ReportReason' required: - billing - botting - cancellation - gore - hacking - harassing - hateful - impersonation - inappropriate - leaking - malicious - missing - nudity - renewal - security - service - sexual - threatening - visuals requireAgeVerificationBetaTag: type: boolean sdkDeveloperFaqUrl: type: string description: Link to the developer FAQ minLength: 1 sdkDiscordUrl: type: string description: Link to the official VRChat Discord minLength: 1 sdkNotAllowedToPublishMessage: type: string description: Used in the SDK to notify a user they aren't allowed to upload avatars/worlds yet minLength: 1 sdkUnityVersion: type: string description: Unity version supported by the SDK minLength: 1 stringHostUrlList: type: array description: A list of explicitly allowed origins that worlds can request strings from via the Udon's [VRCStringDownloader.LoadUrl](https://creators.vrchat.com/worlds/udon/string-loading/#ivrcstringdownload). items: type: string supportEmail: type: string description: VRChat's support email minLength: 1 supportFormUrl: type: string description: VRChat's support form timeOutWorldId: $ref: '#/components/schemas/WorldID' timekeeping: type: boolean description: Unknown default: true tutorialWorldId: $ref: '#/components/schemas/WorldID' updateRateMsMaximum: type: integer description: Unknown updateRateMsMinimum: type: integer description: Unknown updateRateMsNormal: type: integer description: Unknown updateRateMsUdonManual: type: integer description: Unknown uploadAnalysisPercent: type: integer description: Unknown urlList: type: array description: List of allowed URLs that bypass the "Allow untrusted URL's" setting in-game items: type: string useReliableUdpForVoice: type: boolean description: Unknown default: false viveWindowsUrl: type: string description: Download link for game on the Steam website. minLength: 1 websocketMaxFriendsRefreshDelay: type: integer description: Unknown default: 900 websocketQuickReconnectTime: type: integer description: Unknown default: 2 websocketReconnectMaxDelay: type: integer description: Unknown default: 2 whiteListedAssetUrls: type: array description: List of allowed URLs that are allowed to host avatar assets items: type: string required: - VoiceEnableDegradation - VoiceEnableReceiverLimiting - accessLogsUrls - address - ageVerificationInviteVisible - ageVerificationP - ageVerificationStatusVisible - analysisMaxRetries - analysisRetryInterval - analyticsSegment_NewUI_PctOfUsers - analyticsSegment_NewUI_Salt - announcements - availableLanguageCodes - availableLanguages - avatarPerfLimiter - chatboxLogBufferSeconds - clientApiKey - clientBPSCeiling - clientDisconnectTimeout - clientNetDispatchThreadMobile - clientReservedPlayerBPS - clientSentCountAllowance - constants - contactEmail - copyrightEmail - currentTOSVersion - defaultAvatar - defaultStickerSet - devSdkUrl - devSdkVersion - dis-countdown - disableAvatarCopying - disableAvatarGating - disableCommunityLabs - disableCommunityLabsPromotion - disableEmail - disableEventStream - disableFeedbackGating - disableFrontendBuilds - disableGiftDrops - disableHello - disableOculusSubs - disableRegistration - disableSteamNetworking - disableTwoFactorAuth - disableUdon - disableUpgradeAccount - downloadLinkWindows - downloadUrls - dynamicWorldRows - events - forceUseLatestWorld - giftDisplayType - googleApiClientId - homeWorldId - homepageRedirectTarget - hubWorldId - imageHostUrlList - jobsEmail - minSupportedClientBuildNumber - minimumUnityVersionForUploads - moderationEmail - notAllowedToSelectAvatarInPrivateWorldMessage - offlineAnalysis - photonNameserverOverrides - photonPublicKeys - player-url-resolver-sha1 - player-url-resolver-version - publicKey - reportCategories - reportFormUrl - reportOptions - reportReasons - requireAgeVerificationBetaTag - sdkDeveloperFaqUrl - sdkDiscordUrl - sdkNotAllowedToPublishMessage - sdkUnityVersion - stringHostUrlList - supportEmail - supportFormUrl - timeOutWorldId - timekeeping - tutorialWorldId - updateRateMsMaximum - updateRateMsMinimum - updateRateMsNormal - updateRateMsUdonManual - uploadAnalysisPercent - urlList - useReliableUdpForVoice - viveWindowsUrl - websocketMaxFriendsRefreshDelay - websocketQuickReconnectTime - websocketReconnectMaxDelay - whiteListedAssetUrls LicenseAction: title: LicenseAction type: string enum: - have - wear default: have example: have LicenseType: title: LicenseType type: string enum: - avatar - licenseGroup - permission - product default: permission example: permission License: title: License type: object properties: forAction: $ref: '#/components/schemas/LicenseAction' forId: type: string description: Either a AvatarID, LicenseGroupID, PermissionID or ProductID. This depends on the `forType` field. minLength: 1 forName: type: string minLength: 1 forType: $ref: '#/components/schemas/LicenseType' required: - forAction - forId - forName - forType StoreID: title: StoreID type: string example: esto_713b247d-2b5d-41a0-bba3-50db28dc1498 ProductID: title: ProductID type: string example: prod_bfbc2315-247a-44d7-bfea-5237f8d56cb4 ProductType: title: ProductType type: string enum: - listing - role - udon default: udon Product: title: Product type: object properties: archived: type: boolean created: type: string format: date-time description: type: string displayName: type: string groupAccess: type: boolean default: false groupAccessRemove: type: boolean default: false groupId: $ref: '#/components/schemas/GroupID' groupRoleId: $ref: '#/components/schemas/GroupRoleID' id: $ref: '#/components/schemas/ProductID' imageId: $ref: '#/components/schemas/FileID' nullable: true parentListings: type: array items: $ref: '#/components/schemas/ProductID' productType: $ref: '#/components/schemas/ProductType' sellerDisplayName: type: string sellerId: type: string tags: type: array items: $ref: '#/components/schemas/Tag' updated: type: string nullable: true format: date-time useForSubscriberList: type: boolean default: false required: - archived - created - description - displayName - id - imageId - parentListings - productType - sellerDisplayName - sellerId - tags - updated ProductListingType: title: ProductListingType type: string enum: - subscription default: subscription ProductListingVariantID: title: ProductListingVariantID type: string example: listvar_e8658b56-1662-436c-935a-afcf6a7d4fed ProductListingVariant: title: ProductListingVariant type: object properties: effectiveFrom: type: string format: date-time listingVariantId: $ref: '#/components/schemas/ProductListingVariantID' nullable: true nonRefundable: type: boolean quantity: type: integer sellerVariant: type: boolean unitPriceTokens: type: integer required: - listingVariantId - nonRefundable - quantity - sellerVariant - unitPriceTokens ProductListing: title: Listing type: object properties: active: type: boolean buyerRefundable: type: boolean description: type: string displayName: type: string duration: type: integer nullable: true durationType: type: string nullable: true groupIcon: $ref: '#/components/schemas/FileID' nullable: true groupId: $ref: '#/components/schemas/GroupID' groupName: type: string nullable: true hasAvatar: type: boolean hasUdon: type: boolean hydratedProducts: type: array items: $ref: '#/components/schemas/Product' id: $ref: '#/components/schemas/ProductID' imageId: $ref: '#/components/schemas/FileID' nullable: true imageUrl: type: string nullable: true listingType: $ref: '#/components/schemas/ProductListingType' listingVariants: type: array items: $ref: '#/components/schemas/ProductListingVariant' permanent: type: boolean priceTokens: type: integer productIds: type: array items: $ref: '#/components/schemas/ProductID' productType: $ref: '#/components/schemas/ProductType' products: type: array items: type: object description: Either a ProductID or a Product, depending on hydration quantifiable: type: boolean recurrable: type: boolean refundable: type: boolean sellerDisplayName: type: string sellerId: type: string stackable: type: boolean storeIds: type: array items: type: string tags: type: array items: $ref: '#/components/schemas/Tag' required: - active - buyerRefundable - description - displayName - hasAvatar - hasUdon - id - listingType - priceTokens - productIds - productType - products - recurrable - refundable - sellerDisplayName - sellerId - stackable - storeIds StoreShelfID: title: StoreShelfID type: string example: ess_964dd7aa-f881-4ba1-adf7-261e906b9189 StoreShelf: title: StoreShelf type: object properties: id: $ref: '#/components/schemas/StoreShelfID' listingIds: type: array items: $ref: '#/components/schemas/ProductID' listings: type: array items: $ref: '#/components/schemas/ProductListing' shelfDescription: type: string shelfLayout: type: string shelfTitle: type: string updatedAt: type: string format: data-time required: - id - listingIds - shelfDescription - shelfLayout - shelfTitle - updatedAt StoreType: title: StoreType type: string enum: - group - house - world default: group Store: title: Store type: object properties: description: type: string displayName: type: string groupId: $ref: '#/components/schemas/GroupID' description: Only for store type group id: $ref: '#/components/schemas/StoreID' listingIds: type: array description: Only for store type world and group items: $ref: '#/components/schemas/ProductID' listings: type: array description: Only for store type world and group items: $ref: '#/components/schemas/ProductListing' sellerDisplayName: type: string sellerId: $ref: '#/components/schemas/UserID' shelfIds: type: array description: Only for store type house items: $ref: '#/components/schemas/StoreShelfID' shelves: type: array description: Only for store type house items: $ref: '#/components/schemas/StoreShelf' storeId: $ref: '#/components/schemas/StoreID' storeType: $ref: '#/components/schemas/StoreType' tags: type: array items: $ref: '#/components/schemas/Tag' worldId: $ref: '#/components/schemas/WorldID' description: Only for store type world required: - description - displayName - id - sellerDisplayName - sellerId - storeId - storeType - tags StoreView: title: StoreView type: string enum: - all - draft - preview - public - publicPreview default: public FavoriteGroupID: title: FavoriteGroupID type: string example: fvgrp_8a02a44b-dc3a-4a9a-bc77-77fa37996fc7 FavoriteType: title: FavoriteType type: string enum: - avatar - friend - world default: friend FavoriteGroupVisibility: title: FavoriteGroupVisibility type: string enum: - friends - private - public default: private example: private FavoriteGroup: title: FavoriteGroup type: object description: '' properties: displayName: type: string minLength: 1 id: $ref: '#/components/schemas/FavoriteGroupID' name: type: string minLength: 1 ownerDisplayName: type: string minLength: 1 ownerId: $ref: '#/components/schemas/UserID' tags: type: array description: ' ' items: $ref: '#/components/schemas/Tag' type: $ref: '#/components/schemas/FavoriteType' visibility: $ref: '#/components/schemas/FavoriteGroupVisibility' required: - displayName - id - name - ownerDisplayName - ownerId - tags - type - visibility UpdateFavoriteGroupRequest: title: UpdateFavoriteGroupRequest type: object properties: displayName: type: string tags: type: array description: Tags on FavoriteGroups are believed to do nothing. items: $ref: '#/components/schemas/Tag' visibility: $ref: '#/components/schemas/FavoriteGroupVisibility' FavoriteID: title: FavoriteID type: string example: fvrt_9568d189-8776-44a5-a8c8-defc981e44de Favorite: title: Favorite type: object description: '' properties: favoriteId: type: string description: MUST be either AvatarID, UserID or WorldID. id: $ref: '#/components/schemas/FavoriteID' tags: type: array description: ' ' items: $ref: '#/components/schemas/Tag' type: $ref: '#/components/schemas/FavoriteType' required: - favoriteId - id - tags - type AddFavoriteRequest: type: object properties: favoriteId: type: string description: Must be either AvatarID, WorldID or UserID. tags: type: array description: Tags indicate which group this favorite belongs to. Adding multiple groups makes it show up in all. Removing it from one in that case removes it from all. items: $ref: '#/components/schemas/Tag' type: $ref: '#/components/schemas/FavoriteType' required: - favoriteId - tags - type MIMEType: title: MIMEType type: string enum: - application/gzip - application/octet-stream - application/x-avatar - application/x-rsync-delta - application/x-rsync-signature - application/x-world - image/bmp - image/gif - image/jpeg - image/jpg - image/png - image/svg+xml - image/tiff - image/webp default: image/jpeg example: image/jpeg CreateFileRequest: title: CreateFileRequest type: object properties: extension: type: string minLength: 1 mimeType: $ref: '#/components/schemas/MIMEType' name: type: string minLength: 0 tags: type: array description: ' ' items: $ref: '#/components/schemas/Tag' required: - extension - mimeType - name FileStatus: title: FileStatus type: string enum: - complete - none - queued - waiting default: waiting example: complete FileData: title: FileData type: object description: '' properties: category: type: string enum: - multipart - queued - simple default: queued minLength: 1 fileName: type: string minLength: 1 md5: type: string minLength: 0 sizeInBytes: type: integer minimum: 0 status: $ref: '#/components/schemas/FileStatus' uploadId: type: string default: '' minLength: 0 url: type: string minLength: 1 required: - category - fileName - sizeInBytes - status - uploadId - url FileVersion: title: FileVersion type: object description: '' properties: created_at: type: string format: date-time deleted: type: boolean description: Usually only present if `true` default: true delta: $ref: '#/components/schemas/FileData' file: $ref: '#/components/schemas/FileData' signature: $ref: '#/components/schemas/FileData' status: $ref: '#/components/schemas/FileStatus' version: type: integer description: Incremental version counter, can only be increased. default: 0 minimum: 0 required: - created_at - status - version File: title: File type: object description: '' properties: animationStyle: type: string example: bats extension: type: string example: .unitypackage minLength: 1 id: $ref: '#/components/schemas/FileID' maskTag: type: string example: square mimeType: $ref: '#/components/schemas/MIMEType' name: type: string description: '' example: Example File minLength: 0 ownerId: $ref: '#/components/schemas/UserID' tags: type: array description: ' ' items: $ref: '#/components/schemas/Tag' versions: type: array description: ' ' items: $ref: '#/components/schemas/FileVersion' minItems: 1 uniqueItems: true required: - extension - id - mimeType - name - ownerId - tags - versions CreateFileVersionRequest: title: CreateFileVersionRequest type: object properties: fileMd5: type: string minLength: 1 fileSizeInBytes: type: integer signatureMd5: type: string minLength: 1 signatureSizeInBytes: type: integer required: - signatureMd5 - signatureSizeInBytes FinishFileDataUploadRequest: title: FinishFileDataUploadRequest type: object description: '' properties: etags: type: array description: Array of ETags uploaded. items: type: string minItems: 1 uniqueItems: true maxParts: deprecated: true type: string description: Always a zero in string form, despite how many parts uploaded. default: '0' example: '0' maxLength: 1 minLength: 1 nextPartNumber: deprecated: true type: string description: Always a zero in string form, despite how many parts uploaded. default: '0' example: '0' maxLength: 1 minLength: 1 required: - maxParts - nextPartNumber FileUploadURL: title: FileUploadURL type: object description: '' properties: url: type: string description: '' minLength: 1 required: - url FileVersionUploadStatus: title: FileVersionUploadStatus type: object description: '' properties: etags: type: array description: Unknown items: type: object minItems: 0 fileName: type: string example: Avatar-MyAvatar-Un.file_00000000-0000-0000-0000-000000000000.1.unitypackage minLength: 1 maxParts: type: integer example: 1000 minimum: 1 nextPartNumber: type: integer example: 0 minimum: 0 parts: type: array items: type: object minItems: 0 uploadId: type: string example: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx..xxxxxxxxxxxxxxxxxxxxxxx minLength: 1 required: - etags - fileName - maxParts - nextPartNumber - parts - uploadId GroupDiscriminator: title: GroupDiscriminator type: string example: '0000' GroupGalleryID: title: GroupGalleryID type: string example: ggal_a03a4b55-4ca6-4490-9519-40ba6351a233 GroupGallery: title: GroupMember type: object properties: createdAt: type: string format: date-time description: type: string description: Description of the gallery. example: Example Description minLength: 0 id: $ref: '#/components/schemas/GroupGalleryID' membersOnly: type: boolean description: Whether the gallery is members only. default: false example: false name: type: string description: Name of the gallery. example: Example Gallery minLength: 1 roleIdsToAutoApprove: type: array description: ' ' nullable: true items: $ref: '#/components/schemas/GroupRoleID' roleIdsToManage: type: array description: ' ' nullable: true items: $ref: '#/components/schemas/GroupRoleID' roleIdsToSubmit: type: array description: ' ' nullable: true items: $ref: '#/components/schemas/GroupRoleID' roleIdsToView: type: array description: ' ' nullable: true items: $ref: '#/components/schemas/GroupRoleID' updatedAt: type: string format: date-time GroupMemberStatus: type: string enum: - banned - inactive - invited - member - requested - userblocked default: inactive example: member GroupShortCode: title: GroupShortCode type: string example: VRCHAT LimitedGroup: title: LimitedGroup type: object properties: bannerId: type: string nullable: true bannerUrl: type: string nullable: true createdAt: type: string format: date-time description: type: string discriminator: $ref: '#/components/schemas/GroupDiscriminator' galleries: type: array description: ' ' items: $ref: '#/components/schemas/GroupGallery' iconId: type: string nullable: true iconUrl: type: string nullable: true id: $ref: '#/components/schemas/GroupID' isSearchable: type: boolean memberCount: type: integer membershipStatus: $ref: '#/components/schemas/GroupMemberStatus' name: type: string ownerId: $ref: '#/components/schemas/UserID' rules: type: string nullable: true shortCode: $ref: '#/components/schemas/GroupShortCode' tags: type: array description: ' ' items: $ref: '#/components/schemas/Tag' GroupJoinState: title: GroupJoinState type: string enum: - closed - invite - open - request default: open GroupPrivacy: title: GroupPrivacy type: string enum: - default - private default: default GroupRoleTemplate: title: GroupRoleTemplate type: string enum: - default - managedFree - managedInvite - managedRequest default: default CreateGroupRequest: title: CreateGroupRequest type: object properties: bannerId: type: string nullable: true default: null description: type: string maxLength: 250 minLength: 0 iconId: type: string nullable: true default: null joinState: $ref: '#/components/schemas/GroupJoinState' name: type: string maxLength: 64 minLength: 3 privacy: $ref: '#/components/schemas/GroupPrivacy' roleTemplate: $ref: '#/components/schemas/GroupRoleTemplate' shortCode: type: string maxLength: 6 minLength: 3 required: - name - roleTemplate - shortCode GroupMemberID: title: GroupMemberID type: string example: gmem_95cdb3b4-4643-4eb6-bdab-46a4e1e5ce37 GroupPermissions: title: GroupPermissions type: string enum: - '*' - group-announcement-manage - group-audit-view - group-bans-manage - group-calendar-manage - group-data-manage - group-default-role-manage - group-galleries-manage - group-instance-age-gated-create - group-instance-calendar-link - group-instance-join - group-instance-manage - group-instance-moderate - group-instance-open-create - group-instance-plus-create - group-instance-plus-portal - group-instance-plus-portal-unlocked - group-instance-public-create - group-instance-queue-priority - group-instance-restricted-create - group-invites-manage - group-members-manage - group-members-remove - group-members-viewall - group-roles-assign - group-roles-manage x-enum-varnames: - group_all - group_announcement_manage - group_audit_view - group_bans_manage - group_calendar_manage - group_data_manage - group_default_role_manage - group_galleries_manage - group_instance_age_gated_create - group_instance_calendar_link - group_instance_join - group_instance_manage - group_instance_moderate - group_instance_open_create - group_instance_plus_create - group_instance_plus_portal - group_instance_plus_portal_unlocked - group_instance_public_create - group_instance_queue_priority - group_instance_restricted_create - group_invites_manage - group_members_manage - group_members_remove - group_members_viewall - group_roles_assign - group_roles_manage GroupMyMember: title: GroupMyMember type: object properties: acceptedByDisplayName: type: string nullable: true acceptedById: type: string nullable: true bannedAt: type: string nullable: true createdAt: type: string format: date-time groupId: $ref: '#/components/schemas/GroupID' has2FA: type: boolean default: false hasJoinedFromPurchase: type: boolean default: false id: $ref: '#/components/schemas/GroupMemberID' isRepresenting: type: boolean default: false isSubscribedToAnnouncements: type: boolean default: true isSubscribedToEventAnnouncements: type: boolean joinedAt: type: string format: date-time lastPostReadAt: type: string nullable: true format: date-time mRoleIds: type: array items: type: string managerNotes: type: string membershipStatus: type: string example: member permissions: type: array items: $ref: '#/components/schemas/GroupPermissions' roleIds: type: array items: $ref: '#/components/schemas/GroupRoleID' userId: $ref: '#/components/schemas/UserID' visibility: type: string example: visible GroupRole: title: GroupRole type: object properties: createdAt: type: string format: date-time description: type: string groupId: $ref: '#/components/schemas/GroupID' id: $ref: '#/components/schemas/GroupRoleID' isManagementRole: type: boolean default: false isSelfAssignable: type: boolean default: false name: type: string order: type: integer permissions: type: array items: $ref: '#/components/schemas/GroupPermissions' requiresPurchase: type: boolean default: false requiresTwoFactor: type: boolean default: false updatedAt: type: string format: date-time Group: title: Group type: object properties: ageVerificationBetaCode: type: string example: abc1234 ageVerificationBetaSlots: type: number example: 500 ageVerificationSlotsAvailable: type: boolean badges: type: array items: type: string bannerId: type: string nullable: true bannerUrl: type: string nullable: true createdAt: type: string format: date-time description: type: string discriminator: $ref: '#/components/schemas/GroupDiscriminator' galleries: type: array items: $ref: '#/components/schemas/GroupGallery' iconId: type: string nullable: true iconUrl: type: string nullable: true id: $ref: '#/components/schemas/GroupID' isVerified: type: boolean default: false joinState: $ref: '#/components/schemas/GroupJoinState' languages: type: array items: type: string lastPostCreatedAt: type: string nullable: true format: date-time links: type: array items: type: string memberCount: type: integer memberCountSyncedAt: type: string format: date-time membershipStatus: $ref: '#/components/schemas/GroupMemberStatus' myMember: $ref: '#/components/schemas/GroupMyMember' nullable: true name: type: string onlineMemberCount: type: integer ownerId: $ref: '#/components/schemas/UserID' privacy: $ref: '#/components/schemas/GroupPrivacy' roles: type: array description: Only returned if ?includeRoles=true is specified. nullable: true items: $ref: '#/components/schemas/GroupRole' rules: type: string nullable: true shortCode: $ref: '#/components/schemas/GroupShortCode' tags: type: array items: $ref: '#/components/schemas/Tag' transferTargetId: $ref: '#/components/schemas/UserID' nullable: true updatedAt: type: string format: date-time GroupRoleTemplateValues: title: GroupRoleTemplateValues type: object properties: basePermissions: type: array items: $ref: '#/components/schemas/GroupPermissions' description: type: string name: type: string roles: type: object properties: name: type: string description: type: string basePermissions: type: array items: $ref: '#/components/schemas/GroupPermissions' isAddedOnJoin: type: boolean default: false required: - basePermissions - description - name - roles UpdateGroupRequest: title: UpdateGroupRequest type: object properties: bannerId: type: string nullable: true default: null description: type: string maxLength: 250 minLength: 0 iconId: type: string nullable: true default: null joinState: $ref: '#/components/schemas/GroupJoinState' languages: type: array description: 3 letter language code items: type: string maxLength: 3 maxItems: 3 links: type: array items: type: string maxItems: 3 name: type: string maxLength: 64 minLength: 3 rules: type: string shortCode: type: string maxLength: 6 minLength: 3 tags: type: array description: ' ' items: $ref: '#/components/schemas/Tag' GroupAnnouncementID: title: GroupAnnouncementID type: string example: gpos_71a7ff59-112c-4e78-a990-c7cc650776e5 GroupAnnouncement: title: GroupAnnouncement type: object properties: authorId: $ref: '#/components/schemas/UserID' nullable: true createdAt: type: string nullable: true format: date-time groupId: $ref: '#/components/schemas/GroupID' nullable: true id: $ref: '#/components/schemas/GroupAnnouncementID' nullable: true imageId: $ref: '#/components/schemas/FileID' nullable: true imageUrl: type: string nullable: true text: type: string nullable: true title: type: string nullable: true updatedAt: type: string nullable: true format: date-time CreateGroupAnnouncementRequest: title: CreateGroupAnnouncementRequest type: object properties: imageId: $ref: '#/components/schemas/FileID' sendNotification: type: boolean description: Send notification to group members. default: false example: false text: type: string description: Announcement text example: Come join us for the event! minLength: 1 title: type: string description: Announcement title example: Event is starting soon! minLength: 1 required: - favoriteId - title GroupAuditLogID: title: GroupAuditLogID type: string example: gaud_71a7ff59-112c-4e78-a990-c7cc650776e5 GroupAuditLogEntry: title: GroupAuditLogEntry type: object properties: actorDisplayName: type: string actorId: $ref: '#/components/schemas/UserID' created_at: type: string format: date-time data: type: object description: The data associated with the event. The format of this data is dependent on the event type. example: description: new: My exciting new group. It's pretty nifty! old: My exciting new group. It's pretty nifty! joinState: new: request old: closed description: type: string description: A human-readable description of the event. example: Group role updated eventType: type: string description: The type of event that occurred. This is a string that is prefixed with the type of object that the event occurred on. For example, a group role update event would be prefixed with `group.role`. default: group.update example: group.role.update groupId: $ref: '#/components/schemas/GroupID' id: $ref: '#/components/schemas/GroupAuditLogID' targetId: type: string description: Typically a UserID, GroupID, GroupRoleID, or Location, but could be other types of IDs. PaginatedGroupAuditLogEntryList: title: PaginatedGroupAuditLogEntryList type: object properties: hasNext: type: boolean description: Whether there are more results after this page. results: type: array description: ' ' items: $ref: '#/components/schemas/GroupAuditLogEntry' totalCount: type: integer description: The total number of results that the query would return if there were no pagination. GroupMemberLimitedUser: title: GroupMemberLimitedUser type: object description: Only visible via the /groups/:groupId/members endpoint, **not** when fetching a specific user. properties: currentAvatarTags: type: array items: $ref: '#/components/schemas/Tag' currentAvatarThumbnailImageUrl: type: string nullable: true displayName: type: string iconUrl: type: string id: $ref: '#/components/schemas/UserID' profilePicOverride: type: string thumbnailUrl: type: string nullable: true GroupMember: title: GroupMember type: object properties: acceptedByDisplayName: type: string nullable: true acceptedById: type: string nullable: true bannedAt: type: string description: Only visible via the /groups/:groupId/members endpoint, **not** when fetching a specific user. nullable: true format: date-time createdAt: type: string description: Only visible via the /groups/:groupId/members endpoint, **not** when fetching a specific user. nullable: true format: date-time groupId: $ref: '#/components/schemas/GroupID' hasJoinedFromPurchase: type: boolean id: $ref: '#/components/schemas/GroupMemberID' isRepresenting: type: boolean description: Whether the user is representing the group. This makes the group show up above the name tag in-game. default: false example: true isSubscribedToAnnouncements: type: boolean default: false isSubscribedToEventAnnouncements: type: boolean joinedAt: type: string nullable: true format: date-time lastPostReadAt: type: string nullable: true format: date-time mRoleIds: type: array items: $ref: '#/components/schemas/GroupRoleID' managerNotes: type: string description: Only visible via the /groups/:groupId/members endpoint, **not** when fetching a specific user. nullable: true membershipStatus: $ref: '#/components/schemas/GroupMemberStatus' roleIds: type: array items: $ref: '#/components/schemas/GroupRoleID' user: $ref: '#/components/schemas/GroupMemberLimitedUser' nullable: true userId: $ref: '#/components/schemas/UserID' visibility: type: string example: visible BanGroupMemberRequest: title: BanGroupMemberRequest type: object properties: userId: $ref: '#/components/schemas/UserID' required: - userId CreateGroupGalleryRequest: title: CreateGroupGalleryRequest type: object properties: description: type: string description: Description of the gallery. example: Example Description minLength: 0 membersOnly: type: boolean description: Whether the gallery is members only. default: false example: false name: type: string description: Name of the gallery. example: Example Gallery minLength: 1 roleIdsToAutoApprove: type: array description: ' ' nullable: true items: $ref: '#/components/schemas/GroupRoleID' roleIdsToManage: type: array description: ' ' nullable: true items: $ref: '#/components/schemas/GroupRoleID' roleIdsToSubmit: type: array description: ' ' nullable: true items: $ref: '#/components/schemas/GroupRoleID' roleIdsToView: type: array description: ' ' nullable: true items: $ref: '#/components/schemas/GroupRoleID' required: - name GroupGalleryImageID: title: GroupGalleryImageID type: string example: ggim_71a7ff59-112c-4e78-a990-c7cc650776e5 GroupGalleryImage: title: GroupGalleryImage type: object properties: approved: type: boolean default: false example: true approvedAt: type: string format: date-time approvedByUserId: $ref: '#/components/schemas/UserID' createdAt: type: string format: date-time fileId: $ref: '#/components/schemas/FileID' galleryId: $ref: '#/components/schemas/GroupGalleryID' groupId: $ref: '#/components/schemas/GroupID' id: $ref: '#/components/schemas/GroupGalleryImageID' imageUrl: type: string example: https://api.vrchat.cloud/api/1/file/file_ce35d830-e20a-4df0-a6d4-5aaef4508044/1/file format: uri submittedByUserId: $ref: '#/components/schemas/UserID' UpdateGroupGalleryRequest: title: UpdateGroupGalleryRequest type: object properties: description: type: string description: Description of the gallery. example: Example Description minLength: 0 membersOnly: type: boolean description: Whether the gallery is members only. default: false example: false name: type: string description: Name of the gallery. example: Example Gallery minLength: 1 roleIdsToAutoApprove: type: array description: ' ' nullable: true items: $ref: '#/components/schemas/GroupRoleID' roleIdsToManage: type: array description: ' ' nullable: true items: $ref: '#/components/schemas/GroupRoleID' roleIdsToSubmit: type: array description: ' ' nullable: true items: $ref: '#/components/schemas/GroupRoleID' roleIdsToView: type: array description: ' ' nullable: true items: $ref: '#/components/schemas/GroupRoleID' AddGroupGalleryImageRequest: title: AddGroupGalleryImageRequest type: object properties: fileId: $ref: '#/components/schemas/FileID' required: - fileId InstanceID: title: InstanceID type: string description: InstanceID can be "offline" on User profiles if you are not friends with that user and "private" if you are friends and user is in private instance. example: 12345~hidden(usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469)~region(eu)~nonce(27e8414a-59a0-4f3d-af1f-f27557eb49a2) InstanceContentSettings: title: InstanceContentSettings type: object description: Types of dynamic user content permitted in an instance properties: drones: type: boolean default: true emoji: type: boolean default: true pedestals: type: boolean default: true prints: type: boolean default: true props: type: boolean default: true stickers: type: boolean default: true UdonProductId: title: UdonProductId type: string description: A unique ID of a Udon Product example: prod_c1644b5b-3ca4-45b4-97c6-a2a0de70d469 World: title: World type: object description: '' properties: authorId: $ref: '#/components/schemas/UserID' authorName: type: string minLength: 1 capacity: type: integer example: 8 created_at: type: string format: date-time defaultContentSettings: $ref: '#/components/schemas/InstanceContentSettings' description: type: string minLength: 0 favorites: type: integer default: 0 example: 12024 minimum: 0 featured: type: boolean default: false heat: type: integer default: 0 example: 5 minimum: 0 id: $ref: '#/components/schemas/WorldID' imageUrl: type: string minLength: 1 instances: type: array description: Will always be an empty list when unauthenticated. items: type: array items: {} maxItems: 2 minItems: 2 labsPublicationDate: type: string example: none minLength: 1 name: type: string minLength: 1 namespace: type: string occupants: type: integer description: Will always be `0` when unauthenticated. default: 0 example: 47 minimum: 0 organization: type: string default: vrchat minLength: 1 popularity: type: integer default: 0 example: 8 minimum: 0 previewYoutubeId: type: string nullable: true privateOccupants: type: integer description: Will always be `0` when unauthenticated. default: 0 example: 1 minimum: 0 publicOccupants: type: integer description: Will always be `0` when unauthenticated. default: 0 example: 46 minimum: 0 publicationDate: type: string example: none minLength: 1 recommendedCapacity: type: integer example: 4 releaseStatus: $ref: '#/components/schemas/ReleaseStatus' storeId: $ref: '#/components/schemas/StoreID' tags: type: array description: ' ' items: $ref: '#/components/schemas/Tag' thumbnailImageUrl: type: string minLength: 1 udonProducts: type: array items: $ref: '#/components/schemas/UdonProductId' unityPackages: type: array description: Empty if unauthenticated. items: $ref: '#/components/schemas/UnityPackage' updated_at: type: string format: date-time urlList: type: array items: type: string version: type: integer default: 0 example: 68 minimum: 0 visits: type: integer default: 0 example: 9988675 minimum: 0 required: - authorId - authorName - capacity - created_at - description - featured - heat - id - imageUrl - labsPublicationDate - name - organization - popularity - publicationDate - recommendedCapacity - releaseStatus - tags - thumbnailImageUrl - updated_at - version - visits GroupInstance: title: GroupInstance type: object properties: instanceId: $ref: '#/components/schemas/InstanceID' location: $ref: '#/components/schemas/LocationID' memberCount: type: integer example: 6 minimum: 0 world: $ref: '#/components/schemas/World' required: - instanceId - location - memberCount - world CreateGroupInviteRequest: title: CreateGroupInviteRequest type: object properties: confirmOverrideBlock: type: boolean default: true userId: $ref: '#/components/schemas/UserID' required: - userId GroupSearchSort: title: GroupSearchSort type: string enum: - joinedAt:asc - joinedAt:desc example: joinedAt:asc GroupLimitedMember: title: GroupLimitedMember type: object properties: bannedAt: type: string description: Only visible via the /groups/:groupId/members endpoint, **not** when fetching a specific user. nullable: true format: date-time createdAt: type: string description: Only visible via the /groups/:groupId/members endpoint, **not** when fetching a specific user. nullable: true format: date-time groupId: $ref: '#/components/schemas/GroupID' hasJoinedFromPurchase: type: boolean id: $ref: '#/components/schemas/GroupMemberID' isRepresenting: type: boolean description: Whether the user is representing the group. This makes the group show up above the name tag in-game. default: false example: true isSubscribedToAnnouncements: type: boolean default: false isSubscribedToEventAnnouncements: type: boolean joinedAt: type: string nullable: true format: date-time lastPostReadAt: type: string nullable: true format: date-time mRoleIds: type: array items: $ref: '#/components/schemas/GroupRoleID' managerNotes: type: string description: Only visible via the /groups/:groupId/members endpoint, **not** when fetching a specific user. nullable: true membershipStatus: $ref: '#/components/schemas/GroupMemberStatus' roleIds: type: array items: $ref: '#/components/schemas/GroupRoleID' userId: $ref: '#/components/schemas/UserID' visibility: type: string example: visible GroupUserVisibility: title: GroupUserVisibility type: string enum: - friends - hidden - visible example: visible UpdateGroupMemberRequest: title: UpdateGroupMemberRequest type: object properties: isSubscribedToAnnouncements: type: boolean isSubscribedToEventAnnouncements: type: boolean managerNotes: type: string visibility: $ref: '#/components/schemas/GroupUserVisibility' GroupRoleIDList: title: GroupRoleIDList type: array description: ' ' items: $ref: '#/components/schemas/GroupRoleID' GroupPermission: title: GroupPermission type: object description: A permission that can be granted to a role in a group. properties: allowedToAdd: type: boolean description: Whether the user is allowed to add this permission to a role. default: false example: true displayName: type: string description: The display name of the permission. example: Manage Group Data help: type: string description: Human-readable description of the permission. example: Allows role to edit group details (name, description, joinState, initialRoles, etc). isManagementPermission: type: boolean description: Whether this permission is a "management" permission. default: false example: true name: type: string description: The name of the permission. example: group-data-manage NotificationID: title: NotificationID type: string example: not_00000000-0000-0000-0000-000000000000 GroupPostVisibility: title: GroupPostVisibility type: string enum: - group - public example: public GroupPost: title: GroupPost type: object properties: authorId: $ref: '#/components/schemas/UserID' createdAt: type: string format: date-time editorId: $ref: '#/components/schemas/UserID' nullable: true groupId: $ref: '#/components/schemas/GroupID' id: $ref: '#/components/schemas/NotificationID' imageId: $ref: '#/components/schemas/FileID' nullable: true imageUrl: type: string nullable: true roleId: $ref: '#/components/schemas/GroupRoleIDList' text: type: string title: type: string updatedAt: type: string format: date-time visibility: $ref: '#/components/schemas/GroupPostVisibility' CreateGroupPostRequest: title: CreateGroupPostRequest type: object properties: imageId: $ref: '#/components/schemas/FileID' roleIds: $ref: '#/components/schemas/GroupRoleIDList' sendNotification: type: boolean description: Send notification to group members. default: false example: false text: type: string description: Post text example: Come join us for the event! minLength: 1 title: type: string description: Post title example: Event is starting soon! minLength: 1 visibility: $ref: '#/components/schemas/GroupPostVisibility' required: - sendNotification - text - title - visibility GroupJoinRequestAction: title: GroupJoinRequestAction type: string enum: - accept - reject example: accept RespondGroupJoinRequest: title: RespondGroupJoinRequest type: object properties: action: $ref: '#/components/schemas/GroupJoinRequestAction' block: type: boolean description: Whether to block the user from requesting again required: - action CreateGroupRoleRequest: title: CreateGroupRequest type: object properties: description: type: string id: type: string isSelfAssignable: type: boolean default: false name: type: string permissions: type: array items: $ref: '#/components/schemas/GroupPermissions' UpdateGroupRoleRequest: title: UpdateGroupRoleRequest type: object properties: description: type: string isSelfAssignable: type: boolean default: false name: type: string order: type: integer permissions: type: array items: $ref: '#/components/schemas/GroupPermissions' APIHealth: title: APIHealth type: object properties: buildVersionTag: type: string minLength: 1 ok: type: boolean serverName: type: string minLength: 1 required: - buildVersionTag - ok - serverName InfoPushDataClickable: title: InfoPushDataClickable type: object properties: parameters: type: array description: In case of OpenURL, this would contain the link. items: type: string command: type: string enum: - CannedWorldSearch - OpenSafetyMenu - OpenURL - OpenVRCPlusMenu example: OpenURL minLength: 1 required: - command InfoPushDataArticleContent: title: InfoPushDataArticleContent type: object properties: imageUrl: type: string onPressed: $ref: '#/components/schemas/InfoPushDataClickable' text: type: string InfoPushDataArticle: title: InfoPushDataArticle type: object properties: content: $ref: '#/components/schemas/InfoPushDataArticleContent' InfoPushData: title: InfoPushData type: object description: '' properties: article: $ref: '#/components/schemas/InfoPushDataArticle' contentList: $ref: '#/components/schemas/DynamicContentRow' description: type: string imageUrl: type: string minLength: 1 name: type: string onPressed: $ref: '#/components/schemas/InfoPushDataClickable' template: type: string version: type: string example: 2021.3.4 minLength: 1 InfoPush: title: InfoPush type: object description: '' properties: createdAt: type: string format: date-time data: $ref: '#/components/schemas/InfoPushData' endDate: type: string format: date-time hash: type: string description: Unknown usage, MD5 minLength: 1 id: type: string example: launch-beta minLength: 1 isEnabled: type: boolean default: true priority: type: integer releaseStatus: $ref: '#/components/schemas/ReleaseStatus' startDate: type: string description: '' format: date-time tags: type: array description: ' ' items: $ref: '#/components/schemas/Tag' updatedAt: type: string format: date-time required: - createdAt - data - hash - id - isEnabled - priority - releaseStatus - tags - updatedAt GroupAccessType: title: GroupAccessType type: string description: Group access type when the instance type is "group" enum: - members - plus - public default: members example: members InstanceOwnerId: title: InstanceOwnerId type: string description: A groupId if the instance type is "group", null if instance type is public, or a userId otherwise nullable: true example: usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469 InstanceRegion: title: InstanceRegion type: string description: Instance region enum: - eu - jp - unknown - us - use default: us example: us InstanceType: title: InstanceType type: string description: '' enum: - friends - group - hidden - private - public example: hidden CreateInstanceRequest: title: CreateInstanceRequest type: object properties: ageGate: type: boolean default: false canRequestInvite: type: boolean description: Only applies to invite type instances to make them invite+ default: false closedAt: type: string description: The time after which users won't be allowed to join the instance. This doesn't work for public instances. format: date-time contentSettings: $ref: '#/components/schemas/InstanceContentSettings' displayName: type: string nullable: true groupAccessType: $ref: '#/components/schemas/GroupAccessType' hardClose: type: boolean description: Currently unused, but will eventually be a flag to set if the closing of the instance should kick people. default: false instancePersistenceEnabled: type: boolean nullable: true inviteOnly: type: boolean default: false ownerId: $ref: '#/components/schemas/InstanceOwnerId' queueEnabled: type: boolean default: false region: $ref: '#/components/schemas/InstanceRegion' roleIds: type: array description: Group roleIds that are allowed to join if the type is "group" and groupAccessType is "member" items: $ref: '#/components/schemas/GroupRoleID' type: $ref: '#/components/schemas/InstanceType' worldId: $ref: '#/components/schemas/WorldID' required: - region - type - worldId Region: title: Region type: string description: API/Photon region. enum: - eu - jp - unknown - us - use - usw - usx default: us example: eu InstancePlatforms: title: InstancePlatforms type: object additionalProperties: false properties: android: type: integer example: 1 minimum: 0 ios: type: integer example: 1 minimum: 0 standalonewindows: type: integer example: 5 minimum: 0 required: - android - standalonewindows LimitedUserInstance: title: LimitedUserInstance type: object description: User object received when querying your own instance properties: ageVerificationStatus: $ref: '#/components/schemas/AgeVerificationStatus' ageVerified: $ref: '#/components/schemas/AgeVerified' allowAvatarCopying: type: boolean bio: type: string bioLinks: type: array description: ' ' items: type: string currentAvatarImageUrl: $ref: '#/components/schemas/CurrentAvatarImageUrl' currentAvatarTags: type: array items: $ref: '#/components/schemas/Tag' currentAvatarThumbnailImageUrl: $ref: '#/components/schemas/CurrentAvatarThumbnailImageUrl' date_joined: type: string nullable: true format: date-time developerType: $ref: '#/components/schemas/DeveloperType' displayName: type: string friendKey: type: string id: $ref: '#/components/schemas/UserID' imageUrl: type: string isFriend: type: boolean last_activity: type: string nullable: true format: date-time last_mobile: type: string nullable: true format: date-time last_platform: $ref: '#/components/schemas/Platform' platform: $ref: '#/components/schemas/Platform' profilePicOverride: type: string profilePicOverrideThumbnail: type: string pronouns: type: string state: $ref: '#/components/schemas/UserState' status: $ref: '#/components/schemas/UserStatus' statusDescription: type: string tags: type: array items: $ref: '#/components/schemas/Tag' userIcon: type: string required: - ageVerificationStatus - ageVerified - allowAvatarCopying - currentAvatarImageUrl - currentAvatarTags - currentAvatarThumbnailImageUrl - date_joined - developerType - displayName - friendKey - id - isFriend - last_activity - last_mobile - last_platform - pronouns - state - status - statusDescription - tags Instance: title: Instance type: object description: |- * `hidden` field is only present if InstanceType is `hidden` aka "Friends+", and is instance creator. * `friends` field is only present if InstanceType is `friends` aka "Friends", and is instance creator. * `private` field is only present if InstanceType is `private` aka "Invite" or "Invite+", and is instance creator. properties: active: type: boolean default: true example: true ageGate: type: boolean nullable: true canRequestInvite: type: boolean default: true example: true capacity: type: integer example: 8 minimum: 0 clientNumber: deprecated: true type: string description: Always returns "unknown". minLength: 1 closedAt: type: string nullable: true format: date-time contentSettings: $ref: '#/components/schemas/InstanceContentSettings' displayName: type: string nullable: true friends: $ref: '#/components/schemas/UserID' full: type: boolean default: false gameServerVersion: type: integer groupAccessType: $ref: '#/components/schemas/GroupAccessType' hardClose: type: boolean nullable: true hasCapacityForYou: type: boolean hidden: $ref: '#/components/schemas/UserID' id: $ref: '#/components/schemas/InstanceID' instanceId: $ref: '#/components/schemas/InstanceID' instancePersistenceEnabled: type: string nullable: true location: $ref: '#/components/schemas/LocationID' n_users: type: integer example: 6 minimum: 0 name: type: string example: '12345' minLength: 1 nonce: type: string ownerId: $ref: '#/components/schemas/InstanceOwnerId' permanent: type: boolean default: false photonRegion: $ref: '#/components/schemas/Region' platforms: $ref: '#/components/schemas/InstancePlatforms' playerPersistenceEnabled: type: boolean nullable: true private: $ref: '#/components/schemas/UserID' queueEnabled: type: boolean queueSize: type: integer example: 6 minimum: 0 recommendedCapacity: type: integer example: 6 minimum: 0 region: $ref: '#/components/schemas/InstanceRegion' roleRestricted: type: boolean secureName: type: string example: 7eavhhng minLength: 1 shortName: type: string nullable: true example: 02u7yz8j minLength: 1 strict: type: boolean tags: type: array description: 'The tags array on Instances usually contain the language tags of the people in the instance. ' example: - language_eng - language_jpn - show_social_rank items: $ref: '#/components/schemas/Tag' type: $ref: '#/components/schemas/InstanceType' userCount: type: integer example: 6 minimum: 0 users: type: array description: The users field is present on instances created by the requesting user. items: $ref: '#/components/schemas/LimitedUserInstance' world: $ref: '#/components/schemas/World' worldId: $ref: '#/components/schemas/WorldID' required: - active - canRequestInvite - capacity - clientNumber - full - id - instanceId - location - n_users - name - permanent - photonRegion - platforms - queueEnabled - queueSize - recommendedCapacity - region - secureName - strict - tags - type - userCount - world - worldId InstanceShortNameResponse: title: InstanceShortNameResponse type: object properties: secureName: type: string example: 7eavhhng minLength: 1 shortName: type: string nullable: true example: 02u7yz8j minLength: 1 required: - secureName InventoryEquipSlot: title: InventoryEquipSlot type: string enum: - '' - drone - portal default: '' example: drone InventoryItemType: title: InventoryItemType type: string enum: - bundle - droneskin - emoji - portalskin - prop - sticker default: bundle example: prop InventoryFlag: title: InventoryFlag type: string enum: - archivable - cloneable - consumable - equippable - instantiatable - trashable - ugc - unique default: instantiatable example: consumable InventoryDefaultAttributes: title: InventoryDefaultAttributes type: object additionalProperties: type: object properties: defaultValue: type: string validator: type: object properties: type: type: string InventoryItemID: title: InventoryItemID type: string example: inv_10bce5b0-2d2b-44e0-900d-db6534615162 InventoryTemplateID: title: InventoryTemplateID type: string example: invt_b80ce14b-038b-4f56-b970-d232771d62e3 PropID: title: PropID type: string example: prop_829ba6f6-b837-49d9-b9a9-056b82103b58 InventoryMetadata: title: InventoryMetadata type: object properties: animated: type: boolean animationStyle: type: string assetBundleId: type: string fileId: type: string imageUrl: type: string inventoryItemsToInstantiate: type: array description: Only in bundles items: $ref: '#/components/schemas/InventoryTemplateID' maskTag: type: string propId: $ref: '#/components/schemas/PropID' InventoryUserAttributes: title: InventoryUserAttributes type: object properties: primaryColor: type: string secondaryColor: type: string trailColor: type: string InventoryItem: title: InventoryItem type: object properties: collections: type: array items: type: string created_at: type: string example: '2025-06-13T05:00:45.455Z' format: date-time defaultAttributes: $ref: '#/components/schemas/InventoryDefaultAttributes' description: type: string equipSlot: $ref: '#/components/schemas/InventoryEquipSlot' equipSlots: type: array items: $ref: '#/components/schemas/InventoryEquipSlot' expiryDate: type: string nullable: true example: '2025-06-13T05:00:45.455Z' format: date-time flags: type: array items: type: string holderId: $ref: '#/components/schemas/UserID' id: $ref: '#/components/schemas/InventoryItemID' imageUrl: type: string isArchived: type: boolean isSeen: type: boolean itemType: $ref: '#/components/schemas/InventoryItemType' itemTypeLabel: type: string metadata: $ref: '#/components/schemas/InventoryMetadata' name: type: string tags: type: array items: $ref: '#/components/schemas/Tag' templateId: $ref: '#/components/schemas/InventoryTemplateID' template_created_at: type: string example: '2025-06-09T16:31:40.785Z' format: date-time template_updated_at: type: string example: '2025-06-25T00:34:14.578Z' format: date-time updated_at: type: string example: '2025-06-25T00:34:15.965Z' format: date-time userAttributes: $ref: '#/components/schemas/InventoryUserAttributes' validateUserAttributes: type: boolean required: - collections - created_at - defaultAttributes - description - expiryDate - flags - holderId - id - imageUrl - isArchived - isSeen - itemType - itemTypeLabel - metadata - name - tags - templateId - template_created_at - template_updated_at - updated_at - userAttributes - validateUserAttributes Inventory: title: Inventory type: object properties: data: type: array items: $ref: '#/components/schemas/InventoryItem' totalCount: type: integer required: - data - totalCount ShareInventoryItemDirectRequest: title: ShareInventoryItemDirectRequest type: object properties: itemId: $ref: '#/components/schemas/InventoryItemID' users: type: array items: $ref: '#/components/schemas/UserID' required: - itemId - users OkStatus: title: OkStatus type: object description: A status response consisting of solely a string description of whether the result of an operation was ok. properties: ok: type: string description: The actual status itself default: maybe? required: - ok InventorySpawn: title: InventorySpawn type: object properties: token: type: string version: type: integer required: - token - version InventoryDropID: title: InventoryDropID type: string example: invd_ee3a8f7f-1454-4748-a935-99bf9865f33d InventoryNotificationDetails: title: InventoryNotificationDetails type: object properties: body: type: string imageUrl: type: string title: type: string required: - body - imageUrl - title InventoryDrop: title: InventoryDrop type: object properties: authorId: $ref: '#/components/schemas/UserID' created_at: type: string example: '2025-06-10T20:37:31.837Z' format: date-time dropExpiryDate: type: string nullable: true format: date-time endDropDate: type: string example: '2184-07-24T00:00:00.000Z' format: date-time id: $ref: '#/components/schemas/InventoryDropID' name: type: string notificationDetails: $ref: '#/components/schemas/InventoryNotificationDetails' startDropDate: type: string example: '2025-06-09T10:00:00.000Z' format: date-time status: type: string example: active tags: type: array items: $ref: '#/components/schemas/Tag' targetGroup: type: string example: everyone templateIds: type: array items: $ref: '#/components/schemas/InventoryTemplateID' updated_at: type: string example: '2025-06-10T20:37:31.837Z' format: date-time required: - authorId - created_at - dropExpiryDate - endDropDate - id - name - notificationDetails - startDropDate - status - tags - targetGroup - templateIds - updated_at InventoryTemplate: title: InventoryTemplate type: object properties: authorId: $ref: '#/components/schemas/UserID' collections: type: array items: type: string created_at: type: string example: '2025-06-12T20:21:15.056Z' format: date-time description: type: string flags: type: array items: type: string id: $ref: '#/components/schemas/InventoryTemplateID' imageUrl: type: string itemType: $ref: '#/components/schemas/InventoryItemType' itemTypeLabel: type: string metadata: $ref: '#/components/schemas/InventoryMetadata' name: type: string notificationDetails: $ref: '#/components/schemas/InventoryNotificationDetails' status: type: string example: live tags: type: array items: $ref: '#/components/schemas/Tag' updated_at: type: string example: '2025-06-10T20:37:31.837Z' format: date-time required: - authorId - collections - created_at - description - flags - id - imageUrl - itemType - itemTypeLabel - name - status - tags - updated_at UpdateInventoryItemRequest: title: UpdateInventoryItemRequest type: object properties: isArchived: type: boolean isSeen: type: boolean userAttributes: $ref: '#/components/schemas/InventoryUserAttributes' SuccessFlag: title: SuccessFlag type: object properties: success: type: boolean required: - success SentNotification: title: SentNotification type: object description: '' properties: created_at: type: string format: date-time details: type: object example: OneOf: - {} - NotificationDetailInvite - NotificationDetailInviteResponse - NotificationDetailRequestInvite - NotificationDetailRequestInviteResponse - NotificationDetailVoteToKick id: type: string minLength: 1 message: type: string description: '' example: This is a generated invite to VRChat Hub receiverUserId: $ref: '#/components/schemas/UserID' senderUserId: $ref: '#/components/schemas/UserID' senderUsername: deprecated: true type: string description: '-| **DEPRECATED:** VRChat API no longer return usernames of other users. [See issue by Tupper for more information](https://github.com/pypy-vrc/VRCX/issues/429).' minLength: 1 type: $ref: '#/components/schemas/NotificationType' required: - created_at - details - id - message - receiverUserId - senderUserId - type InviteResponse: title: InviteResponse type: object properties: responseSlot: type: integer maximum: 11 minimum: 0 required: - responseSlot InviteRequest: title: InviteRequest type: object properties: instanceId: $ref: '#/components/schemas/InstanceID' messageSlot: type: integer maximum: 11 minimum: 0 required: - instanceId Jam: title: Jam type: object description: '' properties: description: type: string minLength: 1 id: type: string example: jam_0b7e3f6d-4647-4648-b2a1-1431e76906d9 minLength: 1 isVisible: type: boolean moreInfo: type: string minLength: 1 state: type: string description: |- One of: - submissions_open - closed minLength: 1 stateChangeDates: type: object properties: closed: type: string nullable: true format: date-time submissionsClosed: type: string nullable: true format: date-time submissionsOpened: type: string nullable: true format: date-time winnersSelected: type: string nullable: true example: null format: date-time submissionContentGateDate: type: string nullable: true format: date-time submissionContentGated: type: boolean title: type: string minLength: 1 updated_at: type: string format: date-time required: - description - id - isVisible - moreInfo - state - stateChangeDates - submissionContentGateDate - submissionContentGated - title - type - updated_at Submission: title: Submission type: object description: '' properties: contentId: type: string description: Either world ID or avatar ID minLength: 1 created_at: type: string format: date-time description: type: string id: type: string example: jsub_f01f44fa-89fa-443c-ab4c-7fed9245970f minLength: 1 jamId: type: string example: jam_0b7e3f6d-4647-4648-b2a1-1431e76906d9 minLength: 1 ratingScore: type: integer minimum: 0 submitterId: $ref: '#/components/schemas/UserID' required: - contentId - created_at - description - id - jamId - ratingsScore - submitterId LicenseGroup: title: LicenseGroup type: object description: '' properties: description: type: string id: $ref: '#/components/schemas/LicenseGroupID' licenses: type: array items: $ref: '#/components/schemas/License' name: type: string minLength: 1 required: - description - id - licenses - name example: id: lgrp_608513da-b213-4e15-80af-bd88c27f0979 name: vrcplus description: VRC+ benefits licenses: - forAction: have forId: prms_1d9549db-d30a-48f3-a6b8-6741ce5a4283 forName: permission-user-icons forType: permission - forAction: have forId: prms_76f33deb-dd5d-46b7-b79d-e1f8f0a9a1e0 forName: permission-supporter-tags forType: permission - forAction: have forId: prms_0d9549db-d30a-48f3-a6b8-6741ce5a4283 forName: permission-invite-photos forType: permission - forAction: have forId: prms_dc02c512-4c03-479c-8c6a-d9329c023baf forName: permission-user-gallery forType: permission - forAction: have forId: prms_153ac0b7-c2dd-43f9-96e3-c61fd2e85509 forName: permission-profile-pic-override forType: permission InviteMessageType: title: InviteMessageType type: string description: '' enum: - message - request - requestResponse - response default: message InviteMessageID: title: InviteMessageID type: string example: invm_24a1c14d-5e24-48e5-90e3-c3f712420ffa InviteMessage: title: InviteMessage type: object description: '' properties: canBeUpdated: type: boolean default: true id: $ref: '#/components/schemas/InviteMessageID' message: type: string minLength: 1 messageType: $ref: '#/components/schemas/InviteMessageType' remainingCooldownMinutes: type: integer description: Changes to 60 when updated, although probably server-side configurable. default: 0 minimum: 0 slot: type: integer maximum: 11 minimum: 0 updatedAt: type: string format: date-time required: - canBeUpdated - id - message - messageType - remainingCooldownMinutes - slot - updatedAt UpdateInviteMessageRequest: title: UpdateInviteMessageRequest type: object properties: message: type: string required: - message PrintID: title: PrintID type: string example: prnt_0a0aa0a0-85ea-42eb-b2f7-4840d7f341fa Print: title: Print type: object description: Info about a print properties: authorId: $ref: '#/components/schemas/UserID' authorName: type: string createdAt: type: string format: date-time files: type: object properties: fileId: $ref: '#/components/schemas/FileID' image: type: string description: Link to file, e.g. https://api.vrchat.cloud/api/1/file/file_66fe782d-f2bd-4462-9761-1d766d7b2b26/1/file id: $ref: '#/components/schemas/PrintID' note: type: string ownerId: $ref: '#/components/schemas/UserID' timestamp: type: string format: date-time worldId: $ref: '#/components/schemas/WorldID' worldName: type: string required: - authorId - authorName - createdAt - files - id - note - timestamp - worldId - worldName PropUnityPackage: title: PropUnityPackage type: object description: '' properties: assetUrl: type: string example: https://api.vrchat.cloud/api/1/file/file_c991c050-8b43-4046-8182-24d068524ac5/24/file assetVersion: type: integer example: 4 minimum: 0 platform: $ref: '#/components/schemas/Platform' propSignature: type: string unityVersion: type: string default: 2022.3.22f1 example: 2022.3.22f1 minLength: 1 variant: type: string required: - assetUrl - assetVersion - platform - propSignature - unityVersion - variant Prop: title: Prop type: object description: '' properties: _created_at: type: string format: date-time _updated_at: type: string format: date-time authorId: $ref: '#/components/schemas/UserID' authorName: type: string description: type: string id: $ref: '#/components/schemas/PropID' imageUrl: type: string maxCountPerUser: type: integer default: 1 name: type: string releaseStatus: $ref: '#/components/schemas/ReleaseStatus' spawnType: type: integer default: 0 tags: type: array items: $ref: '#/components/schemas/Tag' thumbnailImageUrl: type: string unityPackageUrl: type: string nullable: true unityPackages: type: array items: $ref: '#/components/schemas/PropUnityPackage' minItems: 1 uniqueItems: true worldPlacementMask: type: integer default: 1 required: - _created_at - _updated_at - authorId - authorName - description - id - imageUrl - maxCountPerUser - name - releaseStatus - spawnType - tags - thumbnailImageUrl - unityPackageUrl - unityPackages - worldPlacementMask RequestInviteRequest: title: RequestInviteRequest type: object properties: requestSlot: type: integer maximum: 11 minimum: 0 required: - instanceId TiliaStatus: title: TiliaStatus type: object description: '' properties: economyOnline: type: boolean economyState: type: integer plannedOfflineWindowEnd: type: string format: date-time plannedOfflineWindowStart: type: string format: date-time required: - economyOnline TokenBundle: title: TokenBundle type: object properties: amount: type: integer description: price of the bundle appleProductId: type: string description: type: string googleProductId: type: string id: type: string imageUrl: type: string description: direct url to image oculusSku: type: string steamItemId: type: string tokens: type: integer description: number of tokens received required: - amount - appleProductId - description - id - imageUrl - oculusSku - steamItemId - tokens Balance: title: Balance type: object description: '' properties: balance: type: integer default: 0 noTransactions: type: boolean tiliaResponse: type: boolean required: - balance EconomyAccount: title: EconomyAccount type: object properties: accountActivatedOn: type: string nullable: true format: date-time accountId: type: string nullable: true blocked: type: boolean canSpend: type: boolean source: type: string userId: $ref: '#/components/schemas/UserID' required: - accountActivatedOn - accountId - blocked - canSpend - source - userId FriendStatus: title: FriendStatus type: object properties: incomingRequest: type: boolean default: false isFriend: type: boolean default: false outgoingRequest: type: boolean default: false required: - incomingRequest - isFriend - outgoingRequest TiliaTOS: title: TiliaTOS type: object description: '' properties: signed_tos: type: boolean required: - signed_tos UpdateTiliaTOSRequest: title: UpdateTiliaTOSRequest type: object properties: accepted: type: boolean required: - accepted UserNoteID: title: UserNoteID type: string example: unt_e9074848-d107-4019-b4aa-bbd19e67660d UserNote: title: UserNote type: object properties: createdAt: type: string format: date-time id: $ref: '#/components/schemas/UserNoteID' note: type: string targetUser: type: object properties: id: $ref: '#/components/schemas/UserNoteID' currentAvatarTags: type: array items: $ref: '#/components/schemas/Tag' currentAvatarThumbnailImageUrl: $ref: '#/components/schemas/CurrentAvatarThumbnailImageUrl' displayName: type: string profilePicOverride: type: string nullable: true userIcon: type: string targetUserId: $ref: '#/components/schemas/UserID' userId: $ref: '#/components/schemas/UserID' required: - createdAt - id - note - targetUserId - userId UpdateUserNoteRequest: title: UpdateUserNoteRequest type: object properties: note: type: string targetUserId: $ref: '#/components/schemas/UserID' required: - note - targetUserId LimitedUserSearch: title: LimitedUserSearch type: object description: User object received when searching properties: bio: type: string bioLinks: type: array description: ' ' items: type: string currentAvatarImageUrl: $ref: '#/components/schemas/CurrentAvatarImageUrl' currentAvatarTags: type: array items: $ref: '#/components/schemas/Tag' currentAvatarThumbnailImageUrl: $ref: '#/components/schemas/CurrentAvatarThumbnailImageUrl' developerType: $ref: '#/components/schemas/DeveloperType' displayName: type: string id: $ref: '#/components/schemas/UserID' isFriend: type: boolean last_platform: $ref: '#/components/schemas/Platform' profilePicOverride: type: string pronouns: type: string status: $ref: '#/components/schemas/UserStatus' statusDescription: type: string tags: type: array description: <- Always empty. items: $ref: '#/components/schemas/Tag' userIcon: type: string required: - currentAvatarImageUrl - currentAvatarTags - currentAvatarThumbnailImageUrl - developerType - displayName - id - isFriend - last_platform - status - statusDescription - tags User: title: User type: object properties: ageVerificationStatus: $ref: '#/components/schemas/AgeVerificationStatus' ageVerified: $ref: '#/components/schemas/AgeVerified' allowAvatarCopying: type: boolean default: true badges: type: array description: ' ' items: $ref: '#/components/schemas/Badge' bio: type: string maxLength: 512 minLength: 0 bioLinks: type: array items: type: string currentAvatarImageUrl: $ref: '#/components/schemas/CurrentAvatarImageUrl' currentAvatarTags: type: array items: $ref: '#/components/schemas/Tag' currentAvatarThumbnailImageUrl: $ref: '#/components/schemas/CurrentAvatarThumbnailImageUrl' date_joined: type: string format: date developerType: $ref: '#/components/schemas/DeveloperType' displayName: type: string description: A users visual display name. This is what shows up in-game, and can different from their `username`. Changing display name is restricted to a cooldown period. friendKey: type: string friendRequestStatus: type: string id: $ref: '#/components/schemas/UserID' instanceId: $ref: '#/components/schemas/InstanceID' isFriend: type: boolean description: Either their `friendKey`, or empty string if you are not friends. Unknown usage. last_activity: type: string description: Either a date-time or empty string. last_login: type: string description: Either a date-time or empty string. last_mobile: type: string nullable: true last_platform: $ref: '#/components/schemas/Platform' location: $ref: '#/components/schemas/LocationID' note: type: string platform: type: string profilePicOverride: type: string profilePicOverrideThumbnail: type: string pronouns: type: string state: $ref: '#/components/schemas/UserState' status: $ref: '#/components/schemas/UserStatus' statusDescription: type: string tags: type: array description: ' ' items: $ref: '#/components/schemas/Tag' travelingToInstance: type: string travelingToLocation: type: string travelingToWorld: type: string userIcon: type: string username: deprecated: true type: string description: |- -| A users unique name, used during login. This is different from `displayName` which is what shows up in-game. A users `username` can never be changed.' **DEPRECATED:** VRChat API no longer return usernames of other users. [See issue by Tupper for more information](https://github.com/pypy-vrc/VRCX/issues/429). worldId: $ref: '#/components/schemas/WorldID' required: - ageVerificationStatus - ageVerified - allowAvatarCopying - bio - bioLinks - currentAvatarImageUrl - currentAvatarTags - currentAvatarThumbnailImageUrl - date_joined - developerType - displayName - friendKey - id - isFriend - last_activity - last_login - last_platform - profilePicOverride - profilePicOverrideThumbnail - pronouns - state - status - statusDescription - tags - userIcon UpdateUserRequest: title: UpdateUserRequest type: object properties: acceptedTOSVersion: type: integer bio: type: string minLength: 0 bioLinks: type: array items: type: string birthday: type: string format: date contentFilters: type: array description: These tags begin with `content_` and control content gating items: $ref: '#/components/schemas/Tag' currentPassword: type: string displayName: type: string description: MUST specify currentPassword as well to change display name email: type: string isBoopingEnabled: type: boolean password: type: string description: MUST specify currentPassword as well to change password pronouns: type: string maxLength: 32 minLength: 0 revertDisplayName: type: boolean description: MUST specify currentPassword as well to revert display name status: $ref: '#/components/schemas/UserStatus' statusDescription: type: string tags: type: array description: ' ' items: $ref: '#/components/schemas/Tag' unsubscribe: type: boolean userIcon: type: string description: MUST be a valid VRChat /file/ url. example: https://api.vrchat.cloud/api/1/file/file_76dc2964-0ce8-41df-b2e7-8edf994fee31/1 minLength: 0 ChangeUserTagsRequest: title: ChangeUserTagsRequest type: object properties: tags: type: array description: The tags being added or removed. items: $ref: '#/components/schemas/Tag' required: - tags UpdateUserBadgeRequest: title: UpdateUserBadgeRequest type: object properties: hidden: type: boolean showcased: type: boolean UserCreditsEligible: title: UserCreditsEligible type: object properties: eligible: type: boolean reason: type: string required: - eligible FeedbackID: title: FeedbackID type: string example: feedback_8cffb23a-f961-444e-b496-0196d1c90adb Feedback: title: Feedback type: object properties: commenterId: $ref: '#/components/schemas/UserID' commenterName: type: string contentAuthorId: $ref: '#/components/schemas/UserID' nullable: true contentAuthorName: type: string nullable: true contentId: type: string contentName: type: string contentType: type: string contentVersion: type: integer nullable: true description: type: string nullable: true id: $ref: '#/components/schemas/FeedbackID' reason: type: string tags: type: array items: $ref: '#/components/schemas/Tag' type: type: string required: - commenterId - commenterName - contentAuthorId - contentAuthorName - contentId - contentType - contentVersion - id - reason - tags - type LimitedUserGroups: title: LimitedUserGroups type: object properties: bannerId: type: string nullable: true bannerUrl: type: string nullable: true description: type: string discriminator: $ref: '#/components/schemas/GroupDiscriminator' groupId: $ref: '#/components/schemas/GroupID' iconId: type: string nullable: true iconUrl: type: string nullable: true id: $ref: '#/components/schemas/GroupMemberID' isRepresenting: type: boolean lastPostCreatedAt: type: string nullable: true format: date-time lastPostReadAt: type: string nullable: true format: date-time memberCount: type: integer memberVisibility: type: string mutualGroup: type: boolean name: type: string ownerId: $ref: '#/components/schemas/UserID' privacy: type: string shortCode: $ref: '#/components/schemas/GroupShortCode' representedGroup: title: RepresentedGroup type: object properties: bannerId: type: string nullable: true bannerUrl: type: string nullable: true description: type: string discriminator: $ref: '#/components/schemas/GroupDiscriminator' groupId: $ref: '#/components/schemas/GroupID' iconId: type: string nullable: true iconUrl: type: string nullable: true isRepresenting: type: boolean memberCount: type: integer memberVisibility: $ref: '#/components/schemas/GroupUserVisibility' name: type: string ownerId: $ref: '#/components/schemas/UserID' privacy: $ref: '#/components/schemas/GroupPrivacy' shortCode: $ref: '#/components/schemas/GroupShortCode' UserSubscriptionEligible: title: UserSubscriptionEligible type: object properties: activeCancelledSubscription: type: boolean giftEligible: type: boolean nonExtendVendorWillLoseGiftTime: type: boolean purchaseEligible: type: boolean subscriptionEligible: type: boolean subscriptionOnAltAccount: type: boolean required: - activeCancelledSubscription - giftEligible - nonExtendVendorWillLoseGiftTime - purchaseEligible - subscriptionEligible - subscriptionOnAltAccount LimitedUnityPackage: title: LimitedUnityPackage type: object description: '' properties: created_at: type: string nullable: true format: date-time platform: $ref: '#/components/schemas/Platform' unityVersion: type: string example: 2022.3.6f1 minLength: 1 required: - created_at - platform - unityVersion LimitedWorld: title: LimitedWorld type: object description: '' properties: authorId: $ref: '#/components/schemas/UserID' authorName: type: string minLength: 1 capacity: type: integer example: 8 created_at: type: string format: date-time defaultContentSettings: $ref: '#/components/schemas/InstanceContentSettings' favorites: type: integer default: 0 example: 12024 minimum: 0 heat: type: integer default: 0 example: 5 minimum: 0 id: $ref: '#/components/schemas/WorldID' imageUrl: type: string minLength: 1 labsPublicationDate: type: string example: none minLength: 1 name: type: string minLength: 1 occupants: type: integer default: 0 example: 47 minimum: 0 organization: type: string default: vrchat minLength: 1 popularity: type: integer default: 0 example: 8 minimum: 0 previewYoutubeId: type: string nullable: true publicationDate: type: string example: none minLength: 1 recommendedCapacity: type: integer example: 16 releaseStatus: $ref: '#/components/schemas/ReleaseStatus' storeId: $ref: '#/components/schemas/StoreID' tags: type: array description: ' ' items: $ref: '#/components/schemas/Tag' thumbnailImageUrl: type: string minLength: 1 udonProducts: type: array items: $ref: '#/components/schemas/UdonProductId' unityPackages: type: array description: ' ' items: $ref: '#/components/schemas/LimitedUnityPackage' minItems: 1 updated_at: type: string format: date-time visits: type: integer default: 0 example: 9988675 minimum: 0 required: - authorId - authorName - capacity - created_at - favorites - heat - id - imageUrl - labsPublicationDate - name - occupants - organization - popularity - publicationDate - releaseStatus - tags - thumbnailImageUrl - unityPackages - updated_at CreateWorldRequest: title: CreateWorldRequest type: object properties: assetUrl: type: string minLength: 1 assetVersion: type: integer minimum: 0 authorId: $ref: '#/components/schemas/UserID' authorName: type: string minLength: 1 capacity: type: integer example: 8 maximum: 40 minimum: 0 description: type: string id: $ref: '#/components/schemas/WorldID' imageUrl: type: string minLength: 1 name: type: string minLength: 1 platform: $ref: '#/components/schemas/Platform' releaseStatus: $ref: '#/components/schemas/ReleaseStatus' tags: type: array description: ' ' items: $ref: '#/components/schemas/Tag' unityPackageUrl: type: string minLength: 1 unityVersion: type: string default: 5.3.4p1 example: 2022.3.6f1 minLength: 1 required: - assetUrl - imageUrl - name FavoritedWorld: title: FavoritedWorld type: object description: '' properties: authorId: $ref: '#/components/schemas/UserID' authorName: type: string minLength: 1 capacity: type: integer example: 8 created_at: type: string format: date-time defaultContentSettings: $ref: '#/components/schemas/InstanceContentSettings' description: type: string minLength: 1 favoriteGroup: type: string minLength: 1 favoriteId: $ref: '#/components/schemas/FavoriteID' favorites: type: integer default: 0 example: 12024 minimum: 0 featured: type: boolean default: false heat: type: integer default: 0 example: 5 minimum: 0 id: $ref: '#/components/schemas/WorldID' imageUrl: type: string minLength: 1 labsPublicationDate: type: string example: none minLength: 1 name: type: string minLength: 1 occupants: type: integer default: 0 example: 47 minimum: 0 organization: type: string default: vrchat minLength: 1 popularity: type: integer default: 0 example: 8 minimum: 0 previewYoutubeId: type: string nullable: true publicationDate: type: string example: none minLength: 1 recommendedCapacity: type: integer example: 16 releaseStatus: $ref: '#/components/schemas/ReleaseStatus' tags: type: array description: ' ' items: $ref: '#/components/schemas/Tag' thumbnailImageUrl: type: string minLength: 1 udonProducts: type: array items: $ref: '#/components/schemas/UdonProductId' unityPackages: type: array description: ' ' items: $ref: '#/components/schemas/UnityPackage' minItems: 1 updated_at: type: string format: date-time urlList: type: array items: type: string version: type: integer minimum: 1 visits: type: integer default: 0 example: 9988675 minimum: 0 required: - authorName - capacity - created_at - description - favoriteGroup - favoriteId - favorites - featured - heat - id - imageUrl - labsPublicationDate - name - occupants - organization - popularity - publicationDate - releaseStatus - tags - thumbnailImageUrl - unityPackages - updated_at - urlList - version UpdateWorldRequest: title: UpdateWorldRequest type: object properties: assetUrl: type: string minLength: 1 assetVersion: type: string minLength: 1 authorId: $ref: '#/components/schemas/UserID' authorName: type: string minLength: 1 capacity: type: integer example: 8 maximum: 40 minimum: 0 description: type: string imageUrl: type: string minLength: 1 name: type: string minLength: 1 platform: $ref: '#/components/schemas/Platform' releaseStatus: $ref: '#/components/schemas/ReleaseStatus' tags: type: array description: ' ' items: $ref: '#/components/schemas/Tag' unityPackageUrl: type: string minLength: 1 unityVersion: type: string default: 5.3.4p1 example: 2022.3.6f1 minLength: 1 WorldMetadata: title: WorldMetadata type: object additionalProperties: false properties: id: $ref: '#/components/schemas/WorldID' metadata: type: object required: - id - metadata WorldPublishStatus: title: WorldPublishStatus type: object additionalProperties: false properties: canPublish: type: boolean default: true required: - canPublish NotificationDetailInvite: title: NotificationDetailInvite type: object properties: inviteMessage: type: string worldId: $ref: '#/components/schemas/LocationID' worldName: type: string required: - worldId - worldName NotificationDetailInviteResponse: title: NotificationDetailInviteResponse type: object properties: inResponseTo: $ref: '#/components/schemas/NotificationID' responseMessage: type: string required: - inResponseTo - responseMessage NotificationDetailRequestInvite: title: NotificationDetailRequestInvite type: object properties: platform: $ref: '#/components/schemas/Platform' description: 'TODO: Does this still exist?' requestMessage: type: string description: Used when using InviteMessage Slot. NotificationDetailRequestInviteResponse: title: NotificationDetailRequestInviteResponse type: object properties: inResponseTo: $ref: '#/components/schemas/NotificationID' requestMessage: type: string description: Used when using InviteMessage Slot. required: - inResponseTo NotificationDetailVoteToKick: title: NotificationDetailVoteToKick type: object properties: initiatorUserId: $ref: '#/components/schemas/UserID' userToKickId: $ref: '#/components/schemas/UserID' required: - initiatorUserId - userToKickId securitySchemes: authCookie: name: auth type: apiKey description: Auth Token via Cookie in: cookie authHeader: type: http description: Auth token via Header scheme: basic twoFactorAuthCookie: name: twoFactorAuth type: apiKey description: 2FA device remembrance via Cookie in: cookie responses: TransactionListResponse: description: Returns a list of Transaction objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/Transaction' MissingCredentialsError: description: Error response due to missing auth cookie. content: application/json: examples: Missing Credentials Example: value: error: message: '"Missing Credentials"' status_code: 401 schema: $ref: '#/components/schemas/Error' TransactionResponse: description: Returns a single Transaction object. content: application/json: schema: $ref: '#/components/schemas/Transaction' AdminAssetBundleResponse: description: Returns a single AdminAssetBundle object. content: application/json: schema: $ref: '#/components/schemas/AdminAssetBundle' FileAnalysisResponse: description: Returns a single FileAnalysis object. content: application/json: schema: $ref: '#/components/schemas/FileAnalysis' AnalysisNotYetAvailableError: description: Error response when requesting file Analysis that is not yet available. content: application/json: examples: Analysis Not Yet Available Error: value: error: message: Analysis not yet available status_code: 202 schema: $ref: '#/components/schemas/Error' FileNotFoundError: description: Error response when trying to show information about a non-existent file. content: application/json: examples: 404 File Not Found: value: error: message: File 'file_ce35d830-e20a-4df0-a6d4-5aaef4508044' not found status_code: 404 schema: $ref: '#/components/schemas/Error' VerifyAuthTokenResponse: description: Returns wether a provided auth token is valid or not. content: application/json: schema: $ref: '#/components/schemas/VerifyAuthTokenResult' ConfirmEmailResponse: description: OK UserExistsResponse: description: Returns a response if a user exists or not. content: application/json: schema: $ref: '#/components/schemas/UserExists' MissingParameterError: description: Error response when missing at least 1 of the required parameters. content: application/json: examples: 400 At Least One Parameter Required: value: error: message: '"username, email, or displayName required"' status_code: 400 schema: $ref: '#/components/schemas/Error' PermissionListResponse: description: Returns a list of Permission objects. content: application/json: examples: Standard Permissions Inherited By VRC+: value: - id: prms_fe07c8a7-a4ca-4eda-97e5-e241040ef6f8 name: permission-trust-boost ownerDisplayName: Arctor ownerId: usr_17f19d1e-fd48-493b-a8ad-807a3d8bdd1b - id: prms_804ba021-9f47-4e25-9847-1f42fdb2e6ff name: permission-extra-favorites-avatar-groups data: maxFavoriteGroups: avatar: 4 maxFavoritesPerGroup: avatar: 25 ownerDisplayName: Arctor ownerId: usr_17f19d1e-fd48-493b-a8ad-807a3d8bdd1b - id: prms_ac88a3e0-c236-47c7-9b47-d795551b7520 name: permission-early-adopter-tags data: tags: - system_early_adopter ownerDisplayName: Arctor ownerId: usr_17f19d1e-fd48-493b-a8ad-807a3d8bdd1b - id: prms_76f33deb-dd5d-46b7-b79d-e1f8f0a9a1e0 name: permission-supporter-tags data: tags: - system_supporter ownerDisplayName: Arctor ownerId: usr_17f19d1e-fd48-493b-a8ad-807a3d8bdd1b - id: prms_0d9549db-d30a-48f3-a6b8-6741ce5a4283 name: permission-invite-photos data: {} ownerDisplayName: Nyx ownerId: usr_bc012e97-a292-4abc-b4e6-f9edcc8c0d2b - id: prms_153ac0b7-c2dd-43f9-96e3-c61fd2e85509 name: permission-profile-pic-override data: {} ownerDisplayName: Nyx ownerId: usr_bc012e97-a292-4abc-b4e6-f9edcc8c0d2b - id: prms_1d9549db-d30a-48f3-a6b8-6741ce5a4283 name: permission-user-icons data: {} ownerDisplayName: Nyx ownerId: usr_bc012e97-a292-4abc-b4e6-f9edcc8c0d2b - id: prms_dc02c512-4c03-479c-8c6a-d9329c023baf name: permission-user-gallery data: {} ownerDisplayName: Nyx ownerId: usr_bc012e97-a292-4abc-b4e6-f9edcc8c0d2b schema: type: array items: $ref: '#/components/schemas/Permission' CurrentUserLoginResponse: description: OK content: application/json: schema: $ref: '#/components/schemas/CurrentUser' headers: Set-Cookie: description: Successful authentication returns an `auth` cookie. schema: type: string example: auth=authcookie_00000000-0000-0000-0000-000000000000; Expires=Tue, 01 Jan 2030 00:00:00 GMT; Path=/; HttpOnly Disable2FAResponse: description: OK content: application/json: schema: $ref: '#/components/schemas/Disable2FAResult' Verify2FAEmailCodeResponse: description: OK content: application/json: schema: $ref: '#/components/schemas/Verify2FAEmailCodeResult' headers: Set-Cookie: description: Provides a `twoFactorAuth` cookie, which can be used to bypasses the 2FA requirement for future logins on the same device. schema: type: string example: twoFactorAuth=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; Expires=Tue, 01 Jan 2030 00:00:00 GMT; Path=/; HttpOnly Verify2FAResponse: description: OK content: application/json: schema: $ref: '#/components/schemas/Verify2FAResult' headers: Set-Cookie: description: Provides a `twoFactorAuth` cookie, which can be used to bypasses the 2FA requirement for future logins on the same device. schema: type: string example: twoFactorAuth=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; Expires=Tue, 01 Jan 2030 00:00:00 GMT; Path=/; HttpOnly Pending2FAResponse: description: OK content: application/json: schema: $ref: '#/components/schemas/Pending2FAResult' GetAvatarModerationsResponse: description: Returns list of globally blocked avatars with timestamps content: application/json: schema: type: array items: $ref: '#/components/schemas/AvatarModeration' CreateAvatarModerationResponse: description: Returns a single AvatarModerationCreated object content: application/json: schema: $ref: '#/components/schemas/AvatarModerationCreated' DeleteAvatarModerationResponse: description: Returns a single OkStatus2 object content: application/json: schema: $ref: '#/components/schemas/OkStatus2' FavoriteLimitsResponse: description: Returns a single FavoriteLimits object. content: application/json: schema: $ref: '#/components/schemas/FavoriteLimits' LimitedUserFriendListResponse: description: Returns a list of LimitedUserFriend objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/LimitedUserFriend' UnfriendSuccess: description: Successful response after unfriending a user. content: application/json: examples: Unfriend Success: value: success: message: Friendship destroyed status_code: 200 schema: $ref: '#/components/schemas/Success' NotFriendsError: description: Error response when trying to unfriend someone who is not a friend. content: application/json: examples: 400 Not Friends Response: value: error: message: These users are not friends status_code: 400 schema: $ref: '#/components/schemas/Error' NotificationListResponse: description: Returns a list of Notifcation objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/Notification' ClearNotificationsSuccess: description: Successful response after clearing all notifications. content: application/json: examples: Unfriend Success: value: success: message: Ok status_code: 200 schema: $ref: '#/components/schemas/Success' NotificationResponse: description: Returns a single Notifcation object. content: application/json: examples: Example Friend Request Response: value: id: frq_00000000-0000-0000-0000-000000000000 type: friendRequest created_at: '2021-01-01T00:00:00.000Z' details: '{}' message: '' seen: false senderUserId: usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469 schema: $ref: '#/components/schemas/Notification' NotificationNotFoundError: description: Error response when trying to perform operations on a non-existing notification. content: application/json: examples: 404 World Not Found: value: error: message: Notification not found status_code: 404 schema: $ref: '#/components/schemas/Error' FriendSuccess: description: Successful response after friending a user. content: application/json: examples: Unfriend Success: value: success: message: Ok status_code: 200 schema: $ref: '#/components/schemas/Success' AcceptFriendRequestError: description: Error response when trying to accept a non-existent friend request. content: application/json: examples: 404 Accept Friend Request: value: error: message: that friend request could not be found status_code: 404 schema: $ref: '#/components/schemas/Error' PlayerModerationListResponse: description: Returns a list of PlayerModeration objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/PlayerModeration' PlayerModerationResponse: description: Returns a single PlayerModeration object. content: application/json: schema: $ref: '#/components/schemas/PlayerModeration' PlayerModerationClearAllSuccess: description: Success response after e.g. clearing all player moderations. content: application/json: examples: 200 OK: value: success: message: OK status_code: 200 schema: $ref: '#/components/schemas/Success' ResendVerificationEmailSuccess: description: OK content: application/json: examples: Resend Verification Email Success: value: success: message: Verification Email Sent! status_code: 200 schema: $ref: '#/components/schemas/Success' UserSubscriptionListResponse: description: Returns a list of UserSubscription objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/UserSubscription' Get2FARecoveryCodesResponse: description: Returns the two factor recovery codes content: application/json: schema: $ref: '#/components/schemas/TwoFactorRecoveryCodes' PlayerModerationUnmoderatedSuccess: description: Success response after unmoderating a player moderation. content: application/json: examples: 200 All Of PlayerModerationType Unmoderated: value: success: message: PlayerModerations of type undefined removed status_code: 200 200 Specific User Unmoderated: value: success: message: User usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469 unmoderated status_code: 200 schema: $ref: '#/components/schemas/Success' VerifyLoginPlaceResponse: description: OK AvatarStyleListResponse: description: Returns a list of AvatarStyle objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/AvatarStyle' AvatarListResponse: description: Returns a list of Avatar objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/Avatar' AvatarResponse: description: Returns a single Avatar object. content: application/json: schema: $ref: '#/components/schemas/Avatar' UnableToCreateAvatarNowError: description: Error response due to missing permissions. content: application/json: examples: Unable To Create Avatar Now Example: value: error: message: You can't create an avatar right now status_code: 400 schema: $ref: '#/components/schemas/Error' FeaturedSetNotAdminError: description: Error response when set featured to true without being an admin. content: application/json: examples: 401 Cannot Set Featured: value: error: message: cannot set featured tag if you are not an admin status_code: 401 schema: $ref: '#/components/schemas/Error' AvatarSeeOtherUserFavoritesError: description: Error response when trying to see favourited avatars of another user without sufficient admin permissions. content: application/json: examples: 403 Cant See Other User Favorite Avatars: value: error: message: \"You can only see your own favorite avatars!\" status_code: 403 schema: $ref: '#/components/schemas/Error' AvatarImpostorQueueStatsResponse: description: Returns a Service Queue Stats. content: application/json: schema: $ref: '#/components/schemas/ServiceQueueStats' AvatarNotFoundError: description: Error response when trying to show information about a non-existent avatar. content: application/json: examples: 404 Avatar Not Found: value: error: message: Avatar Not Found status_code: 404 404 Can't find avatar: value: error: message: Can't find avatar! status_code: 404 404 Couldn't find that avatar: value: error: message: We couldn't find that avatar! status_code: 404 schema: $ref: '#/components/schemas/Error' AvatarImpostorEnqueueResponse: description: Returns a Service Status. content: application/json: schema: $ref: '#/components/schemas/ServiceStatus' CurrentUserResponse: description: Returns a single CurrentUser object. content: application/json: schema: $ref: '#/components/schemas/CurrentUser' AvatarNotTaggedAsFallbackError: description: Error response when trying to select a fallback avatar that is missing the fallback tag. content: application/json: examples: 403 Cant Select Non-Fallback as Fallback: value: error: message: This avatar isn't tagged as a quest fallback avatar. status_code: 403 schema: $ref: '#/components/schemas/Error' CalendarEventListResponse: description: Returns a list of CalendarEvent objects. content: application/json: schema: $ref: '#/components/schemas/PaginatedCalendarEventList' CalendarEventResponse: description: Returns a single CalendarEvent object. content: application/json: schema: $ref: '#/components/schemas/CalendarEvent' DeleteCalendarEventSuccess: description: Successful response after deleting a calendar event. content: application/json: examples: Deleted Calendar Entry: value: success: message: Calendar Entry deleted! status_code: 200 schema: $ref: '#/components/schemas/Success' ICSResponse: description: iCalendar file download content: text/calendar: schema: type: string format: binary ICSNotFoundError: description: Error response when trying to download ICS calendar of a non-existent calendar entry. content: application/json: examples: 404 File Not Found: value: error: message: Calendar Entry not foundǃ status_code: 404 schema: $ref: '#/components/schemas/Error' APIConfigResponse: description: Returns the API's config. content: application/json: schema: $ref: '#/components/schemas/APIConfig' DownloadSourceCodeAccessError: description: Error response when trying to download non-public and non-main JavaScript or CSS without Admin Credentials. content: application/json: examples: Only Admins Can Get Non-Main Branches: value: error: message: only admins can get non-main branches status_code: 400 Only Admins Can Get Non-Public Variants: value: error: message: only admins can get non-public variants status_code: 400 schema: $ref: '#/components/schemas/Error' LicenseListResponse: description: Returns a list of License objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/License' StoreResponse: description: Returns a single Store object. content: application/json: schema: $ref: '#/components/schemas/Store' StoreShelfListResponse: description: Returns a list of StoreShelf objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/StoreShelf' FavoriteGroupResponse: description: Returns a single FavoriteGroup object. content: application/json: schema: $ref: '#/components/schemas/FavoriteGroup' FavoriteGroupClearedSuccess: description: Success response after clearing a favorite group. content: application/json: examples: 200 Favorite Group Cleared: value: success: message: favorite deleted! status_code: 200 schema: $ref: '#/components/schemas/Success' FavoriteGroupListResponse: description: Returns a list of FavoriteGroup objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/FavoriteGroup' FavoriteListResponse: description: Returns a list of Favorite objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/Favorite' FavoriteResponse: description: Returns a single Favorite object. content: application/json: schema: $ref: '#/components/schemas/Favorite' FavoriteAddAlreadyFavoritedError: description: Error response when trying favorite someone or something when already having it/them favorited. content: application/json: examples: 400 Already Favorited That Friend: value: error: message: You already have that friend favorited status_code: 400 schema: $ref: '#/components/schemas/Error' FavoriteAddNotFriendsError: description: Error response when trying favorite someone whom you are not friends with. content: application/json: examples: 403 Favorite Add Not Friends Error: value: error: message: you are not friends with that userǃ status_code: 403 schema: $ref: '#/components/schemas/Error' FavoriteRemovedSuccess: description: Success response after removing a favorite. content: application/json: examples: 200 Favorite Removed: value: success: message: favorite deleted! status_code: 200 schema: $ref: '#/components/schemas/Success' FavoriteNotFoundError: description: Error response when trying to show information about a non-existent favorite. content: application/json: examples: 404 Favorite not found: value: error: message: 404 couldn't find that favorite status_code: 404 schema: $ref: '#/components/schemas/Error' FileResponse: description: Returns a single File object. content: application/json: examples: Example Avatar File: value: id: file_00000000-0000-0000-0000-000000000000 name: Avatar - Test Avatar - Unity package - 2017․4․28f1_3_standalonewindows_Release extension: .unitypackage mimeType: application/gzip ownerId: usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469 tags: [] versions: - created_at: '2019-08-15T11:04:37.910Z' status: complete version: 0 - created_at: '2019-08-15T11:04:49.702Z' delta: category: queued fileName: Avatar-Test-Avatar-Unity.file_00000000-0000-0000-0000-000000000000.1.unitypackage.delta md5: '' sizeInBytes: 0 status: none uploadId: '' url: https://s3.us-east-1.amazonaws.com/files.vrchat.cloud/Avatar-Test-Avatar-Unity.file_00000000-0000-0000-0000-000000000000.1.unitypackage.delta file: category: multipart fileName: Avatar-Test-Avatar-Unity.file_00000000-0000-0000-0000-000000000000.1.unitypackage md5: xxxxxxxxxxxxxxxxxxx== sizeInBytes: 303055180 status: complete uploadId: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx url: https://s3.us-east-1.amazonaws.com/files.vrchat.cloud/Avatar-Test-Avatar-Unity.file_00000000-0000-0000-0000-000000000000.1.unitypackage signature: category: simple fileName: Avatar-Test-Avatar-Unity.file_00000000-0000-0000-0000-000000000000.1.unitypackage.signature md5: xxxxxxxxxxxxxxxx== sizeInBytes: 532748 status: complete uploadId: '' url: https://s3.us-east-1.amazonaws.com/files.vrchat.cloud/Avatar-Test-Avatar-Unity.file_00000000-0000-0000-0000-000000000000.1.unitypackage.signature status: complete version: 1 schema: $ref: '#/components/schemas/File' FileDeletedError: description: Error response when trying to delete a non-existent file. content: application/json: examples: File Deleted Error: value: error: message: File 'file_ce35d830-e20a-4df0-a6d4-5aaef4508044' not found status_code: 404 schema: $ref: '#/components/schemas/Error' RawFileResponse: description: Raw file content: image/*: schema: type: string format: binary FileVersionDeleteInitialError: description: Error response when trying to delete the initial version of a file. Delete the main File object instead. content: application/json: examples: 400 Delete Initial File Version: value: error: message: Cannot delete the initial version of the fileā€š just delete the entire file record․ status_code: 400 schema: $ref: '#/components/schemas/Error' FileVersionDeleteMiddleError: description: Error response when trying to delete any version of a file that is not the last one. content: application/json: examples: 409/500 Delete Non-Last File Version: value: error: message: 409 Cannot delete against anything but the latest version of this fileĖø 1ā€š 11 status_code: 500 schema: $ref: '#/components/schemas/Error' FileUploadURLResponse: description: See [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](AWS REST docs - PUT Object) content: application/json: examples: Example Response: value: url: https://s3.amazonaws.com/files.vrchat.cloud/Avatar-MyAvatar-Un.file_00000000-0000-0000-0000-000000000000.1.unitypackage?AWSAccessKeyId=XXXXXXXXXXXXXXXXXXXX&Expires=1626028518&Signature=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&partNumber=1&uploadId=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx..xxxxxxxxxxxxxxxxxxxxxxx schema: $ref: '#/components/schemas/FileUploadURL' FileUploadAlreadyFinishedError: description: Error response when trying to start an upload against a FileVersion that is already marked as `complete`. content: application/json: examples: Tried To Upload Against Already Finished Version: value: error: message: Cannot upload against a complete version entry․ Create a new version of this file before uploading․ status_code: 400 schema: $ref: '#/components/schemas/Error' FileVersionUploadStatusResponse: description: Current FileVersion upload status. Contains the uploadId needed for uploading, as well as the already uploaded parts. content: application/json: examples: Example Access Key: value: etags: [] fileName: Avatar-MyAvatar-Un.file_00000000-0000-0000-0000-000000000000.1.unitypackage maxParts: 1000 nextPartNumber: 0 parts: [] uploadId: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx..xxxxxxxxxxxxxxxxxxxxxxx schema: $ref: '#/components/schemas/FileVersionUploadStatus' FileListResponse: description: Returns a list of File objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/File' LimitedGroupListResponse: description: Returns a list of LimitedGroup objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/LimitedGroup' GroupResponse: description: Returns a single Group object. content: application/json: schema: $ref: '#/components/schemas/Group' GroupRoleTemplatesResponse: description: Returns a dictionary of GroupRoleTemplate objects. content: application/json: schema: type: object additionalProperties: $ref: '#/components/schemas/GroupRoleTemplateValues' GroupNotFoundError: description: Error response when trying to perform operations on a non-existing group. content: application/json: examples: 404 World Not Found: value: error: message: Can't find groupǃ status_code: 404 schema: $ref: '#/components/schemas/Error' DeleteGroupSuccess: description: Successful response after deleting a Group. content: application/json: examples: Deleted Group: value: success: message: Group deleted! status_code: 200 schema: $ref: '#/components/schemas/Success' GroupAnnouncementResponse: description: Returns a single GroupAnnouncement object. content: application/json: schema: $ref: '#/components/schemas/GroupAnnouncement' DeleteGroupAnnouncementSuccess: description: Successful response after deleting/clearing the group announcement. content: application/json: examples: Deleted Group Announcement: value: success: message: Group announcement was cleared! status_code: 200 schema: $ref: '#/components/schemas/Success' GroupAuditLogListResponse: description: Returns a list of GroupAudit objects, wrapped in new pagination format. content: application/json: schema: $ref: '#/components/schemas/PaginatedGroupAuditLogEntryList' GroupMemberListResponse: description: Returns a list of GroupMember objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/GroupMember' NoPermission: description: Error response due to missing permissions. content: application/json: examples: No Permission Example: value: error: message: You don't have permission․ status_code: 403 schema: $ref: '#/components/schemas/Error' GroupMemberResponse: description: Returns a list of GroupMember objects. content: application/json: schema: $ref: '#/components/schemas/GroupMember' BanGroupMemberBadRequestError: description: Bad request error response when banning a user content: application/json: examples: User Already Banned: value: error: message: User is already banned․ status_code: 400 schema: $ref: '#/components/schemas/Error' GroupGalleryResponse: description: Returns a single GroupGallery object. content: application/json: schema: $ref: '#/components/schemas/GroupGallery' GroupGalleryImageListResponse: description: Returns a list of GroupGalleryImage objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/GroupGalleryImage' DeleteGroupGallerySuccess: description: Successful response after deleting a group gallery. content: application/json: examples: Deleted Group Gallery: value: success: message: Gallery deleted! status_code: 200 schema: $ref: '#/components/schemas/Success' GroupGalleryImageResponse: description: Returns a single GroupGalleryImage object. content: application/json: schema: $ref: '#/components/schemas/GroupGalleryImage' DeleteGroupGalleryImageSuccess: description: Successful response after deleting a group gallery image. content: application/json: examples: Deleted Group Gallery Image: value: success: message: Gallery image removed! status_code: 200 schema: $ref: '#/components/schemas/Success' GroupGalleryImageDeleteForbiddenError: description: Error response when trying to delete a submission to a group's gallery when the user does not have permission to do so. content: application/json: examples: 403 Cannot Delete Submission: value: error: message: You can't remove this gallery submission! status_code: 403 schema: $ref: '#/components/schemas/Error' GroupInstanceListResponse: description: Returns a list of GroupInstance objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/GroupInstance' GroupNotMemberError: description: Error response when trying to perform operations on a group you are not member of. content: application/json: examples: 403 Not Group Member: value: error: message: You're not a member. status_code: 403 schema: $ref: '#/components/schemas/Error' GroupInviteBadRequestError: description: Bad request error response when creating a group invite. content: application/json: examples: Group Member Already Exists: value: error: message: User is already a member of this group. status_code: 400 User Already Invited: value: error: message: User is already invited. status_code: 400 schema: $ref: '#/components/schemas/Error' GroupInviteForbiddenError: description: Forbidden error response when creating a group invite. content: application/json: examples: Forbidden to Invite User: value: error: message: You can't invite that user․ status_code: 403 schema: $ref: '#/components/schemas/Error' DeleteGroupInviteBadRequestError: description: Bad request error response when deleting a group invite content: application/json: examples: User Not Invited: value: error: message: You can't uninvite a user who wasn't invited․ status_code: 400 schema: $ref: '#/components/schemas/Error' GroupAlreadyMemberError: description: Error response when trying to join a group that the user is already a member of. content: application/json: examples: 400 User Already Member: value: error: message: You're already a member! status_code: 400 schema: $ref: '#/components/schemas/Error' UsersInvalidSearchError: description: Error response when trying to search list of users with an invalid request. content: application/json: examples: 400 N is too high: value: error: message: nļ¼1000 is much too high․ implement paging you savages․ status_code: 400 400 N is too low: value: error: message: n must be a positive integerĖø '-1' status_code: 400 schema: $ref: '#/components/schemas/Error' GroupLimitedMemberResponse: description: Returns a list of GroupMember objects. content: application/json: schema: $ref: '#/components/schemas/GroupLimitedMember' GroupRoleIDListResponse: description: Returns a list of GroupRoleID objects. content: application/json: schema: $ref: '#/components/schemas/GroupRoleIDList' GroupPermissionListResponse: description: Returns a list of GroupPermission objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/GroupPermission' GroupPostsResponse: description: Returns a GroupPost Array. content: application/json: schema: type: object properties: posts: type: array items: $ref: '#/components/schemas/GroupPost' GroupPostResponse: description: Returns a GroupPost object. content: application/json: schema: $ref: '#/components/schemas/GroupPost' GroupPostResponseSuccess: description: Response after deleting a group post. content: application/json: examples: Deleted Group Post: value: success: message: Group Post was deleted! status_code: 200 schema: $ref: '#/components/schemas/Success' UpdateGroupRepresentationSuccess: description: Successful response after updating group representation. content: application/json: examples: Updated Group Representation: value: success: message: Group representation updated! status_code: 200 schema: $ref: '#/components/schemas/Success' GroupJoinRequestResponseBadRequestError: description: Bad request error response when responding to a group join request content: application/json: examples: User Join Request Not Exist: value: error: message: You can't accept a join request for a user who hasn't requested to join․ status_code: 400 schema: $ref: '#/components/schemas/Error' GroupRoleListResponse: description: Returns a list of GroupRole objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/GroupRole' GroupRoleResponse: description: Returns a single GroupRole object. content: application/json: schema: $ref: '#/components/schemas/GroupRole' APIHealthResponse: description: Returns the API's health. content: application/json: examples: Example Response: value: buildVersionTag: master-build-2021-06-24-fred-drakeshoot ok: true serverName: prod-api-green-marsh-dgt schema: $ref: '#/components/schemas/APIHealth' InfoPushListResponse: description: Returns a list of InfoPush objects. content: application/json: examples: Game Version: value: - id: build-config createdAt: '2021-08-21T04:27:05+00:00' data: version: 2021.3.4 hash: a76e7da333c6a5a8f7ec2adee064cac9 isEnabled: true priority: 1000 releaseStatus: public tags: - high-priority - user-all updatedAt: '2021-09-18T04:37:29+00:00' New Quick Menu: value: - id: launch-beta createdAt: '2021-09-13T20:50:40+00:00' data: imageUrl: https://assets.vrchat.com/ips/assets/b5af844263458d3a5b3e01b52ef7fe47f7b3b563eace4ee972205f250474c879.png onPressed: parameters: - https://docs.vrchat.com/v2021.4.1/docs/latest-release command: OpenURL hash: 69abf85064503e870124acde330bb0ae isEnabled: true priority: 970 releaseStatus: public tags: - quick-menu-banner - user-all updatedAt: '2021-11-08T22:45:25+00:00' World Hot Row: value: - id: world-hot createdAt: '2020-06-05T08:23:31+00:00' data: contentList: name: Hot platform: ThisPlatformSupported sortHeading: heat sortOrder: descending sortOwnership: any imageUrl: https://assets.vrchat.com/ips/assets/40f8ad117f8d6734ac84039d8ced290b6676486099b7cc56759efe7b259ca05d.png hash: f0e97e72c437aa437e92c1184630bec6 isEnabled: true priority: 1000 releaseStatus: public tags: - world-category updatedAt: '2020-08-16T07:04:07+00:00' schema: type: array items: $ref: '#/components/schemas/InfoPush' InstanceResponse: description: Returns a single Instance object. content: application/json: schema: $ref: '#/components/schemas/Instance' LocationIDListResponse: description: Returns a list of LocationIDs. content: application/json: schema: type: array items: $ref: '#/components/schemas/LocationID' InstanceNotFoundError: description: Error response due to non existant instance content: application/json: examples: Instance Not Found Example: value: error: message: '"Instance not found"' status_code: 404 schema: $ref: '#/components/schemas/Error' InstanceCloseForbiddenError: description: Error response due to not being allowed to close an instance content: application/json: examples: Instance Already Closed Example: value: error: message: You're not allowed to close an already closed instance․ status_code: 403 Not Allowed to Close Instance Example: value: error: message: You're not allowed to close this instance․ status_code: 403 schema: $ref: '#/components/schemas/Error' InstanceShortNameResponse: description: Returns an instance secureName and/or shortName. content: application/json: schema: $ref: '#/components/schemas/InstanceShortNameResponse' InventoryResponse: description: Returns an Inventory object. content: application/json: schema: $ref: '#/components/schemas/Inventory' InventoryShareResponse: description: Returns an OkStatus object. content: application/json: schema: $ref: '#/components/schemas/OkStatus' InventorySpawnResponse: description: Returns an InventorySpawn object. content: application/json: schema: $ref: '#/components/schemas/InventorySpawn' InventoryDropListResponse: description: Returns a list of InventoryDrop objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/InventoryDrop' InventoryTemplateResponse: description: Returns an InventoryTemplate object. content: application/json: schema: $ref: '#/components/schemas/InventoryTemplate' InventoryItemResponse: description: Returns an InventoryItem object. content: application/json: schema: $ref: '#/components/schemas/InventoryItem' DeleteInventoryItemResponse: description: Returns an SuccessFlag object. content: application/json: schema: $ref: '#/components/schemas/SuccessFlag' SendNotificationResponse: description: Returns a single SentNotifcation object. content: application/json: examples: Example Friend Request Response: value: id: frq_00000000-0000-0000-0000-000000000000 type: friendRequest created_at: '2021-01-01T00:00:00.000Z' details: {} message: '' receiverUserId: usr_00000000-0000-0000-0000-000000000000 senderUserId: usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469 schema: $ref: '#/components/schemas/SentNotification' InviteResponse400Error: description: Error response when trying to respond to an invite and something went wrong. content: application/json: examples: Already Responded Error: value: error: message: '"You''ve already responded to that request."' status_code: 400 Cannot Respond Self Invite Error: value: error: message: '"You cannot respond to your own invites."' status_code: 400 Response Slot Out Of Bounds Error: value: error: message: '"Response slot is out of bounds."' status_code: 400 schema: $ref: '#/components/schemas/Error' InviteMustBeFriendsError: description: Error response when trying to invite someome whom you are not friends with. content: application/json: examples: Must Be Friends Error: value: error: message: '"You need to be friends with that user first."' status_code: 403 schema: $ref: '#/components/schemas/Error' JamListResponse: description: Returns a list of Jam objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/Jam' JamResponse: description: Returns a Jam object. content: application/json: schema: $ref: '#/components/schemas/Jam' JamNotFoundError: description: Error response when trying to show information about a non-existent jam. content: application/json: examples: 404 Jam not found: value: error: message: 404 id must be an IDĖø 'invalid_id_here' status_code: 404 schema: $ref: '#/components/schemas/Error' SubmissionListResponse: description: Returns a list of Submission objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/Submission' LicenseGroupResponse: description: Returns a single LicenseGroup object. content: application/json: schema: $ref: '#/components/schemas/LicenseGroup' ProductListingResponse: description: Returns a single ProductListing object. content: application/json: schema: $ref: '#/components/schemas/ProductListing' LogoutSuccess: description: OK content: application/json: examples: Logout Success: value: success: message: Ok! status_code: 200 schema: $ref: '#/components/schemas/Success' headers: Set-Cookie: description: Clears the `auth` cookie. schema: type: string default: auth=; Expires=Tue, 01 Jan 2030 00:00:00 GMT; Path=/ \0Set-Cookie: description: Clears the `age` cookie. schema: type: string default: age=; Expires=Tue, 01 Jan 2030 00:00:00 GMT; Path=/ \0\0Set-Cookie: description: Clears the `tos` cookie. schema: type: string default: tos=; Expires=Tue, 01 Jan 2030 00:00:00 GMT; Path=/ InviteMessageListResponse: description: Returns a list of InviteMessage objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/InviteMessage' InviteMessageInvalidSlotNumberError: description: Error response when trying to update an Invite Message with an invalid slot number. content: application/json: examples: 400 Negative Slot Number Error: value: error: message: Really? A negative slot? Tsk-tsk․․․ status_code: 400 400 Too High Slot Number Error: value: error: message: That is too high of a slot number․ status_code: 400 schema: $ref: '#/components/schemas/Error' NotAuthorizedActionError: description: Error response due to missing authorization to perform that action. content: application/json: examples: Not Authorized Example: value: error: message: You are not authorized to perform that action. status_code: 401 schema: $ref: '#/components/schemas/Error' InviteMessageResponse: description: Returns a single InviteMessage object. content: application/json: schema: $ref: '#/components/schemas/InviteMessage' InviteMessageGetNegativeSlotError: description: Error response when trying to get an Invite Message with a negative slot number. content: application/json: examples: 200 Negative Slot Number Error: value: {} schema: $ref: '#/components/schemas/Error' InviteMessageGetTooHighSlotError: description: Error response when trying to get an Invite Message with a too high slot number. content: application/json: examples: 404 Slot Number Too High Error: value: error: status_code: 404 schema: $ref: '#/components/schemas/Error' InviteMessageUpdateRateLimitError: description: Error response when trying to update an Invite Message before the cooldown has expired. content: application/json: examples: Update Invite Message Please Wait Error: value: error: message: Please wait 60 more minutes until you try again․ status_code: 429 schema: $ref: '#/components/schemas/Error' InviteMessageNoEntryForSlotError: description: Error response when trying to reset an Invite Message whos slot doesn't exist. content: application/json: examples: 404 No Custom Invite Message In Slot: value: error: message: There's no entry for that slot. status_code: 404 schema: $ref: '#/components/schemas/Error' PermissionResponse: description: Returns a single Permission object. content: application/json: schema: $ref: '#/components/schemas/Permission' PrintResponse: description: Returns a single Print object. content: application/json: schema: $ref: '#/components/schemas/Print' PrintListResponse: description: Returns a list of Print objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/Print' UnableToRequestOtherUsersPrintsError: description: Error response when trying to request another user's prints. content: application/json: examples: 403 Unable to request another user's prints: value: error: message: Unable to request another user's prints. status_code: 403 schema: $ref: '#/components/schemas/Error' PropResponse: description: Returns a single Prop object. content: application/json: schema: $ref: '#/components/schemas/Prop' SubscriptionListResponse: description: Returns a list of Subscription objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/Subscription' TiliaStatusResponse: description: Returns a single TiliaStatus object. content: application/json: schema: $ref: '#/components/schemas/TiliaStatus' SystemTimeResponse: description: OK content: application/json: schema: type: string description: Does not return millisecond precision. Always returns time in UTC. example: '2021-08-20T12:38:42+00:00' format: date-time TokenBundleListResponse: description: Returns a list of TokenBundle objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/TokenBundle' BulkPurchasesListResponse: description: Returns a list of ??? objects. content: application/json: schema: type: array items: type: object UserSubscriptionResponse: description: Returns a UserSubscription object. content: application/json: schema: $ref: '#/components/schemas/UserSubscription' BalanceResponse: description: Returns a single Balance object. content: application/json: schema: $ref: '#/components/schemas/Balance' EconomyAccountResponse: description: Returns a single EconomyAccount object. content: application/json: schema: $ref: '#/components/schemas/EconomyAccount' FriendBadRequestError: description: Bad request error response when sending a friend request content: application/json: examples: Already Sent a Friend Request: value: error: message: This user has already been sent a friend request status_code: 400 Users Already Friends: value: error: message: Users are already friends status_code: 400 schema: $ref: '#/components/schemas/Error' UserDoesntExistError: description: Error response when trying to send a friend request to a user which doesn't exist. content: application/json: examples: 404 User Doesn't Exist Response: value: error: message: user doesn't existǃ status_code: 404 schema: $ref: '#/components/schemas/Error' DeleteFriendSuccess: description: Successful response after cancelling a friend request. content: application/json: examples: Deleted Friend Request: value: success: message: Friendship request deleted status_code: 200 schema: $ref: '#/components/schemas/Success' DeleteFriendRequestError: description: Error response when trying to delete a non-existent friend-request. content: application/json: examples: 404 Delete Friend Request: value: error: message: that friend request could not be found status_code: 404 schema: $ref: '#/components/schemas/Error' FriendStatusResponse: description: Returns a users Friend Status. content: application/json: examples: Is Friend: value: incomingRequest: false isFriend: true outgoingRequest: false Not Friends: value: incomingRequest: false isFriend: true outgoingRequest: false schema: $ref: '#/components/schemas/FriendStatus' ProductListingListResponse: description: Returns a list of ProductListing objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/ProductListing' TiliaTOSResponse: description: Returns a single TiliaTOS object. content: application/json: schema: $ref: '#/components/schemas/TiliaTOS' UpdateTiliaTOSResponse: description: Returns a UserSubscription object. content: application/json: schema: type: object nullable: true UserNoteListResponse: description: Returns a list of UserNote objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/UserNote' UserNoteResponse: description: Returns a single UserNote object. content: application/json: schema: $ref: '#/components/schemas/UserNote' LimitedUserSearchListResponse: description: Returns a list of LimitedUserSearch objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/LimitedUserSearch' UserResponse: description: Returns a single User object. content: application/json: schema: $ref: '#/components/schemas/User' CurrentPasswordRequiredError: description: Error response when a user attempts to change a property without supplying their current password. content: application/json: schema: $ref: '#/components/schemas/Error' UserTagInvalidError: description: Error response when a user attempts to add an invalid, restricted, or duplicate tag to their profile, attempts to add tags above the limit for their profile, or attempts to remove invalid, restricted, or absent tag from their profile. content: application/json: schema: $ref: '#/components/schemas/Error' AvatarSeeOtherUserCurrentAvatarError: description: Error response when trying to see another users current avatar without sufficient admin permissions. content: application/json: examples: 403 Cant See Other Users Current Avatar: value: error: message: \"You do not have permission to fetch details about the avatar on this user.\" status_code: 403 schema: $ref: '#/components/schemas/Error' UserMustBeOwnError: description: Error response when trying get group instances of another user. content: application/json: examples: User Id must be your own: value: error: message: User ID must be your own․ status_code: 403 schema: $ref: '#/components/schemas/Error' UserCreditsEligibleResponse: description: Returns a single UserCreditsEligible object. content: application/json: schema: $ref: '#/components/schemas/UserCreditsEligible' DeleteUserResponse: description: OK content: application/json: schema: $ref: '#/components/schemas/CurrentUser' FeedbackListResponse: description: Returns a list of Feedback objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/Feedback' LimitedUserGroupListResponse: description: Returns a list of LimitedUserGroups objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/LimitedUserGroups' GroupListResponse: description: Returns a list of Group objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/Group' UserGroupInstanceListResponse: description: Returns a list of Instance objects with a fetched at time. content: application/json: schema: type: object properties: fetchedAt: type: string format: date-time instances: type: array items: $ref: '#/components/schemas/Instance' UserSubscriptionEligibleResponse: description: Returns a single UserSubscriptionEligible object. content: application/json: schema: $ref: '#/components/schemas/UserSubscriptionEligible' CurrentOnlineUsersResponse: description: OK content: application/json: schema: type: integer description: Number of online users example: 12345 minimum: 0 LimitedWorldListResponse: description: Returns a list of LimitedWorld objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/LimitedWorld' WorldResponse: description: Returns a single World object. content: application/json: schema: $ref: '#/components/schemas/World' WorldCreateNotAllowedYetError: description: Error response when trying create a world without having the neccesary Trust rank yet. content: application/json: examples: 400 Can't Create World Yet: value: error: message: \"You can't create a world right now\" status_code: 400 schema: $ref: '#/components/schemas/Error' FavoritedWorldListResponse: description: Returns a list of FavoritedWorld objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/FavoritedWorld' WorldSeeOtherUserFavoritesError: description: Error response when trying to see favourited worlds of another user without sufficient admin permissions. content: application/json: examples: 404 Cant See Other User Favorite Worlds: value: error: message: 403 You can't see another user's favorites status_code: 403 schema: $ref: '#/components/schemas/Error' WorldSeeOtherUserRecentsError: description: Error response when trying to see recently visited worlds of another user without sufficient admin permissions. content: application/json: examples: 403 Only See Own Recents: value: error: message: \"You can only see your own recent worlds!\" status_code: 403 schema: $ref: '#/components/schemas/Error' WorldNotFoundError: description: Error response when trying to show information about a non-existent world. Sometimes returns with `model not found` instead of `World