openapi: 3.0.3 info: title: VRChat API Documentation version: 1.20.4 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: /auth/exists: get: summary: Check User Exists tags: - authentication responses: '200': $ref: '#/components/responses/UserExistsResponse' '400': $ref: '#/components/responses/MissingParameterError' operationId: checkUserExists parameters: - $ref: '#/components/parameters/email' - $ref: '#/components/parameters/displayName' - $ref: '#/components/parameters/usernameQuery' - $ref: '#/components/parameters/excludeUserId' 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. /auth/user: get: summary: Login and/or Get Current User Info tags: - authentication responses: '200': $ref: '#/components/responses/CurrentUserLoginResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: getCurrentUser 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. parameters: [] security: - authHeader: [] - authHeader: [] twoFactorAuthCookie: [] - authCookie: [] /auth/twofactorauth: delete: summary: Disable 2FA operationId: disable2FA responses: '200': $ref: '#/components/responses/Disable2FAResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - authentication description: Disables 2FA for the currently logged in account security: - authCookie: [] /auth/twofactorauth/totp/verify: post: summary: Verify 2FA code operationId: verify2FA responses: '200': $ref: '#/components/responses/Verify2FAResponse' '401': $ref: '#/components/responses/MissingCredentialsError' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TwoFactorAuthCode' examples: {} description: Finishes the login sequence with a normal 2FA-generated code for accounts with 2FA-protection enabled. tags: - authentication security: - authCookie: [] parameters: [] /auth/twofactorauth/totp/pending: post: summary: Enable time-based 2FA codes operationId: enable2FA responses: '200': $ref: '#/components/responses/Pending2FAResponse' '401': $ref: '#/components/responses/MissingCredentialsError' description: Begins the sequence for enabling time-based 2FA. tags: - authentication security: - authCookie: [] parameters: [] delete: summary: Cancel pending enabling of time-based 2FA codes operationId: cancelPending2FA responses: '200': $ref: '#/components/responses/Disable2FAResponse' '401': $ref: '#/components/responses/MissingCredentialsError' description: Cancels the sequence for enabling time-based 2FA. tags: - authentication security: - authCookie: [] parameters: [] /auth/twofactorauth/totp/pending/verify: post: summary: Verify Pending 2FA code operationId: verifyPending2FA responses: '200': $ref: '#/components/responses/Verify2FAResponse' '401': $ref: '#/components/responses/MissingCredentialsError' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TwoFactorAuthCode' examples: {} description: Finishes sequence for enabling time-based 2FA. tags: - authentication security: - authCookie: [] parameters: [] /auth/user/twofactorauth/otp: get: summary: Get 2FA Recovery codes operationId: getRecoveryCodes responses: '200': $ref: '#/components/responses/Get2FARecoveryCodesResponse' '401': $ref: '#/components/responses/MissingCredentialsError' description: Gets the OTP (One Time Password) recovery codes for accounts with 2FA-protection enabled. tags: - authentication security: - authCookie: [] /auth/twofactorauth/otp/verify: post: summary: Verify 2FA code with Recovery code operationId: verifyRecoveryCode responses: '200': $ref: '#/components/responses/Verify2FAResponse' '401': $ref: '#/components/responses/MissingCredentialsError' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TwoFactorAuthCode' examples: {} description: Finishes the login sequence with an OTP (One Time Password) recovery code for accounts with 2FA-protection enabled. tags: - authentication security: - authCookie: [] /auth/twofactorauth/emailotp/verify: post: summary: Verify 2FA email code operationId: verify2FAEmailCode responses: '200': $ref: '#/components/responses/Verify2FAEmailCodeResponse' '401': $ref: '#/components/responses/MissingCredentialsError' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TwoFactorEmailCode' examples: {} description: Finishes the login sequence with an 2FA email code. tags: - authentication security: - authCookie: [] parameters: [] /auth: get: summary: Verify Auth Token tags: - authentication responses: '200': $ref: '#/components/responses/VerifyAuthTokenResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: verifyAuthToken parameters: [] description: Verify whether the currently provided Auth Token is valid. security: - authCookie: [] /logout: put: summary: Logout operationId: logout responses: '200': $ref: '#/components/responses/LogoutSuccess' '401': $ref: '#/components/responses/MissingCredentialsError' description: Invalidates the login session. security: - authCookie: [] tags: - authentication /users/{userId}/delete: parameters: - $ref: '#/components/parameters/userId' put: summary: Delete User operationId: deleteUser responses: '200': $ref: '#/components/responses/DeleteUserResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - authentication 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. security: - authCookie: [] /auth/register: post: 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 requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/RegisterUserAccountRequest' responses: '200': $ref: '#/components/responses/CurrentUserLoginResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: registerUserAccount parameters: [] tags: - authentication deprecated: true /auth/user/resendEmail: post: summary: Resend Email Confirmation description: Requests a resend of pending email address confirmation email responses: '200': $ref: '#/components/responses/ResendVerificationEmailSuccess' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: resendEmailConfirmation parameters: [] tags: - authentication security: - authCookie: [] /auth/confirmEmail: get: summary: Confirm Email operationId: confirmEmail parameters: - $ref: '#/components/parameters/confirmEmailUserId' - $ref: '#/components/parameters/confirmEmailToken' responses: '302': $ref: '#/components/responses/ConfirmEmailResponse' tags: - authentication description: Confirms the email address for a user /auth/verifyLoginPlace: get: summary: Verify Login Place operationId: verifyLoginPlace parameters: - $ref: '#/components/parameters/userIdQuery' - $ref: '#/components/parameters/verifyLoginPlaceToken' responses: '302': $ref: '#/components/responses/VerifyLoginPlaceResponse' tags: - authentication description: Verifies a login attempt for a user /auth/user/avatarmoderations: get: summary: Get Global Avatar Moderations operationId: getGlobalAvatarModerations description: Returns list of globally blocked avatars. tags: - authentication security: - authCookie: [] responses: '200': $ref: '#/components/responses/GetAvatarModerationsResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /users/{userId}/avatar: get: summary: Get Own Avatar tags: - avatars responses: '200': $ref: '#/components/responses/AvatarResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/AvatarSeeOtherUserCurrentAvatarError' operationId: getOwnAvatar security: - authCookie: [] description: Get the current avatar for the user. This will return an error for any other user than the one logged in. parameters: - $ref: '#/components/parameters/userId' /avatars: get: summary: Search Avatars tags: - avatars responses: '200': $ref: '#/components/responses/AvatarListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: searchAvatars security: - authCookie: [] parameters: - $ref: '#/components/parameters/featured' - $ref: '#/components/parameters/sort' - schema: type: string enum: - me in: query required: false name: user description: Set to `me` for searching own avatars. - $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' 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. post: summary: Create Avatar operationId: createAvatar security: - authCookie: [] responses: '200': $ref: '#/components/responses/AvatarResponse' '400': $ref: '#/components/responses/UnableToCreateAvatarNowError' '401': $ref: '#/components/responses/FeaturedSetNotAdminError' tags: - avatars requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateAvatarRequest' 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. /avatarStyles: get: summary: Get Avatar Styles tags: - avatars responses: '200': $ref: '#/components/responses/AvatarStyleListResponse' operationId: getAvatarStyles description: List avatar styles. /avatars/{avatarId}: parameters: - $ref: '#/components/parameters/avatarId' get: summary: Get Avatar tags: - avatars responses: '200': $ref: '#/components/responses/AvatarResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/AvatarNotFoundError' operationId: getAvatar security: - authCookie: [] description: Get information about a specific Avatar. put: summary: Update Avatar operationId: updateAvatar security: - authCookie: [] responses: '200': $ref: '#/components/responses/AvatarResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/AvatarNotFoundError' description: Update information about a specific avatar. tags: - avatars requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateAvatarRequest' delete: summary: Delete Avatar operationId: deleteAvatar security: - authCookie: [] responses: '200': $ref: '#/components/responses/AvatarResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/AvatarNotFoundError' tags: - avatars 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. /avatars/{avatarId}/select: parameters: - $ref: '#/components/parameters/avatarId' put: summary: Select Avatar tags: - avatars responses: '200': $ref: '#/components/responses/CurrentUserResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/AvatarNotFoundError' operationId: selectAvatar security: - authCookie: [] description: Switches into that avatar. /avatars/{avatarId}/selectFallback: parameters: - $ref: '#/components/parameters/avatarId' put: summary: Select Fallback Avatar deprecated: true tags: - avatars responses: '200': $ref: '#/components/responses/CurrentUserResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/AvatarNotTaggedAsFallbackError' '404': $ref: '#/components/responses/AvatarNotFoundError' operationId: selectFallbackAvatar security: - authCookie: [] description: Switches into that avatar as your fallback avatar. /avatars/favorites: get: summary: List Favorited Avatars tags: - avatars responses: '200': $ref: '#/components/responses/AvatarListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/AvatarSeeOtherUserFavoritesError' operationId: getFavoritedAvatars security: - authCookie: [] 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' description: Search and list favorited avatars by query filters. /avatars/licensed: get: summary: List Licensed Avatars tags: - avatars responses: '200': $ref: '#/components/responses/AvatarListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: getLicensedAvatars security: - authCookie: [] parameters: - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' description: List licensed avatars. /avatars/{avatarId}/impostor/enqueue: parameters: - $ref: '#/components/parameters/avatarId' post: summary: Enqueue Impostor generation tags: - avatars responses: '200': $ref: '#/components/responses/AvatarImpostorEnqueueResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/AvatarNotFoundError' operationId: enqueueImpostor security: - authCookie: [] description: Enqueue Impostor generation for that avatar. /avatars/impostor/queue/stats: get: summary: Get Impostor Queue Stats tags: - avatars responses: '200': $ref: '#/components/responses/AvatarImpostorQueueStatsResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: getImpostorQueueStats security: - authCookie: [] description: Gets service stats for queued impostor. /avatars/{avatarId}/impostor: parameters: - $ref: '#/components/parameters/avatarId' delete: summary: Delete generated Impostor tags: - avatars responses: '200': description: The Impostors generated for that avatar are deleted. '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/AvatarNotFoundError' operationId: deleteImpostor security: - authCookie: [] description: Delete generated Impostor for that avatar. /calendar: get: summary: List calendar events tags: - calendar responses: '200': $ref: '#/components/responses/CalendarEventListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: getCalendarEvents security: - authCookie: [] parameters: - $ref: '#/components/parameters/monthDate' - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' description: Get a list of a user's calendar events for the month in ?date /calendar/featured: get: summary: List featured calendar events tags: - calendar responses: '200': $ref: '#/components/responses/CalendarEventListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: getFeaturedCalendarEvents security: - authCookie: [] parameters: - $ref: '#/components/parameters/monthDate' - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' description: Get a list of a featured calendar events for the month in ?date /calendar/following: get: summary: List followed calendar events tags: - calendar responses: '200': $ref: '#/components/responses/CalendarEventListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: getFollowedCalendarEvents security: - authCookie: [] parameters: - $ref: '#/components/parameters/monthDate' - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' description: Get a list of a followed calendar events for the month in ?date /calendar/search: get: summary: Search for calendar events tags: - calendar responses: '200': $ref: '#/components/responses/CalendarEventListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: searchCalendarEvents security: - authCookie: [] parameters: - $ref: '#/components/parameters/calendarSearchTerm' - $ref: '#/components/parameters/utcOffset' - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' description: Get a list of calendar events by search terms /calendar/{groupId}: get: summary: List a group's calendar events tags: - calendar responses: '200': $ref: '#/components/responses/CalendarEventListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: getGroupCalendarEvents security: - authCookie: [] parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/monthDate' - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' description: Get a list of a group's calendar events /calendar/{groupId}/event: post: summary: Create a calendar event tags: - calendar responses: '200': $ref: '#/components/responses/CalendarEventResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: createGroupCalendarEvent requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateCalendarEventRequest' security: - authCookie: [] description: Creates an event for a group on the calendar parameters: - $ref: '#/components/parameters/groupId' /calendar/{groupId}/{calendarId}: get: summary: Get a calendar event tags: - calendar responses: '200': $ref: '#/components/responses/CalendarEventResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: getGroupCalendarEvent security: - authCookie: [] parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/calendarId' description: Get a group calendar event delete: summary: Delete a calendar event tags: - calendar responses: '200': $ref: '#/components/responses/DeleteCalendarEventSuccess' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: deleteGroupCalendarEvent security: - authCookie: [] parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/calendarId' description: Delete a group calendar event /calendar/{groupId}/{calendarId}.ics: get: summary: Download calendar event as ICS tags: - calendar description: Returns the specified calendar in iCalendar (ICS) format. parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/calendarId' operationId: getGroupCalendarEventICS responses: '200': $ref: '#/components/responses/ICSResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/ICSNotFoundError' /calendar/{groupId}/{calendarId}/event: put: summary: Update a calendar event tags: - calendar responses: '200': $ref: '#/components/responses/CalendarEventResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: updateGroupCalendarEvent requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateCalendarEventRequest' security: - authCookie: [] description: Updates an event for a group on the calendar parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/calendarId' /calendar/{groupId}/{calendarId}/follow: post: summary: Follow a calendar event tags: - calendar responses: '200': $ref: '#/components/responses/CalendarEventResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: followGroupCalendarEvent requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/FollowCalendarEventRequest' security: - authCookie: [] description: Follow or unfollow an event on a group's calendar parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/calendarId' /Steam/transactions: get: summary: List Steam Transactions operationId: getSteamTransactions security: - authCookie: [] responses: '200': $ref: '#/components/responses/TransactionListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - economy description: Get all own Steam transactions. /Steam/transactions/{transactionId}: parameters: - $ref: '#/components/parameters/transactionId' get: summary: Get Steam Transaction operationId: getSteamTransaction security: - authCookie: [] responses: '200': $ref: '#/components/responses/TransactionResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - economy description: Get a single Steam transactions by ID. This returns the exact same information as `getSteamTransactions`, so no point in using this endpoint. deprecated: true /Admin/transactions/{transactionId}: parameters: - $ref: '#/components/parameters/transactionId' /auth/user/subscription: get: summary: Get Current Subscriptions operationId: getCurrentSubscriptions security: - authCookie: [] responses: '200': $ref: '#/components/responses/UserSubscriptionListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - economy description: Get a list of all current user subscriptions. /users/{userId}/subscription/eligible: parameters: - $ref: '#/components/parameters/userId' - $ref: '#/components/parameters/steamId' get: summary: Get User Subscription Eligiblity operationId: getUserSubscriptionEligible security: - authCookie: [] responses: '200': $ref: '#/components/responses/UserSubscriptionEligibleResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - economy description: Get the user's eligibility status for subscriptions. /subscriptions: get: summary: List Subscriptions operationId: getSubscriptions security: - authCookie: [] responses: '200': $ref: '#/components/responses/SubscriptionListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - economy description: List all existing Subscriptions. For example, "vrchatplus-monthly" and "vrchatplus-yearly". /licenseGroups/{licenseGroupId}: parameters: - $ref: '#/components/parameters/licenseGroupId' get: summary: Get License Group operationId: getLicenseGroup security: - authCookie: [] responses: '200': $ref: '#/components/responses/LicenseGroupResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - economy description: Get a single License Group by given ID. /listing/{productId}: parameters: - $ref: '#/components/parameters/productId' - $ref: '#/components/parameters/hydrate' get: summary: Get Product Listing operationId: getProductListing security: - authCookie: [] responses: '200': $ref: '#/components/responses/ProductListingResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - economy description: Gets a product listing /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: summary: Get User Product Listings operationId: getProductListings security: - authCookie: [] responses: '200': $ref: '#/components/responses/ProductListingListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - economy description: Gets the product listings of a given user /tokenBundles: get: summary: List Token Bundles operationId: getTokenBundles security: - authCookie: [] responses: '200': $ref: '#/components/responses/TokenBundleListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - economy description: Gets the list of token bundles /tilia/status: get: summary: Get Tilia Status operationId: getTiliaStatus security: - authCookie: [] responses: '200': $ref: '#/components/responses/TiliaStatusResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - economy description: Gets the status of Tilia integration /user/{userId}/tilia/tos: parameters: - $ref: '#/components/parameters/userId' get: summary: Get Tilia TOS Agreement Status operationId: getTiliaTos security: - authCookie: [] responses: '200': $ref: '#/components/responses/TiliaTOSResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - economy description: Gets the status of the agreement of a user to the Tilia TOS /user/{userId}/balance: parameters: - $ref: '#/components/parameters/userId' get: summary: Get Balance operationId: getBalance security: - authCookie: [] responses: '200': $ref: '#/components/responses/BalanceResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - economy description: Gets the balance of a user /user/{userId}/balance/earnings: parameters: - $ref: '#/components/parameters/userId' get: summary: Get Balance Earnings operationId: getBalanceEarnings security: - authCookie: [] responses: '200': $ref: '#/components/responses/BalanceResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - economy description: Gets the balance of a user from earnings /user/{userId}/economy/account: parameters: - $ref: '#/components/parameters/userId' get: summary: Get Economy Account operationId: getEconomyAccount security: - authCookie: [] responses: '200': $ref: '#/components/responses/EconomyAccountResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - economy description: Gets the economy account of a user /economy/licenses/active: get: summary: Get Active Licenses operationId: getActiveLicenses security: - authCookie: [] responses: '200': $ref: '#/components/responses/LicenseListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - economy description: Gets active licenses /economy/store: parameters: - $ref: '#/components/parameters/storeId' - $ref: '#/components/parameters/hydrateListings' - $ref: '#/components/parameters/hydrateProducts' get: summary: Get Store operationId: getStore security: - authCookie: [] responses: '200': $ref: '#/components/responses/StoreResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - economy description: Gets a store /economy/store/shelves: parameters: - $ref: '#/components/parameters/storeId' - $ref: '#/components/parameters/hydrateListings' - $ref: '#/components/parameters/storeView' get: summary: Get Store Shelves operationId: getStoreShelves security: - authCookie: [] responses: '200': $ref: '#/components/responses/StoreShelfListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - economy description: Gets the shelves for a store /favorites: get: summary: List Favorites tags: - favorites responses: '200': $ref: '#/components/responses/FavoriteListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: getFavorites security: - authCookie: [] description: Returns a list of favorites. parameters: - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' - schema: type: string in: query name: type description: The type of favorites to return, FavoriteType. - $ref: '#/components/parameters/tag' post: summary: Add Favorite operationId: addFavorite security: - authCookie: [] responses: '200': $ref: '#/components/responses/FavoriteResponse' '400': $ref: '#/components/responses/FavoriteAddAlreadyFavoritedError' '403': $ref: '#/components/responses/FavoriteAddNotFriendsError' 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. requestBody: content: application/json: schema: $ref: '#/components/schemas/AddFavoriteRequest' examples: Example Favorite Friend: value: type: friend favoriteId: usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469 tags: - group_0 Example Favorite Avatar: value: type: avatar favoriteId: avtr_912d66a4-4714-43b8-8407-7de2cafbf55b tags: - avatars1 description: '' tags: - favorites /favorites/{favoriteId}: parameters: - $ref: '#/components/parameters/favoriteId' delete: summary: Remove Favorite operationId: removeFavorite security: - authCookie: [] responses: '200': $ref: '#/components/responses/FavoriteRemovedSuccess' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/FavoriteNotFoundError' description: Remove a favorite from your favorites list. tags: - favorites /favorite/groups: get: summary: List Favorite Groups tags: - favorites responses: '200': $ref: '#/components/responses/FavoriteGroupListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: getFavoriteGroups security: - authCookie: [] parameters: - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/userIdAdmin' - schema: type: string in: query name: ownerId description: The owner of whoms favorite groups to return. Must be a UserID. description: Return a list of favorite groups owned by a user. Returns the same information as `getFavoriteGroups`. /favorite/group/{favoriteGroupType}/{favoriteGroupName}/{userId}: parameters: - $ref: '#/components/parameters/favoriteGroupType' - $ref: '#/components/parameters/favoriteGroupName' - $ref: '#/components/parameters/userId' get: summary: Show Favorite Group tags: - favorites responses: '200': $ref: '#/components/responses/FavoriteGroupResponse' operationId: getFavoriteGroup security: - authCookie: [] description: Fetch information about a specific favorite group. put: summary: Update Favorite Group operationId: updateFavoriteGroup security: - authCookie: [] responses: '200': description: OK requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateFavoriteGroupRequest' tags: - favorites description: Update information about a specific favorite group. delete: summary: Clear Favorite Group operationId: clearFavoriteGroup security: - authCookie: [] responses: '200': $ref: '#/components/responses/FavoriteGroupClearedSuccess' tags: - favorites description: Clear ALL contents of a specific favorite group. /auth/user/favoritelimits: parameters: [] get: summary: Get Favorite Limits tags: - favorites responses: '200': $ref: '#/components/responses/FavoriteLimitsResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: getFavoriteLimits security: - authCookie: [] description: Return information about a specific Favorite. parameters: [] /files: get: summary: List Files responses: '200': $ref: '#/components/responses/FileListResponse' operationId: getFiles security: - authCookie: [] description: Returns a list of files parameters: - schema: type: string minLength: 1 in: query name: tag description: Tag, for example "icon" or "gallery", not included by default. - schema: type: string in: query name: userId deprecated: true description: UserID, will always generate a 500 permission error. - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' tags: - files /file: post: summary: Create File tags: - files responses: '200': $ref: '#/components/responses/FileResponse' operationId: createFile requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateFileRequest' security: - authCookie: [] description: Creates a new File object /file/{fileId}: parameters: - $ref: '#/components/parameters/fileId' get: summary: Show File operationId: getFile tags: - files responses: '200': $ref: '#/components/responses/FileResponse' '404': $ref: '#/components/responses/FileNotFoundError' security: - authCookie: [] 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. delete: summary: Delete File operationId: deleteFile responses: '200': $ref: '#/components/responses/FileResponse' '404': $ref: '#/components/responses/FileDeletedError' tags: - files security: - authCookie: [] description: Deletes a File object. post: summary: Create File Version operationId: createFileVersion responses: '200': $ref: '#/components/responses/FileResponse' security: - authCookie: [] 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' /file/{fileId}/{versionId}: parameters: - $ref: '#/components/parameters/fileId' - $ref: '#/components/parameters/versionId' get: summary: Download File Version tags: - files responses: '200': $ref: '#/components/responses/RawFileResponse' '404': $ref: '#/components/responses/FileNotFoundError' operationId: downloadFileVersion security: - authCookie: [] 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. delete: summary: Delete File Version operationId: deleteFileVersion responses: '200': $ref: '#/components/responses/FileResponse' '400': $ref: '#/components/responses/FileVersionDeleteInitialError' '500': $ref: '#/components/responses/FileVersionDeleteMiddleError' security: - authCookie: [] description: Delete a specific version of a file. You can only delete the latest version. tags: - files /file/{fileId}/{versionId}/{fileType}/finish: parameters: - $ref: '#/components/parameters/fileId' - $ref: '#/components/parameters/versionId' - $ref: '#/components/parameters/fileType' put: summary: Finish FileData Upload tags: - files responses: '200': $ref: '#/components/responses/FileResponse' operationId: finishFileDataUpload requestBody: content: application/json: schema: $ref: '#/components/schemas/FinishFileDataUploadRequest' examples: Example Request: value: etags: - xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy nextPartNumber: '0' maxParts: '0' 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`. security: - authCookie: [] 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. /file/{fileId}/{versionId}/{fileType}/start: parameters: - $ref: '#/components/parameters/fileId' - $ref: '#/components/parameters/versionId' - $ref: '#/components/parameters/fileType' put: summary: Start FileData Upload tags: - files responses: '200': $ref: '#/components/responses/FileUploadURLResponse' '400': $ref: '#/components/responses/FileUploadAlreadyFinishedError' operationId: startFileDataUpload parameters: - schema: type: integer minimum: 0 example: 1 in: query name: partNumber required: false description: The part number to start uploading. If not provided, the first part will be started. deprecated: true security: - authCookie: [] 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. /file/{fileId}/{versionId}/{fileType}/status: parameters: - $ref: '#/components/parameters/fileId' - $ref: '#/components/parameters/versionId' - $ref: '#/components/parameters/fileType' get: summary: Check FileData Upload Status tags: - files responses: '200': $ref: '#/components/responses/FileVersionUploadStatusResponse' operationId: getFileDataUploadStatus security: - authCookie: [] 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. /analysis/{fileId}/{versionId}: parameters: - $ref: '#/components/parameters/fileId' - $ref: '#/components/parameters/versionId' get: summary: Get File Version Analysis tags: - files responses: '200': $ref: '#/components/responses/FileAnalysisResponse' '202': $ref: '#/components/responses/AnalysisNotYetAvailableError' '404': $ref: '#/components/responses/FileNotFoundError' operationId: getFileAnalysis security: - authCookie: [] description: Get the performance analysis for the uploaded assets of an avatar /analysis/{fileId}/{versionId}/security: parameters: - $ref: '#/components/parameters/fileId' - $ref: '#/components/parameters/versionId' get: summary: Get File Version Analysis Security tags: - files responses: '200': $ref: '#/components/responses/FileAnalysisResponse' '202': $ref: '#/components/responses/AnalysisNotYetAvailableError' '404': $ref: '#/components/responses/FileNotFoundError' operationId: getFileAnalysisSecurity security: - authCookie: [] description: Get the security performance analysis for the uploaded assets of an avatar /analysis/{fileId}/{versionId}/standard: parameters: - $ref: '#/components/parameters/fileId' - $ref: '#/components/parameters/versionId' get: summary: Get File Version Analysis Standard tags: - files responses: '200': $ref: '#/components/responses/FileAnalysisResponse' '202': $ref: '#/components/responses/AnalysisNotYetAvailableError' '404': $ref: '#/components/responses/FileNotFoundError' operationId: getFileAnalysisStandard security: - authCookie: [] description: Get the standard performance analysis for the uploaded assets of an avatar /file/image: post: summary: Upload gallery image, icon, emoji or sticker tags: - files responses: '200': $ref: '#/components/responses/FileResponse' operationId: uploadImage requestBody: content: multipart/form-data: schema: type: object properties: file: type: string format: binary description: The binary blob of the png file. tag: type: string description: Needs to be either icon, gallery, sticker, emoji, or emojianimated 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) animationStyle: type: string example: bats description: Animation style for sticker, required for emoji. maskTag: type: string example: square description: Mask of the sticker, optional for emoji. required: - file - tag security: - authCookie: [] description: Upload an image, which can be an icon, gallery image, sticker or emoji /icon: post: summary: Upload icon tags: - files responses: '200': $ref: '#/components/responses/FileResponse' operationId: uploadIcon requestBody: content: multipart/form-data: schema: type: object properties: file: type: string format: binary description: The binary blob of the png file. required: - file security: - authCookie: [] description: Upload an icon /gallery: post: summary: Upload gallery image tags: - files responses: '200': $ref: '#/components/responses/FileResponse' operationId: uploadGalleryImage requestBody: content: multipart/form-data: schema: type: object properties: file: type: string format: binary description: The binary blob of the png file. required: - file security: - authCookie: [] description: Upload a gallery image /adminassetbundles/{adminAssetBundleId}: get: summary: Get AdminAssetBundle responses: '200': $ref: '#/components/responses/AdminAssetBundleResponse' operationId: getAdminAssetBundle security: - authCookie: [] description: Returns an AdminAssetBundle parameters: - $ref: '#/components/parameters/adminAssetBundleId' tags: - files /auth/user/friends: get: summary: List Friends tags: - friends responses: '200': $ref: '#/components/responses/LimitedUserFriendListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: getFriends security: - authCookie: [] parameters: - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offline' description: List information about friends. /user/{userId}/friendRequest: parameters: - $ref: '#/components/parameters/userId' post: summary: Send Friend Request tags: - friends operationId: friend description: Send a friend request to another user. security: - authCookie: [] responses: '200': $ref: '#/components/responses/NotificationResponse' '400': $ref: '#/components/responses/FriendBadRequestError' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/UserDoesntExistError' delete: summary: Delete Friend Request tags: - friends operationId: deleteFriendRequest description: Deletes an outgoing pending friend request to another user. To delete an incoming friend request, use the `deleteNotification` endpoint instead. 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: summary: Check Friend Status tags: - friends responses: '200': $ref: '#/components/responses/FriendStatusResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: getFriendStatus security: - authCookie: [] 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. /auth/user/friends/{userId}: parameters: - $ref: '#/components/parameters/userId' delete: summary: Unfriend operationId: unfriend responses: '200': $ref: '#/components/responses/UnfriendSuccess' '400': $ref: '#/components/responses/NotFriendsError' '401': $ref: '#/components/responses/MissingCredentialsError' description: Unfriend a user by ID. security: - authCookie: [] tags: - friends /groups: get: summary: Search Group description: Searches Groups by name or shortCode operationId: searchGroups tags: - groups parameters: - in: query name: query schema: type: string required: false description: Query to search for, can be either Group Name or Group shortCode - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/number' responses: '200': $ref: '#/components/responses/LimitedGroupListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' post: summary: Create Group description: Creates a Group and returns a Group object. **Requires VRC+ Subscription.** operationId: createGroup tags: - groups requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateGroupRequest' responses: '200': $ref: '#/components/responses/GroupResponse' '401': $ref: '#/components/responses/MissingCredentialsError' security: - authCookie: [] /groups/roleTemplates: get: summary: Get Group Role Templates description: Obtain predefined templates for group roles operationId: getGroupRoleTemplates tags: - groups responses: '200': $ref: '#/components/responses/GroupRoleTemplatesResponse' '401': $ref: '#/components/responses/MissingCredentialsError' security: - authCookie: [] /groups/{groupId}: parameters: - $ref: '#/components/parameters/groupId' get: summary: Get Group by ID description: Returns a single Group by ID. tags: - groups operationId: getGroup parameters: - in: query name: includeRoles schema: type: boolean required: false description: Include roles for the Group object. Defaults to false. responses: '200': $ref: '#/components/responses/GroupResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] put: summary: Update Group description: Updates a Group and returns it. operationId: updateGroup tags: - groups requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateGroupRequest' responses: '200': $ref: '#/components/responses/GroupResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] delete: summary: Delete Group operationId: deleteGroup tags: - groups description: Deletes a Group. responses: '200': $ref: '#/components/responses/DeleteGroupSuccess' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] /groups/{groupId}/announcement: parameters: - $ref: '#/components/parameters/groupId' get: 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. operationId: getGroupAnnouncements tags: - groups responses: '200': $ref: '#/components/responses/GroupAnnouncementResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] post: 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' operationId: createGroupAnnouncement tags: - groups requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateGroupAnnouncementRequest' responses: '200': $ref: '#/components/responses/GroupAnnouncementResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] delete: summary: Delete Group Announcement description: Deletes the announcement for a Group. operationId: deleteGroupAnnouncement tags: - groups responses: '200': $ref: '#/components/responses/DeleteGroupAnnouncementSuccess' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] /groups/{groupId}/auditLogs: parameters: - $ref: '#/components/parameters/groupId' get: summary: Get Group Audit Logs description: Returns a list of audit logs for a Group. operationId: getGroupAuditLogs 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' responses: '200': $ref: '#/components/responses/GroupAuditLogListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] /groups/{groupId}/bans: parameters: - $ref: '#/components/parameters/groupId' get: summary: Get Group Bans description: Returns a list of banned users for a Group. operationId: getGroupBans tags: - groups parameters: - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' responses: '200': $ref: '#/components/responses/GroupMemberListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/NoPermission' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] post: summary: Ban Group Member description: Bans a user from a Group. operationId: banGroupMember tags: - groups requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/BanGroupMemberRequest' responses: '200': $ref: '#/components/responses/GroupMemberResponse' '400': $ref: '#/components/responses/BanGroupMemberBadRequestError' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] /groups/{groupId}/bans/{userId}: parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/userId' delete: summary: Unban Group Member description: Unbans a user from a Group. operationId: unbanGroupMember tags: - groups responses: '200': $ref: '#/components/responses/GroupMemberResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] /groups/{groupId}/galleries: parameters: - $ref: '#/components/parameters/groupId' post: summary: Create Group Gallery description: Creates a gallery for a Group. operationId: createGroupGallery tags: - groups requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateGroupGalleryRequest' responses: '200': $ref: '#/components/responses/GroupGalleryResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] /groups/{groupId}/galleries/{groupGalleryId}: parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/groupGalleryId' get: summary: Get Group Gallery Images description: Returns a list of images for a Group gallery. operationId: getGroupGalleryImages tags: - groups parameters: - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' - in: query name: approved required: false schema: type: boolean description: If specified, only returns images that have been approved or not approved. responses: '200': $ref: '#/components/responses/GroupGalleryImageListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] put: summary: Update Group Gallery description: Updates a gallery for a Group. operationId: updateGroupGallery tags: - groups requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateGroupGalleryRequest' responses: '200': $ref: '#/components/responses/GroupGalleryResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] delete: summary: Delete Group Gallery description: Deletes a gallery for a Group. operationId: deleteGroupGallery tags: - groups responses: '200': $ref: '#/components/responses/DeleteGroupGallerySuccess' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] /groups/{groupId}/galleries/{groupGalleryId}/images: parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/groupGalleryId' post: summary: Add Group Gallery Image description: Adds an image to a Group gallery. operationId: addGroupGalleryImage tags: - groups requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AddGroupGalleryImageRequest' responses: '200': $ref: '#/components/responses/GroupGalleryImageResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] /groups/{groupId}/galleries/{groupGalleryId}/images/{groupGalleryImageId}: parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/groupGalleryId' - $ref: '#/components/parameters/groupGalleryImageId' delete: summary: Delete Group Gallery Image description: Deletes an image from a Group gallery. operationId: deleteGroupGalleryImage tags: - groups responses: '200': $ref: '#/components/responses/DeleteGroupGalleryImageSuccess' '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/GroupGalleryImageDeleteForbiddenError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] /groups/{groupId}/instances: parameters: - $ref: '#/components/parameters/groupId' get: summary: Get Group Instances description: Returns a list of group instances operationId: getGroupInstances tags: - groups responses: '200': $ref: '#/components/responses/GroupInstanceListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] /groups/{groupId}/invites: parameters: - $ref: '#/components/parameters/groupId' get: summary: Get Group Invites Sent description: Returns a list of members that have been invited to the Group. operationId: getGroupInvites tags: - groups parameters: - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' responses: '200': $ref: '#/components/responses/GroupMemberListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/GroupNotMemberError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] post: summary: Invite User to Group description: Sends an invite to a user to join the group. operationId: createGroupInvite tags: - groups requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateGroupInviteRequest' responses: '200': description: OK '400': $ref: '#/components/responses/GroupInviteBadRequestError' '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/GroupInviteForbiddenError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] /groups/{groupId}/invites/{userId}: parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/userId' delete: summary: Delete User Invite description: Deletes an Group invite sent to a User operationId: deleteGroupInvite tags: - groups responses: '200': description: OK '400': $ref: '#/components/responses/DeleteGroupInviteBadRequestError' '401': $ref: '#/components/responses/MissingCredentialsError' security: - authCookie: [] /groups/{groupId}/join: parameters: - $ref: '#/components/parameters/groupId' post: summary: Join Group description: Join a Group by ID and returns the member object. operationId: joinGroup tags: - groups responses: '200': $ref: '#/components/responses/GroupMemberResponse' '400': $ref: '#/components/responses/GroupAlreadyMemberError' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] /groups/{groupId}/leave: parameters: - $ref: '#/components/parameters/groupId' post: summary: Leave Group description: Leave a group by ID. operationId: leaveGroup tags: - groups responses: '200': description: OK '403': $ref: '#/components/responses/GroupNotMemberError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] /groups/{groupId}/members: parameters: - $ref: '#/components/parameters/groupId' get: 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. operationId: getGroupMembers tags: - groups parameters: - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/groupMemberSort' - $ref: '#/components/parameters/groupMemberRoleFilter' responses: '200': $ref: '#/components/responses/GroupMemberListResponse' '400': $ref: '#/components/responses/UsersInvalidSearchError' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] /groups/{groupId}/members/{userId}: parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/userId' get: summary: Get Group Member description: Returns a LimitedGroup Member. operationId: getGroupMember tags: - groups responses: '200': $ref: '#/components/responses/GroupLimitedMemberResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/GroupNotMemberError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] put: summary: Update Group Member description: Updates a Group Member operationId: updateGroupMember tags: - groups requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateGroupMemberRequest' responses: '200': $ref: '#/components/responses/GroupLimitedMemberResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] delete: summary: Kick Group Member description: Kicks a Group Member from the Group. The current user must have the "Remove Group Members" permission. operationId: kickGroupMember tags: - groups responses: '200': description: OK '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/GroupNotMemberError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] /groups/{groupId}/members/{userId}/roles/{groupRoleId}: parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/userId' - $ref: '#/components/parameters/groupRoleId' put: summary: Add Role to GroupMember description: Adds a Role to a Group Member operationId: addGroupMemberRole tags: - groups responses: '200': $ref: '#/components/responses/GroupRoleIDListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] delete: summary: Remove Role from GroupMember description: Removes a Role from a Group Member operationId: removeGroupMemberRole tags: - groups responses: '200': $ref: '#/components/responses/GroupRoleIDListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] /groups/{groupId}/permissions: parameters: - $ref: '#/components/parameters/groupId' get: summary: List Group Permissions description: Returns a List of all possible/available permissions for a Group. operationId: getGroupPermissions tags: - groups responses: '200': $ref: '#/components/responses/GroupPermissionListResponse' '400': $ref: '#/components/responses/UsersInvalidSearchError' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] /groups/{groupId}/posts: parameters: - $ref: '#/components/parameters/groupId' get: summary: Get posts from a Group description: Get posts from a Group operationId: getGroupPosts tags: - groups parameters: - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' - schema: type: boolean in: query name: publicOnly description: See public posts only. responses: '200': $ref: '#/components/responses/GroupPostsResponse' '401': $ref: '#/components/responses/MissingCredentialsError' security: - authCookie: [] post: summary: Create a post in a Group description: Create a post in a Group. operationId: addGroupPost tags: - groups requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateGroupPostRequest' responses: '200': $ref: '#/components/responses/GroupPostResponse' '401': $ref: '#/components/responses/MissingCredentialsError' security: - authCookie: [] /groups/{groupId}/posts/{notificationId}: parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/notificationId' delete: summary: Delete a Group post description: Delete a Group post operationId: deleteGroupPost tags: - groups responses: '200': $ref: '#/components/responses/GroupPostResponseSuccess' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupPostResponseSuccess' security: - authCookie: [] put: summary: Edits a Group post description: Edits a Group post operationId: updateGroupPost tags: - groups requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateGroupPostRequest' responses: '200': $ref: '#/components/responses/GroupPostResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupPostResponseSuccess' security: - authCookie: [] /groups/{groupId}/representation: parameters: - $ref: '#/components/parameters/groupId' put: 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 operationId: updateGroupRepresentation 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 responses: '200': $ref: '#/components/responses/UpdateGroupRepresentationSuccess' '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/GroupNotMemberError' security: - authCookie: [] /groups/{groupId}/requests: parameters: - $ref: '#/components/parameters/groupId' get: summary: Get Group Join Requests description: Returns a list of members that have requested to join the Group. operationId: getGroupRequests tags: - groups parameters: - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' - schema: type: boolean in: query name: blocked description: See blocked join requests responses: '200': $ref: '#/components/responses/GroupMemberListResponse' '400': $ref: '#/components/responses/GroupJoinRequestResponseBadRequestError' '403': $ref: '#/components/responses/GroupNotMemberError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] delete: summary: Cancel Group Join Request description: Cancels a request sent to join the group. operationId: cancelGroupRequest tags: - groups 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' security: - authCookie: [] /groups/{groupId}/requests/{userId}: parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/userId' put: summary: Respond Group Join request description: Responds to a Group Join Request with Accept/Deny operationId: respondGroupJoinRequest tags: - groups responses: '200': description: OK '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/RespondGroupJoinRequest' security: - authCookie: [] /groups/{groupId}/roles: parameters: - $ref: '#/components/parameters/groupId' get: summary: Get Group Roles description: Returns a Group Role by ID. operationId: getGroupRoles tags: - groups responses: '200': $ref: '#/components/responses/GroupRoleListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] post: summary: Create GroupRole description: Create a Group role. operationId: createGroupRole tags: - groups requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateGroupRoleRequest' responses: '200': $ref: '#/components/responses/GroupRoleResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotFoundError' security: - authCookie: [] /groups/{groupId}/roles/{groupRoleId}: parameters: - $ref: '#/components/parameters/groupId' - $ref: '#/components/parameters/groupRoleId' put: summary: Update Group Role description: Updates a group role by ID. operationId: updateGroupRole tags: - groups requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateGroupRoleRequest' responses: '200': $ref: '#/components/responses/GroupRoleListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' security: - authCookie: [] delete: summary: Delete Group Role description: Deletes a Group Role by ID and returns the remaining roles. operationId: deleteGroupRole tags: - groups responses: '200': $ref: '#/components/responses/GroupRoleListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/GroupNotMemberError' security: - authCookie: [] /inventory: parameters: - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' - $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: summary: Get Inventory operationId: getInventory security: - authCookie: [] responses: '200': $ref: '#/components/responses/InventoryResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - inventory description: Returns an Inventory object. /inventory/{inventoryItemId}: parameters: - $ref: '#/components/parameters/inventoryItemId' get: summary: Get Own Inventory Item operationId: getOwnInventoryItem security: - authCookie: [] responses: '200': $ref: '#/components/responses/InventoryItemResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - inventory description: Returns an InventoryItem object held by the currently logged in user. put: summary: Update Own Inventory Item operationId: updateOwnInventoryItem security: - authCookie: [] responses: '200': $ref: '#/components/responses/InventoryItemResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - inventory requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateInventoryItemRequest' description: Returns the modified InventoryItem object as held by the currently logged in user. /inventory/drops: parameters: - $ref: '#/components/parameters/active' get: summary: List Inventory Drops operationId: getInventoryDrops security: - authCookie: [] responses: '200': $ref: '#/components/responses/InventoryDropListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - inventory description: Returns a list of InventoryDrop objects. /inventory/template/{inventoryTemplateId}: parameters: - $ref: '#/components/parameters/inventoryTemplateId' get: summary: Get Inventory Template operationId: getInventoryTemplate security: - authCookie: [] responses: '200': $ref: '#/components/responses/InventoryTemplateResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - inventory description: Returns an InventoryTemplate object. /inventory/spawn: parameters: - $ref: '#/components/parameters/inventorySpawnItemId' get: summary: Spawn Inventory Item operationId: spawnInventoryItem security: - authCookie: [] responses: '200': $ref: '#/components/responses/InventorySpawnResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - inventory description: Returns an InventorySpawn object. /inventory/cloning/pedestal: parameters: - $ref: '#/components/parameters/inventoryPedestalItemId' - $ref: '#/components/parameters/inventoryPedestalDuration' get: summary: Share Inventory Item by Pedestal operationId: shareInventoryItemPedestal security: - authCookie: [] responses: '200': $ref: '#/components/responses/InventorySpawnResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - inventory description: Returns an InventorySpawn object. /inventory/cloning/direct: parameters: - $ref: '#/components/parameters/inventoryPedestalItemId' - $ref: '#/components/parameters/inventoryPedestalDuration' post: summary: Share Inventory Item Direct operationId: shareInventoryItemDirect requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ShareInventoryItemDirectRequest' security: - authCookie: [] responses: '200': $ref: '#/components/responses/InventoryShareResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - inventory description: Share content directly with other users. /invite/{userId}: parameters: - $ref: '#/components/parameters/userId' post: summary: Invite User tags: - invite responses: '200': $ref: '#/components/responses/SendNotificationResponse' '403': $ref: '#/components/responses/InviteMustBeFriendsError' operationId: inviteUser security: - authCookie: [] description: Sends an invite to a user. Returns the Notification of type `invite` that was sent. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/InviteRequest' description: Slot number of the Invite Message to use when inviting a user. /invite/{userId}/photo: parameters: - $ref: '#/components/parameters/userId' post: summary: Invite User with photo tags: - invite responses: '200': $ref: '#/components/responses/SendNotificationResponse' '403': $ref: '#/components/responses/InviteMustBeFriendsError' operationId: inviteUserWithPhoto security: - authCookie: [] description: Sends an photo invite to a user. Returns the Notification of type `invite` that was sent. requestBody: required: true content: multipart/form-data: schema: type: object properties: image: type: string format: binary description: The binary blob of the png file. data: $ref: '#/components/schemas/InviteRequest' required: - image - data /invite/myself/to/{worldId}:{instanceId}: parameters: - $ref: '#/components/parameters/worldId' - $ref: '#/components/parameters/instanceId' post: summary: Invite Myself To Instance tags: - invite operationId: inviteMyselfTo security: - authCookie: [] description: Sends self an invite to an instance responses: '200': $ref: '#/components/responses/SendNotificationResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/InstanceNotFoundError' /requestInvite/{userId}: parameters: - $ref: '#/components/parameters/userId' post: summary: Request Invite operationId: requestInvite security: - authCookie: [] description: Requests an invite from a user. Returns the Notification of type `requestInvite` that was sent. requestBody: content: application/json: schema: $ref: '#/components/schemas/RequestInviteRequest' description: Slot number of the Request Message to use when request an invite. tags: - invite responses: '200': $ref: '#/components/responses/NotificationResponse' '403': $ref: '#/components/responses/InviteMustBeFriendsError' /requestInvite/{userId}/photo: parameters: - $ref: '#/components/parameters/userId' post: summary: Request Invite with photo operationId: requestInviteWithPhoto security: - authCookie: [] description: Requests with photo an invite from a user. Returns the Notification of type `requestInvite` that was sent. requestBody: content: multipart/form-data: schema: type: object properties: image: type: string format: binary description: The binary blob of the png file. data: $ref: '#/components/schemas/RequestInviteRequest' required: - image - data tags: - invite responses: '200': $ref: '#/components/responses/NotificationResponse' '403': $ref: '#/components/responses/InviteMustBeFriendsError' /invite/{notificationId}/response: parameters: - $ref: '#/components/parameters/notificationId' post: summary: Respond Invite tags: - invite responses: '200': $ref: '#/components/responses/NotificationResponse' '400': $ref: '#/components/responses/InviteResponse400Error' operationId: respondInvite security: - authCookie: [] 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. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/InviteResponse' description: Slot number of the Response Message to use when responding to a user. /invite/{notificationId}/response/photo: parameters: - $ref: '#/components/parameters/notificationId' post: summary: Respond Invite with photo tags: - invite responses: '200': $ref: '#/components/responses/NotificationResponse' '400': $ref: '#/components/responses/InviteResponse400Error' operationId: respondInviteWithPhoto security: - authCookie: [] 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.' requestBody: required: true content: multipart/form-data: schema: type: object properties: image: type: string format: binary description: The binary blob of the png file. data: $ref: '#/components/schemas/InviteResponse' required: - image - data /message/{userId}/{messageType}: parameters: - $ref: '#/components/parameters/userId' - $ref: '#/components/parameters/messageType' get: summary: List Invite Messages tags: - invite responses: '200': $ref: '#/components/responses/InviteMessageListResponse' '400': $ref: '#/components/responses/InviteMessageInvalidSlotNumberError' '401': $ref: '#/components/responses/NotAuthorizedActionError' operationId: getInviteMessages security: - authCookie: [] 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 /message/{userId}/{messageType}/{slot}: parameters: - $ref: '#/components/parameters/userId' - $ref: '#/components/parameters/messageType' - $ref: '#/components/parameters/slot' get: summary: Get Invite Message tags: - invite responses: '200': $ref: '#/components/responses/InviteMessageResponse' '400': $ref: '#/components/responses/InviteMessageGetNegativeSlotError' '401': $ref: '#/components/responses/NotAuthorizedActionError' '404': $ref: '#/components/responses/InviteMessageGetTooHighSlotError' operationId: getInviteMessage security: - authCookie: [] 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 put: summary: Update Invite Message operationId: updateInviteMessage security: - authCookie: [] 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 responses: '200': $ref: '#/components/responses/InviteMessageListResponse' '400': $ref: '#/components/responses/InviteMessageInvalidSlotNumberError' '401': $ref: '#/components/responses/NotAuthorizedActionError' '429': $ref: '#/components/responses/InviteMessageUpdateRateLimitError' requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateInviteMessageRequest' description: Message of what to set the invite message to. tags: - invite delete: summary: Reset Invite Message operationId: resetInviteMessage 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' tags: - invite 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. /instances: post: summary: Create Instance tags: - instances operationId: createInstance security: - authCookie: [] description: Create an instance requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateInstanceRequest' responses: '200': $ref: '#/components/responses/InstanceResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /instances/recent: get: summary: List Recent Locations tags: - instances parameters: - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' operationId: getRecentLocations security: - authCookie: [] description: Returns a list of recently visited locations. responses: '200': $ref: '#/components/responses/LocationIDListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /instances/{worldId}:{instanceId}: parameters: - $ref: '#/components/parameters/worldId' - $ref: '#/components/parameters/instanceId' get: summary: Get Instance tags: - instances operationId: getInstance security: - authCookie: [] 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"! responses: '200': $ref: '#/components/responses/InstanceResponse' '401': $ref: '#/components/responses/MissingCredentialsError' delete: summary: Close Instance tags: - instances operationId: closeInstance security: - authCookie: [] parameters: - in: query name: hardClose schema: type: boolean required: false description: Whether to hard close the instance. Defaults to false. - in: query name: closedAt schema: type: string format: date-time description: |- The time after which users won't be allowed to join the instances. If omitted, the instance will be closed immediately. 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. 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: summary: Get Instance Short Name tags: - instances operationId: getShortName security: - authCookie: [] description: Returns an instance short name. responses: '200': $ref: '#/components/responses/InstanceShortNameResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /instances/s/{shortName}: parameters: - schema: type: string name: shortName in: path required: true description: Must be a valid instance short name. get: summary: Get Instance By Short Name tags: - instances operationId: getInstanceByShortName security: - authCookie: [] description: Returns an instance. Please read [Instances Tutorial](https://vrchatapi.github.io/tutorials/instances/) for more information on Instances. responses: '200': $ref: '#/components/responses/InstanceResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/InstanceNotFoundError' /auth/user/notifications: get: summary: List Notifications tags: - notifications responses: '200': $ref: '#/components/responses/NotificationListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: getNotifications security: - authCookie: [] description: Retrieve all of the current user's notifications. parameters: - schema: type: string example: all in: query name: type description: Only send notifications of this type (can use `all` for all). This parameter no longer does anything, and is deprecated. deprecated: true - schema: type: boolean in: query name: sent description: Return notifications sent by the user. Must be false or omitted. deprecated: true - schema: type: boolean in: query name: hidden description: Whether to return hidden or non-hidden notifications. True only allowed on type `friendRequest`. - schema: type: string example: five_minutes_ago in: query name: after description: Only return notifications sent after this Date. Ignored if type is `friendRequest`. - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' /auth/user/notifications/{notificationId}: parameters: - $ref: '#/components/parameters/notificationId' get: summary: Show notification operationId: getNotification tags: - notifications responses: '200': $ref: '#/components/responses/NotificationResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/NotificationNotFoundError' security: - authCookie: [] description: Get a notification by notification `not_` ID. /auth/user/notifications/{notificationId}/accept: parameters: - $ref: '#/components/parameters/notificationId' put: summary: Accept Friend Request operationId: acceptFriendRequest responses: '200': $ref: '#/components/responses/FriendSuccess' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/AcceptFriendRequestError' security: - authCookie: [] 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 /auth/user/notifications/{notificationId}/see: parameters: - $ref: '#/components/parameters/notificationId' put: summary: Mark Notification As Read operationId: markNotificationAsRead responses: '200': $ref: '#/components/responses/NotificationResponse' '401': $ref: '#/components/responses/MissingCredentialsError' security: - authCookie: [] description: Mark a notification as seen. tags: - notifications /auth/user/notifications/{notificationId}/hide: parameters: - $ref: '#/components/parameters/notificationId' put: summary: Delete Notification operationId: deleteNotification responses: '200': $ref: '#/components/responses/NotificationResponse' '401': $ref: '#/components/responses/MissingCredentialsError' security: - authCookie: [] description: Delete a notification. tags: - notifications /auth/user/notifications/clear: put: summary: Clear All Notifications operationId: clearNotifications responses: '200': $ref: '#/components/responses/ClearNotificationsSuccess' '401': $ref: '#/components/responses/MissingCredentialsError' security: - authCookie: [] description: Clear **all** notifications. tags: - notifications /auth/user/playermoderations: get: summary: Search Player Moderations tags: - playermoderation responses: '200': $ref: '#/components/responses/PlayerModerationListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: getPlayerModerations security: - authCookie: [] parameters: - schema: type: string in: query name: type description: Must be one of PlayerModerationType, except unblock. Unblocking simply removes a block. - schema: type: string in: query name: targetUserId description: Must be valid UserID. 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. post: summary: Moderate User operationId: moderateUser security: - authCookie: [] responses: '200': $ref: '#/components/responses/PlayerModerationResponse' '401': $ref: '#/components/responses/MissingCredentialsError' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ModerateUserRequest' description: '' 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 delete: summary: Clear All Player Moderations operationId: clearAllPlayerModerations security: - authCookie: [] responses: '200': $ref: '#/components/responses/PlayerModerationClearAllSuccess' '401': $ref: '#/components/responses/MissingCredentialsError' description: ⚠️ **This will delete every single player moderation you've ever made.** tags: - playermoderation /auth/user/unplayermoderate: put: summary: Unmoderate User operationId: unmoderateUser security: - authCookie: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ModerateUserRequest' 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. responses: '200': $ref: '#/components/responses/PlayerModerationUnmoderatedSuccess' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - playermoderation /prints/user/{userId}: parameters: - $ref: '#/components/parameters/userId' get: summary: Get Own Prints operationId: getUserPrints security: - authCookie: [] responses: '200': $ref: '#/components/responses/PrintListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/UnableToRequestOtherUsersPrintsError' tags: - 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. /prints/{printId}: parameters: - $ref: '#/components/parameters/printId' get: summary: Get Print operationId: getPrint security: - authCookie: [] responses: '200': $ref: '#/components/responses/PrintResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - prints description: Returns a print. delete: summary: Delete Print operationId: deletePrint security: - authCookie: [] responses: '200': description: Empty response if successful '401': $ref: '#/components/responses/MissingCredentialsError' tags: - prints description: Returns a print. post: summary: Edit Print operationId: editPrint requestBody: content: multipart/form-data: schema: type: object properties: image: type: string format: binary description: The binary blob of the png file. note: type: string description: The caption for the image. required: - image security: - authCookie: [] responses: '200': $ref: '#/components/responses/PrintResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - prints description: Edits a print. /prints: post: summary: Upload Print operationId: uploadPrint requestBody: content: multipart/form-data: schema: type: object properties: image: type: string format: binary description: The binary blob of the png file. timestamp: type: string format: date-time description: The time the image was captured. note: type: string description: The caption for the image. 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' tags: - prints description: Uploads and creates a print. /props/{propId}: parameters: - $ref: '#/components/parameters/propId' get: summary: Get Prop operationId: getProp security: - authCookie: [] responses: '200': $ref: '#/components/responses/PropResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - props description: Returns a Prop object. /jams: get: summary: Show jams list tags: - jams responses: '200': $ref: '#/components/responses/JamListResponse' security: - authCookie: [] operationId: getJams 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`. `` parameters: - schema: type: string example: avatar in: query name: type description: Only show jams of this type (`avatar` or `world`). /jams/{jamId}: parameters: - $ref: '#/components/parameters/jamId' get: summary: Show jam information tags: - jams responses: '200': $ref: '#/components/responses/JamResponse' '404': $ref: '#/components/responses/JamNotFoundError' security: - authCookie: [] operationId: getJam description: Returns a jam. /jams/{jamId}/submissions: parameters: - $ref: '#/components/parameters/jamId' get: summary: Show jam submissions tags: - jams responses: '200': $ref: '#/components/responses/SubmissionListResponse' '404': $ref: '#/components/responses/JamNotFoundError' security: - authCookie: [] operationId: getJamSubmissions description: Returns all submissions of a jam. /users: get: summary: Search All Users tags: - users responses: '200': $ref: '#/components/responses/LimitedUserSearchListResponse' '400': $ref: '#/components/responses/UsersInvalidSearchError' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: searchUsers security: - authCookie: [] parameters: - schema: type: string minLength: 0 in: query name: search description: Searches by `displayName`. Will return empty array if search query is empty or missing. - schema: type: string in: query name: developerType description: Active user by developer type, none for normal users and internal for moderators - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' description: Search and list any users by text query /users/{username}/name: parameters: - schema: type: string name: username in: path required: true description: Username of the user get: summary: Get User by Username tags: - users responses: '200': $ref: '#/components/responses/UserResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: getUserByName security: - authCookie: [] 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. deprecated: true /users/{userId}: parameters: - $ref: '#/components/parameters/userId' get: summary: Get User by ID tags: - users responses: '200': $ref: '#/components/responses/UserResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: getUser security: - authCookie: [] description: Get public user information about a specific user using their ID. put: summary: Update User Info operationId: updateUser responses: '200': $ref: '#/components/responses/CurrentUserResponse' '400': $ref: '#/components/responses/CurrentPasswordRequiredError' '401': $ref: '#/components/responses/MissingCredentialsError' description: Update a users information such as the email and birthday. security: - authCookie: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateUserRequest' tags: - users /users/{userId}/groups: parameters: - $ref: '#/components/parameters/userId' get: summary: Get User Groups tags: - users security: - authCookie: [] responses: '200': $ref: '#/components/responses/LimitedUserGroupListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: getUserGroups description: Get user's public groups /users/{userId}/groups/requested: parameters: - $ref: '#/components/parameters/userId' get: summary: Get User Group Requests description: Returns a list of Groups the user has requested to be invited into. operationId: getUserGroupRequests tags: - users responses: '200': $ref: '#/components/responses/GroupListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' security: - authCookie: [] /users/{userId}/groups/represented: parameters: - $ref: '#/components/parameters/userId' get: summary: Get user's current represented group description: Returns the current group that the user is currently representing operationId: getUserRepresentedGroup tags: - users responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/representedGroup' '401': $ref: '#/components/responses/MissingCredentialsError' security: - authCookie: [] /users/{userId}/feedback: parameters: - $ref: '#/components/parameters/userId' - $ref: '#/components/parameters/contentId' - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' get: summary: Get User Feedback tags: - users deprecated: true security: - authCookie: [] responses: '200': $ref: '#/components/responses/FeedbackListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: getUserFeedback description: Get user's submitted feedback /userNotes: get: summary: Get User Notes tags: - users security: - authCookie: [] responses: '200': $ref: '#/components/responses/UserNoteListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: getUserNotes parameters: - $ref: '#/components/parameters/number' - $ref: '#/components/parameters/offset' description: Get recently updated user notes post: summary: Update User Note tags: - users responses: '200': $ref: '#/components/responses/UserNoteResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: updateUserNote security: - authCookie: [] description: Updates the currently authenticated user's note on a user requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateUserNoteRequest' /userNotes/{userNoteId}: parameters: - $ref: '#/components/parameters/userNoteId' get: summary: Get User Note tags: - users security: - authCookie: [] responses: '200': $ref: '#/components/responses/UserNoteResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: getUserNote description: Get a particular user note /users/{userId}/addTags: parameters: - $ref: '#/components/parameters/userId' post: summary: Add User Tags description: Adds tags to the user's profile operationId: addTags tags: - users requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ChangeUserTagsRequest' responses: '200': $ref: '#/components/responses/CurrentUserResponse' '400': $ref: '#/components/responses/UserTagInvalidError' '401': $ref: '#/components/responses/MissingCredentialsError' security: - authCookie: [] /users/{userId}/removeTags: parameters: - $ref: '#/components/parameters/userId' post: summary: Remove User Tags description: Removes tags from the user's profile operationId: removeTags tags: - users requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ChangeUserTagsRequest' responses: '200': $ref: '#/components/responses/CurrentUserResponse' '400': $ref: '#/components/responses/UserTagInvalidError' '401': $ref: '#/components/responses/MissingCredentialsError' security: - authCookie: [] /users/{userId}/badges/{badgeId}: parameters: - $ref: '#/components/parameters/userId' - $ref: '#/components/parameters/badgeId' put: summary: Update User Badge description: Updates a user's badge operationId: updateBadge tags: - users requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateUserBadgeRequest' 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. security: - authCookie: [] /users/{userId}/instances/groups: parameters: - $ref: '#/components/parameters/userId' get: summary: Get User Group Instances description: Returns a list of group instances for a user operationId: getUserGroupInstances tags: - users responses: '200': $ref: '#/components/responses/UserGroupInstanceListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/UserMustBeOwnError' security: - authCookie: [] /users/{userId}/{worldId}/persist/exists: parameters: - $ref: '#/components/parameters/userId' - $ref: '#/components/parameters/worldId' get: summary: Check User Persistence Exists description: Checks whether the user has persistence data for a given world operationId: checkUserPersistenceExists tags: - users - worlds 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. security: - authCookie: [] /users/{userId}/{worldId}/persist: parameters: - $ref: '#/components/parameters/userId' - $ref: '#/components/parameters/worldId' delete: summary: Delete User Persistence description: Deletes the user's persistence data for a given world operationId: deleteUserPersistence tags: - users - worlds 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. security: - authCookie: [] /worlds: get: summary: Search All Worlds tags: - worlds responses: '200': $ref: '#/components/responses/LimitedWorldListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: searchWorlds security: - authCookie: [] parameters: - $ref: '#/components/parameters/featured' - $ref: '#/components/parameters/sort' - schema: type: string enum: - me in: query required: false name: user description: Set to `me` for searching own worlds. - $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/fuzzy' description: Search and list any worlds by query filters. post: summary: Create World operationId: createWorld responses: '200': $ref: '#/components/responses/WorldResponse' '400': $ref: '#/components/responses/WorldCreateNotAllowedYetError' '401': $ref: '#/components/responses/MissingCredentialsError' requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateWorldRequest' description: '' 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 /worlds/active: get: summary: List Active Worlds tags: - worlds responses: '200': $ref: '#/components/responses/LimitedWorldListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: getActiveWorlds security: - authCookie: [] 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' description: Search and list currently Active worlds by query filters. /worlds/favorites: get: summary: List Favorited Worlds tags: - worlds responses: '200': $ref: '#/components/responses/FavoritedWorldListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/WorldSeeOtherUserFavoritesError' operationId: getFavoritedWorlds security: - authCookie: [] 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' description: Search and list favorited worlds by query filters. /worlds/recent: get: summary: List Recent Worlds tags: - worlds responses: '200': $ref: '#/components/responses/LimitedWorldListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '403': $ref: '#/components/responses/WorldSeeOtherUserRecentsError' operationId: getRecentWorlds security: - authCookie: [] 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' description: Search and list recently visited worlds by query filters. /worlds/{worldId}: parameters: - $ref: '#/components/parameters/worldId' get: summary: Get World by ID tags: - worlds operationId: getWorld responses: '200': $ref: '#/components/responses/WorldResponse' '404': $ref: '#/components/responses/WorldNotFoundError' description: |- Get information about a specific World. Works unauthenticated but when so will always return `0` for certain fields. put: summary: Update World operationId: updateWorld security: - authCookie: [] responses: '200': $ref: '#/components/responses/WorldResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/WorldNotFoundError' requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateWorldRequest' description: Update information about a specific World. tags: - worlds delete: summary: Delete World operationId: deleteWorld security: - authCookie: [] responses: '200': description: OK '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/WorldNotFoundError' 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 /worlds/{worldId}/metadata: parameters: - $ref: '#/components/parameters/worldId' get: summary: Get World Metadata tags: - worlds operationId: getWorldMetadata security: - authCookie: [] deprecated: true 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. responses: '200': $ref: '#/components/responses/WorldMetadataResponse' '404': $ref: '#/components/responses/WorldNotFoundError' /worlds/{worldId}/publish: parameters: - $ref: '#/components/parameters/worldId' get: summary: Get World Publish Status tags: - worlds operationId: getWorldPublishStatus security: - authCookie: [] description: Returns a worlds publish status. responses: '200': $ref: '#/components/responses/WorldPublishStatusResponse' '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/WorldNotFoundError' put: summary: Publish World operationId: publishWorld security: - authCookie: [] responses: '200': description: TODO '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/WorldNotFoundError' description: Publish a world. You can only publish one world per week. tags: - worlds delete: summary: Unpublish World operationId: unpublishWorld security: - authCookie: [] responses: '200': description: OK '401': $ref: '#/components/responses/MissingCredentialsError' '404': $ref: '#/components/responses/WorldNotFoundError' description: Unpublish a world. tags: - worlds /worlds/{worldId}/{instanceId}: parameters: - $ref: '#/components/parameters/worldId' - $ref: '#/components/parameters/instanceId' get: summary: Get World Instance tags: - worlds operationId: getWorldInstance security: - authCookie: [] description: Returns a worlds instance. responses: '200': $ref: '#/components/responses/InstanceResponse' '401': $ref: '#/components/responses/MissingCredentialsError' /config: get: summary: Fetch API Config tags: - miscellaneous responses: '200': $ref: '#/components/responses/APIConfigResponse' operationId: getConfig 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. security: [] /infoPush: get: summary: Show Information Notices tags: - miscellaneous responses: '200': $ref: '#/components/responses/InfoPushListResponse' operationId: getInfoPush 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. parameters: - $ref: '#/components/parameters/require' - $ref: '#/components/parameters/include' x-badges: - color: gold label: 'Status: Early Access (Still Under Development)' /css/app.css: get: summary: Download CSS tags: - miscellaneous 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' operationId: getCSS description: Fetches the CSS code to the frontend React website. parameters: - $ref: '#/components/parameters/variant' - $ref: '#/components/parameters/branch' /js/app.js: get: summary: Download JavaScript tags: - miscellaneous 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' operationId: getJavaScript description: Fetches the JavaScript code to the frontend React website. parameters: - $ref: '#/components/parameters/variant' - $ref: '#/components/parameters/branch' /health: get: summary: Check API Health tags: - miscellaneous operationId: getHealth 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. security: [] responses: '200': $ref: '#/components/responses/APIHealthResponse' deprecated: true /visits: get: summary: Current Online Users tags: - miscellaneous responses: '200': $ref: '#/components/responses/CurrentOnlineUsersResponse' operationId: getCurrentOnlineUsers security: [] description: |- Returns the current number of online users. **NOTE:** The response type is not a JSON object, but a simple JSON integer. /time: get: summary: Current System Time tags: - miscellaneous responses: '200': $ref: '#/components/responses/SystemTimeResponse' operationId: getSystemTime description: |- Returns the current time of the API server. **NOTE:** The response type is not a JSON object, but a simple JSON string. security: [] /auth/permissions: get: summary: Get Assigned Permissions operationId: getAssignedPermissions security: - authCookie: [] responses: '200': $ref: '#/components/responses/PermissionListResponse' '401': $ref: '#/components/responses/MissingCredentialsError' tags: - miscellaneous description: Returns a list of all permissions currently granted by the user. Permissions are assigned e.g. by subscribing to VRC+. parameters: [] /permissions/{permissionId}: parameters: - $ref: '#/components/parameters/permissionId' get: summary: Get Permission tags: - miscellaneous responses: '200': $ref: '#/components/responses/PermissionResponse' '401': $ref: '#/components/responses/MissingCredentialsError' operationId: getPermission security: - authCookie: [] description: Returns a single permission. This endpoint is pretty useless, as it returns the exact same information as `/auth/permissions`. components: schemas: UserExists: 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: userExists: default: false description: Status if a user exist with that username or userId. type: boolean nameOk: default: false description: Is the username valid? type: boolean required: - userExists title: UserExists type: object Response: properties: message: minLength: 1 type: string status_code: minimum: 100 type: integer required: - status_code title: Response type: object Error: properties: error: $ref: '#/components/schemas/Response' title: Error type: object AccountDeletionLog: title: AccountDeletionLog type: object properties: message: type: string default: Deletion requested example: Deletion requested 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. deletionScheduled: type: string format: date-time nullable: true description: When the deletion is scheduled to happen, standard is 14 days after the request. dateTime: type: string format: date-time description: Date and time of the deletion request. UserID: example: usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469 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. AgeVerificationStatus: title: AgeVerificationStatus type: string description: | `verified` is obsolete. User who have verified and are 18+ can switch to `plus18` status. enum: - hidden - verified - 18+ x-enum-varnames: - hidden - verified - plus18 AgeVerified: title: AgeVerified type: boolean description: '`true` if, user is age verified (not 18+).' BadgeID: example: bdg_a60e514a-8cb7-4702-8f24-2786992be1a8 title: BadgeID type: string Badge: title: Badge type: object properties: assignedAt: type: string format: date-time description: only present in CurrentUser badges nullable: true 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 format: date-time description: only present in CurrentUser badges nullable: true required: - badgeDescription - badgeId - badgeImageUrl - badgeName - showcased Tag: 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 title: Tag type: string AvatarID: example: avtr_912d66a4-4714-43b8-8407-7de2cafbf55b title: AvatarID type: string CurrentAvatarImageUrl: 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 title: CurrentAvatarImageUrl type: string CurrentAvatarThumbnailImageUrl: 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 title: CurrentAvatarThumbnailImageUrl type: string DeveloperType: default: none 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: - none - trusted - internal - moderator title: DeveloperType type: string WorldID: example: wrld_4432ea9b-729c-46e3-8eaf-846aa0a37fdd title: WorldID type: string description: WorldID be "offline" on User profiles if you are not friends with that user. Platform: 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 title: Platform type: string PastDisplayName: properties: displayName: minLength: 1 type: string updated_at: format: date-time type: string required: - displayName - updated_at title: PastDisplayName type: object GroupID: example: grp_71a7ff59-112c-4e78-a990-c7cc650776e5 title: GroupID type: string LocationID: type: string example: wrld_4432ea9b-729c-46e3-8eaf-846aa0a37fdd:12345~hidden(usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469)~region(eu)~nonce(27e8414a-59a0-4f3d-af1f-f27557eb49a2) title: LocationID 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. CurrentUserPresence: title: CurrentUserPresence type: object properties: avatarThumbnail: type: string nullable: true currentAvatarTags: type: string displayName: type: string debugflag: 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: type: string 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: default: offline 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: - offline - active - online title: UserState type: string 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 - join me - ask me - busy - offline title: UserStatus default: offline CurrentUser: title: CurrentUser type: object properties: acceptedTOSVersion: minimum: 0 example: 7 type: integer acceptedPrivacyVersion: minimum: 0 example: 0 type: integer accountDeletionDate: format: date nullable: true type: string accountDeletionLog: description: ' ' nullable: true type: array items: $ref: '#/components/schemas/AccountDeletionLog' activeFriends: description: ' ' type: array items: $ref: '#/components/schemas/UserID' ageVerificationStatus: $ref: '#/components/schemas/AgeVerificationStatus' ageVerified: $ref: '#/components/schemas/AgeVerified' allowAvatarCopying: type: boolean authToken: description: The auth token for NEWLY REGISTERED ACCOUNTS ONLY (/auth/register) type: string badges: description: ' ' type: array items: $ref: '#/components/schemas/Badge' bio: type: string bioLinks: description: ' ' type: array items: type: string contentFilters: description: These tags begin with `content_` and control content gating type: array items: $ref: '#/components/schemas/Tag' currentAvatar: $ref: '#/components/schemas/AvatarID' currentAvatarImageUrl: $ref: '#/components/schemas/CurrentAvatarImageUrl' currentAvatarThumbnailImageUrl: $ref: '#/components/schemas/CurrentAvatarThumbnailImageUrl' currentAvatarTags: type: array items: $ref: '#/components/schemas/Tag' date_joined: format: date type: string developerType: $ref: '#/components/schemas/DeveloperType' displayName: type: string emailVerified: type: boolean fallbackAvatar: deprecated: true $ref: '#/components/schemas/AvatarID' friendGroupNames: type: array deprecated: true description: Always empty array. items: type: string friendKey: type: string friends: items: $ref: '#/components/schemas/UserID' type: array hasBirthday: type: boolean hideContentFilterSettings: type: boolean userLanguage: nullable: true type: string userLanguageCode: nullable: true type: string hasEmail: type: boolean hasLoggedInFromClient: type: boolean hasPendingEmail: type: boolean homeLocation: $ref: '#/components/schemas/WorldID' id: $ref: '#/components/schemas/UserID' isAdult: type: boolean isBoopingEnabled: default: true type: boolean isFriend: default: false type: boolean last_activity: format: date-time type: string last_login: format: date-time type: string last_mobile: format: date-time type: string nullable: true last_platform: $ref: '#/components/schemas/Platform' obfuscatedEmail: type: string obfuscatedPendingEmail: type: string oculusId: type: string googleId: type: string googleDetails: type: object picoId: type: string viveId: type: string offlineFriends: items: $ref: '#/components/schemas/UserID' type: array onlineFriends: items: $ref: '#/components/schemas/UserID' type: array pastDisplayNames: description: ' ' items: $ref: '#/components/schemas/PastDisplayName' type: array presence: $ref: '#/components/schemas/CurrentUserPresence' platform_history: type: array items: type: object properties: isMobile: type: boolean platform: type: string nullable: true recorded: type: string format: date-time 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: items: type: string type: array steamDetails: type: object steamId: type: string tags: items: $ref: '#/components/schemas/Tag' type: array twoFactorAuthEnabled: type: boolean twoFactorAuthEnabledDate: format: date-time nullable: true type: string unsubscribe: type: boolean updated_at: format: date-time type: string userIcon: type: string username: type: string deprecated: true 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).' required: - id - displayName - userIcon - bio - bioLinks - profilePicOverride - profilePicOverrideThumbnail - pronouns - pronounsHistory - statusDescription - pastDisplayNames - hasEmail - hasPendingEmail - obfuscatedEmail - obfuscatedPendingEmail - emailVerified - hasBirthday - unsubscribe - statusHistory - statusFirstTime - friends - friendGroupNames - currentAvatarImageUrl - currentAvatarThumbnailImageUrl - currentAvatarTags - currentAvatar - acceptedTOSVersion - steamId - steamDetails - oculusId - hasLoggedInFromClient - homeLocation - twoFactorAuthEnabled - state - tags - developerType - last_login - last_mobile - last_platform - allowAvatarCopying - status - date_joined - isFriend - friendKey - isAdult - ageVerificationStatus - ageVerified Disable2FAResult: title: Disable2FAResult type: object properties: removed: type: boolean required: - removed TwoFactorAuthCode: title: TwoFactorAuthCode type: object properties: code: type: string required: - code Verify2FAResult: title: Verify2FAResult type: object properties: verified: type: boolean enabled: type: boolean default: true required: - verified Pending2FAResult: title: Pending2FAResult type: object properties: qrCodeDataUrl: type: string secret: type: string required: - qrCodeDataUrl - secret TwoFactorRecoveryCodes: title: TwoFactorRecoveryCodes type: object properties: requiresTwoFactorAuth: type: array items: type: string otp: type: array items: type: object required: - code - used properties: code: type: string used: type: boolean TwoFactorEmailCode: title: TwoFactorEmailCode type: object properties: code: type: string required: - code Verify2FAEmailCodeResult: title: Verify2FAEmailCodeResult type: object properties: verified: type: boolean required: - verified VerifyAuthTokenResult: title: VerifyAuthTokenResult type: object properties: ok: type: boolean token: type: string minLength: 1 required: - ok - token Success: properties: success: $ref: '#/components/schemas/Response' title: Success type: object RegisterUserAccountRequest: title: RegisterUserAccountRequest type: object properties: username: description: Display Name / Username (Username is a sanitized version) type: string minLength: 4 maxLength: 15 password: description: Password type: string minLength: 8 email: description: Email address type: string year: description: Birth year type: string month: description: Birth month of year type: string day: description: Birth day of month type: string captchaCode: description: Captcha code type: string subscribe: description: Whether to recieve promotional emails type: boolean acceptedTOSVersion: description: The most recent version of the TOS type: integer required: - username - password - email - year - month - day - captchaCode - subscribe - acceptedTOSVersion 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 ReleaseStatus: type: string default: public enum: - public - private - hidden - all title: ReleaseStatus example: public UnityPackageID: example: unp_52b12c39-4163-457d-a4a9-630e7aff1bff title: UnityPackageID type: string PerformanceRatings: type: string title: PerformanceRatings example: Excellent enum: - None - Excellent - Good - Medium - Poor - VeryPoor description: Avatar Performance ratings. UnityPackage: description: '' properties: id: $ref: '#/components/schemas/UnityPackageID' 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: minimum: 0 type: integer example: 4 created_at: format: date-time type: string example: '2020-09-10T06:13:27.777Z' 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: {} unitySortNumber: minimum: 0 type: integer format: int64 example: 20180414000 unityVersion: default: 5.3.4p1 example: 2022.3.6f1 minLength: 1 type: string worldSignature: example: AHiPAWerwCpeYrxDthF5TU2SdUWEWnm43UAn8PKRXlS8k8tVRQ== type: string nullable: true impostorUrl: type: string nullable: true scanStatus: type: string variant: type: string required: - id - unityVersion - assetVersion - platform title: UnityPackage type: object Avatar: description: '' properties: acknowledgements: type: string assetUrl: description: Not present from general search `/avatars`, only on specific requests `/avatars/{avatarId}`. minLength: 1 type: string assetUrlObject: 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. type: object authorId: $ref: '#/components/schemas/UserID' authorName: minLength: 1 type: string created_at: format: date-time type: string description: minLength: 0 type: string featured: default: false type: boolean highestPrice: type: integer id: $ref: '#/components/schemas/AvatarID' imageUrl: minLength: 1 type: string listingDate: type: string nullable: true lock: type: boolean lowestPrice: type: integer name: minLength: 1 type: string 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: description: ' ' items: $ref: '#/components/schemas/Tag' type: array thumbnailImageUrl: minLength: 1 type: string unityPackageUrl: type: string unityPackageUrlObject: deprecated: true description: '**Deprecation:** `Object` has unknown usage/fields, and is always empty. Use normal `Url` field instead.' properties: unityPackageUrl: type: string type: object unityPackages: items: $ref: '#/components/schemas/UnityPackage' minItems: 1 type: array uniqueItems: true updated_at: format: date-time type: string version: default: 0 example: 68 minimum: 0 type: integer required: - authorId - authorName - created_at - description - featured - id - imageUrl - listingDate - name - performance - releaseStatus - styles - tags - thumbnailImageUrl - unityPackages - unityPackageUrl - unityPackageUrlObject - updated_at - version title: Avatar type: object SortOption: title: SortOption type: string default: popularity enum: - popularity - heat - trust - shuffle - random - favorites - reportScore - reportCount - publicationDate - labsPublicationDate - created - _created_at - updated - _updated_at - order - relevance - magic - name example: popularity OrderOption: title: OrderOption type: string default: descending enum: - ascending - descending example: descending 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 platform: $ref: '#/components/schemas/Platform' created_at: $ref: '#/components/schemas/LocalDateTime' updated_at: $ref: '#/components/schemas/LocalDateTime' id: $ref: '#/components/schemas/AvatarID' name: type: string minLength: 1 description: type: string minLength: 1 tags: description: ' ' type: array items: $ref: '#/components/schemas/Tag' imageUrl: type: string minLength: 1 thumbnailImageUrl: type: string minLength: 1 releaseStatus: $ref: '#/components/schemas/ReleaseStatus' version: type: integer minimum: 0 default: 1 unityPackageUrl: type: string unityVersion: type: string minLength: 1 default: 5.3.4p1 example: 2022.3.6f1 required: - name - imageUrl AvatarStyleID: example: avst_f0659ed2-094d-48fb-9e40-de05564d96c7 title: AvatarStyleID type: string AvatarStyle: title: AvatarStyle type: object description: '' properties: id: $ref: '#/components/schemas/AvatarStyleID' styleName: type: string required: - id - styleName UpdateAvatarRequest: title: UpdateAvatarRequest type: object properties: assetUrl: type: string id: $ref: '#/components/schemas/AvatarID' name: type: string minLength: 1 description: type: string minLength: 1 tags: description: ' ' type: array items: $ref: '#/components/schemas/Tag' imageUrl: type: string minLength: 1 releaseStatus: $ref: '#/components/schemas/ReleaseStatus' version: type: integer minimum: 0 default: 1 unityPackageUrl: type: string unityVersion: type: string minLength: 1 default: 5.3.4p1 example: 2022.3.6f1 ServiceStatus: title: ServiceStatus type: object description: Status information for a service request properties: created_at: format: date-time type: string id: description: The id of this service, NOT the id of the thing this service was requested for. type: string progress: type: array items: type: object requesterUserId: description: The id of the user who requested this service. $ref: '#/components/schemas/UserID' state: type: string subjectId: description: The id of the thing this service was requested for. type: string subjectType: description: The kind of the thing this service was requested for. type: string type: description: The kind of service that was requested. type: string updated_at: format: date-time type: string required: - created_at - id - progress - requesterUserId - state - subjectId - subjectType - type - updated_at ServiceQueueStats: title: ServiceQueueStats type: object description: Statistics about the user's currently queued service request properties: estimatedServiceDurationSeconds: type: integer required: - estimatedServiceDurationSeconds CalendarID: example: cal_6b182f0c-61ef-4bdf-97fe-94f63bcba27b title: CalendarID type: string FileID: example: file_ce35d830-e20a-4df0-a6d4-5aaef4508044 title: FileID type: string GroupRoleID: example: grol_459d3911-f672-44bc-b84d-e54ffe7960fe title: GroupRoleID type: string CalendarEvent: description: '' properties: accessType: type: string example: group category: type: string example: performance closeInstanceAfterEndMinutes: type: integer createdAt: type: string format: date-time deletedAt: type: string format: date-time nullable: true 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: description: ' ' type: array items: type: string ownerId: $ref: '#/components/schemas/GroupID' platforms: description: ' ' type: array items: type: string roleIds: description: ' ' type: array items: $ref: '#/components/schemas/GroupRoleID' nullable: true startsAt: type: string format: date-time tags: description: ' ' items: $ref: '#/components/schemas/Tag' type: array title: type: string minLength: 1 type: type: string example: event updatedAt: type: string format: date-time usesInstanceOverflow: type: boolean userInterest: type: object properties: createdAt: type: string format: date-time isFollowing: type: boolean updatedAt: type: string format: date-time required: - id - title - accessType title: CalendarEvent type: object PaginatedCalendarEventList: title: PaginatedCalendarEventList type: object properties: results: description: ' ' type: array items: $ref: '#/components/schemas/CalendarEvent' totalCount: type: integer description: The total number of results that the query would return if there were no pagination. hasNext: type: boolean description: Whether there are more results after this page. CreateCalendarEventRequest: title: CreateCalendarEventRequest type: object properties: title: type: string description: Event title minLength: 1 example: Performance Event! startsAt: type: string format: date-time description: Time the event starts at description: type: string minLength: 1 endsAt: type: string format: date-time description: Time the event ends at category: type: string example: performance tags: type: array items: type: string isDraft: type: boolean imageId: $ref: '#/components/schemas/FileID' roleIds: type: array items: type: string parentId: type: string platforms: type: array items: type: string languages: type: array items: type: string sendCreationNotification: type: boolean description: Send notification to group members. example: false featured: type: boolean hostEarlyJoinMinutes: type: integer example: 60 guestEarlyJoinMinutes: type: integer example: 5 closeInstanceAfterEndMinutes: type: integer example: 5 usesInstanceOverflow: type: boolean example: true accessType: type: string enum: - public - group required: - title - accessType - startsAt - endsAt - description - category - sendCreationNotification UpdateCalendarEventRequest: title: UpdateCalendarEventRequest type: object properties: title: type: string description: Event title minLength: 1 example: Performance Event! startsAt: type: string format: date-time description: Time the vent starts at description: type: string minLength: 1 endsAt: type: string format: date-time description: Time the vent starts at category: type: string example: performance tags: type: array items: type: string isDraft: type: boolean imageId: $ref: '#/components/schemas/FileID' roleIds: type: array items: type: string parentId: type: string platforms: type: array items: type: string languages: type: array items: type: string sendCreationNotification: type: boolean description: Send notification to group members. default: false example: false featured: type: boolean hostEarlyJoinMinutes: type: integer example: 60 guestEarlyJoinMinutes: type: integer example: 5 closeInstanceAfterEndMinutes: type: integer example: 5 usesInstanceOverflow: type: boolean example: true FollowCalendarEventRequest: title: FollowCalendarEventRequest type: object properties: isFollowing: type: boolean example: true required: - isFollowing TransactionID: example: txn_e5c72948-e735-4880-8245-24b2a41198b0 title: TransactionID type: string TransactionStatus: type: string title: TransactionStatus enum: - active - failed - expired - chargeback default: active SubscriptionPeriod: type: string title: SubscriptionPeriod default: month enum: - hour - day - week - month - year Subscription: description: '' type: object example: id: vrchatplus-yearly steamItemId: '5000' amount: 9999 description: VRChat Plus (Yearly) period: year tier: 5 title: Subscription properties: id: type: string minLength: 1 steamItemId: type: string minLength: 1 oculusSku: type: string minLength: 1 googleProductId: type: string minLength: 1 googlePlanId: type: string picoSku: type: string minLength: 1 appleProductId: type: string minLength: 1 amount: type: number description: type: string period: $ref: '#/components/schemas/SubscriptionPeriod' tier: type: integer required: - id - steamItemId - amount - description - period - tier TransactionSteamWalletInfo: description: '' type: object example: state: '' country: SE currency: EUR status: Trusted title: TransactionSteamWalletInfo properties: state: type: string country: type: string minLength: 2 default: US example: SE currency: type: string minLength: 3 example: EUR default: USD status: type: string example: Trusted minLength: 1 required: - state - country - currency - status TransactionSteamInfo: description: '' type: object properties: walletInfo: $ref: '#/components/schemas/TransactionSteamWalletInfo' steamId: type: string minLength: 1 description: Steam User ID orderId: type: string minLength: 1 description: Steam Order ID steamUrl: type: string description: Empty transId: type: string minLength: 1 description: Steam Transaction ID, NOT the same as VRChat TransactionID required: - walletInfo - steamId - orderId - steamUrl - transId title: TransactionSteamInfo TransactionAgreement: description: Represents a single Transaction, which is likely between VRChat and Steam. type: object properties: agreementId: type: string minLength: 1 itemId: type: integer agreement: type: string status: type: string minLength: 1 description: This is NOT TransactionStatus, but whatever Steam return. period: type: string minLength: 1 frequency: type: integer billingType: type: string minLength: 1 startDate: type: string minLength: 1 endDate: type: string minLength: 1 recurringAmt: type: number currency: type: string minLength: 1 timeCreated: type: string minLength: 1 nextPayment: type: string minLength: 1 lastPayment: type: string minLength: 1 lastAmount: type: number lastAmountVat: type: number outstanding: type: integer failedAttempts: type: integer required: - agreementId - itemId - agreement - status - period - frequency - billingType - startDate - endDate - recurringAmt - currency - timeCreated - nextPayment - lastPayment - lastAmount - lastAmountVat - outstanding - failedAttempts title: TransactionAgreement Transaction: description: '' type: object title: Transaction properties: id: $ref: '#/components/schemas/TransactionID' userId: $ref: '#/components/schemas/UserID' userDisplayName: type: string status: $ref: '#/components/schemas/TransactionStatus' subscription: $ref: '#/components/schemas/Subscription' sandbox: type: boolean default: false created_at: type: string format: date-time updated_at: type: string format: date-time steam: $ref: '#/components/schemas/TransactionSteamInfo' agreement: $ref: '#/components/schemas/TransactionAgreement' error: type: string nullable: true isGift: type: boolean default: false isTokens: type: boolean default: false required: - id - status - subscription - sandbox - created_at - updated_at - error LicenseGroupID: example: lgrp_608513da-b213-4e15-80af-bd88c27f0979 title: LicenseGroupID type: string UserSubscription: type: object description: '' properties: id: type: string minLength: 1 example: vrchatplus-yearly transactionId: $ref: '#/components/schemas/TransactionID' store: type: string minLength: 1 description: Which "Store" it came from. Right now only Stores are "Steam" and "Admin". example: Steam steamItemId: type: string minLength: 1 example: '5000' amount: type: number example: 9999 description: type: string example: VRChat Plus (Yearly) period: $ref: '#/components/schemas/SubscriptionPeriod' tier: type: integer example: 5 active: type: boolean default: true status: $ref: '#/components/schemas/TransactionStatus' starts: type: string expires: type: string format: date-time created_at: type: string format: date-time updated_at: type: string format: date-time licenseGroups: type: array items: $ref: '#/components/schemas/LicenseGroupID' isGift: type: boolean default: false isBulkGift: type: boolean default: false required: - id - transactionId - store - amount - description - period - tier - active - status - expires - created_at - updated_at - licenseGroups - isGift - isBulkGift title: UserSubscription 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 LicenseType: type: string title: LicenseType default: permission enum: - avatar - licenseGroup - permission - product example: permission LicenseAction: type: string title: LicenseAction default: have enum: - wear - have example: have License: title: License type: object properties: forId: type: string description: Either a AvatarID, LicenseGroupID, PermissionID or ProductID. This depends on the `forType` field. minLength: 1 forType: $ref: '#/components/schemas/LicenseType' forName: type: string minLength: 1 forAction: $ref: '#/components/schemas/LicenseAction' required: - forId - forType - forName - forAction LicenseGroup: description: '' type: object example: id: lgrp_608513da-b213-4e15-80af-bd88c27f0979 name: vrcplus description: VRC+ benefits licenses: - forId: prms_1d9549db-d30a-48f3-a6b8-6741ce5a4283 forType: permission forName: permission-user-icons forAction: have - forId: prms_76f33deb-dd5d-46b7-b79d-e1f8f0a9a1e0 forType: permission forName: permission-supporter-tags forAction: have - forId: prms_0d9549db-d30a-48f3-a6b8-6741ce5a4283 forType: permission forName: permission-invite-photos forAction: have - forId: prms_dc02c512-4c03-479c-8c6a-d9329c023baf forType: permission forName: permission-user-gallery forAction: have - forId: prms_153ac0b7-c2dd-43f9-96e3-c61fd2e85509 forType: permission forName: permission-profile-pic-override forAction: have title: LicenseGroup properties: id: $ref: '#/components/schemas/LicenseGroupID' name: type: string minLength: 1 description: type: string licenses: type: array items: $ref: '#/components/schemas/License' required: - id - name - description - licenses ProductID: example: prod_bfbc2315-247a-44d7-bfea-5237f8d56cb4 title: ProductID type: string ProductType: type: string title: ProductType default: udon enum: - listing - role - 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 format: date-time nullable: true useForSubscriberList: type: boolean default: false required: - archived - created - description - displayName - id - imageId - parentListings - productType - sellerDisplayName - sellerId - tags - updated ProductListingType: type: string title: ProductListingType default: subscription enum: - subscription ProductListingVariantID: example: listvar_e8658b56-1662-436c-935a-afcf6a7d4fed title: ProductListingVariantID type: string 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 TokenBundle: title: TokenBundle type: object properties: id: type: string appleProductId: type: string steamItemId: type: string oculusSku: type: string googleProductId: type: string amount: type: integer description: price of the bundle description: type: string tokens: type: integer description: number of tokens received imageUrl: type: string description: direct url to image required: - id - appleProductId - steamItemId - oculusSku - amount - description - tokens - imageUrl TiliaStatus: description: '' type: object title: TiliaStatus properties: economyOnline: type: boolean economyState: type: integer plannedOfflineWindowStart: type: string format: date-time plannedOfflineWindowEnd: type: string format: date-time required: - economyOnline TiliaTOS: description: '' type: object title: TiliaTOS properties: signed_tos: type: boolean required: - signed_tos Balance: description: '' type: object title: Balance properties: balance: default: 0 type: integer noTransactions: type: boolean tiliaResponse: type: boolean required: - balance EconomyAccount: title: EconomyAccount type: object properties: accountActivatedOn: type: string format: date-time nullable: true 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 StoreID: example: esto_713b247d-2b5d-41a0-bba3-50db28dc1498 title: StoreID type: string StoreType: title: StoreType type: string default: group enum: - house - world - group StoreShelfID: example: ess_964dd7aa-f881-4ba1-adf7-261e906b9189 title: StoreShelfID type: string 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 Store: title: Store type: object properties: description: type: string displayName: type: string id: $ref: '#/components/schemas/StoreID' sellerDisplayName: type: string sellerId: $ref: '#/components/schemas/UserID' storeId: $ref: '#/components/schemas/StoreID' storeType: $ref: '#/components/schemas/StoreType' tags: type: array items: $ref: '#/components/schemas/Tag' listingIds: description: Only for store type world and group type: array items: $ref: '#/components/schemas/ProductID' listings: description: Only for store type world and group type: array items: $ref: '#/components/schemas/ProductListing' worldId: description: Only for store type world $ref: '#/components/schemas/WorldID' groupId: description: Only for store type group $ref: '#/components/schemas/GroupID' shelfIds: description: Only for store type house type: array items: $ref: '#/components/schemas/StoreShelfID' shelves: description: Only for store type house type: array items: $ref: '#/components/schemas/StoreShelf' required: - description - displayName - id - sellerDisplayName - sellerId - storeId - storeType - tags StoreView: title: StoreView type: string default: public enum: - all - publicPreview - public - preview - draft FavoriteID: example: fvrt_9568d189-8776-44a5-a8c8-defc981e44de title: FavoriteID type: string FavoriteType: type: string enum: - world - friend - avatar title: FavoriteType default: friend Favorite: description: '' properties: favoriteId: description: MUST be either AvatarID, UserID or WorldID. type: string id: $ref: '#/components/schemas/FavoriteID' tags: description: ' ' items: $ref: '#/components/schemas/Tag' type: array type: $ref: '#/components/schemas/FavoriteType' required: - id - type - favoriteId - tags title: Favorite type: object AddFavoriteRequest: title: AddFavoriteRequest type: object properties: type: $ref: '#/components/schemas/FavoriteType' 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' required: - type - favoriteId - tags FavoriteGroupID: example: fvgrp_8a02a44b-dc3a-4a9a-bc77-77fa37996fc7 title: FavoriteGroupID type: string FavoriteGroupVisibility: default: private enum: - private - friends - public example: private title: FavoriteGroupVisibility type: string FavoriteGroup: description: '' properties: displayName: minLength: 1 type: string id: $ref: '#/components/schemas/FavoriteGroupID' name: minLength: 1 type: string ownerDisplayName: minLength: 1 type: string ownerId: $ref: '#/components/schemas/UserID' tags: description: ' ' items: $ref: '#/components/schemas/Tag' type: array type: $ref: '#/components/schemas/FavoriteType' visibility: $ref: '#/components/schemas/FavoriteGroupVisibility' required: - id - ownerId - ownerDisplayName - name - displayName - type - visibility - tags title: FavoriteGroup type: object UpdateFavoriteGroupRequest: title: UpdateFavoriteGroupRequest type: object properties: displayName: type: string visibility: $ref: '#/components/schemas/FavoriteGroupVisibility' tags: type: array description: Tags on FavoriteGroups are believed to do nothing. items: $ref: '#/components/schemas/Tag' 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 MIMEType: type: string enum: - image/jpeg - image/jpg - image/png - image/webp - image/gif - image/bmp - image/svg+xml - image/tiff - application/x-avatar - application/x-world - application/gzip - application/x-rsync-signature - application/x-rsync-delta - application/octet-stream title: MIMEType default: image/jpeg example: image/jpeg FileStatus: type: string enum: - waiting - complete - none - queued example: complete title: FileStatus default: waiting FileData: description: '' title: FileData type: object properties: category: type: string enum: - multipart - queued - simple minLength: 1 default: queued fileName: minLength: 1 type: string md5: minLength: 0 type: string sizeInBytes: minimum: 0 type: integer status: $ref: '#/components/schemas/FileStatus' uploadId: default: '' minLength: 0 type: string url: minLength: 1 type: string required: - category - fileName - sizeInBytes - status - uploadId - url FileVersion: description: '' properties: created_at: format: date-time type: string deleted: default: true description: Usually only present if `true` type: boolean delta: $ref: '#/components/schemas/FileData' file: $ref: '#/components/schemas/FileData' signature: $ref: '#/components/schemas/FileData' status: $ref: '#/components/schemas/FileStatus' version: default: 0 description: Incremental version counter, can only be increased. minimum: 0 type: integer required: - version - status - created_at title: FileVersion type: object File: description: '' properties: animationStyle: type: string example: bats maskTag: type: string example: square extension: example: .unitypackage minLength: 1 type: string id: $ref: '#/components/schemas/FileID' mimeType: $ref: '#/components/schemas/MIMEType' name: description: '' example: Example File minLength: 0 type: string ownerId: $ref: '#/components/schemas/UserID' tags: description: ' ' items: $ref: '#/components/schemas/Tag' type: array versions: description: ' ' items: $ref: '#/components/schemas/FileVersion' minItems: 1 type: array uniqueItems: true required: - id - name - ownerId - mimeType - extension - tags - versions title: File type: object CreateFileRequest: title: CreateFileRequest type: object properties: name: type: string minLength: 0 mimeType: $ref: '#/components/schemas/MIMEType' extension: type: string minLength: 1 tags: description: ' ' type: array items: $ref: '#/components/schemas/Tag' required: - name - mimeType - extension CreateFileVersionRequest: title: CreateFileVersionRequest type: object properties: signatureMd5: type: string minLength: 1 signatureSizeInBytes: type: integer fileMd5: type: string minLength: 1 fileSizeInBytes: type: integer required: - signatureMd5 - signatureSizeInBytes FinishFileDataUploadRequest: title: FinishFileDataUploadRequest type: object description: '' properties: etags: type: array description: Array of ETags uploaded. minItems: 1 uniqueItems: true items: type: string nextPartNumber: type: string minLength: 1 default: '0' example: '0' deprecated: true description: Always a zero in string form, despite how many parts uploaded. maxLength: 1 maxParts: type: string minLength: 1 description: Always a zero in string form, despite how many parts uploaded. deprecated: true default: '0' example: '0' maxLength: 1 required: - nextPartNumber - maxParts FileUploadURL: title: FileUploadURL description: '' type: object properties: url: type: string minLength: 1 description: '' required: - url FileVersionUploadStatus: title: FileVersionUploadStatus type: object description: '' properties: uploadId: type: string minLength: 1 example: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx..xxxxxxxxxxxxxxxxxxxxxxx fileName: type: string minLength: 1 example: Avatar-MyAvatar-Un.file_00000000-0000-0000-0000-000000000000.1.unitypackage nextPartNumber: type: integer minimum: 0 example: 0 maxParts: type: integer minimum: 1 example: 1000 parts: type: array minItems: 0 items: type: object etags: type: array description: Unknown minItems: 0 items: type: object required: - uploadId - fileName - nextPartNumber - maxParts - parts - etags 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 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: minimum: 0 type: integer example: 4 platform: $ref: '#/components/schemas/Platform' unityVersion: default: 2022.3.22f1-DWR example: 2022.3.22f1-DWR minLength: 1 type: string 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 LimitedUserFriend: description: User object received when querying your friends list properties: bio: type: string bioLinks: description: ' ' type: array items: type: string currentAvatarImageUrl: $ref: '#/components/schemas/CurrentAvatarImageUrl' currentAvatarThumbnailImageUrl: $ref: '#/components/schemas/CurrentAvatarThumbnailImageUrl' currentAvatarTags: type: array items: $ref: '#/components/schemas/Tag' developerType: $ref: '#/components/schemas/DeveloperType' displayName: type: string friendKey: type: string id: $ref: '#/components/schemas/UserID' isFriend: type: boolean imageUrl: type: string last_platform: $ref: '#/components/schemas/Platform' location: type: string last_login: type: string nullable: true format: date-time last_activity: type: string nullable: true format: date-time last_mobile: type: string nullable: true format: date-time platform: type: string profilePicOverride: type: string profilePicOverrideThumbnail: type: string status: $ref: '#/components/schemas/UserStatus' statusDescription: type: string tags: description: <- Always empty. items: $ref: '#/components/schemas/Tag' type: array userIcon: type: string required: - developerType - displayName - friendKey - id - isFriend - imageUrl - last_platform - location - last_login - last_activity - last_mobile - platform - status - statusDescription - tags title: LimitedUserFriend type: object NotificationType: type: string enum: - friendRequest - invite - inviteResponse - message - requestInvite - requestInviteResponse - votetokick title: NotificationType default: friendRequest Notification: description: '' properties: created_at: format: date-time type: string details: default: '{}' 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.' example: 'OneOf: {}, NotificationDetailInvite, NotificationDetailInviteResponse, NotificationDetailRequestInvite, NotificationDetailRequestInviteResponse, NotificationDetailVoteToKick' type: string id: minLength: 1 type: string message: description: '' example: This is a generated invite to VRChat Hub type: string seen: default: false description: Not included in notification objects received from the Websocket API type: boolean receiverUserId: description: Not included in notification objects received from the REST API $ref: '#/components/schemas/UserID' senderUserId: $ref: '#/components/schemas/UserID' senderUsername: minLength: 1 type: string deprecated: true 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).' type: $ref: '#/components/schemas/NotificationType' required: - id - senderUserId - type - message - details - created_at title: Notification type: object FriendStatus: properties: incomingRequest: default: false type: boolean isFriend: default: false type: boolean outgoingRequest: default: false type: boolean required: - isFriend - outgoingRequest - incomingRequest title: FriendStatus type: object GroupShortCode: example: ABC123 title: GroupShortCode type: string GroupDiscriminator: example: '1234' title: GroupDiscriminator type: string GroupMemberStatus: type: string enum: - inactive - member - requested - invited - banned - userblocked default: inactive example: member GroupGalleryID: example: ggal_a03a4b55-4ca6-4490-9519-40ba6351a233 title: GroupGalleryID type: string GroupGallery: title: GroupMember type: object properties: id: $ref: '#/components/schemas/GroupGalleryID' name: type: string description: Name of the gallery. example: Example Gallery minLength: 1 description: type: string description: Description of the gallery. example: Example Description minLength: 0 membersOnly: type: boolean description: Whether the gallery is members only. example: false default: false roleIdsToView: description: ' ' type: array items: $ref: '#/components/schemas/GroupRoleID' nullable: true roleIdsToSubmit: description: ' ' type: array items: $ref: '#/components/schemas/GroupRoleID' nullable: true roleIdsToAutoApprove: description: ' ' type: array items: $ref: '#/components/schemas/GroupRoleID' nullable: true roleIdsToManage: description: ' ' type: array items: $ref: '#/components/schemas/GroupRoleID' nullable: true createdAt: type: string format: date-time updatedAt: type: string format: date-time LimitedGroup: title: LimitedGroup type: object properties: id: $ref: '#/components/schemas/GroupID' name: type: string shortCode: $ref: '#/components/schemas/GroupShortCode' discriminator: $ref: '#/components/schemas/GroupDiscriminator' description: type: string iconUrl: type: string nullable: true bannerUrl: type: string nullable: true ownerId: $ref: '#/components/schemas/UserID' rules: type: string nullable: true iconId: type: string nullable: true bannerId: type: string nullable: true memberCount: type: integer tags: description: ' ' type: array items: $ref: '#/components/schemas/Tag' createdAt: type: string format: date-time membershipStatus: $ref: '#/components/schemas/GroupMemberStatus' isSearchable: type: boolean galleries: description: ' ' type: array items: $ref: '#/components/schemas/GroupGallery' GroupJoinState: type: string enum: - closed - invite - request - open title: GroupJoinState default: open GroupPrivacy: type: string enum: - default - private title: GroupPrivacy default: default GroupRoleTemplate: type: string enum: - default - managedFree - managedInvite - managedRequest title: GroupRoleTemplate default: default CreateGroupRequest: title: CreateGroupRequest type: object properties: name: type: string minLength: 3 maxLength: 64 shortCode: type: string minLength: 3 maxLength: 6 description: type: string maxLength: 250 minLength: 0 joinState: $ref: '#/components/schemas/GroupJoinState' iconId: type: string nullable: true default: null bannerId: type: string nullable: true default: null privacy: $ref: '#/components/schemas/GroupPrivacy' roleTemplate: $ref: '#/components/schemas/GroupRoleTemplate' required: - name - shortCode - roleTemplate GroupMemberID: example: gmem_95cdb3b4-4643-4eb6-bdab-46a4e1e5ce37 title: GroupMemberID type: string GroupPermissions: title: GroupPermissions type: string enum: - '*' - group-announcement-manage - group-audit-view - group-bans-manage - group-data-manage - group-default-role-manage - group-galleries-manage - group-instance-age-gated-create - 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 - group-calendar-manage - group-instance-calendar-link x-enum-varnames: - group_all - group_announcement_manage - group_audit_view - group_bans_manage - group_data_manage - group_default_role_manage - group_galleries_manage - group_instance_age_gated_create - 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 - group_calendar_manage - group_instance_calendar_link GroupMyMember: title: GroupMyMember type: object properties: id: $ref: '#/components/schemas/GroupMemberID' groupId: $ref: '#/components/schemas/GroupID' userId: $ref: '#/components/schemas/UserID' roleIds: type: array items: $ref: '#/components/schemas/GroupRoleID' acceptedByDisplayName: type: string nullable: true acceptedById: type: string nullable: true createdAt: type: string format: date-time managerNotes: type: string membershipStatus: type: string example: member isSubscribedToAnnouncements: type: boolean default: true isSubscribedToEventAnnouncements: type: boolean visibility: type: string example: visible isRepresenting: type: boolean default: false joinedAt: type: string format: date-time bannedAt: type: string nullable: true has2FA: type: boolean default: false hasJoinedFromPurchase: type: boolean default: false lastPostReadAt: type: string format: date-time nullable: true mRoleIds: type: array items: type: string permissions: type: array items: $ref: '#/components/schemas/GroupPermissions' GroupRole: title: GroupRole type: object properties: id: $ref: '#/components/schemas/GroupRoleID' groupId: $ref: '#/components/schemas/GroupID' name: type: string description: type: string isSelfAssignable: type: boolean default: false permissions: type: array items: $ref: '#/components/schemas/GroupPermissions' isManagementRole: type: boolean default: false requiresTwoFactor: type: boolean default: false requiresPurchase: type: boolean default: false order: type: integer createdAt: type: string format: date-time updatedAt: type: string format: date-time Group: title: Group type: object properties: ageVerificationSlotsAvailable: type: boolean ageVerificationBetaCode: type: string example: abc1234 ageVerificationBetaSlots: type: number example: 500 badges: type: array items: type: string id: $ref: '#/components/schemas/GroupID' name: type: string shortCode: $ref: '#/components/schemas/GroupShortCode' discriminator: $ref: '#/components/schemas/GroupDiscriminator' description: type: string iconUrl: type: string nullable: true bannerUrl: type: string nullable: true privacy: $ref: '#/components/schemas/GroupPrivacy' ownerId: $ref: '#/components/schemas/UserID' rules: type: string nullable: true links: type: array items: type: string languages: type: array items: type: string iconId: type: string nullable: true bannerId: type: string nullable: true memberCount: type: integer memberCountSyncedAt: type: string format: date-time isVerified: type: boolean default: false joinState: $ref: '#/components/schemas/GroupJoinState' tags: type: array items: $ref: '#/components/schemas/Tag' transferTargetId: $ref: '#/components/schemas/UserID' nullable: true galleries: type: array items: $ref: '#/components/schemas/GroupGallery' createdAt: type: string format: date-time updatedAt: type: string format: date-time lastPostCreatedAt: type: string format: date-time nullable: true onlineMemberCount: type: integer membershipStatus: $ref: '#/components/schemas/GroupMemberStatus' myMember: $ref: '#/components/schemas/GroupMyMember' nullable: true roles: description: Only returned if ?includeRoles=true is specified. type: array nullable: true items: $ref: '#/components/schemas/GroupRole' GroupRoleTemplateValues: title: GroupRoleTemplateValues type: object properties: basePermissions: type: array items: $ref: '#/components/schemas/GroupPermissions' description: type: string name: type: string roles: type: object properties: description: type: string name: 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: name: type: string minLength: 3 maxLength: 64 shortCode: type: string minLength: 3 maxLength: 6 description: type: string maxLength: 250 minLength: 0 joinState: $ref: '#/components/schemas/GroupJoinState' iconId: type: string nullable: true default: null bannerId: type: string nullable: true default: null languages: type: array maxItems: 3 description: 3 letter language code items: type: string maxLength: 3 links: type: array maxItems: 3 items: type: string rules: type: string tags: description: ' ' type: array items: $ref: '#/components/schemas/Tag' GroupAnnouncementID: example: gpos_71a7ff59-112c-4e78-a990-c7cc650776e5 title: GroupAnnouncementID type: string GroupAnnouncement: title: GroupAnnouncement type: object properties: id: $ref: '#/components/schemas/GroupAnnouncementID' nullable: true groupId: $ref: '#/components/schemas/GroupID' nullable: true authorId: $ref: '#/components/schemas/UserID' nullable: true title: type: string nullable: true text: type: string nullable: true imageId: $ref: '#/components/schemas/FileID' nullable: true imageUrl: type: string nullable: true createdAt: type: string format: date-time nullable: true updatedAt: type: string format: date-time nullable: true CreateGroupAnnouncementRequest: title: CreateGroupAnnouncementRequest type: object properties: title: type: string description: Announcement title minLength: 1 example: Event is starting soon! text: type: string description: Announcement text minLength: 1 example: Come join us for the event! imageId: $ref: '#/components/schemas/FileID' sendNotification: type: boolean description: Send notification to group members. default: false example: false required: - title - favoriteId GroupAuditLogID: example: gaud_71a7ff59-112c-4e78-a990-c7cc650776e5 title: GroupAuditLogID type: string GroupAuditLogEntry: title: GroupAuditLogEntry type: object properties: id: $ref: '#/components/schemas/GroupAuditLogID' created_at: type: string format: date-time groupId: $ref: '#/components/schemas/GroupID' actorId: $ref: '#/components/schemas/UserID' actorDisplayName: type: string targetId: description: Typically a UserID, GroupID, GroupRoleID, or Location, but could be other types of IDs. type: string eventType: type: string example: group.role.update default: group.update 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`. description: type: string description: A human-readable description of the event. example: Group role updated data: type: object description: The data associated with the event. The format of this data is dependent on the event type. example: description: old: My exciting new group. It's pretty nifty! new: My exciting new group. It's pretty nifty! joinState: old: closed new: request PaginatedGroupAuditLogEntryList: title: PaginatedGroupAuditLogEntryList type: object properties: results: description: ' ' type: array items: $ref: '#/components/schemas/GroupAuditLogEntry' totalCount: type: integer description: The total number of results that the query would return if there were no pagination. hasNext: type: boolean description: Whether there are more results after this page. GroupMemberLimitedUser: title: GroupMemberLimitedUser type: object description: Only visible via the /groups/:groupId/members endpoint, **not** when fetching a specific user. properties: id: $ref: '#/components/schemas/UserID' displayName: type: string thumbnailUrl: type: string nullable: true iconUrl: type: string profilePicOverride: type: string currentAvatarThumbnailImageUrl: type: string nullable: true currentAvatarTags: type: array items: $ref: '#/components/schemas/Tag' GroupMember: title: GroupMember type: object properties: acceptedByDisplayName: type: string nullable: true acceptedById: type: string nullable: true id: $ref: '#/components/schemas/GroupMemberID' groupId: $ref: '#/components/schemas/GroupID' userId: $ref: '#/components/schemas/UserID' isRepresenting: type: boolean default: false example: true description: Whether the user is representing the group. This makes the group show up above the name tag in-game. user: $ref: '#/components/schemas/GroupMemberLimitedUser' nullable: true roleIds: type: array items: $ref: '#/components/schemas/GroupRoleID' mRoleIds: type: array items: $ref: '#/components/schemas/GroupRoleID' joinedAt: type: string format: date-time nullable: true membershipStatus: $ref: '#/components/schemas/GroupMemberStatus' visibility: type: string example: visible isSubscribedToAnnouncements: type: boolean default: false isSubscribedToEventAnnouncements: type: boolean createdAt: description: Only visible via the /groups/:groupId/members endpoint, **not** when fetching a specific user. type: string format: date-time nullable: true bannedAt: description: Only visible via the /groups/:groupId/members endpoint, **not** when fetching a specific user. type: string format: date-time nullable: true managerNotes: description: Only visible via the /groups/:groupId/members endpoint, **not** when fetching a specific user. type: string nullable: true lastPostReadAt: type: string format: date-time nullable: true hasJoinedFromPurchase: type: boolean BanGroupMemberRequest: title: BanGroupMemberRequest type: object properties: userId: $ref: '#/components/schemas/UserID' required: - userId CreateGroupGalleryRequest: title: CreateGroupGalleryRequest type: object properties: name: type: string description: Name of the gallery. example: Example Gallery minLength: 1 description: type: string description: Description of the gallery. example: Example Description minLength: 0 membersOnly: type: boolean description: Whether the gallery is members only. example: false default: false roleIdsToView: description: ' ' type: array items: $ref: '#/components/schemas/GroupRoleID' nullable: true roleIdsToSubmit: description: ' ' type: array items: $ref: '#/components/schemas/GroupRoleID' nullable: true roleIdsToAutoApprove: description: ' ' type: array items: $ref: '#/components/schemas/GroupRoleID' nullable: true roleIdsToManage: description: ' ' type: array items: $ref: '#/components/schemas/GroupRoleID' nullable: true required: - name GroupGalleryImageID: example: ggim_71a7ff59-112c-4e78-a990-c7cc650776e5 title: GroupGalleryImageID type: string GroupGalleryImage: title: GroupGalleryImage type: object properties: id: $ref: '#/components/schemas/GroupGalleryImageID' groupId: $ref: '#/components/schemas/GroupID' galleryId: $ref: '#/components/schemas/GroupGalleryID' fileId: $ref: '#/components/schemas/FileID' imageUrl: type: string example: https://api.vrchat.cloud/api/1/file/file_ce35d830-e20a-4df0-a6d4-5aaef4508044/1/file format: uri createdAt: type: string format: date-time submittedByUserId: $ref: '#/components/schemas/UserID' approved: type: boolean default: false example: true approvedByUserId: $ref: '#/components/schemas/UserID' approvedAt: type: string format: date-time UpdateGroupGalleryRequest: title: UpdateGroupGalleryRequest type: object properties: name: type: string description: Name of the gallery. example: Example Gallery minLength: 1 description: type: string description: Description of the gallery. example: Example Description minLength: 0 membersOnly: type: boolean description: Whether the gallery is members only. example: false default: false roleIdsToView: description: ' ' type: array items: $ref: '#/components/schemas/GroupRoleID' nullable: true roleIdsToSubmit: description: ' ' type: array items: $ref: '#/components/schemas/GroupRoleID' nullable: true roleIdsToAutoApprove: description: ' ' type: array items: $ref: '#/components/schemas/GroupRoleID' nullable: true roleIdsToManage: description: ' ' type: array items: $ref: '#/components/schemas/GroupRoleID' nullable: true AddGroupGalleryImageRequest: title: AddGroupGalleryImageRequest type: object properties: fileId: $ref: '#/components/schemas/FileID' required: - fileId InstanceID: type: string example: 12345~hidden(usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469)~region(eu)~nonce(27e8414a-59a0-4f3d-af1f-f27557eb49a2) title: InstanceID 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. InstanceContentSettings: description: Types of dynamic user content permitted in an instance title: InstanceContentSettings type: object properties: drones: default: true type: boolean emoji: default: true type: boolean pedestals: default: true type: boolean prints: default: true type: boolean stickers: default: true type: boolean props: default: true type: boolean UdonProductId: example: prod_c1644b5b-3ca4-45b4-97c6-a2a0de70d469 title: UdonProductId type: string description: A unique ID of a Udon Product World: description: '' title: World type: object properties: authorId: $ref: '#/components/schemas/UserID' authorName: minLength: 1 type: string capacity: example: 8 type: integer recommendedCapacity: example: 4 type: integer created_at: format: date-time type: string defaultContentSettings: $ref: '#/components/schemas/InstanceContentSettings' description: minLength: 0 type: string favorites: default: 0 example: 12024 minimum: 0 type: integer featured: default: false type: boolean heat: default: 0 example: 5 minimum: 0 type: integer id: $ref: '#/components/schemas/WorldID' imageUrl: minLength: 1 type: string instances: type: array description: Will always be an empty list when unauthenticated. items: maxItems: 2 minItems: 2 type: array items: {} labsPublicationDate: example: none minLength: 1 type: string name: minLength: 1 type: string namespace: type: string occupants: default: 0 example: 47 minimum: 0 type: integer description: Will always be `0` when unauthenticated. organization: default: vrchat minLength: 1 type: string popularity: default: 0 example: 8 minimum: 0 type: integer previewYoutubeId: type: string nullable: true privateOccupants: default: 0 example: 1 minimum: 0 type: integer description: Will always be `0` when unauthenticated. publicOccupants: default: 0 example: 46 minimum: 0 type: integer description: Will always be `0` when unauthenticated. publicationDate: example: none minLength: 1 type: string releaseStatus: $ref: '#/components/schemas/ReleaseStatus' storeId: $ref: '#/components/schemas/StoreID' tags: description: ' ' type: array items: $ref: '#/components/schemas/Tag' thumbnailImageUrl: minLength: 1 type: string unityPackages: type: array description: Empty if unauthenticated. items: $ref: '#/components/schemas/UnityPackage' updated_at: format: date-time type: string urlList: type: array items: type: string version: default: 0 example: 68 minimum: 0 type: integer visits: default: 0 example: 9988675 minimum: 0 type: integer udonProducts: type: array items: $ref: '#/components/schemas/UdonProductId' required: - authorId - authorName - capacity - recommendedCapacity - created_at - description - featured - heat - id - imageUrl - labsPublicationDate - name - organization - popularity - publicationDate - releaseStatus - tags - thumbnailImageUrl - updated_at - version - visits GroupInstance: title: GroupInstance type: object properties: instanceId: $ref: '#/components/schemas/InstanceID' location: $ref: '#/components/schemas/LocationID' world: $ref: '#/components/schemas/World' memberCount: type: integer minimum: 0 example: 6 required: - instanceId - location - world - memberCount CreateGroupInviteRequest: title: CreateGroupInviteRequest type: object properties: userId: $ref: '#/components/schemas/UserID' confirmOverrideBlock: type: boolean default: true required: - userId GroupSearchSort: title: GroupSearchSort type: string enum: - joinedAt:asc - joinedAt:desc example: joinedAt:asc GroupLimitedMember: title: GroupLimitedMember type: object properties: id: $ref: '#/components/schemas/GroupMemberID' groupId: $ref: '#/components/schemas/GroupID' userId: $ref: '#/components/schemas/UserID' isRepresenting: type: boolean default: false example: true description: Whether the user is representing the group. This makes the group show up above the name tag in-game. roleIds: type: array items: $ref: '#/components/schemas/GroupRoleID' mRoleIds: type: array items: $ref: '#/components/schemas/GroupRoleID' joinedAt: type: string format: date-time nullable: true membershipStatus: $ref: '#/components/schemas/GroupMemberStatus' visibility: type: string example: visible isSubscribedToAnnouncements: type: boolean default: false isSubscribedToEventAnnouncements: type: boolean createdAt: description: Only visible via the /groups/:groupId/members endpoint, **not** when fetching a specific user. type: string format: date-time nullable: true bannedAt: description: Only visible via the /groups/:groupId/members endpoint, **not** when fetching a specific user. type: string format: date-time nullable: true managerNotes: description: Only visible via the /groups/:groupId/members endpoint, **not** when fetching a specific user. type: string nullable: true lastPostReadAt: type: string format: date-time nullable: true hasJoinedFromPurchase: type: boolean GroupUserVisibility: example: visible title: GroupUserVisibility type: string enum: - visible - hidden - friends UpdateGroupMemberRequest: title: UpdateGroupMemberRequest type: object properties: visibility: $ref: '#/components/schemas/GroupUserVisibility' isSubscribedToAnnouncements: type: boolean isSubscribedToEventAnnouncements: type: boolean managerNotes: type: string 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: name: type: string example: group-data-manage description: The name of the permission. displayName: type: string example: Manage Group Data description: The display name of the permission. help: type: string example: Allows role to edit group details (name, description, joinState, initialRoles, etc). description: Human-readable description of the permission. isManagementPermission: type: boolean default: false example: true description: Whether this permission is a "management" permission. allowedToAdd: type: boolean default: false example: true description: Whether the user is allowed to add this permission to a role. NotificationID: example: not_00000000-0000-0000-0000-000000000000 title: NotificationID type: string GroupPostVisibility: example: public title: GroupPostVisibility type: string enum: - group - public GroupPost: title: GroupPost type: object properties: id: $ref: '#/components/schemas/NotificationID' groupId: $ref: '#/components/schemas/GroupID' authorId: $ref: '#/components/schemas/UserID' editorId: $ref: '#/components/schemas/UserID' nullable: true visibility: $ref: '#/components/schemas/GroupPostVisibility' roleId: $ref: '#/components/schemas/GroupRoleIDList' title: type: string text: type: string imageId: $ref: '#/components/schemas/FileID' nullable: true imageUrl: type: string nullable: true createdAt: type: string format: date-time updatedAt: type: string format: date-time CreateGroupPostRequest: title: CreateGroupPostRequest type: object properties: title: type: string description: Post title minLength: 1 example: Event is starting soon! text: type: string description: Post text minLength: 1 example: Come join us for the event! imageId: $ref: '#/components/schemas/FileID' sendNotification: type: boolean description: Send notification to group members. default: false example: false roleIds: $ref: '#/components/schemas/GroupRoleIDList' visibility: $ref: '#/components/schemas/GroupPostVisibility' required: - title - text - sendNotification - visibility GroupJoinRequestAction: example: accept title: GroupJoinRequestAction type: string enum: - accept - reject 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: id: type: string name: type: string description: type: string isSelfAssignable: type: boolean default: false permissions: type: array items: $ref: '#/components/schemas/GroupPermissions' UpdateGroupRoleRequest: title: UpdateGroupRoleRequest type: object properties: name: type: string description: type: string isSelfAssignable: type: boolean default: false permissions: type: array items: $ref: '#/components/schemas/GroupPermissions' order: type: integer InventoryItemType: title: InventoryItemType type: string enum: - bundle - prop - emoji - sticker default: bundle example: prop InventoryFlag: title: InventoryFlag type: string enum: - instantiatable - archivable - consumable - trashable - cloneable - ugc default: instantiatable example: consumable InventoryItemID: example: inv_10bce5b0-2d2b-44e0-900d-db6534615162 title: InventoryItemID type: string InventoryTemplateID: example: invt_b80ce14b-038b-4f56-b970-d232771d62e3 title: InventoryTemplateID type: string PropID: example: prop_829ba6f6-b837-49d9-b9a9-056b82103b58 title: PropID type: string InventoryMetadata: title: InventoryMetadata type: object properties: inventoryItemsToInstantiate: description: Only in bundles type: array items: $ref: '#/components/schemas/InventoryTemplateID' animated: type: boolean animationStyle: type: string assetBundleId: type: string fileId: type: string imageUrl: type: string maskTag: type: string propId: $ref: '#/components/schemas/PropID' InventoryItem: title: InventoryItem type: object properties: collections: type: array items: type: string created_at: format: date-time type: string example: '2025-06-13T05:00:45.455Z' description: type: string expiryDate: format: date-time type: string example: '2025-06-13T05:00:45.455Z' nullable: true 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: format: date-time type: string example: '2025-06-09T16:31:40.785Z' template_updated_at: format: date-time type: string example: '2025-06-25T00:34:14.578Z' updated_at: format: date-time type: string example: '2025-06-25T00:34:15.965Z' required: - collections - created_at - description - expiryDate - flags - holderId - id - imageUrl - isArchived - isSeen - itemType - itemTypeLabel - metadata - name - tags - templateId - template_created_at - template_updated_at - updated_at Inventory: title: Inventory type: object properties: data: type: array items: $ref: '#/components/schemas/InventoryItem' totalCount: type: integer required: - data - totalCount UpdateInventoryItemRequest: title: UpdateInventoryItemRequest type: object properties: isArchived: type: boolean InventoryDropID: example: invd_ee3a8f7f-1454-4748-a935-99bf9865f33d title: InventoryDropID type: string 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: format: date-time type: string example: '2025-06-10T20:37:31.837Z' dropExpiryDate: format: date-time type: string nullable: true endDropDate: format: date-time type: string example: '2184-07-24T00:00:00.000Z' id: $ref: '#/components/schemas/InventoryDropID' name: type: string notificationDetails: $ref: '#/components/schemas/InventoryNotificationDetails' startDropDate: format: date-time type: string example: '2025-06-09T10:00:00.000Z' 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: format: date-time type: string example: '2025-06-10T20:37:31.837Z' 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: format: date-time type: string example: '2025-06-12T20:21:15.056Z' 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: format: date-time type: string example: '2025-06-10T20:37:31.837Z' required: - authorId - collections - created_at - description - flags - id - imageUrl - itemType - itemTypeLabel - name - status - tags - updated_at InventorySpawn: title: InventorySpawn type: object properties: token: type: string version: type: integer required: - token - version 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 default: maybe? description: The actual status itself required: - ok InviteRequest: title: InviteRequest type: object properties: instanceId: $ref: '#/components/schemas/InstanceID' messageSlot: type: integer minimum: 0 maximum: 11 required: - instanceId SentNotification: description: '' properties: created_at: format: date-time type: string details: example: OneOf: - {} - NotificationDetailInvite - NotificationDetailInviteResponse - NotificationDetailRequestInvite - NotificationDetailRequestInviteResponse - NotificationDetailVoteToKick type: object id: minLength: 1 type: string message: description: '' example: This is a generated invite to VRChat Hub type: string receiverUserId: $ref: '#/components/schemas/UserID' senderUserId: $ref: '#/components/schemas/UserID' senderUsername: minLength: 1 type: string deprecated: true 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).' type: $ref: '#/components/schemas/NotificationType' required: - created_at - details - id - message - receiverUserId - senderUserId - type title: SentNotification type: object RequestInviteRequest: title: RequestInviteRequest type: object properties: requestSlot: type: integer minimum: 0 maximum: 11 required: - instanceId InviteResponse: title: InviteResponse type: object properties: responseSlot: type: integer minimum: 0 maximum: 11 required: - responseSlot InviteMessageType: type: string default: message description: '' enum: - message - response - request - requestResponse title: InviteMessageType InviteMessageID: example: invm_24a1c14d-5e24-48e5-90e3-c3f712420ffa title: InviteMessageID type: string InviteMessage: description: '' properties: canBeUpdated: default: true type: boolean id: $ref: '#/components/schemas/InviteMessageID' message: minLength: 1 type: string messageType: $ref: '#/components/schemas/InviteMessageType' remainingCooldownMinutes: default: 0 description: Changes to 60 when updated, although probably server-side configurable. minimum: 0 type: integer slot: maximum: 11 minimum: 0 type: integer updatedAt: format: date-time type: string required: - id - slot - message - messageType - updatedAt - remainingCooldownMinutes - canBeUpdated title: InviteMessage type: object UpdateInviteMessageRequest: title: UpdateInviteMessageRequest type: object properties: message: type: string required: - message InstanceType: type: string title: InstanceType example: hidden enum: - public - hidden - friends - private - group description: '' InstanceRegion: type: string title: InstanceRegion default: us example: us enum: - us - use - eu - jp - unknown description: Instance region InstanceOwnerId: example: usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469 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 GroupAccessType: type: string title: GroupAccessType example: members enum: - public - plus - members description: Group access type when the instance type is "group" default: members CreateInstanceRequest: title: CreateInstanceRequest type: object properties: worldId: $ref: '#/components/schemas/WorldID' type: $ref: '#/components/schemas/InstanceType' region: $ref: '#/components/schemas/InstanceRegion' ownerId: $ref: '#/components/schemas/InstanceOwnerId' roleIds: description: Group roleIds that are allowed to join if the type is "group" and groupAccessType is "member" type: array items: $ref: '#/components/schemas/GroupRoleID' groupAccessType: $ref: '#/components/schemas/GroupAccessType' queueEnabled: type: boolean default: false closedAt: description: The time after which users won't be allowed to join the instance. This doesn't work for public instances. type: string format: date-time canRequestInvite: type: boolean description: Only applies to invite type instances to make them invite+ default: false 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 inviteOnly: type: boolean default: false ageGate: type: boolean default: false instancePersistenceEnabled: type: boolean nullable: true displayName: type: string nullable: true contentSettings: $ref: '#/components/schemas/InstanceContentSettings' required: - worldId - type - region Region: type: string title: Region default: us example: eu enum: - us - use - usw - usx - eu - jp - unknown description: API/Photon region. InstancePlatforms: title: InstancePlatforms type: object additionalProperties: false required: - android - standalonewindows properties: android: type: integer minimum: 0 example: 1 ios: type: integer minimum: 0 example: 1 standalonewindows: type: integer minimum: 0 example: 5 LimitedUserInstance: 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: description: ' ' type: array items: type: string currentAvatarImageUrl: $ref: '#/components/schemas/CurrentAvatarImageUrl' currentAvatarThumbnailImageUrl: $ref: '#/components/schemas/CurrentAvatarThumbnailImageUrl' currentAvatarTags: type: array items: $ref: '#/components/schemas/Tag' 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' isFriend: type: boolean imageUrl: type: string last_platform: $ref: '#/components/schemas/Platform' last_activity: type: string nullable: true format: date-time last_mobile: type: string nullable: true format: date-time 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: items: $ref: '#/components/schemas/Tag' type: array userIcon: type: string required: - ageVerificationStatus - ageVerified - allowAvatarCopying - currentAvatarImageUrl - currentAvatarThumbnailImageUrl - currentAvatarTags - date_joined - developerType - displayName - friendKey - id - isFriend - last_platform - last_activity - last_mobile - pronouns - state - status - statusDescription - tags title: LimitedUserInstance type: object Instance: 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. title: Instance type: object properties: active: default: true example: true type: boolean ageGate: nullable: true type: boolean canRequestInvite: default: true example: true type: boolean capacity: type: integer example: 8 minimum: 0 clientNumber: type: string minLength: 1 deprecated: true description: Always returns "unknown". contentSettings: $ref: '#/components/schemas/InstanceContentSettings' displayName: type: string nullable: true full: default: false type: boolean gameServerVersion: type: integer id: $ref: '#/components/schemas/InstanceID' instanceId: $ref: '#/components/schemas/InstanceID' instancePersistenceEnabled: type: string nullable: true location: $ref: '#/components/schemas/LocationID' n_users: type: integer minimum: 0 example: 6 name: type: string minLength: 1 example: '12345' ownerId: $ref: '#/components/schemas/InstanceOwnerId' permanent: default: false type: boolean photonRegion: $ref: '#/components/schemas/Region' platforms: $ref: '#/components/schemas/InstancePlatforms' playerPersistenceEnabled: type: boolean nullable: true region: $ref: '#/components/schemas/InstanceRegion' secureName: type: string minLength: 1 example: 7eavhhng shortName: type: string minLength: 1 example: 02u7yz8j nullable: true tags: description: 'The tags array on Instances usually contain the language tags of the people in the instance. ' type: array example: - show_social_rank - language_eng - language_jpn items: $ref: '#/components/schemas/Tag' type: $ref: '#/components/schemas/InstanceType' worldId: $ref: '#/components/schemas/WorldID' hidden: $ref: '#/components/schemas/UserID' friends: $ref: '#/components/schemas/UserID' private: $ref: '#/components/schemas/UserID' queueEnabled: type: boolean queueSize: type: integer minimum: 0 example: 6 recommendedCapacity: type: integer minimum: 0 example: 6 roleRestricted: type: boolean strict: type: boolean userCount: type: integer minimum: 0 example: 6 world: $ref: '#/components/schemas/World' users: description: The users field is present on instances created by the requesting user. type: array items: $ref: '#/components/schemas/LimitedUserInstance' groupAccessType: $ref: '#/components/schemas/GroupAccessType' hasCapacityForYou: type: boolean nonce: type: string closedAt: format: date-time type: string nullable: true hardClose: type: boolean nullable: true required: - active - canRequestInvite - capacity - clientNumber - contentSettings - displayName - full - id - instanceId - instancePersistenceEnabled - location - n_users - name - permanent - photonRegion - platforms - playerPersistenceEnabled - region - secureName - tags - type - worldId - queueEnabled - queueSize - recommendedCapacity - strict - userCount - world InstanceShortNameResponse: properties: secureName: type: string minLength: 1 example: 7eavhhng shortName: type: string minLength: 1 example: 02u7yz8j nullable: true required: - secureName title: InstanceShortNameResponse type: object PlayerModerationID: example: pmod_25551a8d-6f5d-430a-88d3-9c0ce08b5244 title: PlayerModerationID type: string PlayerModerationType: type: string default: unmute enum: - mute - unmute - block - unblock - interactOn - interactOff example: unmute title: PlayerModerationType PlayerModeration: properties: created: format: date-time type: string id: $ref: '#/components/schemas/PlayerModerationID' sourceDisplayName: minLength: 1 type: string sourceUserId: $ref: '#/components/schemas/UserID' targetDisplayName: minLength: 1 type: string targetUserId: $ref: '#/components/schemas/UserID' type: $ref: '#/components/schemas/PlayerModerationType' required: - id - type - sourceUserId - sourceDisplayName - targetUserId - targetDisplayName - created title: PlayerModeration type: object ModerateUserRequest: title: ModerateUserRequest type: object additionalProperties: false properties: moderated: $ref: '#/components/schemas/UserID' type: $ref: '#/components/schemas/PlayerModerationType' required: - moderated - type PrintID: type: string example: prnt_0a0aa0a0-85ea-42eb-b2f7-4840d7f341fa title: PrintID 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: minimum: 0 type: integer example: 4 propSignature: type: string platform: $ref: '#/components/schemas/Platform' unityVersion: default: 2022.3.22f1 example: 2022.3.22f1 minLength: 1 type: string 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 Jam: description: '' properties: description: minLength: 1 type: string id: type: string minLength: 1 example: jam_0b7e3f6d-4647-4648-b2a1-1431e76906d9 isVisible: type: boolean moreInfo: type: string minLength: 1 state: type: string minLength: 1 description: |- One of: - submissions_open - closed stateChangeDates: type: object properties: closed: type: string format: date-time nullable: true submissionsClosed: type: string format: date-time nullable: true submissionsOpened: type: string format: date-time nullable: true winnersSelected: type: string format: date-time nullable: true example: null submissionContentGateDate: type: string format: date-time nullable: true 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 title: Jam type: object Submission: description: '' properties: contentId: minLength: 1 type: string description: Either world ID or avatar ID created_at: type: string format: date-time description: type: string id: type: string minLength: 1 example: jsub_f01f44fa-89fa-443c-ab4c-7fed9245970f jamId: type: string minLength: 1 example: jam_0b7e3f6d-4647-4648-b2a1-1431e76906d9 ratingScore: type: integer minimum: 0 submitterId: $ref: '#/components/schemas/UserID' required: - contentId - created_at - description - id - jamId - ratingsScore - submitterId title: Submission type: object LimitedUserSearch: description: User object received when searching properties: bio: type: string bioLinks: description: ' ' type: array items: type: string currentAvatarImageUrl: $ref: '#/components/schemas/CurrentAvatarImageUrl' currentAvatarThumbnailImageUrl: $ref: '#/components/schemas/CurrentAvatarThumbnailImageUrl' currentAvatarTags: type: array items: $ref: '#/components/schemas/Tag' 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: description: <- Always empty. items: $ref: '#/components/schemas/Tag' type: array userIcon: type: string required: - currentAvatarImageUrl - currentAvatarThumbnailImageUrl - currentAvatarTags - developerType - displayName - id - isFriend - last_platform - status - statusDescription - tags title: LimitedUserSearch type: object User: title: User type: object properties: ageVerificationStatus: $ref: '#/components/schemas/AgeVerificationStatus' ageVerified: $ref: '#/components/schemas/AgeVerified' allowAvatarCopying: type: boolean default: true badges: description: ' ' type: array items: $ref: '#/components/schemas/Badge' bio: type: string maxLength: 512 minLength: 0 bioLinks: type: array items: type: string currentAvatarImageUrl: $ref: '#/components/schemas/CurrentAvatarImageUrl' currentAvatarThumbnailImageUrl: $ref: '#/components/schemas/CurrentAvatarThumbnailImageUrl' currentAvatarTags: type: array items: $ref: '#/components/schemas/Tag' date_joined: format: date type: string 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: description: ' ' type: array items: $ref: '#/components/schemas/Tag' travelingToInstance: type: string travelingToLocation: type: string travelingToWorld: type: string userIcon: type: string username: 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). deprecated: true worldId: $ref: '#/components/schemas/WorldID' required: - ageVerificationStatus - ageVerified - allowAvatarCopying - bio - bioLinks - currentAvatarImageUrl - currentAvatarThumbnailImageUrl - currentAvatarTags - 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: email: type: string unsubscribe: type: boolean birthday: type: string format: date acceptedTOSVersion: type: integer tags: description: ' ' type: array items: $ref: '#/components/schemas/Tag' status: $ref: '#/components/schemas/UserStatus' statusDescription: type: string bio: type: string minLength: 0 bioLinks: type: array items: type: string pronouns: type: string minLength: 0 maxLength: 32 isBoopingEnabled: 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 contentFilters: description: These tags begin with `content_` and control content gating type: array items: $ref: '#/components/schemas/Tag' displayName: description: MUST specify currentPassword as well to change display name type: string revertDisplayName: description: MUST specify currentPassword as well to revert display name type: boolean password: description: MUST specify currentPassword as well to change password type: string currentPassword: type: string LimitedUserGroups: title: LimitedUserGroups type: object properties: id: $ref: '#/components/schemas/GroupMemberID' name: type: string shortCode: $ref: '#/components/schemas/GroupShortCode' discriminator: $ref: '#/components/schemas/GroupDiscriminator' description: type: string iconId: type: string nullable: true iconUrl: type: string nullable: true bannerId: type: string nullable: true bannerUrl: type: string nullable: true privacy: type: string lastPostCreatedAt: type: string format: date-time nullable: true ownerId: $ref: '#/components/schemas/UserID' memberCount: type: integer groupId: $ref: '#/components/schemas/GroupID' memberVisibility: type: string isRepresenting: type: boolean mutualGroup: type: boolean lastPostReadAt: type: string format: date-time nullable: true representedGroup: title: RepresentedGroup type: object properties: name: type: string shortCode: $ref: '#/components/schemas/GroupShortCode' discriminator: $ref: '#/components/schemas/GroupDiscriminator' description: type: string iconId: type: string nullable: true iconUrl: type: string nullable: true bannerId: type: string nullable: true bannerUrl: type: string nullable: true privacy: $ref: '#/components/schemas/GroupPrivacy' ownerId: $ref: '#/components/schemas/UserID' memberCount: type: integer groupId: $ref: '#/components/schemas/GroupID' memberVisibility: $ref: '#/components/schemas/GroupUserVisibility' isRepresenting: type: boolean FeedbackID: example: feedback_8cffb23a-f961-444e-b496-0196d1c90adb title: FeedbackID type: string 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 UserNoteID: example: unt_e9074848-d107-4019-b4aa-bbd19e67660d title: UserNoteID type: string UserNote: title: UserNote type: object properties: createdAt: type: string format: date-time id: $ref: '#/components/schemas/UserNoteID' note: type: string targetUser: type: object properties: currentAvatarTags: type: array items: $ref: '#/components/schemas/Tag' currentAvatarThumbnailImageUrl: $ref: '#/components/schemas/CurrentAvatarThumbnailImageUrl' displayName: type: string id: $ref: '#/components/schemas/UserNoteID' 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: targetUserId: $ref: '#/components/schemas/UserID' note: type: string required: - targetUserId - note ChangeUserTagsRequest: title: ChangeUserTagsRequest type: object properties: tags: description: The tags being added or removed. type: array items: $ref: '#/components/schemas/Tag' required: - tags UpdateUserBadgeRequest: title: UpdateUserBadgeRequest type: object properties: hidden: type: boolean showcased: type: boolean LimitedUnityPackage: description: '' properties: created_at: format: date-time type: string nullable: true platform: $ref: '#/components/schemas/Platform' unityVersion: example: 2022.3.6f1 minLength: 1 type: string required: - created_at - platform - unityVersion title: LimitedUnityPackage type: object LimitedWorld: description: '' properties: authorId: $ref: '#/components/schemas/UserID' authorName: minLength: 1 type: string capacity: example: 8 type: integer recommendedCapacity: example: 16 type: integer created_at: format: date-time type: string defaultContentSettings: $ref: '#/components/schemas/InstanceContentSettings' favorites: default: 0 example: 12024 minimum: 0 type: integer visits: default: 0 example: 9988675 minimum: 0 type: integer heat: default: 0 example: 5 minimum: 0 type: integer id: $ref: '#/components/schemas/WorldID' imageUrl: minLength: 1 type: string labsPublicationDate: example: none minLength: 1 type: string name: minLength: 1 type: string occupants: default: 0 example: 47 minimum: 0 type: integer organization: default: vrchat minLength: 1 type: string popularity: default: 0 example: 8 minimum: 0 type: integer previewYoutubeId: type: string nullable: true publicationDate: example: none minLength: 1 type: string releaseStatus: $ref: '#/components/schemas/ReleaseStatus' storeId: $ref: '#/components/schemas/StoreID' tags: description: ' ' items: $ref: '#/components/schemas/Tag' type: array thumbnailImageUrl: minLength: 1 type: string unityPackages: description: ' ' items: $ref: '#/components/schemas/LimitedUnityPackage' minItems: 1 type: array updated_at: format: date-time type: string udonProducts: type: array items: $ref: '#/components/schemas/UdonProductId' required: - id - name - authorId - authorName - capacity - imageUrl - thumbnailImageUrl - releaseStatus - organization - tags - favorites - created_at - updated_at - publicationDate - labsPublicationDate - unityPackages - popularity - heat - occupants title: LimitedWorld type: object 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: example: 8 maximum: 40 minimum: 0 type: integer 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: description: ' ' type: array items: $ref: '#/components/schemas/Tag' unityPackageUrl: type: string minLength: 1 unityVersion: type: string minLength: 1 default: 5.3.4p1 example: 2022.3.6f1 required: - assetUrl - imageUrl - name FavoritedWorld: description: '' properties: authorId: $ref: '#/components/schemas/UserID' authorName: minLength: 1 type: string capacity: example: 8 type: integer description: minLength: 1 type: string recommendedCapacity: example: 16 type: integer created_at: format: date-time type: string defaultContentSettings: $ref: '#/components/schemas/InstanceContentSettings' favorites: default: 0 example: 12024 minimum: 0 type: integer favoriteGroup: minLength: 1 type: string favoriteId: $ref: '#/components/schemas/FavoriteID' featured: default: false type: boolean visits: default: 0 example: 9988675 minimum: 0 type: integer heat: default: 0 example: 5 minimum: 0 type: integer id: $ref: '#/components/schemas/WorldID' imageUrl: minLength: 1 type: string labsPublicationDate: example: none minLength: 1 type: string name: minLength: 1 type: string occupants: default: 0 example: 47 minimum: 0 type: integer organization: default: vrchat minLength: 1 type: string popularity: default: 0 example: 8 minimum: 0 type: integer previewYoutubeId: type: string nullable: true publicationDate: example: none minLength: 1 type: string releaseStatus: $ref: '#/components/schemas/ReleaseStatus' tags: description: ' ' items: $ref: '#/components/schemas/Tag' type: array thumbnailImageUrl: minLength: 1 type: string unityPackages: description: ' ' items: $ref: '#/components/schemas/UnityPackage' minItems: 1 type: array updated_at: format: date-time type: string urlList: type: array items: type: string udonProducts: type: array items: $ref: '#/components/schemas/UdonProductId' version: minimum: 1 type: integer required: - id - description - name - authorName - capacity - imageUrl - thumbnailImageUrl - releaseStatus - organization - tags - favorites - favoriteGroup - favoriteId - featured - created_at - updated_at - publicationDate - labsPublicationDate - unityPackages - urlList - popularity - heat - occupants - version title: FavoritedWorld type: object 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: example: 8 maximum: 40 minimum: 0 type: integer description: type: string imageUrl: type: string minLength: 1 name: type: string minLength: 1 platform: $ref: '#/components/schemas/Platform' releaseStatus: $ref: '#/components/schemas/ReleaseStatus' tags: description: ' ' type: array items: $ref: '#/components/schemas/Tag' unityPackageUrl: type: string minLength: 1 unityVersion: type: string minLength: 1 default: 5.3.4p1 example: 2022.3.6f1 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 APIConfigAnnouncement: title: APIConfigAnnouncement type: object description: Public Announcement deprecated: true properties: name: description: Announcement name minLength: 1 type: string text: description: Announcement text minLength: 1 type: string 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: additionalProperties: false description: Download links for various development assets. title: APIConfigDownloadURLList type: object required: - sdk2 - sdk3-avatars - sdk3-worlds - vcc - bootstrap properties: sdk2: deprecated: true description: Download link for legacy SDK2 minLength: 1 type: string sdk3-avatars: description: Download link for SDK3 for Avatars minLength: 1 type: string sdk3-worlds: description: Download link for SDK3 for Worlds minLength: 1 type: string vcc: description: Download link for the Creator Companion minLength: 1 type: string bootstrap: description: Download link for ??? minLength: 1 type: string DynamicContentRow: title: DynamicContentRow type: object properties: index: minimum: 0 type: integer name: minLength: 1 type: string platform: minLength: 1 type: string description: Usually "ThisPlatformSupported", but can also be other values such as "all" or platform specific identifiers. sortHeading: minLength: 1 type: string sortOrder: minLength: 1 type: string sortOwnership: minLength: 1 type: string tag: description: Tag to filter content for this row. minLength: 1 type: string type: type: string example: avatar description: Type is not present if it is a world. required: - name - platform - sortHeading - sortOrder - sortOwnership APIConfigEvents: title: APIConfigEvents type: object required: - distanceClose - distanceFactor - distanceFar - groupDistance - maximumBunchSize - notVisibleFactor - playerOrderBucketSize - playerOrderFactor - slowUpdateFactorThreshold - viewSegmentLength properties: distanceClose: description: Unknown type: integer distanceFactor: description: Unknown type: integer distanceFar: description: Unknown type: integer groupDistance: description: Unknown type: integer maximumBunchSize: description: Unknown type: integer notVisibleFactor: description: Unknown type: integer playerOrderBucketSize: description: Unknown type: integer playerOrderFactor: description: Unknown type: integer slowUpdateFactorThreshold: description: Unknown type: integer viewSegmentLength: description: Unknown type: integer 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 title: type: string description: The title of the report category text: type: string description: The label 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: default: false description: Unknown, probably voice optimization testing type: boolean VoiceEnableReceiverLimiting: default: true description: Unknown, probably voice optimization testing type: boolean accessLogsUrls: type: object properties: Default: type: string format: uri example: https://help.vrchat.com/hc/en-us/articles/9521522810899-Where-do-I-find-my-output-logs#h_01HT1ZV67JGKX5AE4R1P28XMXR Pico: type: string format: uri example: https://help.vrchat.com/hc/en-us/articles/9521522810899-Where-do-I-find-my-output-logs#h_01HT1ZV67JGKX5AE4R1P28XMXR Quest: type: string format: uri example: https://help.vrchat.com/hc/en-us/articles/9521522810899-Where-do-I-find-my-output-logs#h_01HT1ZV67JGKX5AE4R1P28XMXR XRElite: type: string format: uri example: https://help.vrchat.com/hc/en-us/articles/9521522810899-Where-do-I-find-my-output-logs#h_01HT1ZV67JGKX5AE4R1P28XMXR address: description: VRChat's office address minLength: 1 type: string 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 announcements: type: array description: Public Announcements uniqueItems: true minItems: 0 items: $ref: '#/components/schemas/APIConfigAnnouncement' analyticsSegment_NewUI_PctOfUsers: description: Unknown type: integer analyticsSegment_NewUI_Salt: description: Unknown type: string availableLanguageCodes: description: List of supported Languages type: array items: type: string availableLanguages: description: List of supported Languages type: array 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: default: 40 description: Unknown type: integer clientApiKey: description: apiKey to be used for all other requests minLength: 1 type: string clientBPSCeiling: default: 18432 description: Unknown type: integer clientDisconnectTimeout: default: 30000 description: Unknown type: integer clientNetDispatchThread: default: false description: Unknown type: boolean clientNetDispatchThreadMobile: default: true description: Unknown type: boolean clientNetInThread: default: false description: Unknown type: boolean clientNetInThread2: default: false description: Unknown type: boolean clientNetInThreadMobile: default: false description: Unknown type: boolean clientNetInThreadMobile2: default: false description: Unknown type: boolean clientNetOutThread: default: false description: Unknown type: boolean clientNetOutThread2: default: false description: Unknown type: boolean clientNetOutThreadMobile: default: false description: Unknown type: boolean clientNetOutThreadMobile2: default: false description: Unknown type: boolean clientQR: default: 1 description: Unknown type: integer clientReservedPlayerBPS: default: 7168 description: Unknown type: integer clientSentCountAllowance: default: 15 description: Unknown type: integer constants: $ref: '#/components/schemas/APIConfigConstants' contactEmail: description: VRChat's contact email minLength: 1 type: string copyrightEmail: description: VRChat's copyright-issues-related email minLength: 1 type: string currentPrivacyVersion: default: 1 description: Current version number of the Privacy Agreement type: integer currentTOSVersion: example: 7 description: Current version number of the Terms of Service minimum: 0 type: integer defaultAvatar: $ref: '#/components/schemas/AvatarID' defaultStickerSet: type: string devLanguageCodes: type: array description: Unknown items: type: string devSdkUrl: deprecated: true description: Link to download the development SDK, use downloadUrls instead minLength: 1 type: string devSdkVersion: deprecated: true description: Version of the development SDK minLength: 1 type: string dis-countdown: description: Unknown, "dis" maybe for disconnect? format: date-time type: string disableAVProInProton: default: false description: Unknown type: boolean disableAvatarCopying: default: false description: Toggles if copying avatars should be disabled type: boolean disableAvatarGating: default: false 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 type: boolean disableCommunityLabs: default: false description: Toggles if the Community Labs should be disabled type: boolean disableCommunityLabsPromotion: default: false description: Toggles if promotion out of Community Labs should be disabled type: boolean disableEmail: default: false description: Unknown type: boolean disableCaptcha: default: true description: Unknown type: boolean disableEventStream: default: false description: Toggles if Analytics should be disabled. type: boolean disableFeedbackGating: default: false 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. type: boolean disableFrontendBuilds: default: false description: Unknown, probably toggles compilation of frontend web builds? So internal flag? type: boolean disableGiftDrops: default: false description: Toggles if gift drops should be disabled type: boolean disableHello: default: false description: Unknown type: boolean disableOculusSubs: default: false description: Toggles if signing up for Subscriptions in Oculus is disabled or not. type: boolean disableRegistration: default: false description: Toggles if new user account registration should be disabled. type: boolean disableSteamNetworking: default: true description: Toggles if Steam Networking should be disabled. VRChat these days uses Photon Unity Networking (PUN) instead. type: boolean disableTwoFactorAuth: default: false deprecated: true description: Toggles if 2FA should be disabled. type: boolean disableUdon: default: false description: Toggles if Udon should be universally disabled in-game. type: boolean disableUpgradeAccount: default: false description: Toggles if account upgrading "linking with Steam/Oculus" should be disabled. type: boolean downloadLinkWindows: description: Download link for game on the Oculus Rift website. minLength: 1 type: string downloadUrls: $ref: '#/components/schemas/APIConfigDownloadURLList' dynamicWorldRows: description: Array of DynamicWorldRow objects, used by the game to display the list of world rows minItems: 1 type: array uniqueItems: true items: $ref: '#/components/schemas/DynamicContentRow' economyPauseEnd: description: Unknown type: string economyPauseStart: description: Unknown type: string economyState: default: 1 description: Unknown type: integer events: $ref: '#/components/schemas/APIConfigEvents' forceUseLatestWorld: default: true description: Unknown type: boolean giftDisplayType: description: Display type of gifts type: string googleApiClientId: type: string description: Unknown default: 827942544393-r2ouvckvouldn9dg9uruseje575e878f.apps.googleusercontent.com homeWorldId: $ref: '#/components/schemas/WorldID' homepageRedirectTarget: default: https://hello.vrchat.com description: Redirect target if you try to open the base API domain in your browser minLength: 1 type: string hubWorldId: $ref: '#/components/schemas/WorldID' imageHostUrlList: 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). type: array items: type: string jobsEmail: description: VRChat's job application email minLength: 1 type: string 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: description: VRChat's moderation related email minLength: 1 type: string notAllowedToSelectAvatarInPrivateWorldMessage: description: Used in-game to notify a user they aren't allowed to select avatars in private worlds minLength: 1 type: string 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 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' text: $ref: '#/components/schemas/ReportCategory' sticker: $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: description: Link to the developer FAQ minLength: 1 type: string sdkDiscordUrl: description: Link to the official VRChat Discord minLength: 1 type: string sdkNotAllowedToPublishMessage: description: Used in the SDK to notify a user they aren't allowed to upload avatars/worlds yet minLength: 1 type: string sdkUnityVersion: description: Unity version supported by the SDK minLength: 1 type: string stringHostUrlList: 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). type: array items: type: string supportEmail: description: VRChat's support email minLength: 1 type: string supportFormUrl: description: VRChat's support form type: string timekeeping: type: boolean description: Unknown default: true timeOutWorldId: $ref: '#/components/schemas/WorldID' tutorialWorldId: $ref: '#/components/schemas/WorldID' updateRateMsMaximum: description: Unknown type: integer updateRateMsMinimum: description: Unknown type: integer updateRateMsNormal: description: Unknown type: integer updateRateMsUdonManual: description: Unknown type: integer uploadAnalysisPercent: description: Unknown type: integer urlList: description: List of allowed URLs that bypass the "Allow untrusted URL's" setting in-game type: array items: type: string useReliableUdpForVoice: default: false description: Unknown type: boolean viveWindowsUrl: description: Download link for game on the Steam website. minLength: 1 type: string whiteListedAssetUrls: description: List of allowed URLs that are allowed to host avatar assets type: array items: type: string player-url-resolver-version: description: Currently used youtube-dl.exe version minLength: 1 type: string player-url-resolver-sha1: description: Currently used youtube-dl.exe hash in SHA1-delimited format minLength: 1 type: string publicKey: type: string description: Public key, hex encoded websocketMaxFriendsRefreshDelay: type: integer description: Unknown default: 900 websocketQuickReconnectTime: type: integer description: Unknown default: 2 websocketReconnectMaxDelay: type: integer description: Unknown default: 2 required: - VoiceEnableDegradation - VoiceEnableReceiverLimiting - accessLogsUrls - address - ageVerificationInviteVisible - ageVerificationP - ageVerificationStatusVisible - analysisMaxRetries - analysisRetryInterval - announcements - analyticsSegment_NewUI_PctOfUsers - analyticsSegment_NewUI_Salt - availableLanguageCodes - availableLanguages - avatarPerfLimiter - chatboxLogBufferSeconds - clientApiKey - clientBPSCeiling - clientNetDispatchThreadMobile - clientDisconnectTimeout - clientReservedPlayerBPS - clientSentCountAllowance - contactEmail - constants - 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 - reportCategories - reportFormUrl - reportOptions - reportReasons - requireAgeVerificationBetaTag - sdkDeveloperFaqUrl - sdkDiscordUrl - sdkNotAllowedToPublishMessage - sdkUnityVersion - stringHostUrlList - supportEmail - supportFormUrl - timekeeping - timeOutWorldId - tutorialWorldId - updateRateMsMaximum - updateRateMsMinimum - updateRateMsNormal - updateRateMsUdonManual - uploadAnalysisPercent - urlList - useReliableUdpForVoice - viveWindowsUrl - whiteListedAssetUrls - player-url-resolver-version - player-url-resolver-sha1 - publicKey - websocketMaxFriendsRefreshDelay - websocketQuickReconnectTime - websocketReconnectMaxDelay InfoPushDataClickable: type: object title: InfoPushDataClickable properties: command: type: string minLength: 1 example: OpenURL enum: - OpenURL - OpenVRCPlusMenu - OpenSafetyMenu - CannedWorldSearch parameters: description: In case of OpenURL, this would contain the link. type: array items: type: string required: - command InfoPushDataArticleContent: title: InfoPushDataArticleContent type: object properties: text: type: string imageUrl: type: string onPressed: $ref: '#/components/schemas/InfoPushDataClickable' InfoPushDataArticle: title: InfoPushDataArticle type: object properties: content: $ref: '#/components/schemas/InfoPushDataArticleContent' InfoPushData: description: '' type: object title: InfoPushData properties: contentList: $ref: '#/components/schemas/DynamicContentRow' description: type: string imageUrl: minLength: 1 type: string name: type: string onPressed: $ref: '#/components/schemas/InfoPushDataClickable' template: type: string version: example: 2021.3.4 minLength: 1 type: string article: $ref: '#/components/schemas/InfoPushDataArticle' InfoPush: description: '' type: object title: InfoPush properties: id: type: string minLength: 1 example: launch-beta isEnabled: type: boolean default: true releaseStatus: $ref: '#/components/schemas/ReleaseStatus' priority: type: integer tags: description: ' ' type: array items: $ref: '#/components/schemas/Tag' data: $ref: '#/components/schemas/InfoPushData' hash: type: string minLength: 1 description: Unknown usage, MD5 createdAt: type: string format: date-time updatedAt: type: string format: date-time startDate: type: string format: date-time description: '' endDate: type: string format: date-time required: - id - isEnabled - releaseStatus - priority - tags - data - hash - createdAt - updatedAt APIHealth: title: APIHealth type: object properties: ok: type: boolean serverName: type: string minLength: 1 buildVersionTag: type: string minLength: 1 required: - ok - serverName - buildVersionTag PermissionID: example: prms_804ba021-9f47-4e25-9847-1f42fdb2e6ff title: PermissionID type: string Permission: description: '' properties: displayName: type: string description: type: string id: $ref: '#/components/schemas/PermissionID' ownerDisplayName: type: string name: example: permission-invite-photos minLength: 1 type: string ownerId: $ref: '#/components/schemas/UserID' type: type: string data: type: object required: - id - ownerId - ownerDisplayName - name title: Permission type: object NotificationDetailInvite: properties: inviteMessage: type: string worldId: $ref: '#/components/schemas/LocationID' worldName: type: string required: - worldId - worldName title: NotificationDetailInvite type: object NotificationDetailInviteResponse: properties: inResponseTo: $ref: '#/components/schemas/NotificationID' responseMessage: type: string required: - inResponseTo - responseMessage title: NotificationDetailInviteResponse type: object NotificationDetailRequestInvite: properties: platform: description: 'TODO: Does this still exist?' type: string requestMessage: description: Used when using InviteMessage Slot. type: string title: NotificationDetailRequestInvite type: object NotificationDetailRequestInviteResponse: properties: inResponseTo: $ref: '#/components/schemas/NotificationID' requestMessage: description: Used when using InviteMessage Slot. type: string required: - inResponseTo title: NotificationDetailRequestInviteResponse type: object NotificationDetailVoteToKick: properties: initiatorUserId: $ref: '#/components/schemas/UserID' userToKickId: $ref: '#/components/schemas/UserID' required: - userToKickId - initiatorUserId title: NotificationDetailVoteToKick type: object securitySchemes: authHeader: type: http scheme: basic description: Auth token via Header authCookie: name: auth type: apiKey in: cookie description: Auth Token via Cookie twoFactorAuthCookie: name: twoFactorAuth type: apiKey in: cookie description: 2FA device remembrance via Cookie responses: 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: schema: $ref: '#/components/schemas/Error' examples: 400 At Least One Parameter Required: value: error: message: '"username, email, or displayName required"' status_code: 400 CurrentUserLoginResponse: description: OK content: application/json: schema: $ref: '#/components/schemas/CurrentUser' headers: Set-Cookie: schema: type: string example: auth=authcookie_00000000-0000-0000-0000-000000000000; Expires=Tue, 01 Jan 2030 00:00:00 GMT; Path=/; HttpOnly description: Successful authentication returns an `auth` cookie. MissingCredentialsError: description: Error response due to missing auth cookie. content: application/json: schema: $ref: '#/components/schemas/Error' examples: Missing Credentials Example: value: error: message: '"Missing Credentials"' status_code: 401 Disable2FAResponse: description: OK content: application/json: schema: $ref: '#/components/schemas/Disable2FAResult' Verify2FAResponse: description: OK content: application/json: schema: $ref: '#/components/schemas/Verify2FAResult' headers: Set-Cookie: schema: type: string example: twoFactorAuth=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; Expires=Tue, 01 Jan 2030 00:00:00 GMT; Path=/; HttpOnly description: Provides a `twoFactorAuth` cookie, which can be used to bypasses the 2FA requirement for future logins on the same device. Pending2FAResponse: description: OK content: application/json: schema: $ref: '#/components/schemas/Pending2FAResult' Get2FARecoveryCodesResponse: description: Returns the two factor recovery codes content: application/json: schema: $ref: '#/components/schemas/TwoFactorRecoveryCodes' Verify2FAEmailCodeResponse: description: OK content: application/json: schema: $ref: '#/components/schemas/Verify2FAEmailCodeResult' headers: Set-Cookie: schema: type: string example: twoFactorAuth=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; Expires=Tue, 01 Jan 2030 00:00:00 GMT; Path=/; HttpOnly description: Provides a `twoFactorAuth` cookie, which can be used to bypasses the 2FA requirement for future logins on the same device. VerifyAuthTokenResponse: description: Returns wether a provided auth token is valid or not. content: application/json: schema: $ref: '#/components/schemas/VerifyAuthTokenResult' LogoutSuccess: description: OK content: application/json: schema: $ref: '#/components/schemas/Success' examples: Logout Success: value: success: message: Ok! status_code: 200 headers: Set-Cookie: schema: type: string default: auth=; Expires=Tue, 01 Jan 2030 00:00:00 GMT; Path=/ description: Clears the `auth` cookie. \0Set-Cookie: schema: type: string default: age=; Expires=Tue, 01 Jan 2030 00:00:00 GMT; Path=/ description: Clears the `age` cookie. \0\0Set-Cookie: schema: type: string default: tos=; Expires=Tue, 01 Jan 2030 00:00:00 GMT; Path=/ description: Clears the `tos` cookie. DeleteUserResponse: description: OK content: application/json: schema: $ref: '#/components/schemas/CurrentUser' ResendVerificationEmailSuccess: description: OK content: application/json: schema: $ref: '#/components/schemas/Success' examples: Resend Verification Email Success: value: success: message: Verification Email Sent! status_code: 200 ConfirmEmailResponse: description: OK VerifyLoginPlaceResponse: description: OK GetAvatarModerationsResponse: description: Returns list of globally blocked avatars with timestamps content: application/json: schema: type: array items: $ref: '#/components/schemas/AvatarModeration' AvatarResponse: description: Returns a single Avatar object. content: application/json: schema: $ref: '#/components/schemas/Avatar' AvatarSeeOtherUserCurrentAvatarError: description: Error response when trying to see another users current avatar without sufficient admin permissions. content: application/json: schema: $ref: '#/components/schemas/Error' 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 AvatarListResponse: description: Returns a list of Avatar objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/Avatar' UnableToCreateAvatarNowError: description: Error response due to missing permissions. content: application/json: schema: $ref: '#/components/schemas/Error' examples: Unable To Create Avatar Now Example: value: error: message: You can't create an avatar right now status_code: 400 FeaturedSetNotAdminError: description: Error response when set featured to true without being an admin. content: application/json: schema: $ref: '#/components/schemas/Error' examples: 401 Cannot Set Featured: value: error: message: cannot set featured tag if you are not an admin status_code: 401 AvatarStyleListResponse: description: Returns a list of AvatarStyle objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/AvatarStyle' AvatarNotFoundError: description: Error response when trying to show information about a non-existent avatar. content: application/json: schema: $ref: '#/components/schemas/Error' examples: 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 404 Avatar Not Found: value: error: message: Avatar Not Found status_code: 404 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: schema: $ref: '#/components/schemas/Error' examples: 403 Cant Select Non-Fallback as Fallback: value: error: message: This avatar isn't tagged as a quest fallback avatar. status_code: 403 AvatarSeeOtherUserFavoritesError: description: Error response when trying to see favourited avatars of another user without sufficient admin permissions. content: application/json: schema: $ref: '#/components/schemas/Error' examples: 403 Cant See Other User Favorite Avatars: value: error: message: \"You can only see your own favorite avatars!\" status_code: 403 AvatarImpostorEnqueueResponse: description: Returns a Service Status. content: application/json: schema: $ref: '#/components/schemas/ServiceStatus' AvatarImpostorQueueStatsResponse: description: Returns a Service Queue Stats. content: application/json: schema: $ref: '#/components/schemas/ServiceQueueStats' 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: schema: $ref: '#/components/schemas/Success' examples: Deleted Calendar Entry: value: success: message: Calendar Entry deleted! status_code: 200 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: schema: $ref: '#/components/schemas/Error' examples: 404 File Not Found: value: error: message: Calendar Entry not foundǃ status_code: 404 TransactionListResponse: description: Returns a list of Transaction objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/Transaction' TransactionResponse: description: Returns a single Transaction object. content: application/json: schema: $ref: '#/components/schemas/Transaction' UserSubscriptionListResponse: description: Returns a list of UserSubscription objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/UserSubscription' UserSubscriptionEligibleResponse: description: Returns a single UserSubscriptionEligible object. content: application/json: schema: $ref: '#/components/schemas/UserSubscriptionEligible' SubscriptionListResponse: description: Returns a list of Subscription objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/Subscription' 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' ProductListingListResponse: description: Returns a list of ProductListing objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/ProductListing' TokenBundleListResponse: description: Returns a list of TokenBundle objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/TokenBundle' TiliaStatusResponse: description: Returns a single TiliaStatus object. content: application/json: schema: $ref: '#/components/schemas/TiliaStatus' TiliaTOSResponse: description: Returns a single TiliaTOS object. content: application/json: schema: $ref: '#/components/schemas/TiliaTOS' 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' 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' 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: schema: $ref: '#/components/schemas/Error' examples: 400 Already Favorited That Friend: value: error: message: You already have that friend favorited status_code: 400 FavoriteAddNotFriendsError: description: Error response when trying favorite someone whom you are not friends with. content: application/json: schema: $ref: '#/components/schemas/Error' examples: 403 Favorite Add Not Friends Error: value: error: message: you are not friends with that userǃ status_code: 403 FavoriteRemovedSuccess: description: Success response after removing a favorite. content: application/json: schema: $ref: '#/components/schemas/Success' examples: 200 Favorite Removed: value: success: message: favorite deleted! status_code: 200 FavoriteNotFoundError: description: Error response when trying to show information about a non-existent favorite. content: application/json: schema: $ref: '#/components/schemas/Error' examples: 404 Favorite not found: value: error: message: 404 couldn't find that favorite status_code: 404 FavoriteGroupListResponse: description: Returns a list of FavoriteGroup objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/FavoriteGroup' 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: schema: $ref: '#/components/schemas/Success' examples: 200 Favorite Group Cleared: value: success: message: favorite deleted! status_code: 200 FavoriteLimitsResponse: description: Returns a single FavoriteLimits object. content: application/json: schema: $ref: '#/components/schemas/FavoriteLimits' FileListResponse: description: Returns a list of File objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/File' FileResponse: description: Returns a single File object. content: application/json: schema: $ref: '#/components/schemas/File' examples: Example Avatar File: value: id: file_00000000-0000-0000-0000-000000000000 name: Avatar - Test Avatar - Unity package - 2017․4․28f1_3_standalonewindows_Release ownerId: usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469 mimeType: application/gzip extension: .unitypackage tags: [] versions: - version: 0 status: complete created_at: '2019-08-15T11:04:37.910Z' - version: 1 status: complete created_at: '2019-08-15T11:04:49.702Z' file: fileName: Avatar-Test-Avatar-Unity.file_00000000-0000-0000-0000-000000000000.1.unitypackage url: https://s3.us-east-1.amazonaws.com/files.vrchat.cloud/Avatar-Test-Avatar-Unity.file_00000000-0000-0000-0000-000000000000.1.unitypackage md5: xxxxxxxxxxxxxxxxxxx== sizeInBytes: 303055180 status: complete category: multipart uploadId: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx delta: fileName: Avatar-Test-Avatar-Unity.file_00000000-0000-0000-0000-000000000000.1.unitypackage.delta url: https://s3.us-east-1.amazonaws.com/files.vrchat.cloud/Avatar-Test-Avatar-Unity.file_00000000-0000-0000-0000-000000000000.1.unitypackage.delta md5: '' sizeInBytes: 0 status: none category: queued uploadId: '' signature: fileName: Avatar-Test-Avatar-Unity.file_00000000-0000-0000-0000-000000000000.1.unitypackage.signature url: https://s3.us-east-1.amazonaws.com/files.vrchat.cloud/Avatar-Test-Avatar-Unity.file_00000000-0000-0000-0000-000000000000.1.unitypackage.signature md5: xxxxxxxxxxxxxxxx== sizeInBytes: 532748 status: complete category: simple uploadId: '' FileNotFoundError: description: Error response when trying to show information about a non-existent file. content: application/json: schema: $ref: '#/components/schemas/Error' examples: 404 File Not Found: value: error: message: File 'file_ce35d830-e20a-4df0-a6d4-5aaef4508044' not found status_code: 404 FileDeletedError: description: Error response when trying to delete a non-existent file. content: application/json: schema: $ref: '#/components/schemas/Error' examples: File Deleted Error: value: error: message: File 'file_ce35d830-e20a-4df0-a6d4-5aaef4508044' not found status_code: 404 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: schema: $ref: '#/components/schemas/Error' 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 FileVersionDeleteMiddleError: description: Error response when trying to delete any version of a file that is not the last one. content: application/json: schema: $ref: '#/components/schemas/Error' 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 FileUploadURLResponse: description: See [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](AWS REST docs - PUT Object) content: application/json: schema: $ref: '#/components/schemas/FileUploadURL' 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 FileUploadAlreadyFinishedError: description: Error response when trying to start an upload against a FileVersion that is already marked as `complete`. content: application/json: schema: $ref: '#/components/schemas/Error' 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 FileVersionUploadStatusResponse: description: Current FileVersion upload status. Contains the uploadId needed for uploading, as well as the already uploaded parts. content: application/json: schema: $ref: '#/components/schemas/FileVersionUploadStatus' examples: Example Access Key: value: uploadId: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx..xxxxxxxxxxxxxxxxxxxxxxx fileName: Avatar-MyAvatar-Un.file_00000000-0000-0000-0000-000000000000.1.unitypackage nextPartNumber: 0 maxParts: 1000 parts: [] etags: [] 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: schema: $ref: '#/components/schemas/Error' examples: Analysis Not Yet Available Error: value: error: message: Analysis not yet available status_code: 202 AdminAssetBundleResponse: description: Returns a single AdminAssetBundle object. content: application/json: schema: $ref: '#/components/schemas/AdminAssetBundle' LimitedUserFriendListResponse: description: Returns a list of LimitedUserFriend objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/LimitedUserFriend' NotificationResponse: description: Returns a single Notifcation object. content: application/json: schema: $ref: '#/components/schemas/Notification' examples: Example Friend Request Response: value: id: frq_00000000-0000-0000-0000-000000000000 senderUserId: usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469 type: friendRequest message: '' details: '{}' seen: false created_at: '2021-01-01T00:00:00.000Z' FriendBadRequestError: description: Bad request error response when sending a friend request content: application/json: schema: $ref: '#/components/schemas/Error' examples: Users Already Friends: value: error: message: Users are already friends status_code: 400 Already Sent a Friend Request: value: error: message: This user has already been sent a friend request status_code: 400 UserDoesntExistError: description: Error response when trying to send a friend request to a user which doesn't exist. content: application/json: schema: $ref: '#/components/schemas/Error' examples: 404 User Doesn't Exist Response: value: error: message: user doesn't existǃ status_code: 404 DeleteFriendSuccess: description: Successful response after cancelling a friend request. content: application/json: schema: $ref: '#/components/schemas/Success' examples: Deleted Friend Request: value: success: message: Friendship request deleted status_code: 200 DeleteFriendRequestError: description: Error response when trying to delete a non-existent friend-request. content: application/json: schema: $ref: '#/components/schemas/Error' examples: 404 Delete Friend Request: value: error: message: that friend request could not be found status_code: 404 FriendStatusResponse: description: Returns a users Friend Status. content: application/json: schema: $ref: '#/components/schemas/FriendStatus' examples: Not Friends: value: isFriend: true outgoingRequest: false incomingRequest: false Is Friend: value: isFriend: true outgoingRequest: false incomingRequest: false UnfriendSuccess: description: Successful response after unfriending a user. content: application/json: schema: $ref: '#/components/schemas/Success' examples: Unfriend Success: value: success: message: Friendship destroyed status_code: 200 NotFriendsError: description: Error response when trying to unfriend someone who is not a friend. content: application/json: schema: $ref: '#/components/schemas/Error' examples: 400 Not Friends Response: value: error: message: These users are not friends status_code: 400 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: schema: $ref: '#/components/schemas/Error' examples: 404 World Not Found: value: error: message: Can't find groupǃ status_code: 404 DeleteGroupSuccess: description: Successful response after deleting a Group. content: application/json: schema: $ref: '#/components/schemas/Success' examples: Deleted Group: value: success: message: Group deleted! status_code: 200 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: schema: $ref: '#/components/schemas/Success' examples: Deleted Group Announcement: value: success: message: Group announcement was cleared! status_code: 200 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: schema: $ref: '#/components/schemas/Error' examples: No Permission Example: value: error: message: You don't have permission․ status_code: 403 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: schema: $ref: '#/components/schemas/Error' examples: User Already Banned: value: error: message: User is already banned․ status_code: 400 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: schema: $ref: '#/components/schemas/Success' examples: Deleted Group Gallery: value: success: message: Gallery deleted! status_code: 200 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: schema: $ref: '#/components/schemas/Success' examples: Deleted Group Gallery Image: value: success: message: Gallery image removed! status_code: 200 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: schema: $ref: '#/components/schemas/Error' examples: 403 Cannot Delete Submission: value: error: message: You can't remove this gallery submission! status_code: 403 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: schema: $ref: '#/components/schemas/Error' examples: 403 Not Group Member: value: error: message: You're not a member. status_code: 403 GroupInviteBadRequestError: description: Bad request error response when creating a group invite. content: application/json: schema: $ref: '#/components/schemas/Error' 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 GroupInviteForbiddenError: description: Forbidden error response when creating a group invite. content: application/json: schema: $ref: '#/components/schemas/Error' examples: Forbidden to Invite User: value: error: message: You can't invite that user․ status_code: 403 DeleteGroupInviteBadRequestError: description: Bad request error response when deleting a group invite content: application/json: schema: $ref: '#/components/schemas/Error' examples: User Not Invited: value: error: message: You can't uninvite a user who wasn't invited․ status_code: 400 GroupAlreadyMemberError: description: Error response when trying to join a group that the user is already a member of. content: application/json: schema: $ref: '#/components/schemas/Error' examples: 400 User Already Member: value: error: message: You're already a member! status_code: 400 UsersInvalidSearchError: description: Error response when trying to search list of users with an invalid request. content: application/json: schema: $ref: '#/components/schemas/Error' examples: 400 N is too low: value: error: message: n must be a positive integer˸ '-1' status_code: 400 400 N is too high: value: error: message: n=1000 is much too high․ implement paging you savages․ status_code: 400 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: schema: $ref: '#/components/schemas/Success' examples: Deleted Group Post: value: success: message: Group Post was deleted! status_code: 200 UpdateGroupRepresentationSuccess: description: Successful response after updating group representation. content: application/json: schema: $ref: '#/components/schemas/Success' examples: Updated Group Representation: value: success: message: Group representation updated! status_code: 200 GroupJoinRequestResponseBadRequestError: description: Bad request error response when responding to a group join request content: application/json: schema: $ref: '#/components/schemas/Error' 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 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' InventoryResponse: description: Returns an Inventory object. content: application/json: schema: $ref: '#/components/schemas/Inventory' InventoryItemResponse: description: Returns an InventoryItem object. content: application/json: schema: $ref: '#/components/schemas/InventoryItem' 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' InventorySpawnResponse: description: Returns an InventorySpawn object. content: application/json: schema: $ref: '#/components/schemas/InventorySpawn' InventoryShareResponse: description: Returns an OkStatus object. content: application/json: schema: $ref: '#/components/schemas/OkStatus' SendNotificationResponse: description: Returns a single SentNotifcation object. content: application/json: schema: $ref: '#/components/schemas/SentNotification' examples: Example Friend Request Response: value: id: frq_00000000-0000-0000-0000-000000000000 receiverUserId: usr_00000000-0000-0000-0000-000000000000 senderUserId: usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469 type: friendRequest message: '' details: {} created_at: '2021-01-01T00:00:00.000Z' InviteMustBeFriendsError: description: Error response when trying to invite someome whom you are not friends with. content: application/json: schema: $ref: '#/components/schemas/Error' examples: Must Be Friends Error: value: error: message: '"You need to be friends with that user first."' status_code: 403 InstanceNotFoundError: description: Error response due to non existant instance content: application/json: schema: $ref: '#/components/schemas/Error' examples: Instance Not Found Example: value: error: message: '"Instance not found"' status_code: 404 InviteResponse400Error: description: Error response when trying to respond to an invite and something went wrong. content: application/json: schema: $ref: '#/components/schemas/Error' examples: Response Slot Out Of Bounds Error: value: error: message: '"Response slot is out of bounds."' status_code: 400 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 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: schema: $ref: '#/components/schemas/Error' 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 NotAuthorizedActionError: description: Error response due to missing authorization to perform that action. content: application/json: schema: $ref: '#/components/schemas/Error' examples: Not Authorized Example: value: error: message: You are not authorized to perform that action. status_code: 401 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: schema: $ref: '#/components/schemas/Error' examples: 200 Negative Slot Number Error: value: {} InviteMessageGetTooHighSlotError: description: Error response when trying to get an Invite Message with a too high slot number. content: application/json: schema: $ref: '#/components/schemas/Error' examples: 404 Slot Number Too High Error: value: error: status_code: 404 InviteMessageUpdateRateLimitError: description: Error response when trying to update an Invite Message before the cooldown has expired. content: application/json: schema: $ref: '#/components/schemas/Error' examples: Update Invite Message Please Wait Error: value: error: message: Please wait 60 more minutes until you try again․ status_code: 429 InviteMessageNoEntryForSlotError: description: Error response when trying to reset an Invite Message whos slot doesn't exist. content: application/json: schema: $ref: '#/components/schemas/Error' examples: 404 No Custom Invite Message In Slot: value: error: message: There's no entry for that slot. status_code: 404 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' InstanceCloseForbiddenError: description: Error response due to not being allowed to close an instance content: application/json: schema: $ref: '#/components/schemas/Error' examples: Not Allowed to Close Instance Example: value: error: message: You're not allowed to close this instance․ status_code: 403 Instance Already Closed Example: value: error: message: You're not allowed to close an already closed instance․ status_code: 403 InstanceShortNameResponse: description: Returns an instance secureName and/or shortName. content: application/json: schema: $ref: '#/components/schemas/InstanceShortNameResponse' NotificationListResponse: description: Returns a list of Notifcation objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/Notification' NotificationNotFoundError: description: Error response when trying to perform operations on a non-existing notification. content: application/json: schema: $ref: '#/components/schemas/Error' examples: 404 World Not Found: value: error: message: Notification not found status_code: 404 FriendSuccess: description: Successful response after friending a user. content: application/json: schema: $ref: '#/components/schemas/Success' examples: Unfriend Success: value: success: message: Ok status_code: 200 AcceptFriendRequestError: description: Error response when trying to accept a non-existent friend request. content: application/json: schema: $ref: '#/components/schemas/Error' examples: 404 Accept Friend Request: value: error: message: that friend request could not be found status_code: 404 ClearNotificationsSuccess: description: Successful response after clearing all notifications. content: application/json: schema: $ref: '#/components/schemas/Success' examples: Unfriend Success: value: success: message: Ok status_code: 200 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: schema: $ref: '#/components/schemas/Success' examples: 200 OK: value: success: message: OK status_code: 200 PlayerModerationUnmoderatedSuccess: description: Success response after unmoderating a player moderation. content: application/json: schema: $ref: '#/components/schemas/Success' examples: 200 Specific User Unmoderated: value: success: message: User usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469 unmoderated status_code: 200 200 All Of PlayerModerationType Unmoderated: value: success: message: PlayerModerations of type undefined removed status_code: 200 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: schema: $ref: '#/components/schemas/Error' examples: 403 Unable to request another user's prints: value: error: message: Unable to request another user's prints. status_code: 403 PrintResponse: description: Returns a single Print object. content: application/json: schema: $ref: '#/components/schemas/Print' PropResponse: description: Returns a single Prop object. content: application/json: schema: $ref: '#/components/schemas/Prop' 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: schema: $ref: '#/components/schemas/Error' examples: 404 Jam not found: value: error: message: 404 id must be an ID˸ 'invalid_id_here' status_code: 404 SubmissionListResponse: description: Returns a list of Submission objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/Submission' LimitedUserSearchListResponse: description: Returns a list of LimitedUserSearch objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/LimitedUserSearch' InvalidAdminCredentialsError: description: Error response due to missing Administrator credentials. content: application/json: schema: $ref: '#/components/schemas/Error' examples: Invalid Admin Credentials Example: value: error: message: '"Invalid Admin Credentials"' status_code: 403 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' 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' FeedbackListResponse: description: Returns a list of Feedback objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/Feedback' 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' 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' UserMustBeOwnError: description: Error response when trying get group instances of another user. content: application/json: schema: $ref: '#/components/schemas/Error' examples: User Id must be your own: value: error: message: User ID must be your own․ status_code: 403 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' 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: schema: $ref: '#/components/schemas/Error' examples: 400 Can't Create World Yet: value: error: message: \"You can't create a world right now\" status_code: 400 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: schema: $ref: '#/components/schemas/Error' examples: 404 Cant See Other User Favorite Worlds: value: error: message: 403 You can't see another user's favorites status_code: 403 WorldSeeOtherUserRecentsError: description: Error response when trying to see recently visited worlds of another user without sufficient admin permissions. content: application/json: schema: $ref: '#/components/schemas/Error' examples: 403 Only See Own Recents: value: error: message: \"You can only see your own recent worlds!\" status_code: 403 WorldNotFoundError: description: Error response when trying to show information about a non-existent world. Sometimes returns with `model not found` instead of `World