openapi: 3.0.3
info:
title: VRChat API Documentation
version: 1.20.5
contact:
name: Unofficial VRChat API Documentation Project
url: https://github.com/VRChatAPI
email: vrchatapi.lpv0t@aries.fyi
termsOfService: https://vrchat.com/legal/
license:
url: https://github.com/vrchatapi/specification/blob/master/LICENSE
name: MIT
description: |-

# 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.

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