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

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