diff --git a/openapi/components/parameters.yaml b/openapi/components/parameters.yaml index d079c6ad..b11e5eff 100644 --- a/openapi/components/parameters.yaml +++ b/openapi/components/parameters.yaml @@ -261,6 +261,13 @@ favoriteGroupType: in: path schema: $ref: ./schemas/FavoriteType.yaml +favoriteGroupTypeQuery: + name: type + description: Filter the returned groups to a single favourite type. + required: false + in: query + schema: + $ref: ./schemas/FavoriteType.yaml favoriteId: name: favoriteId description: Must be a valid favorite ID. @@ -783,7 +790,7 @@ search: type: string sellerId: name: sellerId - description: Seller to retrieve economy metrics for. + description: Seller to scope the results to. required: true in: query schema: @@ -818,6 +825,13 @@ sortProductPurchase: in: query schema: $ref: ./schemas/SortOptionProductPurchase.yaml +ssoProvider: + name: provider + description: The third-party service to mint a token for. + required: true + in: path + schema: + $ref: ./schemas/SsoProvider.yaml startDate: name: startDate description: The start date of the search range. diff --git a/openapi/components/paths.yaml b/openapi/components/paths.yaml index 5bcb2a87..2ecc87cb 100644 --- a/openapi/components/paths.yaml +++ b/openapi/components/paths.yaml @@ -314,6 +314,8 @@ $ref: "./paths/notifications.yaml#/paths/~1notifications~1{notificationId}~1respond" "/notifications/{notificationId}/see": $ref: "./paths/notifications.yaml#/paths/~1notifications~1{notificationId}~1see" +/oauth/redirectCode: + $ref: "./paths/authentication.yaml#/paths/~1oauth~1redirectCode" /permissions: $ref: "./paths/miscellaneous.yaml#/paths/~1permissions" "/permissions/{permissionId}": @@ -344,6 +346,8 @@ $ref: "./paths/invite.yaml#/paths/~1requestInvite~1{userId}~1photo" /reward/redeem: $ref: "./paths/inventory.yaml#/paths/~1reward~1redeem" +"/sso/{provider}": + $ref: "./paths/authentication.yaml#/paths/~1sso~1{provider}" /subscriptions: $ref: "./paths/economy.yaml#/paths/~1subscriptions" /tilia/status: @@ -458,13 +462,13 @@ $ref: "./paths/worlds.yaml#/paths/~1worlds~1{worldId}" "/worlds/{worldId}/addTags": $ref: "./paths/worlds.yaml#/paths/~1worlds~1{worldId}~1addTags" +"/worlds/{worldId}/deleteTags": + $ref: "./paths/worlds.yaml#/paths/~1worlds~1{worldId}~1deleteTags" "/worlds/{worldId}/metadata": $ref: "./paths/worlds.yaml#/paths/~1worlds~1{worldId}~1metadata" "/worlds/{worldId}/platform/{publishedPlatform}": $ref: "./paths/worlds.yaml#/paths/~1worlds~1{worldId}~1platform~1{publishedPlatform}" "/worlds/{worldId}/publish": $ref: "./paths/worlds.yaml#/paths/~1worlds~1{worldId}~1publish" -"/worlds/{worldId}/removeTags": - $ref: "./paths/worlds.yaml#/paths/~1worlds~1{worldId}~1removeTags" "/worlds/{worldId}/{instanceId}": $ref: "./paths/worlds.yaml#/paths/~1worlds~1{worldId}~1{instanceId}" diff --git a/openapi/components/paths/authentication.yaml b/openapi/components/paths/authentication.yaml index 302e8c39..27e409ea 100644 --- a/openapi/components/paths/authentication.yaml +++ b/openapi/components/paths/authentication.yaml @@ -399,6 +399,38 @@ paths: $ref: ../responses/MissingCredentialsError.yaml "403": $ref: ../responses/InvalidAdminCredentialsError.yaml + /oauth/redirectCode: + get: + operationId: getOAuthRedirectCode + summary: Get OAuth Redirect Code + description: Mints a short-lived code that hands the current session to an OAuth redirect. + tags: + - authentication + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/authentication/OAuthRedirectCodeResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "/sso/{provider}": + parameters: + - $ref: ../parameters.yaml#/ssoProvider + get: + operationId: getSsoToken + summary: Get SSO Token + description: Returns a token for the given third-party service. + tags: + - authentication + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/authentication/SsoTokenResponse.yaml + "400": + $ref: ../responses/authentication/SsoProviderUnsupportedError.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml "/users/{userId}/delete": parameters: - $ref: ../parameters.yaml#/userId diff --git a/openapi/components/paths/avatars.yaml b/openapi/components/paths/avatars.yaml index 24ade939..86401c66 100644 --- a/openapi/components/paths/avatars.yaml +++ b/openapi/components/paths/avatars.yaml @@ -18,7 +18,9 @@ paths: get: operationId: searchAvatars summary: Search Avatars - description: Search and list avatars by query filters. You can only search your own or featured avatars. It is not possible as a normal user to search other peoples avatars. + description: Search and list avatars by query filters. You can only search your + own or featured avatars. It is not possible as a normal user to search + other peoples avatars. tags: - avatars parameters: @@ -53,7 +55,9 @@ paths: post: operationId: createAvatar summary: Create Avatar - description: Create an avatar. It's possible to optionally specify a ID if you want a custom one. Attempting to create an Avatar with an already claimed ID will result in a DB error. + description: Create an avatar. It's possible to optionally specify a ID if you + want a custom one. Attempting to create an Avatar with an already + claimed ID will result in a DB error. tags: - avatars requestBody: @@ -165,6 +169,8 @@ paths: responses: "200": $ref: ../responses/avatars/AvatarResponse.yaml + "400": + $ref: ../responses/RequestValidationError.yaml "401": $ref: ../responses/MissingCredentialsError.yaml "404": @@ -172,7 +178,9 @@ paths: delete: operationId: deleteAvatar summary: Delete Avatar - description: 'Delete an avatar. Notice an avatar is never fully "deleted", only its ReleaseStatus is set to "hidden" and the linked Files are deleted. The AvatarID is permanently reserved.' + description: 'Delete an avatar. Notice an avatar is never fully "deleted", only + its ReleaseStatus is set to "hidden" and the linked Files are deleted. + The AvatarID is permanently reserved.' tags: - avatars security: @@ -243,7 +251,6 @@ paths: - $ref: ../parameters.yaml#/avatarId put: operationId: selectFallbackAvatar - deprecated: true summary: Select Fallback Avatar description: Switches into that avatar as your fallback avatar. tags: @@ -265,7 +272,8 @@ paths: get: operationId: getOwnAvatar summary: Get Own Avatar - description: Get the current avatar for the user. This will return an error for any other user than the one logged in. + description: Get the current avatar for the user. This will return an error for + any other user than the one logged in. tags: - avatars security: diff --git a/openapi/components/paths/calendar.yaml b/openapi/components/paths/calendar.yaml index 1b61ef8f..e4e83aa4 100644 --- a/openapi/components/paths/calendar.yaml +++ b/openapi/components/paths/calendar.yaml @@ -46,6 +46,7 @@ paths: - $ref: ../parameters.yaml#/number - $ref: ../parameters.yaml#/calendarDiscoveryNextCursor security: + - {} - authCookie: [] responses: "200": @@ -64,6 +65,7 @@ paths: - $ref: ../parameters.yaml#/number - $ref: ../parameters.yaml#/offset security: + - {} - authCookie: [] responses: "200": diff --git a/openapi/components/paths/economy.yaml b/openapi/components/paths/economy.yaml index c91760ee..afdbb3b6 100644 --- a/openapi/components/paths/economy.yaml +++ b/openapi/components/paths/economy.yaml @@ -26,7 +26,9 @@ paths: operationId: getAdminTransaction deprecated: true summary: Get Admin Transactions - description: "Get a single Admin transactions by ID. This returns the exact same information as `getAdminTransactions`, so no point in using this endpoint." + description: "Get a single Admin transactions by ID. This returns the exact same + information as `getAdminTransactions`, so no point in using this + endpoint." tags: - economy security: @@ -56,9 +58,10 @@ paths: - $ref: ../parameters.yaml#/transactionId get: operationId: getSteamTransaction - deprecated: true summary: Get Steam Transaction - description: "Get a single Steam transactions by ID. This returns the exact same information as `getSteamTransactions`, so no point in using this endpoint." + description: "Get a single Steam transactions by ID. This returns the exact same + information as `getSteamTransactions`, so no point in using this + endpoint." tags: - economy security: @@ -121,12 +124,13 @@ paths: parameters: - $ref: ../parameters.yaml#/metricDateStart - $ref: ../parameters.yaml#/metricDateEnd - - $ref: ../parameters.yaml#/sellerId + - $ref: ../parameters.yaml#/sellerIdQuery - $ref: ../parameters.yaml#/groupByDuration get: operationId: getEarningsMetrics summary: Get Earnings Metrics - description: Gets earnings totals and breakdown metrics for the currently authenticated user. + description: Gets earnings totals and breakdown metrics for the currently + authenticated user. tags: - economy security: @@ -212,9 +216,14 @@ paths: /economy/seller/eligibility: get: operationId: getSellerEligibility + deprecated: true summary: Get Seller Eligibility - description: Get the eligibility of the currently authenticated user to become a seller + description: |- + ~~Get the eligibility of the currently authenticated user to become a seller~~ + + **DEPRECATED:** the route no longer exists. tags: + - deprecated - economy security: - authCookie: [] @@ -223,6 +232,8 @@ paths: $ref: ../responses/economy/SellerEligibilityResponse.yaml "401": $ref: ../responses/MissingCredentialsError.yaml + "404": + $ref: ../responses/RouteNotImplementedError.yaml /economy/store: parameters: - $ref: ../parameters.yaml#/storeId @@ -261,14 +272,15 @@ paths: $ref: ../responses/MissingCredentialsError.yaml /economy/stores: parameters: - - $ref: ../parameters.yaml#/sellerIdQuery + - $ref: ../parameters.yaml#/sellerId - $ref: ../parameters.yaml#/managementPov - $ref: ../parameters.yaml#/number - $ref: ../parameters.yaml#/offset get: operationId: listStores summary: List Stores - description: Lists stores, optionally filtered to a seller and adjusted for management views. + description: Lists stores, optionally filtered to a seller and adjusted for + management views. tags: - economy security: @@ -278,6 +290,8 @@ paths: $ref: ../responses/economy/StoreListResponse.yaml "401": $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/economy/StoresUnavailableError.yaml "/licenseGroups/{licenseGroupId}": parameters: - $ref: ../parameters.yaml#/licenseGroupId @@ -298,7 +312,8 @@ paths: post: operationId: createProductListingDirect summary: Create Product Listing - description: Creates a listing and returns the new ProductListing object. The request body is based on observed fields and may be incomplete. + description: Creates a listing and returns the new ProductListing object. The + request body is based on observed fields and may be incomplete. tags: - economy requestBody: @@ -334,7 +349,8 @@ paths: put: operationId: updateProductListingDirect summary: Update Product Listing - description: Updates the active state of a listing. Setting `active` to `true` publishes the listing, while `false` unpublishes it. + description: Updates the active state of a listing. Setting `active` to `true` + publishes the listing, while `false` unpublishes it. tags: - economy requestBody: @@ -436,9 +452,23 @@ paths: get: operationId: getSubscriptions summary: List Subscriptions - description: 'List all existing Subscriptions. For example, "vrchatplus-monthly" and "vrchatplus-yearly".' + description: 'List all existing Subscriptions. For example, "vrchatplus-monthly" + and "vrchatplus-yearly".' tags: - economy + parameters: + - name: gifts + description: Return the giftable subscriptions instead of the standard ones. + required: false + in: query + schema: + type: boolean + - name: recurring + description: Return the recurring subscriptions instead of the standard ones. + required: false + in: query + schema: + type: boolean security: - authCookie: [] responses: @@ -449,9 +479,14 @@ paths: /tilia/status: get: operationId: getTiliaStatus + deprecated: true summary: Get Tilia Status - description: Gets the status of Tilia integration + description: |- + ~~Gets the status of Tilia integration~~ + + **DEPRECATED:** the route no longer exists. tags: + - deprecated - economy security: - authCookie: [] @@ -460,6 +495,8 @@ paths: $ref: ../responses/economy/TiliaStatusResponse.yaml "401": $ref: ../responses/MissingCredentialsError.yaml + "404": + $ref: ../responses/RouteNotImplementedError.yaml /tokenBundles: get: operationId: getTokenBundles @@ -510,7 +547,7 @@ paths: get: operationId: getBalance summary: Get Balance - description: Gets the balance of a user + description: Gets the balance of a user. tags: - economy security: @@ -525,9 +562,14 @@ paths: - $ref: ../parameters.yaml#/userId get: operationId: getBalanceEarnings + deprecated: true summary: Get Balance Earnings - description: Gets the balance of a user from earnings + description: |- + ~~Gets the balance of a user from earnings~~ + + **DEPRECATED:** the route no longer exists. tags: + - deprecated - economy security: - authCookie: [] @@ -536,6 +578,8 @@ paths: $ref: ../responses/economy/BalanceResponse.yaml "401": $ref: ../responses/MissingCredentialsError.yaml + "404": + $ref: ../responses/RouteNotImplementedError.yaml "/user/{userId}/economy/account": parameters: - $ref: ../parameters.yaml#/userId @@ -598,6 +642,8 @@ paths: responses: "200": $ref: ../responses/economy/EconomyPayoutStatusResponse.yaml + "400": + $ref: ../responses/economy/AccountStateError.yaml "401": $ref: ../responses/MissingCredentialsError.yaml "/user/{userId}/economy/transactions": @@ -645,6 +691,8 @@ paths: $ref: ../responses/economy/ProductListingListResponse.yaml "401": $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/economy/ProductListingsForbiddenError.yaml "/user/{userId}/products": parameters: - $ref: ../parameters.yaml#/userId @@ -677,6 +725,8 @@ paths: responses: "200": $ref: ../responses/economy/TiliaKycResponse.yaml + "400": + $ref: ../responses/economy/AccountStateError.yaml "401": $ref: ../responses/MissingCredentialsError.yaml "/user/{userId}/tilia/tos": @@ -684,9 +734,14 @@ paths: - $ref: ../parameters.yaml#/userId get: operationId: getTiliaTos + deprecated: true summary: Get Tilia TOS Agreement Status - description: Gets the status of the agreement of a user to the Tilia TOS + description: |- + ~~Gets the status of the agreement of a user to the Tilia TOS~~ + + **DEPRECATED:** the route no longer exists. tags: + - deprecated - economy security: - authCookie: [] @@ -695,11 +750,18 @@ paths: $ref: ../responses/economy/TiliaTOSResponse.yaml "401": $ref: ../responses/MissingCredentialsError.yaml + "404": + $ref: ../responses/RouteNotImplementedError.yaml put: operationId: updateTiliaTos + deprecated: true summary: Update Tilia TOS Agreement Status - description: Updates the status of the agreement of a user to the Tilia TOS + description: |- + ~~Updates the status of the agreement of a user to the Tilia TOS~~ + + **DEPRECATED:** the route no longer exists. tags: + - deprecated - economy requestBody: content: @@ -713,15 +775,22 @@ paths: $ref: ../responses/economy/UpdateTiliaTOSResponse.yaml "401": $ref: ../responses/MissingCredentialsError.yaml + "404": + $ref: ../responses/RouteNotImplementedError.yaml "/users/{userId}/credits/eligible": parameters: - $ref: ../parameters.yaml#/userId - $ref: ../parameters.yaml#/subscriptionId get: operationId: getUserCreditsEligible + deprecated: true summary: Get User Credits Eligibility - description: Get the user's eligibility status for subscriptions based on available credits. + description: |- + ~~Get the user's eligibility status for subscriptions based on available credits.~~ + + **DEPRECATED:** the route no longer exists. tags: + - deprecated - economy security: - authCookie: [] @@ -730,6 +799,8 @@ paths: $ref: ../responses/economy/UserCreditsEligibleResponse.yaml "401": $ref: ../responses/MissingCredentialsError.yaml + "404": + $ref: ../responses/RouteNotImplementedError.yaml "/users/{userId}/subscription/eligible": parameters: - $ref: ../parameters.yaml#/userId diff --git a/openapi/components/paths/favorites.yaml b/openapi/components/paths/favorites.yaml index 6bc27fac..70a02b43 100644 --- a/openapi/components/paths/favorites.yaml +++ b/openapi/components/paths/favorites.yaml @@ -73,6 +73,7 @@ paths: parameters: - $ref: ../parameters.yaml#/number - $ref: ../parameters.yaml#/offset + - $ref: ../parameters.yaml#/favoriteGroupTypeQuery - $ref: ../parameters.yaml#/userIdAdmin - name: ownerId description: The owner whose favorite groups to return. Must be a UserID. @@ -162,6 +163,8 @@ paths: responses: "200": $ref: ../responses/favorites/FavoriteRemovedSuccess.yaml + "400": + $ref: ../responses/RequestValidationError.yaml "401": $ref: ../responses/MissingCredentialsError.yaml "404": diff --git a/openapi/components/paths/groups.yaml b/openapi/components/paths/groups.yaml index 9571e686..a3b600d0 100644 --- a/openapi/components/paths/groups.yaml +++ b/openapi/components/paths/groups.yaml @@ -1,1151 +1,1199 @@ -openapi: 3.0.3 -info: - title: groups - description: Group Docs Here - version: "1.0" -paths: - /files/order: - put: - operationId: setGroupGalleryFileOrder - summary: Set Group Gallery File Order - description: Set the order of the files in a group gallery - tags: - - files - requestBody: - content: - application/json: - schema: - $ref: ../requests/GroupGalleryFileOrderRequest.yaml - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupGalleryFileOrderResponse.yaml - "404": - $ref: ../responses/files/FileNotFoundError.yaml - /groups: - get: - operationId: searchGroups - summary: Search Group - description: Searches Groups by name or shortCode - tags: - - groups - parameters: - - name: query - description: Query to search for, can be either Group Name or Group shortCode - required: false - in: query - schema: - type: string - - $ref: ../parameters.yaml#/offset - - $ref: ../parameters.yaml#/number - responses: - "200": - $ref: ../responses/groups/LimitedGroupListResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - post: - operationId: createGroup - summary: Create Group - description: Creates a Group and returns a Group object. **Requires VRC+ Subscription.** - tags: - - groups - requestBody: - required: true - content: - application/json: - schema: - $ref: ../requests/CreateGroupRequest.yaml - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - /groups/roleTemplates: - get: - operationId: getGroupRoleTemplates - summary: Get Group Role Templates - description: Obtain predefined templates for group roles - tags: - - groups - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupRoleTemplatesResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "/groups/{groupId}": - parameters: - - $ref: ../parameters.yaml#/groupId - get: - operationId: getGroup - summary: Get Group by ID - description: Returns a single Group by ID. - tags: - - groups - parameters: - - name: includeRoles - description: Include roles for the Group object. Defaults to false. - required: false - in: query - schema: - type: boolean - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - put: - operationId: updateGroup - summary: Update Group - description: Updates a Group and returns it. - tags: - - groups - requestBody: - content: - application/json: - schema: - $ref: ../requests/UpdateGroupRequest.yaml - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - delete: - operationId: deleteGroup - summary: Delete Group - description: Deletes a Group. - tags: - - groups - parameters: - - name: hardDelete - required: false - in: query - schema: - type: boolean - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/DeleteGroupSuccess.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - "/groups/{groupId}/announcement": - parameters: - - $ref: ../parameters.yaml#/groupId - get: - operationId: getGroupAnnouncements - summary: Get Group Announcement - description: |- - Returns the announcement for a Group. - If no announcement has been made, then it returns **empty object**. - If an announcement exists, then it will always return all fields except `imageId` and `imageUrl` which may be null. - tags: - - groups - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupAnnouncementResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - post: - operationId: createGroupAnnouncement - summary: Create Group Announcement - description: "Creates an Announcement for a Group. Warning: This will also remove all announcements. To make proper announcements, use the posts endpoint instead" - tags: - - groups - requestBody: - required: true - content: - application/json: - schema: - $ref: ../requests/CreateGroupAnnouncementRequest.yaml - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupAnnouncementResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - delete: - operationId: deleteGroupAnnouncement - summary: Delete Group Announcement - description: Deletes the announcement for a Group. - tags: - - groups - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/DeleteGroupAnnouncementSuccess.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - "/groups/{groupId}/auditLogTypes": - parameters: - - $ref: ../parameters.yaml#/groupId - get: - operationId: getGroupAuditLogEntryTypes - summary: Get Group Audit Log Entry Types - description: Returns a list of audit log entry types for which the group has entries. - tags: - - groups - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupAuditLogEntryTypeListResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - "/groups/{groupId}/auditLogs": - parameters: - - $ref: ../parameters.yaml#/groupId - get: - operationId: getGroupAuditLogs - summary: Get Group Audit Logs - description: Returns a list of audit logs for a Group. - tags: - - groups - parameters: - - $ref: ../parameters.yaml#/number - - $ref: ../parameters.yaml#/offset - - $ref: ../parameters.yaml#/startDate - - $ref: ../parameters.yaml#/endDate - - $ref: ../parameters.yaml#/actorIds - - $ref: ../parameters.yaml#/eventTypes - - $ref: ../parameters.yaml#/targetIds - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupAuditLogListResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - "/groups/{groupId}/bans": - parameters: - - $ref: ../parameters.yaml#/groupId - get: - operationId: getGroupBans - summary: Get Group Bans - description: Returns a list of banned users for a Group. - tags: - - groups - parameters: - - $ref: ../parameters.yaml#/number - - $ref: ../parameters.yaml#/offset - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupMemberListResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "403": - $ref: ../responses/NoPermission.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - post: - operationId: banGroupMember - summary: Ban Group Member - description: Bans a user from a Group. - tags: - - groups - requestBody: - required: true - content: - application/json: - schema: - $ref: ../requests/BanGroupMemberRequest.yaml - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupMemberResponse.yaml - "400": - $ref: ../responses/groups/BanGroupMemberBadRequestError.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - "/groups/{groupId}/bans/{userId}": - parameters: - - $ref: ../parameters.yaml#/groupId - - $ref: ../parameters.yaml#/userId - delete: - operationId: unbanGroupMember - summary: Unban Group Member - description: Unbans a user from a Group. - tags: - - groups - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupMemberResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - "/groups/{groupId}/block": - parameters: - - $ref: ../parameters.yaml#/groupId - post: - operationId: blockGroup - summary: Block Group - description: Blocks a Group for the current user. To unblock a group, call kickGroupMember (DELETE /groups/{groupId}/members/{userId}). - tags: - - groups - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/BlockGroupSuccess.yaml - "400": - $ref: ../responses/groups/BanGroupMemberBadRequestError.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "403": - $ref: ../responses/groups/GroupAlreadyBlockedError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - "/groups/{groupId}/galleries": - parameters: - - $ref: ../parameters.yaml#/groupId - post: - operationId: createGroupGallery - summary: Create Group Gallery - description: Creates a gallery for a Group. - tags: - - groups - requestBody: - required: true - content: - application/json: - schema: - $ref: ../requests/CreateGroupGalleryRequest.yaml - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupGalleryResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - "/groups/{groupId}/galleries/{groupGalleryId}": - parameters: - - $ref: ../parameters.yaml#/groupId - - $ref: ../parameters.yaml#/groupGalleryId - get: - operationId: getGroupGalleryImages - summary: Get Group Gallery Images - description: Returns a list of images for a Group gallery. - tags: - - groups - parameters: - - $ref: ../parameters.yaml#/number - - $ref: ../parameters.yaml#/offset - - name: approved - description: If specified, only returns images that have been approved or not approved. - required: false - in: query - schema: - type: boolean - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupGalleryImageListResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - put: - operationId: updateGroupGallery - summary: Update Group Gallery - description: Updates a gallery for a Group. - tags: - - groups - requestBody: - content: - application/json: - schema: - $ref: ../requests/UpdateGroupGalleryRequest.yaml - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupGalleryResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - delete: - operationId: deleteGroupGallery - summary: Delete Group Gallery - description: Deletes a gallery for a Group. - tags: - - groups - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/DeleteGroupGallerySuccess.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - "/groups/{groupId}/galleries/{groupGalleryId}/images": - parameters: - - $ref: ../parameters.yaml#/groupId - - $ref: ../parameters.yaml#/groupGalleryId - post: - operationId: addGroupGalleryImage - summary: Add Group Gallery Image - description: Adds an image to a Group gallery. - tags: - - groups - requestBody: - required: true - content: - application/json: - schema: - $ref: ../requests/AddGroupGalleryImageRequest.yaml - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupGalleryImageResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - "/groups/{groupId}/galleries/{groupGalleryId}/images/{groupGalleryImageId}": - parameters: - - $ref: ../parameters.yaml#/groupId - - $ref: ../parameters.yaml#/groupGalleryId - - $ref: ../parameters.yaml#/groupGalleryImageId - # put: - # summary: Approve Group Gallery Image - # description: Approves an image for a Group gallery. - # operationId: approveGroupGalleryImage - # tags: - # - groups - # requestBody: - # content: - # application/json: - # schema: - # $ref: ../requests/UpdateGroupGalleryImageRequest.yaml - # responses: - # '200': - # $ref: ../responses/groups/GroupGalleryImageResponse.yaml - # '401': - # $ref: ../responses/MissingCredentialsError.yaml - # '404': - # $ref: ../responses/groups/GroupNotFoundError.yaml - # security: - # - authCookie: [] - delete: - operationId: deleteGroupGalleryImage - summary: Delete Group Gallery Image - description: Deletes an image from a Group gallery. - tags: - - groups - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/DeleteGroupGalleryImageSuccess.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "403": - $ref: ../responses/groups/GroupGalleryImageDeleteForbiddenError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - "/groups/{groupId}/instances": - parameters: - - $ref: ../parameters.yaml#/groupId - get: - operationId: getGroupInstances - summary: Get Group Instances - description: Returns a list of group instances - tags: - - groups - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupInstanceListResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - "/groups/{groupId}/invites": - parameters: - - $ref: ../parameters.yaml#/groupId - get: - operationId: getGroupInvites - summary: Get Group Invites Sent - description: Returns a list of members that have been invited to the Group. - tags: - - groups - parameters: - - $ref: ../parameters.yaml#/number - - $ref: ../parameters.yaml#/offset - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupMemberListResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "403": - $ref: ../responses/groups/GroupNotMemberError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - put: - operationId: declineGroupInvite - summary: Decline Invite from Group - description: Declines an invite to the user from a group. - tags: - - groups - requestBody: - required: false - content: - application/json: - schema: - $ref: ../requests/DeclineGroupInviteRequest.yaml - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/DeclineGroupInviteSuccess.yaml - "400": - $ref: ../responses/groups/DeclineGroupInviteBadRequestError.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - post: - operationId: createGroupInvite - summary: Invite User to Group - description: Sends an invite to a user to join the group. - tags: - - groups - requestBody: - required: true - content: - application/json: - schema: - $ref: ../requests/CreateGroupInviteRequest.yaml - security: - - authCookie: [] - responses: - "200": - description: OK - "400": - $ref: ../responses/groups/GroupInviteBadRequestError.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "403": - $ref: ../responses/groups/GroupInviteForbiddenError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - "/groups/{groupId}/invites/{userId}": - parameters: - - $ref: ../parameters.yaml#/groupId - - $ref: ../parameters.yaml#/userId - delete: - operationId: deleteGroupInvite - summary: Delete User Invite - description: Deletes an Group invite sent to a User - tags: - - groups - security: - - authCookie: [] - responses: - "200": - description: OK - "400": - $ref: ../responses/groups/DeleteGroupInviteBadRequestError.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "/groups/{groupId}/join": - parameters: - - $ref: ../parameters.yaml#/groupId - post: - operationId: joinGroup - summary: Join Group - description: Join a Group by ID and returns the member object. - tags: - - groups - parameters: - - name: confirmOverrideBlock - description: Manually override the failure that would occur if the user has blocked the group. - required: false - in: query - schema: - type: boolean - requestBody: - required: false - content: - application/json: - schema: - $ref: ../requests/JoinGroupRequest.yaml - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupMemberResponse.yaml - "400": - $ref: ../responses/groups/GroupAlreadyMemberError.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - "/groups/{groupId}/leave": - parameters: - - $ref: ../parameters.yaml#/groupId - post: - operationId: leaveGroup - summary: Leave Group - description: Leave a group by ID. - tags: - - groups - security: - - authCookie: [] - responses: - "200": - description: OK - "403": - $ref: ../responses/groups/GroupNotMemberError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - "/groups/{groupId}/members": - parameters: - - $ref: ../parameters.yaml#/groupId - get: - operationId: getGroupMembers - summary: List Group Members - description: |- - Returns a List of all **other** Group Members. This endpoint will never return the user calling the endpoint. - Information about the user calling the endpoint must be found in the `myMember` field of the Group object. - tags: - - groups - parameters: - - $ref: ../parameters.yaml#/number - - $ref: ../parameters.yaml#/offset - - $ref: ../parameters.yaml#/groupMemberSort - - $ref: ../parameters.yaml#/groupMemberRoleFilter - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupMemberListResponse.yaml - "400": - $ref: ../responses/users/UsersInvalidSearchError.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - "/groups/{groupId}/members/search": - parameters: - - $ref: ../parameters.yaml#/groupId - get: - operationId: searchGroupMembers - summary: Search Group Members - description: Search for members in the group by displayName. - tags: - - groups - parameters: - - $ref: ../parameters.yaml#/number - - $ref: ../parameters.yaml#/offset - - name: query - description: Filter for member displayName. - required: true - in: query - schema: - type: string - minLength: 3 - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupMemberSearchResponse.yaml - "400": - $ref: ../responses/users/UsersInvalidSearchError.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - "/groups/{groupId}/members/{userId}": - parameters: - - $ref: ../parameters.yaml#/groupId - - $ref: ../parameters.yaml#/userId - get: - operationId: getGroupMember - summary: Get Group Member - description: Returns a GroupMember. - tags: - - groups - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupMemberResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "403": - $ref: ../responses/groups/GroupNotMemberError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - put: - operationId: updateGroupMember - summary: Update Group Member - description: Updates a Group Member - tags: - - groups - requestBody: - content: - application/json: - schema: - $ref: ../requests/UpdateGroupMemberRequest.yaml - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupMemberResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - delete: - operationId: kickGroupMember - summary: Kick Group Member - description: Kicks a Group Member from the Group. The current user must have the "Remove Group Members" permission. Also used for unblocking groups. - tags: - - groups - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/DeleteGroupMemberSuccess.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "403": - $ref: ../responses/groups/GroupNotMemberError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - "/groups/{groupId}/members/{userId}/roles/{groupRoleId}": - parameters: - - $ref: ../parameters.yaml#/groupId - - $ref: ../parameters.yaml#/userId - - $ref: ../parameters.yaml#/groupRoleId - put: - operationId: addGroupMemberRole - summary: Add Role to GroupMember - description: Adds a Role to a Group Member - tags: - - groups - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupRoleIDListResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - delete: - operationId: removeGroupMemberRole - summary: Remove Role from GroupMember - description: Removes a Role from a Group Member - tags: - - groups - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupRoleIDListResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - "/groups/{groupId}/permissions": - parameters: - - $ref: ../parameters.yaml#/groupId - get: - operationId: getGroupPermissions - summary: List Group Permissions - description: Returns a List of all possible/available permissions for a Group. - tags: - - groups - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupPermissionListResponse.yaml - "400": - $ref: ../responses/users/UsersInvalidSearchError.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - "/groups/{groupId}/posts": - parameters: - - $ref: ../parameters.yaml#/groupId - get: - operationId: getGroupPosts - summary: Get posts from a Group - description: Get posts from a Group - tags: - - groups - parameters: - - $ref: ../parameters.yaml#/number - - $ref: ../parameters.yaml#/offset - - name: publicOnly - description: See public posts only. - in: query - schema: - type: boolean - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupPostsResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - post: - operationId: addGroupPost - summary: Create a post in a Group - description: Create a post in a Group. - tags: - - groups - requestBody: - required: true - content: - application/json: - schema: - $ref: ../requests/CreateGroupPostRequest.yaml - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupPostResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "/groups/{groupId}/posts/{notificationId}": - parameters: - - $ref: ../parameters.yaml#/groupId - - $ref: ../parameters.yaml#/notificationId - put: - operationId: updateGroupPost - summary: Edits a Group post - description: Edits a Group post - tags: - - groups - requestBody: - required: true - content: - application/json: - schema: - $ref: ../requests/CreateGroupPostRequest.yaml - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupPostResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupPostResponseSuccess.yaml - delete: - operationId: deleteGroupPost - summary: Delete a Group post - description: Delete a Group post - tags: - - groups - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupPostResponseSuccess.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupPostResponseSuccess.yaml - "/groups/{groupId}/representation": - parameters: - - $ref: ../parameters.yaml#/groupId - put: - operationId: updateGroupRepresentation - summary: Update Group Representation - description: |- - Updates whether the user is representing the group. - - When `isRepresenting` is set to `true`, this flag will be set to `false` for all other groups - tags: - - groups - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - isRepresenting: - type: boolean - description: Whether the user is representing the group. - required: - - isRepresenting - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/UpdateGroupRepresentationSuccess.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "403": - $ref: ../responses/groups/GroupNotMemberError.yaml - "/groups/{groupId}/requests": - parameters: - - $ref: ../parameters.yaml#/groupId - get: - operationId: getGroupRequests - summary: Get Group Join Requests - description: Returns a list of members that have requested to join the Group. - tags: - - groups - parameters: - - $ref: ../parameters.yaml#/number - - $ref: ../parameters.yaml#/offset - - name: blocked - description: See blocked join requests - in: query - schema: - type: boolean - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupMemberListResponse.yaml - "400": - $ref: ../responses/groups/GroupJoinRequestResponseBadRequestError.yaml - "403": - $ref: ../responses/groups/GroupNotMemberError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - delete: - operationId: cancelGroupRequest - summary: Cancel Group Join Request - description: Cancels a request sent to join the group. - tags: - - groups - security: - - authCookie: [] - responses: - "200": - description: OK - "400": - description: You can't cancel a join request if you didn't request to join․ - "403": - $ref: ../responses/groups/GroupNotMemberError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - "/groups/{groupId}/requests/{userId}": - parameters: - - $ref: ../parameters.yaml#/groupId - - $ref: ../parameters.yaml#/userId - put: - operationId: respondGroupJoinRequest - summary: Respond Group Join request - description: Responds to a Group Join Request with Accept/Deny - tags: - - groups - requestBody: - required: true - content: - application/json: - schema: - $ref: ../requests/RespondGroupJoinRequest.yaml - security: - - authCookie: [] - responses: - "200": - description: OK - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - "/groups/{groupId}/roles": - parameters: - - $ref: ../parameters.yaml#/groupId - get: - operationId: getGroupRoles - summary: Get Group Roles - description: Returns a Group Role by ID. - tags: - - groups - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupRoleListResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - post: - operationId: createGroupRole - summary: Create GroupRole - description: Create a Group role. - tags: - - groups - requestBody: - required: true - content: - application/json: - schema: - $ref: ../requests/CreateGroupRoleRequest.yaml - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupRoleResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - "/groups/{groupId}/roles/{groupRoleId}": - parameters: - - $ref: ../parameters.yaml#/groupId - - $ref: ../parameters.yaml#/groupRoleId - put: - operationId: updateGroupRole - summary: Update Group Role - description: Updates a group role by ID. - tags: - - groups - requestBody: - content: - application/json: - schema: - $ref: ../requests/UpdateGroupRoleRequest.yaml - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupRoleListResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - delete: - operationId: deleteGroupRole - summary: Delete Group Role - description: Deletes a Group Role by ID and returns the remaining roles. - tags: - - groups - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupRoleListResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupNotMemberError.yaml - "/groups/{groupId}/transfer": - parameters: - - $ref: ../parameters.yaml#/groupId - get: - operationId: getGroupTransferability - summary: Get Group Transferability - description: Returns the transferability of the group to a given user. - tags: - - groups - parameters: - - name: transferTargetId - description: The UserID of the prospective transferee. - required: false - in: query - schema: - $ref: ../schemas/UserID.yaml - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupTransferableResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "403": - $ref: ../responses/groups/GroupNotMemberError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - post: - operationId: initiateOrAcceptGroupTransfer - summary: Initiate or Accept Group Transfer - description: To initiate, must be logged in as the current owner and specify the transferTargetId in the body. To accept, must be logged in as the user targeted by a pending transfer, no body is required. - tags: - - groups - requestBody: - required: false - content: - application/json: - schema: - $ref: ../requests/TransferGroupRequest.yaml - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupTransferSuccess.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "403": - $ref: ../responses/groups/GroupTransferInvalidError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml - delete: - operationId: cancelGroupTransfer - summary: Cancel Group Transfer - description: Cancel a Group Transfer. - tags: - - groups - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/groups/GroupTransferCanceledSuccess.yaml - "400": - $ref: ../responses/groups/NoGroupTransferError.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/groups/GroupNotFoundError.yaml -components: - responses: {} - securitySchemes: - $ref: ../securitySchemes.yaml -tags: - $ref: ../tags.yaml +openapi: 3.0.3 +info: + title: groups + description: Group Docs Here + version: "1.0" +paths: + /files/order: + put: + operationId: setGroupGalleryFileOrder + summary: Set Group Gallery File Order + description: Set the order of the files in a group gallery + tags: + - files + requestBody: + content: + application/json: + schema: + $ref: ../requests/GroupGalleryFileOrderRequest.yaml + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupGalleryFileOrderResponse.yaml + "404": + $ref: ../responses/files/FileNotFoundError.yaml + /groups: + get: + operationId: searchGroups + summary: Search Group + description: Searches Groups by name or shortCode + tags: + - groups + parameters: + - name: query + description: Query to search for, can be either Group Name or Group shortCode + required: false + in: query + schema: + type: string + - $ref: ../parameters.yaml#/offset + - $ref: ../parameters.yaml#/number + responses: + "200": + $ref: ../responses/groups/LimitedGroupListResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + post: + operationId: createGroup + summary: Create Group + description: Creates a Group and returns a Group object. **Requires VRC+ Subscription.** + tags: + - groups + requestBody: + required: true + content: + application/json: + schema: + $ref: ../requests/CreateGroupRequest.yaml + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + /groups/roleTemplates: + get: + operationId: getGroupRoleTemplates + summary: Get Group Role Templates + description: Obtain predefined templates for group roles + tags: + - groups + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupRoleTemplatesResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "/groups/{groupId}": + parameters: + - $ref: ../parameters.yaml#/groupId + get: + operationId: getGroup + summary: Get Group by ID + description: Returns a single Group by ID. + tags: + - groups + parameters: + - name: includeRoles + description: Include roles for the Group object. Defaults to false. + required: false + in: query + schema: + type: boolean + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + put: + operationId: updateGroup + summary: Update Group + description: Updates a Group and returns it. + tags: + - groups + requestBody: + content: + application/json: + schema: + $ref: ../requests/UpdateGroupRequest.yaml + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupResponse.yaml + "400": + $ref: ../responses/RequestValidationError.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + delete: + operationId: deleteGroup + summary: Delete Group + description: Deletes a Group. + tags: + - groups + parameters: + - name: hardDelete + required: false + in: query + schema: + type: boolean + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/DeleteGroupSuccess.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + "/groups/{groupId}/announcement": + parameters: + - $ref: ../parameters.yaml#/groupId + get: + operationId: getGroupAnnouncements + summary: Get Group Announcement + description: |- + Returns the announcement for a Group. + If no announcement has been made, then it returns **empty object**. + If an announcement exists, then it will always return all fields except `imageId` and `imageUrl` which may be null. + tags: + - groups + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupAnnouncementResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + post: + operationId: createGroupAnnouncement + summary: Create Group Announcement + description: "Creates an Announcement for a Group. Warning: This will also remove all announcements. To make proper announcements, use the posts endpoint instead" + tags: + - groups + requestBody: + required: true + content: + application/json: + schema: + $ref: ../requests/CreateGroupAnnouncementRequest.yaml + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupAnnouncementResponse.yaml + "400": + $ref: ../responses/RequestValidationError.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + delete: + operationId: deleteGroupAnnouncement + summary: Delete Group Announcement + description: Deletes the announcement for a Group. + tags: + - groups + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/DeleteGroupAnnouncementSuccess.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + "/groups/{groupId}/auditLogTypes": + parameters: + - $ref: ../parameters.yaml#/groupId + get: + operationId: getGroupAuditLogEntryTypes + summary: Get Group Audit Log Entry Types + description: Returns a list of audit log entry types for which the group has entries. + tags: + - groups + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupAuditLogEntryTypeListResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + "/groups/{groupId}/auditLogs": + parameters: + - $ref: ../parameters.yaml#/groupId + get: + operationId: getGroupAuditLogs + summary: Get Group Audit Logs + description: Returns a list of audit logs for a Group. + tags: + - groups + parameters: + - $ref: ../parameters.yaml#/number + - $ref: ../parameters.yaml#/offset + - $ref: ../parameters.yaml#/startDate + - $ref: ../parameters.yaml#/endDate + - $ref: ../parameters.yaml#/actorIds + - $ref: ../parameters.yaml#/eventTypes + - $ref: ../parameters.yaml#/targetIds + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupAuditLogListResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + "/groups/{groupId}/bans": + parameters: + - $ref: ../parameters.yaml#/groupId + get: + operationId: getGroupBans + summary: Get Group Bans + description: Returns a list of banned users for a Group. + tags: + - groups + parameters: + - $ref: ../parameters.yaml#/number + - $ref: ../parameters.yaml#/offset + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupMemberListResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/NoPermission.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + post: + operationId: banGroupMember + summary: Ban Group Member + description: Bans a user from a Group. + tags: + - groups + requestBody: + required: true + content: + application/json: + schema: + $ref: ../requests/BanGroupMemberRequest.yaml + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupMemberResponse.yaml + "400": + $ref: ../responses/groups/BanGroupMemberBadRequestError.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + "/groups/{groupId}/bans/{userId}": + parameters: + - $ref: ../parameters.yaml#/groupId + - $ref: ../parameters.yaml#/userId + delete: + operationId: unbanGroupMember + summary: Unban Group Member + description: Unbans a user from a Group. + tags: + - groups + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupMemberResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + "/groups/{groupId}/block": + parameters: + - $ref: ../parameters.yaml#/groupId + post: + operationId: blockGroup + summary: Block Group + description: Blocks a Group for the current user. To unblock a group, call kickGroupMember (DELETE /groups/{groupId}/members/{userId}). + tags: + - groups + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/BlockGroupSuccess.yaml + "400": + $ref: ../responses/groups/BanGroupMemberBadRequestError.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupAlreadyBlockedError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + "/groups/{groupId}/galleries": + parameters: + - $ref: ../parameters.yaml#/groupId + post: + operationId: createGroupGallery + summary: Create Group Gallery + description: Creates a gallery for a Group. + tags: + - groups + requestBody: + required: true + content: + application/json: + schema: + $ref: ../requests/CreateGroupGalleryRequest.yaml + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupGalleryResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + "/groups/{groupId}/galleries/{groupGalleryId}": + parameters: + - $ref: ../parameters.yaml#/groupId + - $ref: ../parameters.yaml#/groupGalleryId + get: + operationId: getGroupGalleryImages + summary: Get Group Gallery Images + description: Returns a list of images for a Group gallery. + tags: + - groups + parameters: + - $ref: ../parameters.yaml#/number + - $ref: ../parameters.yaml#/offset + - name: approved + description: If specified, only returns images that have been approved or not approved. + required: false + in: query + schema: + type: boolean + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupGalleryImageListResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + put: + operationId: updateGroupGallery + summary: Update Group Gallery + description: Updates a gallery for a Group. + tags: + - groups + requestBody: + content: + application/json: + schema: + $ref: ../requests/UpdateGroupGalleryRequest.yaml + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupGalleryResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + delete: + operationId: deleteGroupGallery + summary: Delete Group Gallery + description: Deletes a gallery for a Group. + tags: + - groups + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/DeleteGroupGallerySuccess.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + "/groups/{groupId}/galleries/{groupGalleryId}/images": + parameters: + - $ref: ../parameters.yaml#/groupId + - $ref: ../parameters.yaml#/groupGalleryId + post: + operationId: addGroupGalleryImage + summary: Add Group Gallery Image + description: Adds an image to a Group gallery. + tags: + - groups + requestBody: + required: true + content: + application/json: + schema: + $ref: ../requests/AddGroupGalleryImageRequest.yaml + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupGalleryImageResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + "/groups/{groupId}/galleries/{groupGalleryId}/images/{groupGalleryImageId}": + parameters: + - $ref: ../parameters.yaml#/groupId + - $ref: ../parameters.yaml#/groupGalleryId + - $ref: ../parameters.yaml#/groupGalleryImageId + # put: + # summary: Approve Group Gallery Image + # description: Approves an image for a Group gallery. + # operationId: approveGroupGalleryImage + # tags: + # - groups + # requestBody: + # content: + # application/json: + # schema: + # $ref: ../requests/UpdateGroupGalleryImageRequest.yaml + # responses: + # '200': + # $ref: ../responses/groups/GroupGalleryImageResponse.yaml + # '401': + # $ref: ../responses/MissingCredentialsError.yaml + # '404': + # $ref: ../responses/groups/GroupNotFoundError.yaml + # security: + # - authCookie: [] + delete: + operationId: deleteGroupGalleryImage + summary: Delete Group Gallery Image + description: Deletes an image from a Group gallery. + tags: + - groups + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/DeleteGroupGalleryImageSuccess.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupGalleryImageDeleteForbiddenError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + "/groups/{groupId}/instances": + parameters: + - $ref: ../parameters.yaml#/groupId + get: + operationId: getGroupInstances + summary: Get Group Instances + description: Returns a list of group instances + tags: + - groups + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupInstanceListResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + "/groups/{groupId}/invites": + parameters: + - $ref: ../parameters.yaml#/groupId + get: + operationId: getGroupInvites + summary: Get Group Invites Sent + description: Returns a list of members that have been invited to the Group. + tags: + - groups + parameters: + - $ref: ../parameters.yaml#/number + - $ref: ../parameters.yaml#/offset + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupMemberListResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + put: + operationId: declineGroupInvite + summary: Decline Invite from Group + description: Declines an invite to the user from a group. + tags: + - groups + requestBody: + required: false + content: + application/json: + schema: + $ref: ../requests/DeclineGroupInviteRequest.yaml + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/DeclineGroupInviteSuccess.yaml + "400": + $ref: ../responses/groups/DeclineGroupInviteBadRequestError.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + post: + operationId: createGroupInvite + summary: Invite User to Group + description: Sends an invite to a user to join the group. + tags: + - groups + requestBody: + required: true + content: + application/json: + schema: + $ref: ../requests/CreateGroupInviteRequest.yaml + security: + - authCookie: [] + responses: + "200": + description: OK + "400": + $ref: ../responses/groups/GroupInviteBadRequestError.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupInviteForbiddenError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + "/groups/{groupId}/invites/{userId}": + parameters: + - $ref: ../parameters.yaml#/groupId + - $ref: ../parameters.yaml#/userId + delete: + operationId: deleteGroupInvite + summary: Delete User Invite + description: Deletes an Group invite sent to a User + tags: + - groups + security: + - authCookie: [] + responses: + "200": + description: OK + "400": + $ref: ../responses/groups/DeleteGroupInviteBadRequestError.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "/groups/{groupId}/join": + parameters: + - $ref: ../parameters.yaml#/groupId + post: + operationId: joinGroup + summary: Join Group + description: Join a Group by ID and returns the member object. + tags: + - groups + parameters: + - name: confirmOverrideBlock + description: Manually override the failure that would occur if the user has blocked the group. + required: false + in: query + schema: + type: boolean + requestBody: + required: false + content: + application/json: + schema: + $ref: ../requests/JoinGroupRequest.yaml + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupMemberResponse.yaml + "400": + $ref: ../responses/groups/GroupAlreadyMemberError.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + "/groups/{groupId}/leave": + parameters: + - $ref: ../parameters.yaml#/groupId + post: + operationId: leaveGroup + summary: Leave Group + description: Leave a group by ID. + tags: + - groups + security: + - authCookie: [] + responses: + "200": + description: OK + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + "/groups/{groupId}/members": + parameters: + - $ref: ../parameters.yaml#/groupId + get: + operationId: getGroupMembers + summary: List Group Members + description: |- + Returns a List of all **other** Group Members. This endpoint will never return the user calling the endpoint. + Information about the user calling the endpoint must be found in the `myMember` field of the Group object. + tags: + - groups + parameters: + - $ref: ../parameters.yaml#/number + - $ref: ../parameters.yaml#/offset + - $ref: ../parameters.yaml#/groupMemberSort + - $ref: ../parameters.yaml#/groupMemberRoleFilter + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupMemberListResponse.yaml + "400": + $ref: ../responses/users/UsersInvalidSearchError.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + "/groups/{groupId}/members/search": + parameters: + - $ref: ../parameters.yaml#/groupId + get: + operationId: searchGroupMembers + summary: Search Group Members + description: Search for members in the group by displayName. + tags: + - groups + parameters: + - $ref: ../parameters.yaml#/number + - $ref: ../parameters.yaml#/offset + - name: query + description: Filter for member displayName. + required: true + in: query + schema: + type: string + minLength: 3 + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupMemberSearchResponse.yaml + "400": + $ref: ../responses/users/UsersInvalidSearchError.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + "/groups/{groupId}/members/{userId}": + parameters: + - $ref: ../parameters.yaml#/groupId + - $ref: ../parameters.yaml#/userId + get: + operationId: getGroupMember + summary: Get Group Member + description: Returns a GroupMember. + tags: + - groups + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupMemberResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + put: + operationId: updateGroupMember + summary: Update Group Member + description: Updates a Group Member + tags: + - groups + requestBody: + content: + application/json: + schema: + $ref: ../requests/UpdateGroupMemberRequest.yaml + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupMemberResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + delete: + operationId: kickGroupMember + summary: Kick Group Member + description: Kicks a Group Member from the Group. The current user must have the "Remove Group Members" permission. Also used for unblocking groups. + tags: + - groups + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/DeleteGroupMemberSuccess.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + "/groups/{groupId}/members/{userId}/roles/{groupRoleId}": + parameters: + - $ref: ../parameters.yaml#/groupId + - $ref: ../parameters.yaml#/userId + - $ref: ../parameters.yaml#/groupRoleId + put: + operationId: addGroupMemberRole + summary: Add Role to GroupMember + description: Adds a Role to a Group Member + tags: + - groups + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupRoleIDListResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + delete: + operationId: removeGroupMemberRole + summary: Remove Role from GroupMember + description: Removes a Role from a Group Member + tags: + - groups + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupRoleIDListResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + "/groups/{groupId}/permissions": + parameters: + - $ref: ../parameters.yaml#/groupId + get: + operationId: getGroupPermissions + summary: List Group Permissions + description: Returns a List of all possible/available permissions for a Group. + tags: + - groups + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupPermissionListResponse.yaml + "400": + $ref: ../responses/users/UsersInvalidSearchError.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + "/groups/{groupId}/posts": + parameters: + - $ref: ../parameters.yaml#/groupId + get: + operationId: getGroupPosts + summary: Get posts from a Group + description: Get posts from a Group + tags: + - groups + parameters: + - $ref: ../parameters.yaml#/number + - $ref: ../parameters.yaml#/offset + - name: publicOnly + description: See public posts only. + in: query + schema: + type: boolean + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupPostsResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + post: + operationId: addGroupPost + summary: Create a post in a Group + description: Create a post in a Group. + tags: + - groups + requestBody: + required: true + content: + application/json: + schema: + $ref: ../requests/CreateGroupPostRequest.yaml + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupPostResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "/groups/{groupId}/posts/{notificationId}": + parameters: + - $ref: ../parameters.yaml#/groupId + - $ref: ../parameters.yaml#/notificationId + put: + operationId: updateGroupPost + summary: Edits a Group post + description: Edits a Group post + tags: + - groups + requestBody: + required: true + content: + application/json: + schema: + $ref: ../requests/CreateGroupPostRequest.yaml + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupPostResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "404": + $ref: ../responses/groups/GroupPostResponseSuccess.yaml + delete: + operationId: deleteGroupPost + summary: Delete a Group post + description: Delete a Group post + tags: + - groups + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupPostResponseSuccess.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "404": + $ref: ../responses/groups/GroupPostResponseSuccess.yaml + "/groups/{groupId}/representation": + parameters: + - $ref: ../parameters.yaml#/groupId + put: + operationId: updateGroupRepresentation + summary: Update Group Representation + description: |- + Updates whether the user is representing the group. + + When `isRepresenting` is set to `true`, this flag will be set to `false` for all other groups + tags: + - groups + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + isRepresenting: + type: boolean + description: Whether the user is representing the group. + required: + - isRepresenting + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/UpdateGroupRepresentationSuccess.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "/groups/{groupId}/requests": + parameters: + - $ref: ../parameters.yaml#/groupId + get: + operationId: getGroupRequests + summary: Get Group Join Requests + description: Returns a list of members that have requested to join the Group. + tags: + - groups + parameters: + - $ref: ../parameters.yaml#/number + - $ref: ../parameters.yaml#/offset + - name: blocked + description: See blocked join requests + in: query + schema: + type: boolean + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupMemberListResponse.yaml + "400": + $ref: ../responses/groups/GroupJoinRequestResponseBadRequestError.yaml + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + delete: + operationId: cancelGroupRequest + summary: Cancel Group Join Request + description: Cancels a request sent to join the group. + tags: + - groups + security: + - authCookie: [] + responses: + "200": + description: OK + "400": + description: You can't cancel a join request if you didn't request to join․ + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + "/groups/{groupId}/requests/{userId}": + parameters: + - $ref: ../parameters.yaml#/groupId + - $ref: ../parameters.yaml#/userId + put: + operationId: respondGroupJoinRequest + summary: Respond Group Join request + description: Responds to a Group Join Request with Accept/Deny + tags: + - groups + requestBody: + required: true + content: + application/json: + schema: + $ref: ../requests/RespondGroupJoinRequest.yaml + security: + - authCookie: [] + responses: + "200": + description: OK + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + "/groups/{groupId}/roles": + parameters: + - $ref: ../parameters.yaml#/groupId + get: + operationId: getGroupRoles + summary: Get Group Roles + description: Returns a Group Role by ID. + tags: + - groups + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupRoleListResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + post: + operationId: createGroupRole + summary: Create GroupRole + description: Create a Group role. + tags: + - groups + requestBody: + required: true + content: + application/json: + schema: + $ref: ../requests/CreateGroupRoleRequest.yaml + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupRoleResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + "/groups/{groupId}/roles/{groupRoleId}": + parameters: + - $ref: ../parameters.yaml#/groupId + - $ref: ../parameters.yaml#/groupRoleId + put: + operationId: updateGroupRole + summary: Update Group Role + description: Updates a group role by ID. + tags: + - groups + requestBody: + content: + application/json: + schema: + $ref: ../requests/UpdateGroupRoleRequest.yaml + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupRoleListResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + delete: + operationId: deleteGroupRole + summary: Delete Group Role + description: Deletes a Group Role by ID and returns the remaining roles. + tags: + - groups + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupRoleListResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "404": + $ref: ../responses/groups/GroupNotMemberError.yaml + "/groups/{groupId}/transfer": + parameters: + - $ref: ../parameters.yaml#/groupId + get: + operationId: getGroupTransferability + summary: Get Group Transferability + description: Returns the transferability of the group to a given user. + tags: + - groups + parameters: + - name: transferTargetId + description: The UserID of the prospective transferee. + required: false + in: query + schema: + $ref: ../schemas/UserID.yaml + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupTransferableResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + post: + operationId: initiateOrAcceptGroupTransfer + summary: Initiate or Accept Group Transfer + description: To initiate, must be logged in as the current owner and specify the transferTargetId in the body. To accept, must be logged in as the user targeted by a pending transfer, no body is required. + tags: + - groups + requestBody: + required: false + content: + application/json: + schema: + $ref: ../requests/TransferGroupRequest.yaml + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupTransferSuccess.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupTransferInvalidError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml + delete: + operationId: cancelGroupTransfer + summary: Cancel Group Transfer + description: Cancel a Group Transfer. + tags: + - groups + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupTransferCanceledSuccess.yaml + "400": + $ref: ../responses/groups/NoGroupTransferError.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/groups/GroupNotMemberError.yaml + "404": + $ref: ../responses/groups/GroupNotFoundError.yaml +components: + responses: {} + securitySchemes: + $ref: ../securitySchemes.yaml +tags: + $ref: ../tags.yaml diff --git a/openapi/components/paths/instances.yaml b/openapi/components/paths/instances.yaml index 073fd0b4..040cee4a 100644 --- a/openapi/components/paths/instances.yaml +++ b/openapi/components/paths/instances.yaml @@ -22,6 +22,8 @@ paths: responses: "200": $ref: ../responses/instances/InstanceResponse.yaml + "400": + $ref: ../responses/instances/InstanceBadRequestError.yaml "401": $ref: ../responses/MissingCredentialsError.yaml /instances/recent: @@ -79,6 +81,7 @@ paths: tags: - instances security: + - {} - authCookie: [] responses: "200": @@ -131,6 +134,7 @@ paths: tags: - instances security: + - {} - authCookie: [] responses: "200": diff --git a/openapi/components/paths/invite.yaml b/openapi/components/paths/invite.yaml index 141d2e44..c6800b97 100644 --- a/openapi/components/paths/invite.yaml +++ b/openapi/components/paths/invite.yaml @@ -196,6 +196,8 @@ paths: $ref: ../responses/invite/InviteMessageGetNegativeSlotError.yaml "401": $ref: ../responses/NotAuthorizedActionError.yaml + "403": + $ref: ../responses/NotAuthorizedActionError.yaml "404": $ref: ../responses/invite/InviteMessageGetTooHighSlotError.yaml put: @@ -262,6 +264,8 @@ paths: $ref: ../responses/invite/InviteMessageInvalidSlotNumberError.yaml "401": $ref: ../responses/NotAuthorizedActionError.yaml + "403": + $ref: ../responses/NotAuthorizedActionError.yaml "404": $ref: ../responses/invite/InviteMessageNoEntryForSlotError.yaml "429": diff --git a/openapi/components/paths/jams.yaml b/openapi/components/paths/jams.yaml index 4b5c35ed..06885576 100644 --- a/openapi/components/paths/jams.yaml +++ b/openapi/components/paths/jams.yaml @@ -1,107 +1,109 @@ -openapi: 3.0.3 -info: - title: jams - description: Jams Docs Here - version: "1.0" -paths: - /jams: - get: - operationId: getJams - summary: Show jams list - description: |- - Lists World Jams or Avatar Jams, both currently running and ones that have ended. - - `isActive` is used to select only active or already ended jams. - - `type` is used to select only world or avatar jams, and can only take `world` or `avatar`. - `` - tags: - - jams - parameters: - - name: type - description: Only show jams of this type (`avatar` or `world`). - in: query - schema: - type: string - example: avatar - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/jams/JamListResponse.yaml - "/jams/{jamId}": - parameters: - - $ref: ../parameters.yaml#/jamId - get: - operationId: getJam - summary: Show jam information - description: Returns a jam. - tags: - - jams - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/jams/JamResponse.yaml - "404": - $ref: ../responses/jams/JamNotFoundError.yaml - "/jams/{jamId}/submissions": - parameters: - - $ref: ../parameters.yaml#/jamId - get: - operationId: getJamSubmissions - summary: Show jam submissions - description: Returns all submissions of a jam. Can filter by contentId (for world or avatar jams) or submitterId (for a participant). - tags: - - jams - parameters: - - $ref: ../parameters.yaml#/contentId - - $ref: ../parameters.yaml#/submitterId - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/jams/JamSubmissionListResponse.yaml - "404": - $ref: ../responses/jams/JamNotFoundError.yaml - post: - operationId: submitJamContent - summary: Submit Jam Content - description: Submits content to a jam. The content must have been uploaded by the submitter, and both the content upload and jam submission must be made within the jam's designated times. - tags: - - jams - requestBody: - content: - application/json: - schema: - $ref: ../requests/CreateJamSubmissionRequest.yaml - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/jams/JamSubmissionResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "404": - $ref: ../responses/jams/JamNotFoundError.yaml - "/jams/{jamId}/submissions/{jamSubmissionId}": - parameters: - - $ref: ../parameters.yaml#/jamId - - $ref: ../parameters.yaml#/jamSubmissionId - delete: - operationId: deleteJamSubmission - summary: Delete Jam Submission - description: Withdraws a content submission from a jam. - tags: - - jams - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/jams/DeleteJamSubmissionResponse.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml - "403": - $ref: ../responses/NoPermission.yaml - "404": - $ref: ../responses/jams/JamNotFoundError.yaml +openapi: 3.0.3 +info: + title: jams + description: Jams Docs Here + version: "1.0" +paths: + /jams: + get: + operationId: getJams + summary: Show jams list + description: |- + Lists World Jams or Avatar Jams, both currently running and ones that have ended. + + `isActive` is used to select only active or already ended jams. + + `type` is used to select only world or avatar jams, and can only take `world` or `avatar`. + `` + tags: + - jams + parameters: + - name: type + description: Only show jams of this type (`avatar` or `world`). + in: query + schema: + type: string + example: avatar + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/jams/JamListResponse.yaml + "/jams/{jamId}": + parameters: + - $ref: ../parameters.yaml#/jamId + get: + operationId: getJam + summary: Show jam information + description: Returns a jam. + tags: + - jams + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/jams/JamResponse.yaml + "404": + $ref: ../responses/jams/JamNotFoundError.yaml + "/jams/{jamId}/submissions": + parameters: + - $ref: ../parameters.yaml#/jamId + get: + operationId: getJamSubmissions + summary: Show jam submissions + description: Returns all submissions of a jam. Can filter by contentId (for world or avatar jams) or submitterId (for a participant). + tags: + - jams + parameters: + - $ref: ../parameters.yaml#/contentId + - $ref: ../parameters.yaml#/submitterId + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/jams/JamSubmissionListResponse.yaml + "404": + $ref: ../responses/jams/JamNotFoundError.yaml + post: + operationId: submitJamContent + summary: Submit Jam Content + description: Submits content to a jam. The content must have been uploaded by the submitter, and both the content upload and jam submission must be made within the jam's designated times. + tags: + - jams + requestBody: + content: + application/json: + schema: + $ref: ../requests/CreateJamSubmissionRequest.yaml + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/jams/JamSubmissionResponse.yaml + "400": + $ref: ../responses/RequestValidationError.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "404": + $ref: ../responses/jams/JamNotFoundError.yaml + "/jams/{jamId}/submissions/{jamSubmissionId}": + parameters: + - $ref: ../parameters.yaml#/jamId + - $ref: ../parameters.yaml#/jamSubmissionId + delete: + operationId: deleteJamSubmission + summary: Delete Jam Submission + description: Withdraws a content submission from a jam. + tags: + - jams + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/jams/DeleteJamSubmissionResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/NoPermission.yaml + "404": + $ref: ../responses/jams/JamNotFoundError.yaml diff --git a/openapi/components/paths/miscellaneous.yaml b/openapi/components/paths/miscellaneous.yaml index 82cd5201..547f524f 100644 --- a/openapi/components/paths/miscellaneous.yaml +++ b/openapi/components/paths/miscellaneous.yaml @@ -67,6 +67,8 @@ paths: responses: "200": $ref: ../responses/system/APIHealthResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml /infoPush: get: operationId: getInfoPush @@ -87,6 +89,8 @@ paths: responses: "200": $ref: ../responses/system/InfoPushListResponse.yaml + "400": + $ref: ../responses/system/InfoPushBadRequestError.yaml x-badges: - color: gold label: "Status: Early Access (Still Under Development)" diff --git a/openapi/components/paths/notifications.yaml b/openapi/components/paths/notifications.yaml index 34f19085..7b911ff9 100644 --- a/openapi/components/paths/notifications.yaml +++ b/openapi/components/paths/notifications.yaml @@ -108,7 +108,7 @@ paths: - authCookie: [] responses: "200": - $ref: ../responses/notifications/NotificationResponse.yaml + $ref: ../responses/notifications/HideNotificationSuccess.yaml "401": $ref: ../responses/MissingCredentialsError.yaml "/auth/user/notifications/{notificationId}/see": diff --git a/openapi/components/paths/props.yaml b/openapi/components/paths/props.yaml index 1da8071b..24082308 100644 --- a/openapi/components/paths/props.yaml +++ b/openapi/components/paths/props.yaml @@ -66,7 +66,10 @@ paths: put: operationId: updateProp summary: Update Prop - description: Updates a Prop and returns the updated Prop object. When updating the asset bundle, all of `name`, `assetUrl`, `platform`, `unityVersion`, `assetVersion`, `spawnType`, and `worldPlacementMask` must be present, as well as `propSignature` if this value is not blank. + description: Updates a Prop and returns the updated Prop object. When updating + the asset bundle, all of `name`, `assetUrl`, `platform`, `unityVersion`, + `assetVersion`, `spawnType`, and `worldPlacementMask` must be present, + as well as `propSignature` if this value is not blank. tags: - props requestBody: @@ -80,6 +83,8 @@ paths: responses: "200": $ref: ../responses/props/PropResponse.yaml + "400": + $ref: ../responses/RequestValidationError.yaml "401": $ref: ../responses/MissingCredentialsError.yaml "403": @@ -108,9 +113,14 @@ paths: - $ref: ../parameters.yaml#/propId get: operationId: getPropPublishStatus + deprecated: true summary: Get Prop Publish Status - description: Returns a PropPublishStatus object. + description: |- + ~~Returns a PropPublishStatus object.~~ + + **DEPRECATED:** the route no longer exists, though `/props/{propId}` does. tags: + - deprecated - props security: - authCookie: [] @@ -122,12 +132,17 @@ paths: "403": $ref: ../responses/NoPermission.yaml "404": - $ref: ../responses/props/NoSuchPropError.yaml + $ref: ../responses/RouteNotImplementedError.yaml put: operationId: publishProp + deprecated: true summary: Publish Prop - description: Publish a Prop and return the updated PropPublishStatus object. + description: |- + ~~Publish a Prop and return the updated PropPublishStatus object.~~ + + **DEPRECATED:** the route no longer exists, though `/props/{propId}` does. tags: + - deprecated - props security: - authCookie: [] @@ -139,12 +154,17 @@ paths: "403": $ref: ../responses/NoPermission.yaml "404": - $ref: ../responses/props/NoSuchPropError.yaml + $ref: ../responses/RouteNotImplementedError.yaml delete: operationId: unpublishProp + deprecated: true summary: Unpublish Prop - description: Unpublish a Prop and return the updated PropPublishStatus object. + description: |- + ~~Unpublish a Prop and return the updated PropPublishStatus object.~~ + + **DEPRECATED:** the route no longer exists, though `/props/{propId}` does. tags: + - deprecated - props security: - authCookie: [] @@ -156,7 +176,7 @@ paths: "403": $ref: ../responses/NoPermission.yaml "404": - $ref: ../responses/props/NoSuchPropError.yaml + $ref: ../responses/RouteNotImplementedError.yaml components: securitySchemes: $ref: ../securitySchemes.yaml diff --git a/openapi/components/paths/users.yaml b/openapi/components/paths/users.yaml index a1961383..91e07c36 100644 --- a/openapi/components/paths/users.yaml +++ b/openapi/components/paths/users.yaml @@ -97,13 +97,15 @@ paths: - users parameters: - name: search - description: Searches by `displayName`. Will return empty array if search query is empty or missing. + description: Searches by `displayName`. Will return empty array if search query + is empty or missing. in: query schema: type: string minLength: 0 - name: developerType - description: "Active user by developer type, none for normal users and internal for moderators" + description: "Active user by developer type, none for normal users and internal + for moderators" in: query schema: type: string @@ -125,8 +127,10 @@ paths: x-internal: true deprecated: true summary: Search Active Users - description: "**REQUIRES ADMIN CREDENTIALS**. Search and list any Active users by text query." + description: "**REQUIRES ADMIN CREDENTIALS**. Search and list any Active users + by text query." tags: + - deprecated - users parameters: - name: search @@ -136,7 +140,8 @@ paths: schema: type: string - name: developerType - description: "Active user by developer type, none for normal users and internal for moderators" + description: "Active user by developer type, none for normal users and internal + for moderators" in: query schema: type: string @@ -157,6 +162,8 @@ paths: $ref: ../responses/MissingCredentialsError.yaml "403": $ref: ../responses/InvalidAdminCredentialsError.yaml + "404": + $ref: ../responses/users/UserNotFoundError.yaml "/users/{userId}": parameters: - $ref: ../parameters.yaml#/userId @@ -173,6 +180,8 @@ paths: $ref: ../responses/users/UserResponse.yaml "401": $ref: ../responses/MissingCredentialsError.yaml + "404": + $ref: ../responses/users/UserNotFoundError.yaml put: operationId: updateUser summary: Update User Info @@ -193,6 +202,8 @@ paths: $ref: ../responses/users/CurrentPasswordRequiredError.yaml "401": $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/users/UpdateOtherUserForbiddenError.yaml "/users/{userId}/addTags": parameters: - $ref: ../parameters.yaml#/userId @@ -217,6 +228,8 @@ paths: $ref: ../responses/users/UserTagInvalidError.yaml "401": $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/NoPermission.yaml "/users/{userId}/badges/{badgeId}": parameters: - $ref: ../parameters.yaml#/userId @@ -252,7 +265,6 @@ paths: - $ref: ../parameters.yaml#/offset get: operationId: getUserFeedback - deprecated: true summary: Get User Feedback description: Get user's submitted feedback tags: @@ -307,7 +319,8 @@ paths: - users parameters: - name: groupIds - description: Comma-separated (no spaces!) list of GroupIDs to retrieve permissions for. + description: Comma-separated (no spaces!) list of GroupIDs to retrieve + permissions for. required: false in: query schema: @@ -415,7 +428,8 @@ paths: get: operationId: getMutuals summary: Get User Mutuals - description: Gets the counts of mutuals between the logged in user and the specified user + description: Gets the counts of mutuals between the logged in user and the + specified user tags: - users security: @@ -433,7 +447,8 @@ paths: get: operationId: getMutualFriends summary: Get User Mutual Friends - description: Gets a list of mutual friends between the logged in user and the specified user + description: Gets a list of mutual friends between the logged in user and the + specified user tags: - users security: @@ -451,7 +466,8 @@ paths: get: operationId: getMutualGroups summary: Get User Mutual Groups - description: Gets a list of mutual groups between the logged in user and the specified user + description: Gets a list of mutual groups between the logged in user and the + specified user tags: - users security: @@ -502,13 +518,16 @@ paths: $ref: ../responses/users/UserTagInvalidError.yaml "401": $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/NoPermission.yaml "/users/{userId}/tutorial": parameters: - $ref: ../parameters.yaml#/userId get: operationId: getUserTutorialStatus summary: Get User Tutorial Status - description: Gets the status of completed or outstanding tutorials for the specified user. + description: Gets the status of completed or outstanding tutorials for the + specified user. tags: - users security: @@ -536,6 +555,8 @@ paths: description: The user's persistence data for the given world is deleted. "401": $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/users/PersistenceOwnershipError.yaml "404": description: The user does not have persistence data for the given world. "/users/{userId}/{worldId}/persist/exists": @@ -556,6 +577,8 @@ paths: description: The user has persistence data for the given world. "401": $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/users/PersistenceOwnershipError.yaml "404": description: The user does not have persistence data for the given world. "/users/{username}/name": @@ -584,6 +607,8 @@ paths: $ref: ../responses/users/UserResponse.yaml "401": $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/InvalidAdminCredentialsError.yaml components: securitySchemes: $ref: ../securitySchemes.yaml diff --git a/openapi/components/paths/worlds.yaml b/openapi/components/paths/worlds.yaml index 0563ca8d..1b803162 100644 --- a/openapi/components/paths/worlds.yaml +++ b/openapi/components/paths/worlds.yaml @@ -46,7 +46,9 @@ paths: post: operationId: createWorld summary: Create World - description: "Create a new world. This endpoint requires `assetUrl` to be a valid File object with `.vrcw` file extension, and `imageUrl` to be a valid File object with an image file extension." + description: "Create a new world. This endpoint requires `assetUrl` to be a + valid File object with `.vrcw` file extension, and `imageUrl` to be a + valid File object with an image file extension." tags: - worlds requestBody: @@ -183,6 +185,8 @@ paths: responses: "200": $ref: ../responses/worlds/WorldResponse.yaml + "400": + $ref: ../responses/RequestValidationError.yaml "401": $ref: ../responses/MissingCredentialsError.yaml "404": @@ -190,7 +194,9 @@ paths: delete: operationId: deleteWorld summary: Delete World - description: 'Delete a world. Notice a world is never fully "deleted", only its ReleaseStatus is set to "hidden" and the linked Files are deleted. The WorldID is permanently reserved.' + description: 'Delete a world. Notice a world is never fully "deleted", only its + ReleaseStatus is set to "hidden" and the linked Files are deleted. The + WorldID is permanently reserved.' tags: - worlds security: @@ -226,14 +232,44 @@ paths: $ref: ../responses/worlds/WorldTagInvalidError.yaml "401": $ref: ../responses/MissingCredentialsError.yaml + "/worlds/{worldId}/deleteTags": + parameters: + - $ref: ../parameters.yaml#/worldId + post: + operationId: removeWorldTags + summary: Remove World Tags + description: |- + Removes tags from the world's profile. + + The path is `deleteTags`, not `removeTags` as the user equivalent uses. + tags: + - worlds + requestBody: + required: true + content: + application/json: + schema: + $ref: ../requests/ChangeWorldTagsRequest.yaml + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/worlds/WorldResponse.yaml + "400": + $ref: ../responses/worlds/WorldTagInvalidError.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/InvalidAdminCredentialsError.yaml "/worlds/{worldId}/metadata": parameters: - $ref: ../parameters.yaml#/worldId get: operationId: getWorldMetadata - deprecated: true summary: Get World Metadata - description: Return a worlds custom metadata. This is currently believed to be unused. Metadata can be set with `updateWorld` and can be any arbitrary object. + description: Return a worlds custom metadata. This is currently believed to be + unused. Metadata can be set with `updateWorld` and can be any arbitrary + object. tags: - worlds security: [] @@ -309,30 +345,6 @@ paths: $ref: ../responses/MissingCredentialsError.yaml "404": $ref: ../responses/worlds/WorldNotFoundError.yaml - "/worlds/{worldId}/removeTags": - parameters: - - $ref: ../parameters.yaml#/worldId - post: - operationId: removeWorldTags - summary: Remove World Tags - description: Removes tags from the world's profile - tags: - - worlds - requestBody: - required: true - content: - application/json: - schema: - $ref: ../requests/ChangeWorldTagsRequest.yaml - security: - - authCookie: [] - responses: - "200": - $ref: ../responses/worlds/WorldResponse.yaml - "400": - $ref: ../responses/worlds/WorldTagInvalidError.yaml - "401": - $ref: ../responses/MissingCredentialsError.yaml "/worlds/{worldId}/{instanceId}": parameters: - $ref: ../parameters.yaml#/worldId diff --git a/openapi/components/requests/CreateGroupAnnouncementRequest.yaml b/openapi/components/requests/CreateGroupAnnouncementRequest.yaml index f6464a3b..818fe87b 100644 --- a/openapi/components/requests/CreateGroupAnnouncementRequest.yaml +++ b/openapi/components/requests/CreateGroupAnnouncementRequest.yaml @@ -19,5 +19,5 @@ properties: example: Event is starting soon! minLength: 1 required: - - favoriteId + - text - title diff --git a/openapi/components/requests/CreateInstanceRequest.yaml b/openapi/components/requests/CreateInstanceRequest.yaml index 5b48b7b0..72eb4316 100644 --- a/openapi/components/requests/CreateInstanceRequest.yaml +++ b/openapi/components/requests/CreateInstanceRequest.yaml @@ -18,7 +18,6 @@ properties: $ref: ../schemas/InstanceContentSettings.yaml displayName: type: string - nullable: true groupAccessType: $ref: ../schemas/GroupAccessType.yaml hardClose: diff --git a/openapi/components/requests/UpdateWorldRequest.yaml b/openapi/components/requests/UpdateWorldRequest.yaml index bc9ddc65..d8ef5f1d 100644 --- a/openapi/components/requests/UpdateWorldRequest.yaml +++ b/openapi/components/requests/UpdateWorldRequest.yaml @@ -19,6 +19,10 @@ properties: minimum: 0 description: type: string + disabledPropAbilities: + type: array + items: + type: string imageUrl: type: string minLength: 1 @@ -27,6 +31,12 @@ properties: minLength: 1 platform: $ref: ../schemas/Platform.yaml + previewYoutubeId: + type: string + nullable: true + recommendedCapacity: + type: integer + example: 4 releaseStatus: $ref: ../schemas/ReleaseStatus.yaml tags: @@ -42,3 +52,7 @@ properties: default: 5.3.4p1 example: 2022.3.6f1 minLength: 1 + urlList: + type: array + items: + type: string diff --git a/openapi/components/responses/RequestValidationError.yaml b/openapi/components/responses/RequestValidationError.yaml new file mode 100644 index 00000000..6a2e357f --- /dev/null +++ b/openapi/components/responses/RequestValidationError.yaml @@ -0,0 +1,14 @@ +description: >- + The request body failed validation. VRChat validates the payload before it + looks the resource up, so this is returned even when the id in the path does + not exist. The message names the offending field. +content: + application/json: + examples: + Invalid Field: + value: + error: + message: "imageUrl must be a URL˸ 'string'‚ assetUrl must be a URL˸ 'string'" + status_code: 400 + schema: + $ref: ../schemas/Error.yaml diff --git a/openapi/components/responses/RouteNotImplementedError.yaml b/openapi/components/responses/RouteNotImplementedError.yaml new file mode 100644 index 00000000..a32c1cea --- /dev/null +++ b/openapi/components/responses/RouteNotImplementedError.yaml @@ -0,0 +1,10 @@ +description: The route is not served by VRChat. A live route answers 200 or 401. +content: + application/json: + examples: + Not Implemented: + value: + error: The endpoint you're looking for is not implemented by our system. + status_code: 404 + schema: + $ref: ../schemas/RouteNotImplemented.yaml diff --git a/openapi/components/responses/authentication/OAuthRedirectCodeResponse.yaml b/openapi/components/responses/authentication/OAuthRedirectCodeResponse.yaml new file mode 100644 index 00000000..852cde16 --- /dev/null +++ b/openapi/components/responses/authentication/OAuthRedirectCodeResponse.yaml @@ -0,0 +1,5 @@ +description: Returns a short-lived redirect code for the current session. +content: + application/json: + schema: + $ref: ../../schemas/OAuthRedirectCode.yaml diff --git a/openapi/components/responses/authentication/SsoProviderUnsupportedError.yaml b/openapi/components/responses/authentication/SsoProviderUnsupportedError.yaml new file mode 100644 index 00000000..18a44473 --- /dev/null +++ b/openapi/components/responses/authentication/SsoProviderUnsupportedError.yaml @@ -0,0 +1,11 @@ +description: Error response when the requested SSO provider is not supported. +content: + application/json: + examples: + Unsupported Provider: + value: + error: + message: '"That is not a supported SSO provider."' + status_code: 400 + schema: + $ref: ../../schemas/Error.yaml diff --git a/openapi/components/responses/authentication/SsoTokenResponse.yaml b/openapi/components/responses/authentication/SsoTokenResponse.yaml new file mode 100644 index 00000000..9383a319 --- /dev/null +++ b/openapi/components/responses/authentication/SsoTokenResponse.yaml @@ -0,0 +1,5 @@ +description: Returns a token for the service. +content: + application/json: + schema: + $ref: ../../schemas/SsoToken.yaml diff --git a/openapi/components/responses/economy/AccountStateError.yaml b/openapi/components/responses/economy/AccountStateError.yaml new file mode 100644 index 00000000..6c101dcd --- /dev/null +++ b/openapi/components/responses/economy/AccountStateError.yaml @@ -0,0 +1,18 @@ +description: >- + Error response when the account is not in a state that supports the request, + such as one that has never been onboarded for payouts. +content: + application/json: + examples: + Account Invalid: + value: + error: + message: Account invalid + status_code: 400 + Invalid Account State: + value: + error: + message: Invalid account state + status_code: 400 + schema: + $ref: ../../schemas/Error.yaml diff --git a/openapi/components/responses/economy/ProductListingsForbiddenError.yaml b/openapi/components/responses/economy/ProductListingsForbiddenError.yaml new file mode 100644 index 00000000..99cec173 --- /dev/null +++ b/openapi/components/responses/economy/ProductListingsForbiddenError.yaml @@ -0,0 +1,11 @@ +description: Error response when requesting the listings of another user. +content: + application/json: + examples: + Access Denied: + value: + error: + message: Access Denied + status_code: 403 + schema: + $ref: ../../schemas/Error.yaml diff --git a/openapi/components/responses/economy/StoresUnavailableError.yaml b/openapi/components/responses/economy/StoresUnavailableError.yaml new file mode 100644 index 00000000..526c95c4 --- /dev/null +++ b/openapi/components/responses/economy/StoresUnavailableError.yaml @@ -0,0 +1,11 @@ +description: Error response when the seller has no store available to the caller. +content: + application/json: + examples: + Stores Unavailable: + value: + error: + message: Stores unavailable + status_code: 403 + schema: + $ref: ../../schemas/Error.yaml diff --git a/openapi/components/responses/groups/GroupPostsResponse.yaml b/openapi/components/responses/groups/GroupPostsResponse.yaml index 05e2ed36..d19c03b1 100644 --- a/openapi/components/responses/groups/GroupPostsResponse.yaml +++ b/openapi/components/responses/groups/GroupPostsResponse.yaml @@ -8,3 +8,5 @@ content: type: array items: $ref: ../../schemas/GroupPost.yaml + total: + type: integer diff --git a/openapi/components/responses/instances/InstanceBadRequestError.yaml b/openapi/components/responses/instances/InstanceBadRequestError.yaml new file mode 100644 index 00000000..5c30e42f --- /dev/null +++ b/openapi/components/responses/instances/InstanceBadRequestError.yaml @@ -0,0 +1,11 @@ +description: Bad request error response when creating an instance +content: + application/json: + examples: + Null Display Name: + value: + error: + message: "displayName must be a string˸ 'null' - 'object'‚ displayName must be a string˸ 'null'" + status_code: 400 + schema: + $ref: ../../schemas/Error.yaml diff --git a/openapi/components/responses/notifications/HideNotificationSuccess.yaml b/openapi/components/responses/notifications/HideNotificationSuccess.yaml new file mode 100644 index 00000000..91bb2b1c --- /dev/null +++ b/openapi/components/responses/notifications/HideNotificationSuccess.yaml @@ -0,0 +1,11 @@ +description: Successful response after hiding a notification. +content: + application/json: + examples: + Hide Success: + value: + success: + message: Ok + status_code: 200 + schema: + $ref: ../../schemas/Success.yaml diff --git a/openapi/components/responses/system/InfoPushBadRequestError.yaml b/openapi/components/responses/system/InfoPushBadRequestError.yaml new file mode 100644 index 00000000..e033bb83 --- /dev/null +++ b/openapi/components/responses/system/InfoPushBadRequestError.yaml @@ -0,0 +1,11 @@ +description: Bad request error response when a list parameter is not an array. +content: + application/json: + examples: + Require Not An Array: + value: + error: + message: Parameter `require` must be an array. + status_code: 400 + schema: + $ref: ../../schemas/Error.yaml diff --git a/openapi/components/responses/users/PersistenceOwnershipError.yaml b/openapi/components/responses/users/PersistenceOwnershipError.yaml new file mode 100644 index 00000000..30c2a7ed --- /dev/null +++ b/openapi/components/responses/users/PersistenceOwnershipError.yaml @@ -0,0 +1,12 @@ +description: >- + Error response when asking about another user's persistence data. The body + carries only a message string, without the nested `error` object every other + response in this description uses. +content: + application/json: + examples: + Not Your Persistence: + value: + error: You're not who I was expecting! + schema: + $ref: ../../schemas/BareError.yaml diff --git a/openapi/components/responses/users/UpdateOtherUserForbiddenError.yaml b/openapi/components/responses/users/UpdateOtherUserForbiddenError.yaml new file mode 100644 index 00000000..19e1802e --- /dev/null +++ b/openapi/components/responses/users/UpdateOtherUserForbiddenError.yaml @@ -0,0 +1,11 @@ +description: Error response when updating a user other than the authenticated one. +content: + application/json: + examples: + Not Yourself: + value: + error: + message: '"You can only edit yourself, not other users."' + status_code: 403 + schema: + $ref: ../../schemas/Error.yaml diff --git a/openapi/components/responses/users/UserNotFoundError.yaml b/openapi/components/responses/users/UserNotFoundError.yaml new file mode 100644 index 00000000..f2f8531e --- /dev/null +++ b/openapi/components/responses/users/UserNotFoundError.yaml @@ -0,0 +1,11 @@ +description: Error response when no user exists with the requested id. +content: + application/json: + examples: + User Not Found: + value: + error: + message: User usr_00000000-0000-0000-0000-000000000000 not Found + status_code: 404 + schema: + $ref: ../../schemas/Error.yaml diff --git a/openapi/components/responses/users/UserResponse.yaml b/openapi/components/responses/users/UserResponse.yaml index 36b321a8..01ce5854 100644 --- a/openapi/components/responses/users/UserResponse.yaml +++ b/openapi/components/responses/users/UserResponse.yaml @@ -1,5 +1,17 @@ -description: Returns a single User object. +description: |- + Returns a single User object. + + Requesting your own ID returns your full `CurrentUser` record instead, carrying + the private fields (`emailVerified`, `steamDetails`, `twoFactorAuthEnabled`, …) + that are never present for another user. content: application/json: schema: - $ref: ../../schemas/User.yaml + x-if: + when: jsonschema + then: + oneOf: + - $ref: ../../schemas/User.yaml + - $ref: ../../schemas/CurrentUser.yaml + else: + $ref: ../../schemas/User.yaml diff --git a/openapi/components/schemas/APIConfig.yaml b/openapi/components/schemas/APIConfig.yaml index 79a21f94..6160e2ea 100644 --- a/openapi/components/schemas/APIConfig.yaml +++ b/openapi/components/schemas/APIConfig.yaml @@ -1,6 +1,10 @@ title: APIConfig type: object -description: Global configuration for various features. +description: |- + Global configuration for various features. + + The response carries decoy properties: plausible-looking names VRChat rerolls at random as deliberate obfuscation. +additionalProperties: true properties: CampaignStatus: type: string @@ -119,6 +123,8 @@ properties: type: integer description: Unknown default: 30000 + clientMaxDatagrams: + type: integer clientNetDispatchThread: type: boolean description: Unknown @@ -171,6 +177,8 @@ properties: type: integer description: Unknown default: 15 + clientUseAck2: + type: boolean constants: $ref: ./APIConfigConstants.yaml contactEmail: @@ -327,6 +335,12 @@ properties: type: integer description: Unknown default: 1 + enableVRCPlusWorldLists: + type: boolean + eventShelfCampaigns: + type: array + items: + $ref: ./APIConfigEventShelfCampaign.yaml events: $ref: ./APIConfigEvents.yaml forceUseLatestWorld: @@ -336,10 +350,16 @@ properties: giftDisplayType: type: string description: Display type of gifts + globalCacheVersion: + type: integer + globalCacheVersionDefault: + type: integer googleApiClientId: type: string description: Unknown default: 827942544393-r2ouvckvouldn9dg9uruseje575e878f.apps.googleusercontent.com + googleApiUnityClientId: + type: string homeWorldId: $ref: ./WorldID.yaml homepageRedirectTarget: @@ -374,6 +394,20 @@ properties: type: string description: VRChat's job application email minLength: 1 + loadingScreenWeights: + type: object + description: Relative weight of each info-push category on the loading screen, per audience. + additionalProperties: + $ref: ./APIConfigLoadingScreenWeights.yaml + lowMemoryGoHomeTimeout: + type: object + description: Low-memory timeout, keyed by platform. + additionalProperties: + type: object + properties: + timeout: + type: integer + example: -1 maxUserEmoji: type: integer description: The maximum number of custom emoji each user may have at a given time. @@ -382,6 +416,9 @@ properties: type: integer description: The maximum number of custom stickers each user may have at a given time. default: 18 + maximumUnityVersionForUploads: + type: string + example: 2023.0.0f0 minSupportedClientBuildNumber: type: object description: Minimum supported client build number for various platforms @@ -416,7 +453,6 @@ properties: - GooglePlay - PC - PicoStore - - QuestAppLab - QuestStore - TestFlight - XRElite @@ -458,13 +494,32 @@ properties: type: string description: Currently used youtube-dl.exe hash in SHA1-delimited format minLength: 1 + player-url-resolver-sha1-gfn-override: + type: string + description: Overrides `player-url-resolver-sha1` on GeForce Now. player-url-resolver-version: type: string description: Currently used youtube-dl.exe version minLength: 1 + player-url-resolver-version-gfn-override: + type: string + description: Overrides `player-url-resolver-version` on GeForce Now. + example: 2026-07-04-GFN + profileDefaults: + $ref: ./APIConfigProfileDefaults.yaml + propComponentList: + type: array + description: SDK3 component type names. + items: + type: string publicKey: type: string description: Public key, hex encoded + questMinimumLowMemoryThreshold: + type: object + description: Low-memory threshold, keyed by platform. + additionalProperties: + type: integer reportCategories: type: object description: Categories available for reporting objectionable content @@ -560,6 +615,10 @@ properties: type: string description: Download link for game on the Steam website. minLength: 1 + voiceMaxPlaybackSourcesMobile: + type: integer + voiceMaxPlaybackSourcesPC: + type: integer websocketMaxFriendsRefreshDelay: type: integer description: Unknown @@ -634,7 +693,6 @@ required: - downloadUrls - dynamicWorldRows - economyLedgerBackfill - - economyLedgerMigrationStop - economyLedgerMode - economyPauseEnd - economyPauseStart diff --git a/openapi/components/schemas/APIConfigAudioConfig.yaml b/openapi/components/schemas/APIConfigAudioConfig.yaml index 56215dcb..3acdb0e6 100644 --- a/openapi/components/schemas/APIConfigAudioConfig.yaml +++ b/openapi/components/schemas/APIConfigAudioConfig.yaml @@ -14,6 +14,8 @@ properties: nearFieldILDNudgeEarRadius: type: number description: Unknown + nearFieldILDNudgeEarTranslate: + type: number perEarDirectionalityEarRadius: type: number description: Unknown @@ -35,6 +37,8 @@ properties: trackingScaleMultiplier: type: number description: Unknown + useLegacyILDNudging: + type: boolean required: - eq - nearFieldILDNudge diff --git a/openapi/components/schemas/APIConfigEventShelfCampaign.yaml b/openapi/components/schemas/APIConfigEventShelfCampaign.yaml new file mode 100644 index 00000000..d4a6d969 --- /dev/null +++ b/openapi/components/schemas/APIConfigEventShelfCampaign.yaml @@ -0,0 +1,16 @@ +title: APIConfigEventShelfCampaign +type: object +description: A seasonal campaign a group event can be listed under. +properties: + description: + type: string + example: Include this event in the VRChat Tanabata event shelf. + key: + type: string + example: tanabata + name: + type: string + example: Tanabata Homeworld Moderation +required: + - key + - name diff --git a/openapi/components/schemas/APIConfigEvents.yaml b/openapi/components/schemas/APIConfigEvents.yaml index 6632e54b..2398a2fc 100644 --- a/openapi/components/schemas/APIConfigEvents.yaml +++ b/openapi/components/schemas/APIConfigEvents.yaml @@ -31,6 +31,8 @@ properties: useDirectPlayerSerialization: type: boolean description: Unknown + useSparseRotationForPlayerSerialization: + type: boolean viewSegmentLength: type: integer description: Unknown diff --git a/openapi/components/schemas/APIConfigLoadingScreenWeights.yaml b/openapi/components/schemas/APIConfigLoadingScreenWeights.yaml new file mode 100644 index 00000000..7827698b --- /dev/null +++ b/openapi/components/schemas/APIConfigLoadingScreenWeights.yaml @@ -0,0 +1,12 @@ +title: APIConfigLoadingScreenWeights +type: object +properties: + announcement: + type: integer + example: 1 + informational: + type: integer + example: 89 + promotional: + type: integer + example: 10 diff --git a/openapi/components/schemas/APIConfigProfileDefaults.yaml b/openapi/components/schemas/APIConfigProfileDefaults.yaml new file mode 100644 index 00000000..0201e18f --- /dev/null +++ b/openapi/components/schemas/APIConfigProfileDefaults.yaml @@ -0,0 +1,19 @@ +title: APIConfigProfileDefaults +type: object +description: Default profile theme colours, each a hex RGB triplet without a leading `#`. +properties: + backgroundGradientBottom: + type: string + example: 9933FF + backgroundGradientTop: + type: string + example: 00C48A + themeButtonColor: + type: string + example: "009599" + themeIconColor: + type: string + example: 6BE4FA + themeSubtextColor: + type: string + example: A9A9A9 diff --git a/openapi/components/schemas/Avatar.yaml b/openapi/components/schemas/Avatar.yaml index c9adfec7..765ba15d 100644 --- a/openapi/components/schemas/Avatar.yaml +++ b/openapi/components/schemas/Avatar.yaml @@ -9,13 +9,15 @@ properties: description: Only present for the avatar author on avatars under active review. assetUrl: type: string - description: "Not present from general search `/avatars`, only on specific requests `/avatars/{avatarId}`." + description: "Not present from general search `/avatars`, only on specific + requests `/avatars/{avatarId}`." minLength: 1 assetUrlObject: type: object description: |- Not present from general search `/avatars`, only on specific requests `/avatars/{avatarId}`. **Deprecation:** `Object` has unknown usage/fields, and is always empty. Use normal `Url` field instead. + attribution: {} authorId: $ref: ./UserID.yaml authorName: @@ -115,7 +117,8 @@ properties: unityPackageUrlObject: deprecated: true type: object - description: "**Deprecation:** `Object` has unknown usage/fields, and is always empty. Use normal `Url` field instead." + description: "**Deprecation:** `Object` has unknown usage/fields, and is always + empty. Use normal `Url` field instead." properties: unityPackageUrl: type: string diff --git a/openapi/components/schemas/BareError.yaml b/openapi/components/schemas/BareError.yaml new file mode 100644 index 00000000..db0b955a --- /dev/null +++ b/openapi/components/schemas/BareError.yaml @@ -0,0 +1,12 @@ +title: BareError +type: object +description: >- + An error body carrying only a message string. Unlike `Error`, there is no + nested object and no `status_code`, so a consumer that assumes the usual + shape will read `undefined` from it. +properties: + error: + type: string + example: You're not who I was expecting! +required: + - error diff --git a/openapi/components/schemas/CalendarEvent.yaml b/openapi/components/schemas/CalendarEvent.yaml index 1e542e42..8cfd6fbf 100644 --- a/openapi/components/schemas/CalendarEvent.yaml +++ b/openapi/components/schemas/CalendarEvent.yaml @@ -48,6 +48,9 @@ properties: $ref: ./LanguageCode.yaml occurrenceKind: $ref: ./CalendarEventOccurrenceKind.yaml + occurrenceModified: + type: boolean + nullable: true ownerId: $ref: ./GroupID.yaml platforms: diff --git a/openapi/components/schemas/CalendarEventDiscovery.yaml b/openapi/components/schemas/CalendarEventDiscovery.yaml index cb89e81d..8b7651df 100644 --- a/openapi/components/schemas/CalendarEventDiscovery.yaml +++ b/openapi/components/schemas/CalendarEventDiscovery.yaml @@ -36,5 +36,4 @@ properties: items: $ref: ./CalendarEvent.yaml required: - - nextCursor - results diff --git a/openapi/components/schemas/CurrentUser.yaml b/openapi/components/schemas/CurrentUser.yaml index ba1217c5..126d1d78 100644 --- a/openapi/components/schemas/CurrentUser.yaml +++ b/openapi/components/schemas/CurrentUser.yaml @@ -42,6 +42,10 @@ properties: description: " " items: $ref: ./Badge.yaml + bannerColor: + type: string + bannerType: + type: string bio: type: string bioLinks: @@ -49,6 +53,10 @@ properties: description: " " items: type: string + completedTutorials: + type: array + items: + type: string contentFilters: type: array description: These tags begin with `content_` and control content gating @@ -88,6 +96,8 @@ properties: type: string friendKey: type: string + friendRequestStatus: + $ref: ./FriendRequestStatus.yaml friends: type: array items: @@ -112,16 +122,28 @@ properties: type: boolean homeLocation: $ref: ./WorldID.yaml + iconFrame: + type: string + iconUrl: + type: string id: $ref: ./UserID.yaml + instanceId: + $ref: ./InstanceID.yaml isAdult: type: boolean isBoopingEnabled: type: boolean default: true + isEconomyCreator: + type: boolean + default: false isFriend: type: boolean default: false + isTemporary: + type: boolean + default: false last_activity: type: string format: date-time @@ -134,6 +156,12 @@ properties: format: date-time last_platform: $ref: ./Platform.yaml + location: + $ref: ./LocationID.yaml + nameplateEffect: + type: string + note: + type: string obfuscatedEmail: type: string obfuscatedPendingEmail: @@ -153,8 +181,12 @@ properties: description: " " items: $ref: ./PastDisplayName.yaml + personalizationOptOut: + type: boolean picoId: type: string + platform: + type: string platform_history: type: array items: @@ -170,6 +202,8 @@ properties: format: date-time presence: $ref: ./CurrentUserPresence.yaml + profileEffect: + type: string profilePicOverride: type: string profilePicOverrideThumbnail: @@ -205,6 +239,13 @@ properties: type: array items: $ref: ./Tag.yaml + temporaryExpiryDate: {} + travelingToInstance: + type: string + travelingToLocation: + type: string + travelingToWorld: + type: string twitchDetails: type: object twitchId: @@ -231,12 +272,15 @@ properties: username: deprecated: true type: string - description: -| - **DEPRECATED:** VRChat API no longer return usernames of other users. [See issue by Tupper for more information](https://github.com/pypy-vrc/VRCX/issues/429). + 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). usesGeneratedPassword: type: boolean viveId: type: string + worldId: + $ref: ./WorldID.yaml required: - acceptedTOSVersion - ageVerificationStatus diff --git a/openapi/components/schemas/CurrentUserPresence.yaml b/openapi/components/schemas/CurrentUserPresence.yaml index 84ac92f3..065a610e 100644 --- a/openapi/components/schemas/CurrentUserPresence.yaml +++ b/openapi/components/schemas/CurrentUserPresence.yaml @@ -1,9 +1,13 @@ title: CurrentUserPresence type: object properties: + avatarImageUrl: + type: string avatarThumbnail: type: string nullable: true + banner: + type: string currentAvatarTags: type: array items: @@ -17,6 +21,8 @@ properties: nullable: true items: $ref: ./GroupID.yaml + iconFrame: + type: string id: $ref: ./UserID.yaml instance: @@ -29,10 +35,14 @@ properties: isRejoining: type: string nullable: true + nameplateEffect: + type: string platform: $ref: ./Platform.yaml description: either a Platform or an empty string nullable: true + profileEffect: + type: string profilePicOverride: type: string nullable: true diff --git a/openapi/components/schemas/DynamicContentRow.yaml b/openapi/components/schemas/DynamicContentRow.yaml index 6a066511..e3dcf8bf 100644 --- a/openapi/components/schemas/DynamicContentRow.yaml +++ b/openapi/components/schemas/DynamicContentRow.yaml @@ -1,16 +1,89 @@ title: DynamicContentRow type: object properties: + anyStyle: + type: array + nullable: true + items: + type: string + anyTag: + type: array + nullable: true + items: + type: string + avatarSpecific: + type: boolean + bannersTag: + type: string + categories: + type: array + items: + type: string + featuredResults: + type: string index: type: integer minimum: 0 - name: + marketplace: + type: string + maxPrice: + type: integer + minOccupants: + type: integer + minPrice: + type: integer + minimumInterestCount: + type: integer + minimumRemainingMinutes: + type: integer + mode: type: string + n: + type: integer + name: minLength: 1 + x-if: + when: jsonschema + then: + oneOf: + - type: string + - $ref: ./LocalizedString.yaml + else: + type: string + nonFeaturedResults: + type: string + notag: + type: array + nullable: true + items: + type: string + params: + type: object + additionalProperties: true + personalizedResults: + type: string + example: include platform: $ref: ./Platform.yaml description: 'Usually "ThisPlatformSupported", but can also be other values such as "all" or platform specific identifiers.' minLength: 1 + region: + type: string + nullable: true + scope: + type: string + example: all + shortName: + x-if: + when: jsonschema + then: + oneOf: + - type: string + - type: "null" + - $ref: ./LocalizedString.yaml + else: + type: string + nullable: true sortHeading: type: string minLength: 1 @@ -20,17 +93,28 @@ properties: sortOwnership: type: string minLength: 1 + style: + type: string + nullable: true tag: - $ref: ./Tag.yaml - description: Tag to filter content for this row. - minLength: 1 + type: string + description: |- + Tag to filter content for this row. Not a `Tag`: that type forbids the + empty string, which this field uses for a row that is not tag-filtered. + nullable: true + example: admin_spotlight_pc + tags: + type: array + nullable: true + items: + $ref: ./Tag.yaml type: type: string description: Type is not present if it is a world. example: avatar + upcomingOffsetMinutes: + type: integer + example: 10080 required: - name - platform - - sortHeading - - sortOrder - - sortOwnership diff --git a/openapi/components/schemas/EconomyBalances.yaml b/openapi/components/schemas/EconomyBalances.yaml index eff1ee99..d77635d0 100644 --- a/openapi/components/schemas/EconomyBalances.yaml +++ b/openapi/components/schemas/EconomyBalances.yaml @@ -9,5 +9,4 @@ properties: type: integer required: - balance - - earnings - standard diff --git a/openapi/components/schemas/FavoritedWorld.yaml b/openapi/components/schemas/FavoritedWorld.yaml index 94144a4b..c1c18b55 100644 --- a/openapi/components/schemas/FavoritedWorld.yaml +++ b/openapi/components/schemas/FavoritedWorld.yaml @@ -18,6 +18,9 @@ properties: description: type: string minLength: 1 + disabledPropAbilities: + type: array + items: {} favoriteGroup: type: string minLength: 1 diff --git a/openapi/components/schemas/FileAnalysisAvatarStats.yaml b/openapi/components/schemas/FileAnalysisAvatarStats.yaml index 97c1d419..2f8b5db2 100644 --- a/openapi/components/schemas/FileAnalysisAvatarStats.yaml +++ b/openapi/components/schemas/FileAnalysisAvatarStats.yaml @@ -67,6 +67,8 @@ properties: type: integer physicsRigidbodies: type: integer + raycastCount: + type: integer skinnedMeshCount: type: integer skinnedMeshIndices: diff --git a/openapi/components/schemas/FriendRequestStatus.yaml b/openapi/components/schemas/FriendRequestStatus.yaml new file mode 100644 index 00000000..26bbfaaf --- /dev/null +++ b/openapi/components/schemas/FriendRequestStatus.yaml @@ -0,0 +1,4 @@ +title: FriendRequestStatus +type: string +description: State of a friend request between the caller and this user. VRChat sends the string `"null"`, not JSON `null`. +example: "null" diff --git a/openapi/components/schemas/Group.yaml b/openapi/components/schemas/Group.yaml index c8bbb748..e64115dd 100644 --- a/openapi/components/schemas/Group.yaml +++ b/openapi/components/schemas/Group.yaml @@ -1,98 +1,100 @@ -title: Group -type: object -properties: - ageVerificationBetaCode: - type: string - example: abc1234 - ageVerificationBetaSlots: - type: number - example: 500 - ageVerificationSlotsAvailable: - type: boolean - allowGroupJoinPrompt: - type: boolean - badges: - type: array - items: - type: string - bannerId: - type: string - nullable: true - bannerUrl: - type: string - nullable: true - createdAt: - type: string - format: date-time - description: - type: string - discriminator: - $ref: ./GroupDiscriminator.yaml - galleries: - type: array - items: - $ref: ./GroupGallery.yaml - iconId: - type: string - nullable: true - iconUrl: - type: string - nullable: true - id: - $ref: ./GroupID.yaml - isVerified: - type: boolean - default: false - joinState: - $ref: ./GroupJoinState.yaml - languages: - type: array - items: - type: string - lastPostCreatedAt: - type: string - nullable: true - format: date-time - links: - type: array - items: - type: string - memberCount: - type: integer - memberCountSyncedAt: - type: string - format: date-time - membershipStatus: - $ref: ./GroupMemberStatus.yaml - myMember: - $ref: ./GroupMyMember.yaml - nullable: true - name: - type: string - onlineMemberCount: - type: integer - ownerId: - $ref: ./UserID.yaml - privacy: - $ref: ./GroupPrivacy.yaml - roles: - type: array - description: Only returned if ?includeRoles=true is specified. - nullable: true - items: - $ref: ./GroupRole.yaml - rules: - type: string - nullable: true - shortCode: - $ref: ./GroupShortCode.yaml - tags: - type: array - items: - $ref: ./Tag.yaml - transferTargetId: - $ref: ./UserID.yaml - nullable: true - updatedAt: - type: string - format: date-time +title: Group +type: object +properties: + ageVerificationBetaCode: + type: string + example: abc1234 + ageVerificationBetaSlots: + type: number + example: 500 + ageVerificationSlotsAvailable: + type: boolean + allowGroupJoinPrompt: + type: boolean + badges: + type: array + items: + type: string + bannerId: + type: string + nullable: true + bannerUrl: + type: string + nullable: true + createdAt: + type: string + format: date-time + description: + type: string + discriminator: + $ref: ./GroupDiscriminator.yaml + galleries: + type: array + items: + $ref: ./GroupGallery.yaml + iconId: + type: string + nullable: true + iconUrl: + type: string + nullable: true + id: + $ref: ./GroupID.yaml + isVerified: + type: boolean + default: false + joinState: + $ref: ./GroupJoinState.yaml + languages: + type: array + items: + type: string + lastPostCreatedAt: + type: string + nullable: true + format: date-time + links: + type: array + items: + type: string + memberCount: + type: integer + memberCountSyncedAt: + type: string + format: date-time + membershipStatus: + $ref: ./GroupMemberStatus.yaml + myMember: + $ref: ./GroupMyMember.yaml + nullable: true + name: + type: string + nameplateId: {} + nameplateUrl: {} + onlineMemberCount: + type: integer + ownerId: + $ref: ./UserID.yaml + privacy: + $ref: ./GroupPrivacy.yaml + roles: + type: array + description: Only returned if ?includeRoles=true is specified. + nullable: true + items: + $ref: ./GroupRole.yaml + rules: + type: string + nullable: true + shortCode: + $ref: ./GroupShortCode.yaml + tags: + type: array + items: + $ref: ./Tag.yaml + transferTargetId: + $ref: ./UserID.yaml + nullable: true + updatedAt: + type: string + format: date-time diff --git a/openapi/components/schemas/GroupAnnouncement.yaml b/openapi/components/schemas/GroupAnnouncement.yaml index 6c99b050..d7e680dd 100644 --- a/openapi/components/schemas/GroupAnnouncement.yaml +++ b/openapi/components/schemas/GroupAnnouncement.yaml @@ -1,5 +1,8 @@ title: GroupAnnouncement type: object +description: >- + An announcement is stored as a group post, so `POST /groups/{groupId}/announcement` + answers with the post fields below as well as the announcement ones. properties: authorId: $ref: ./UserID.yaml @@ -8,6 +11,9 @@ properties: type: string nullable: true format: date-time + editorId: + $ref: ./UserID.yaml + nullable: true groupId: $ref: ./GroupID.yaml nullable: true @@ -20,6 +26,8 @@ properties: imageUrl: type: string nullable: true + roleIds: + $ref: ./GroupRoleIDList.yaml text: type: string nullable: true @@ -30,3 +38,5 @@ properties: type: string nullable: true format: date-time + visibility: + type: string diff --git a/openapi/components/schemas/GroupPermission.yaml b/openapi/components/schemas/GroupPermission.yaml index ca635a03..cb28e9ee 100644 --- a/openapi/components/schemas/GroupPermission.yaml +++ b/openapi/components/schemas/GroupPermission.yaml @@ -7,6 +7,11 @@ properties: description: Whether the user is allowed to add this permission to a role. default: false example: true + dependsOn: + type: array + description: Other permission names this one is listed against. + items: + $ref: ./GroupPermissions.yaml displayName: type: string description: The display name of the permission. diff --git a/openapi/components/schemas/GroupPost.yaml b/openapi/components/schemas/GroupPost.yaml index d1e43837..83431991 100644 --- a/openapi/components/schemas/GroupPost.yaml +++ b/openapi/components/schemas/GroupPost.yaml @@ -19,7 +19,7 @@ properties: imageUrl: type: string nullable: true - roleId: + roleIds: $ref: ./GroupRoleIDList.yaml text: type: string diff --git a/openapi/components/schemas/GroupRole.yaml b/openapi/components/schemas/GroupRole.yaml index a90688bf..4f9f8ecf 100644 --- a/openapi/components/schemas/GroupRole.yaml +++ b/openapi/components/schemas/GroupRole.yaml @@ -4,12 +4,18 @@ properties: createdAt: type: string format: date-time + defaultRole: + type: boolean + default: false description: type: string groupId: $ref: ./GroupID.yaml id: $ref: ./GroupRoleID.yaml + isAddedOnJoin: + type: boolean + default: false isManagementRole: type: boolean default: false diff --git a/openapi/components/schemas/GroupRoleTemplateRole.yaml b/openapi/components/schemas/GroupRoleTemplateRole.yaml new file mode 100644 index 00000000..dc476ff5 --- /dev/null +++ b/openapi/components/schemas/GroupRoleTemplateRole.yaml @@ -0,0 +1,19 @@ +title: GroupRoleTemplateRole +type: object +description: A role a group role template creates alongside the everyone role. +properties: + description: + type: string + isAddedOnJoin: + type: boolean + default: false + name: + type: string + permissions: + type: array + items: + $ref: ./GroupPermissions.yaml +required: + - description + - name + - permissions diff --git a/openapi/components/schemas/GroupRoleTemplateValues.yaml b/openapi/components/schemas/GroupRoleTemplateValues.yaml index a14656cb..98d1582b 100644 --- a/openapi/components/schemas/GroupRoleTemplateValues.yaml +++ b/openapi/components/schemas/GroupRoleTemplateValues.yaml @@ -10,19 +10,9 @@ properties: name: type: string roles: - type: object - properties: - name: - type: string - description: - type: string - basePermissions: - type: array - items: - $ref: ./GroupPermissions.yaml - isAddedOnJoin: - type: boolean - default: false + type: array + items: + $ref: ./GroupRoleTemplateRole.yaml required: - basePermissions - description diff --git a/openapi/components/schemas/InfoPush.yaml b/openapi/components/schemas/InfoPush.yaml index 15d406bc..fd52b754 100644 --- a/openapi/components/schemas/InfoPush.yaml +++ b/openapi/components/schemas/InfoPush.yaml @@ -2,6 +2,7 @@ title: InfoPush type: object description: "" properties: + clientMinVersion: {} createdAt: type: string format: date-time @@ -9,7 +10,10 @@ properties: $ref: ./InfoPushData.yaml endDate: type: string + nullable: true format: date-time + experiment: + $ref: ./InfoPushExperiment.yaml hash: type: string description: "Unknown usage, MD5" @@ -23,11 +27,20 @@ properties: default: true priority: type: integer + regions: + type: array + items: + type: string releaseStatus: $ref: ./ReleaseStatus.yaml + requireClientTags: + type: array + items: + type: string startDate: type: string description: "" + nullable: true format: date-time tags: type: array diff --git a/openapi/components/schemas/InfoPushData.yaml b/openapi/components/schemas/InfoPushData.yaml index 7b3e2354..97f13d9e 100644 --- a/openapi/components/schemas/InfoPushData.yaml +++ b/openapi/components/schemas/InfoPushData.yaml @@ -4,20 +4,105 @@ description: "" properties: article: $ref: ./InfoPushDataArticle.yaml + authorName: + type: string + avatarId: + $ref: ./AvatarID.yaml + bannerImageUrl: + type: string + categories: + type: array + items: + $ref: ./InfoPushDataCategory.yaml + category: + type: string contentList: $ref: ./DynamicContentRow.yaml description: + x-if: + when: jsonschema + then: + oneOf: + - type: string + - $ref: ./LocalizedString.yaml + else: + type: string + disclaimerText: + type: string + domainList: + type: array + items: + type: object + properties: + domain: + type: string + featuredAvatarCategoryId: + type: string + finalName: + type: string + iconImageUrl: type: string imageUrl: type: string - minLength: 1 + nullable: true + ipsQuery: + $ref: ./InfoPushIpsQuery.yaml + isNew: + type: boolean + listingIds: + type: array + items: + type: string name: - type: string + x-if: + when: jsonschema + then: + oneOf: + - type: string + - $ref: ./LocalizedString.yaml + else: + type: string onPressed: $ref: ./InfoPushDataClickable.yaml + overrideName: {} + rows: + type: integer + description: Number of rows to render. + nullable: true + search: + $ref: ./InfoPushDataSearch.yaml + shortName: + x-if: + when: jsonschema + then: + oneOf: + - type: string + - type: "null" + - $ref: ./LocalizedString.yaml + else: + type: string + nullable: true template: type: string + thumbnailImageUrl: + type: string + nullable: true + tooltipDescription: + x-if: + when: jsonschema + then: + oneOf: + - type: string + - $ref: ./LocalizedString.yaml + else: + type: string version: type: string example: 2021.3.4 minLength: 1 + + weight: + type: integer + + worldTag: + type: string diff --git a/openapi/components/schemas/InfoPushDataArticle.yaml b/openapi/components/schemas/InfoPushDataArticle.yaml index 5f0c5d3d..a377bca6 100644 --- a/openapi/components/schemas/InfoPushDataArticle.yaml +++ b/openapi/components/schemas/InfoPushDataArticle.yaml @@ -2,4 +2,25 @@ title: InfoPushDataArticle type: object properties: content: - $ref: ./InfoPushDataArticleContent.yaml + type: array + items: + $ref: ./InfoPushDataArticleContent.yaml + + embeddedLinkData: + type: array + items: + $ref: ./InfoPushEmbeddedLink.yaml + + jumpLinks: + type: array + items: + type: string + moreInfoLinks: + type: array + items: + $ref: ./InfoPushEmbeddedLink.yaml + + sectionLinks: + type: array + items: + type: string diff --git a/openapi/components/schemas/InfoPushDataArticleContent.yaml b/openapi/components/schemas/InfoPushDataArticleContent.yaml index 5f07dd24..d4d64e37 100644 --- a/openapi/components/schemas/InfoPushDataArticleContent.yaml +++ b/openapi/components/schemas/InfoPushDataArticleContent.yaml @@ -1,9 +1,16 @@ title: InfoPushDataArticleContent type: object properties: + id: + type: string imageUrl: type: string onPressed: $ref: ./InfoPushDataClickable.yaml text: type: string + + title: + type: string + videoUrl: + type: string diff --git a/openapi/components/schemas/InfoPushDataCategory.yaml b/openapi/components/schemas/InfoPushDataCategory.yaml new file mode 100644 index 00000000..07629ca8 --- /dev/null +++ b/openapi/components/schemas/InfoPushDataCategory.yaml @@ -0,0 +1,22 @@ +title: InfoPushDataCategory +type: object +properties: + ids: + type: array + items: + type: string + ipsQuery: + $ref: ./InfoPushIpsQuery.yaml + maxCells: + type: integer + name: + x-if: + when: jsonschema + then: + oneOf: + - type: string + - $ref: ./LocalizedString.yaml + else: + type: string + type: + type: string diff --git a/openapi/components/schemas/InfoPushDataClickable.yaml b/openapi/components/schemas/InfoPushDataClickable.yaml index aebc89f5..988977de 100644 --- a/openapi/components/schemas/InfoPushDataClickable.yaml +++ b/openapi/components/schemas/InfoPushDataClickable.yaml @@ -10,9 +10,15 @@ properties: type: string enum: - CannedWorldSearch + - OpenAccountUpgrade + - OpenAvatarsMenu + - OpenHelpArticle + - OpenListingDetails - OpenSafetyMenu - OpenURL - OpenVRCPlusMenu + - OpenVRChatStore + - OpenWorldDetails example: OpenURL minLength: 1 required: diff --git a/openapi/components/schemas/InfoPushDataSearch.yaml b/openapi/components/schemas/InfoPushDataSearch.yaml new file mode 100644 index 00000000..1babbea0 --- /dev/null +++ b/openapi/components/schemas/InfoPushDataSearch.yaml @@ -0,0 +1,13 @@ +title: InfoPushDataSearch +type: object +properties: + searchContent: + type: string + searchInFields: + type: string + searchQuery: + type: string + searchTags: + type: string + sortBy: + type: string diff --git a/openapi/components/schemas/InfoPushEmbeddedLink.yaml b/openapi/components/schemas/InfoPushEmbeddedLink.yaml new file mode 100644 index 00000000..3c465592 --- /dev/null +++ b/openapi/components/schemas/InfoPushEmbeddedLink.yaml @@ -0,0 +1,13 @@ +title: InfoPushEmbeddedLink +type: object +properties: + parameters: + type: array + items: + type: string + command: + type: string + id: + type: string + name: + type: string diff --git a/openapi/components/schemas/InfoPushExperiment.yaml b/openapi/components/schemas/InfoPushExperiment.yaml new file mode 100644 index 00000000..b6832697 --- /dev/null +++ b/openapi/components/schemas/InfoPushExperiment.yaml @@ -0,0 +1,7 @@ +title: InfoPushExperiment +type: object +properties: + key: + type: string + variant: + type: string diff --git a/openapi/components/schemas/InfoPushIpsQuery.yaml b/openapi/components/schemas/InfoPushIpsQuery.yaml new file mode 100644 index 00000000..f8ad4db3 --- /dev/null +++ b/openapi/components/schemas/InfoPushIpsQuery.yaml @@ -0,0 +1,7 @@ +title: InfoPushIpsQuery +type: object +properties: + include: + type: string + require: + type: string diff --git a/openapi/components/schemas/Instance.yaml b/openapi/components/schemas/Instance.yaml index 68e81515..9be4d96e 100644 --- a/openapi/components/schemas/Instance.yaml +++ b/openapi/components/schemas/Instance.yaml @@ -36,9 +36,15 @@ properties: $ref: ./InstanceContentSettings.yaml creatorId: $ref: ./UserID.yaml + nullable: true + disabledPropAbilities: + type: array + items: {} displayName: type: string nullable: true + dominantLanguage: + type: string friends: $ref: ./UserID.yaml full: @@ -63,8 +69,14 @@ properties: instancePersistenceEnabled: type: boolean nullable: true + languageRatio: + type: object + additionalProperties: true location: $ref: ./LocationID.yaml + minimumAvatarPerformance: + type: string + nullable: true n_users: type: integer example: 6 diff --git a/openapi/components/schemas/InventoryDrop.yaml b/openapi/components/schemas/InventoryDrop.yaml index 1bf7f831..19c2fb80 100644 --- a/openapi/components/schemas/InventoryDrop.yaml +++ b/openapi/components/schemas/InventoryDrop.yaml @@ -11,6 +11,8 @@ properties: type: string nullable: true format: date-time + dropStatus: + type: string endDropDate: type: string example: "2184-07-24T00:00:00.000Z" @@ -27,9 +29,6 @@ properties: type: string example: "2025-06-09T10:00:00.000Z" format: date-time - status: - type: string - example: active tags: type: array items: @@ -55,7 +54,6 @@ required: - name - notificationDetails - startDropDate - - status - tags - targetGroup - templateIds diff --git a/openapi/components/schemas/InventoryItem.yaml b/openapi/components/schemas/InventoryItem.yaml index 8f51ba59..9b18c308 100644 --- a/openapi/components/schemas/InventoryItem.yaml +++ b/openapi/components/schemas/InventoryItem.yaml @@ -1,6 +1,9 @@ title: InventoryItem type: object properties: + acquisition: + type: string + attribution: {} collections: type: array items: @@ -42,6 +45,9 @@ properties: $ref: ./InventoryItemType.yaml itemTypeLabel: type: string + last_equipped: + type: object + additionalProperties: true metadata: $ref: ./InventoryMetadata.yaml name: diff --git a/openapi/components/schemas/InventoryMetadata.yaml b/openapi/components/schemas/InventoryMetadata.yaml index 01b35117..eca7eab2 100644 --- a/openapi/components/schemas/InventoryMetadata.yaml +++ b/openapi/components/schemas/InventoryMetadata.yaml @@ -20,3 +20,6 @@ properties: type: string propId: $ref: ./PropID.yaml + + propKind: + type: integer diff --git a/openapi/components/schemas/InventoryTemplate.yaml b/openapi/components/schemas/InventoryTemplate.yaml index 6ff21522..8c0f00de 100644 --- a/openapi/components/schemas/InventoryTemplate.yaml +++ b/openapi/components/schemas/InventoryTemplate.yaml @@ -1,6 +1,7 @@ title: InventoryTemplate type: object properties: + attribution: {} authorId: $ref: ./UserID.yaml collections: @@ -15,6 +16,8 @@ properties: type: object description: type: string + dropStatus: + type: string equipSlots: type: array items: @@ -63,7 +66,6 @@ required: - itemType - itemTypeLabel - name - - status - tags - updated_at - validateUserAttributes diff --git a/openapi/components/schemas/Jam.yaml b/openapi/components/schemas/Jam.yaml index 3b1bb2ad..b0b2a2d0 100644 --- a/openapi/components/schemas/Jam.yaml +++ b/openapi/components/schemas/Jam.yaml @@ -2,6 +2,9 @@ title: Jam type: object description: "" properties: + created_at: + type: string + format: date-time description: type: string minLength: 1 @@ -48,6 +51,8 @@ properties: title: type: string minLength: 1 + type: + type: string updated_at: type: string format: date-time diff --git a/openapi/components/schemas/JamSubmission.yaml b/openapi/components/schemas/JamSubmission.yaml index da2c8746..cd0aabef 100644 --- a/openapi/components/schemas/JamSubmission.yaml +++ b/openapi/components/schemas/JamSubmission.yaml @@ -15,9 +15,8 @@ properties: $ref: ../schemas/JamSubmissionID.yaml jamId: $ref: ../schemas/JamID.yaml - ratingScore: + ratingsScore: type: integer - minimum: 0 submitterId: $ref: ../schemas/UserID.yaml required: diff --git a/openapi/components/schemas/LimitedGroup.yaml b/openapi/components/schemas/LimitedGroup.yaml index 254aaea2..e7015f78 100644 --- a/openapi/components/schemas/LimitedGroup.yaml +++ b/openapi/components/schemas/LimitedGroup.yaml @@ -35,6 +35,8 @@ properties: $ref: ./GroupMemberStatus.yaml name: type: string + nameplateId: {} + nameplateUrl: {} ownerId: $ref: ./UserID.yaml rules: diff --git a/openapi/components/schemas/LimitedUserFriend.yaml b/openapi/components/schemas/LimitedUserFriend.yaml index 7836fa87..d1644d77 100644 --- a/openapi/components/schemas/LimitedUserFriend.yaml +++ b/openapi/components/schemas/LimitedUserFriend.yaml @@ -2,6 +2,10 @@ title: LimitedUserFriend type: object description: User object received when querying your friends list properties: + bannerColor: + type: string + bannerType: + type: string bio: type: string bioLinks: @@ -19,10 +23,16 @@ properties: $ref: ./CurrentAvatarThumbnailImageUrl.yaml developerType: $ref: ./DeveloperType.yaml + discordId: + $ref: ./DiscordID.yaml displayName: type: string friendKey: type: string + iconFrame: + type: string + iconUrl: + type: string id: $ref: ./UserID.yaml imageUrl: @@ -45,8 +55,12 @@ properties: $ref: ./Platform.yaml location: type: string + nameplateEffect: + type: string platform: type: string + profileEffect: + type: string profilePicOverride: type: string profilePicOverrideThumbnail: diff --git a/openapi/components/schemas/LimitedUserGroups.yaml b/openapi/components/schemas/LimitedUserGroups.yaml index 4f3535e8..7774afb4 100644 --- a/openapi/components/schemas/LimitedUserGroups.yaml +++ b/openapi/components/schemas/LimitedUserGroups.yaml @@ -39,6 +39,8 @@ properties: type: boolean name: type: string + nameplateId: {} + nameplateUrl: {} ownerId: $ref: ./UserID.yaml privacy: diff --git a/openapi/components/schemas/LimitedWorld.yaml b/openapi/components/schemas/LimitedWorld.yaml index a0633ac7..ef4c4928 100644 --- a/openapi/components/schemas/LimitedWorld.yaml +++ b/openapi/components/schemas/LimitedWorld.yaml @@ -15,6 +15,9 @@ properties: format: date-time defaultContentSettings: $ref: ./InstanceContentSettings.yaml + disabledPropAbilities: + type: array + items: {} favorites: type: integer default: 0 diff --git a/openapi/components/schemas/LocalizedString.yaml b/openapi/components/schemas/LocalizedString.yaml new file mode 100644 index 00000000..7d4c36f3 --- /dev/null +++ b/openapi/components/schemas/LocalizedString.yaml @@ -0,0 +1,15 @@ +title: LocalizedString +type: object +description: A string the client resolves through its localization table, falling back to `fallback` when the key is unknown. +properties: + fallback: + type: string + description: The text to show when `key` cannot be resolved. + example: carnival + key: + type: string + description: The localization key. + example: SuggestedSearch/Carnival/Name/carnival +required: + - fallback + - key diff --git a/openapi/components/schemas/MutualFriend.yaml b/openapi/components/schemas/MutualFriend.yaml index 0f59242c..48f23da9 100644 --- a/openapi/components/schemas/MutualFriend.yaml +++ b/openapi/components/schemas/MutualFriend.yaml @@ -4,6 +4,13 @@ description: User object received when querying mutual friends properties: avatarThumbnail: $ref: ./CurrentAvatarThumbnailImageUrl.yaml + bannerColor: + type: string + description: Hex colour without a leading `#`. + example: 3cc92c + bannerType: + type: string + example: color currentAvatarImageUrl: $ref: ./CurrentAvatarImageUrl.yaml currentAvatarTags: @@ -14,10 +21,18 @@ properties: $ref: ./CurrentAvatarThumbnailImageUrl.yaml displayName: type: string + iconFrame: + type: string + iconUrl: + type: string id: $ref: ./UserID.yaml imageUrl: type: string + nameplateEffect: + type: string + profileEffect: + type: string profilePicOverride: type: string status: diff --git a/openapi/components/schemas/NotificationDetailEmpty.yaml b/openapi/components/schemas/NotificationDetailEmpty.yaml index fc874d4a..9a3bda67 100644 --- a/openapi/components/schemas/NotificationDetailEmpty.yaml +++ b/openapi/components/schemas/NotificationDetailEmpty.yaml @@ -1,2 +1,6 @@ title: NotificationDetailEmpty type: object +description: >- + The absence of details, serialized as `{}`. Constrained so it cannot also + match a populated branch of the `details` union. +additionalProperties: false diff --git a/openapi/components/schemas/NotificationV2.yaml b/openapi/components/schemas/NotificationV2.yaml index 8f673483..571dfc93 100644 --- a/openapi/components/schemas/NotificationV2.yaml +++ b/openapi/components/schemas/NotificationV2.yaml @@ -25,6 +25,7 @@ properties: $ref: ./NotificationV2DataGeneric.yaml details: $ref: ./NotificationV2DetailsBoop.yaml + displayData: {} expiresAt: type: string format: date-time @@ -42,9 +43,12 @@ properties: type: boolean link: type: string - example: "event:grp_00000000-0000-0000-0000-000000000000,cal_00000000-0000-0000-0000-000000000000" + nullable: true + example: "event:grp_00000000-0000-0000-0000-000000000000,cal_00000000-0000-0000\ + -0000-000000000000" linkText: type: string + nullable: true linkTextKey: type: string nullable: true @@ -69,6 +73,7 @@ properties: type: boolean senderUserId: $ref: ./UserID.yaml + nullable: true senderUsername: type: string nullable: true diff --git a/openapi/components/schemas/NotificationV2DataEmpty.yaml b/openapi/components/schemas/NotificationV2DataEmpty.yaml index 61db4d34..9a9ae3b2 100644 --- a/openapi/components/schemas/NotificationV2DataEmpty.yaml +++ b/openapi/components/schemas/NotificationV2DataEmpty.yaml @@ -1,2 +1,4 @@ title: NotificationV2DataEmpty type: object +description: The payload for a notification type that carries no data. +additionalProperties: false diff --git a/openapi/components/schemas/OAuthRedirectCode.yaml b/openapi/components/schemas/OAuthRedirectCode.yaml new file mode 100644 index 00000000..fddd2817 --- /dev/null +++ b/openapi/components/schemas/OAuthRedirectCode.yaml @@ -0,0 +1,10 @@ +title: OAuthRedirectCode +type: object +description: A short-lived code used to hand the current session to an OAuth redirect. +properties: + code: + type: string + example: redirect_00000000-0000-0000-0000-000000000000 + minLength: 1 +required: + - code diff --git a/openapi/components/schemas/PrivateProfile.yaml b/openapi/components/schemas/PrivateProfile.yaml index 565f7ddb..0447a6dc 100644 --- a/openapi/components/schemas/PrivateProfile.yaml +++ b/openapi/components/schemas/PrivateProfile.yaml @@ -3,12 +3,15 @@ type: object properties: activity: $ref: ./PrivateProfileActivity.yaml + friendRequestStatus: + $ref: ./FriendRequestStatus.yaml id: $ref: ./UserID.yaml isFriend: type: boolean note: type: string + nullable: true status: $ref: ./UserStatus.yaml statusDescription: diff --git a/openapi/components/schemas/ProductListing.yaml b/openapi/components/schemas/ProductListing.yaml index 213eecd2..d3d6654f 100644 --- a/openapi/components/schemas/ProductListing.yaml +++ b/openapi/components/schemas/ProductListing.yaml @@ -5,8 +5,15 @@ properties: type: boolean archived: type: boolean + attribution: + $ref: ./ProductListingAttribution.yaml buyerRefundable: type: boolean + collabUserDisplayName: + type: string + nullable: true + collabUserId: + $ref: ./UserID.yaml created: type: string format: date-time @@ -30,6 +37,10 @@ properties: nullable: true hasAvatar: type: boolean + hasCompanion: + type: boolean + hasInventory: + type: boolean hasUdon: type: boolean hydratedProducts: @@ -60,11 +71,15 @@ properties: $ref: ./ProductID.yaml productType: $ref: ./ProductType.yaml + productTypes: + type: array + items: + type: string products: type: array + description: Product ids. The products themselves arrive in `hydratedProducts`. items: - type: object - description: Either a ProductID or a Product, depending on hydration + $ref: ./ProductID.yaml purchaseCount: type: integer purchaseCountQuantity: @@ -86,7 +101,7 @@ properties: storeIds: type: array items: - type: string + $ref: ./StoreID.yaml subtitle: type: string tags: diff --git a/openapi/components/schemas/ProductListingAttribution.yaml b/openapi/components/schemas/ProductListingAttribution.yaml new file mode 100644 index 00000000..901f1049 --- /dev/null +++ b/openapi/components/schemas/ProductListingAttribution.yaml @@ -0,0 +1,8 @@ +title: ProductListingAttribution +type: object +description: Attribution shown alongside a listing. +properties: + creator: + $ref: ./ProductListingAttributionCreator.yaml + publisher: + $ref: ./ProductListingAttributionCreator.yaml diff --git a/openapi/components/schemas/ProductListingAttributionCreator.yaml b/openapi/components/schemas/ProductListingAttributionCreator.yaml new file mode 100644 index 00000000..f565eff5 --- /dev/null +++ b/openapi/components/schemas/ProductListingAttributionCreator.yaml @@ -0,0 +1,8 @@ +title: ProductListingAttributionCreator +type: object +description: The creator credited on a listing. +properties: + customName: + type: string + userId: + $ref: ./UserID.yaml diff --git a/openapi/components/schemas/PublicProfile.yaml b/openapi/components/schemas/PublicProfile.yaml index 5bcd8a6c..c88cec16 100644 --- a/openapi/components/schemas/PublicProfile.yaml +++ b/openapi/components/schemas/PublicProfile.yaml @@ -44,9 +44,8 @@ properties: pronouns: type: string representedGroup: + $ref: ./ProfileRepresentedGroup.yaml nullable: true - allOf: - - $ref: ./ProfileRepresentedGroup.yaml themeId: type: string trustTags: diff --git a/openapi/components/schemas/ReportCategory.yaml b/openapi/components/schemas/ReportCategory.yaml index c3c7a94f..72063109 100644 --- a/openapi/components/schemas/ReportCategory.yaml +++ b/openapi/components/schemas/ReportCategory.yaml @@ -1,19 +1,23 @@ -title: ReportCategory -type: object -description: A category used for reporting content -properties: - description: - type: string - description: The description of the report category - text: - type: string - description: The label of the report category - title: - type: string - description: The title of the report category - tooltip: - type: string - description: The tooltip that describes the category -required: - - text - - tooltip +title: ReportCategory +type: object +description: A category used for reporting content +properties: + description: + type: string + description: The description of the report category + ipsArticle: + type: string + order: + type: integer + text: + type: string + description: The label of the report category + title: + type: string + description: The title of the report category + tooltip: + type: string + description: The tooltip that describes the category +required: + - text + - tooltip diff --git a/openapi/components/schemas/ReportReason.yaml b/openapi/components/schemas/ReportReason.yaml index 3da1d81b..a2a29fe3 100644 --- a/openapi/components/schemas/ReportReason.yaml +++ b/openapi/components/schemas/ReportReason.yaml @@ -1,13 +1,17 @@ -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 +title: ReportReason +type: object +description: A reason used for reporting users +properties: + policy: + type: array + items: + type: string + 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 diff --git a/openapi/components/schemas/RepresentedGroup.yaml b/openapi/components/schemas/RepresentedGroup.yaml index 8aebf7a6..350516df 100644 --- a/openapi/components/schemas/RepresentedGroup.yaml +++ b/openapi/components/schemas/RepresentedGroup.yaml @@ -27,6 +27,8 @@ properties: $ref: ./GroupUserVisibility.yaml name: type: string + nameplateId: {} + nameplateUrl: {} ownerId: $ref: ./UserID.yaml privacy: diff --git a/openapi/components/schemas/RouteNotImplemented.yaml b/openapi/components/schemas/RouteNotImplemented.yaml new file mode 100644 index 00000000..466c7eee --- /dev/null +++ b/openapi/components/schemas/RouteNotImplemented.yaml @@ -0,0 +1,16 @@ +title: RouteNotImplemented +type: object +description: >- + The body VRChat returns for a route it does not serve. Note the shape differs + from every other error in this description: `error` is a string here, not an + `Error` object with `message` and `status_code` inside it. +properties: + error: + type: string + example: The endpoint you're looking for is not implemented by our system. + status_code: + type: integer + example: 404 +required: + - error + - status_code diff --git a/openapi/components/schemas/SsoProvider.yaml b/openapi/components/schemas/SsoProvider.yaml new file mode 100644 index 00000000..7fbd589f --- /dev/null +++ b/openapi/components/schemas/SsoProvider.yaml @@ -0,0 +1,9 @@ +title: SsoProvider +type: string +description: >- + A third-party service VRChat mints an SSO token for. Anything else is refused + with "That is not a supported SSO provider." +enum: + - canny + - furality +example: canny diff --git a/openapi/components/schemas/SsoToken.yaml b/openapi/components/schemas/SsoToken.yaml new file mode 100644 index 00000000..5363a7ae --- /dev/null +++ b/openapi/components/schemas/SsoToken.yaml @@ -0,0 +1,9 @@ +title: SsoToken +type: object +description: A token for a third-party service. +properties: + token: + type: string + minLength: 1 +required: + - token diff --git a/openapi/components/schemas/StoreShelf.yaml b/openapi/components/schemas/StoreShelf.yaml index 929de186..05ad68b4 100644 --- a/openapi/components/schemas/StoreShelf.yaml +++ b/openapi/components/schemas/StoreShelf.yaml @@ -15,10 +15,16 @@ properties: type: array items: $ref: ./ProductListing.yaml + shelfBackgroundImageId: + $ref: ./FileID.yaml shelfDescription: type: string + shelfIconImageId: + $ref: ./FileID.yaml shelfLayout: type: string + shelfTabBackgroundImageId: + $ref: ./FileID.yaml shelfTitle: type: string updatedAt: diff --git a/openapi/components/schemas/Subscription.yaml b/openapi/components/schemas/Subscription.yaml index ecdc8cac..e441380b 100644 --- a/openapi/components/schemas/Subscription.yaml +++ b/openapi/components/schemas/Subscription.yaml @@ -7,8 +7,16 @@ properties: appleProductId: type: string minLength: 1 + bulkSize: + type: integer + description: How many subscriptions a gifted bundle grants. + example: 5 description: type: string + discountPercentage: + type: integer + description: Discount applied to a gifted bundle. + example: 10 googlePlanId: type: string googleProductId: @@ -22,6 +30,7 @@ properties: minLength: 1 period: $ref: ./SubscriptionPeriod.yaml + periodAmount: {} picoSku: type: string minLength: 1 diff --git a/openapi/components/schemas/Transaction.yaml b/openapi/components/schemas/Transaction.yaml index cc14489a..4205596b 100644 --- a/openapi/components/schemas/Transaction.yaml +++ b/openapi/components/schemas/Transaction.yaml @@ -3,7 +3,14 @@ type: object description: "" properties: agreement: - $ref: ./TransactionAgreement.yaml + x-if: + when: jsonschema + then: + oneOf: + - type: string + - $ref: ./TransactionAgreement.yaml + else: + $ref: ./TransactionAgreement.yaml created_at: type: string format: date-time diff --git a/openapi/components/schemas/User.yaml b/openapi/components/schemas/User.yaml index 677fde27..a9268586 100644 --- a/openapi/components/schemas/User.yaml +++ b/openapi/components/schemas/User.yaml @@ -1,6 +1,17 @@ title: User type: object properties: + acceptedPrivacyVersion: + type: integer + acceptedTOSVersion: + type: integer + accountDeletionDate: + type: string + nullable: true + accountDeletionLog: + type: array + nullable: true + items: {} ageVerificationStatus: $ref: ./AgeVerificationStatus.yaml ageVerified: @@ -8,11 +19,16 @@ properties: allowAvatarCopying: type: boolean default: true + appleDetails: + type: object + additionalProperties: true badges: type: array description: " " items: $ref: ./Badge.yaml + bannerColor: + type: string bannerType: type: string bannerUrl: @@ -44,7 +60,7 @@ properties: friendKey: type: string friendRequestStatus: - type: string + $ref: ./FriendRequestStatus.yaml iconFrame: type: string iconUrl: diff --git a/openapi/components/schemas/World.yaml b/openapi/components/schemas/World.yaml index 59f70387..69baa478 100644 --- a/openapi/components/schemas/World.yaml +++ b/openapi/components/schemas/World.yaml @@ -18,6 +18,9 @@ properties: description: type: string minLength: 0 + disabledPropAbilities: + type: array + items: {} favorites: type: integer default: 0 @@ -41,9 +44,13 @@ properties: description: Will always be an empty list when unauthenticated. items: type: array + description: |- + A fixed triple of instance id, occupant count, and the share of + occupants per language code. OpenAPI 3.0 cannot type the positions + individually, so the members are only bounded by length. items: {} - maxItems: 2 - minItems: 2 + maxItems: 3 + minItems: 3 labsPublicationDate: type: string example: none @@ -92,6 +99,9 @@ properties: example: 4 releaseStatus: $ref: ./ReleaseStatus.yaml + slimInstances: + type: array + items: {} storeId: $ref: ./StoreID.yaml tags: diff --git a/openapi/components/tags.yaml b/openapi/components/tags.yaml index 49f1eb7d..3407cc4d 100644 --- a/openapi/components/tags.yaml +++ b/openapi/components/tags.yaml @@ -55,3 +55,8 @@ - name: worlds description: $ref: ./paths/worlds.yaml#/info/description +- name: deprecated + description: >- + Routes VRChat no longer serves: every observed call answers the generic + "not implemented" 404. They stay described, and the conformance suite keeps + calling them, so a route that comes back shows up.