From a01dcfe52b3a59348a4b412a87b909794d94e4b7 Mon Sep 17 00:00:00 2001 From: Vinyarion <38413862+VinyarionHyarmendacil@users.noreply.github.com> Date: Tue, 9 Dec 2025 23:42:13 -0600 Subject: [PATCH 01/19] Files, Groups, Props, Users, NotificationV2 Files: - Add `GET /agreement` - Add `POST /agreement` - Add `PUT /assetReview/{assetReviewId}/notes` - Add `PUT /files/order` Groups: - Update `DELETE /groups/{groupId}` - Add missing optional query parameter - Update `POST /groups/{groupId}/join` - Add missing optional query parameter - Add missing optional request body - Add `GET /groups/{groupId}/auditLogTypes` - Add `POST /groups/{groupId}/block` - Add `PUT /groups/{groupId}/invites` - Add `GET /groups/{groupId}/members/search` - Add `GET /groups/{groupId}/transfer` - Add `POST /groups/{groupId}/transfer` - Add `DELETE /groups/{groupId}/transfer` Props: - Add `GET /props` - Add `POST /props` - Add `PUT /props/{propId}` - Add `DELETE /props/{propId}` - Add `GET /props/{propId}/publish` - Add `PUT /props/{propId}/publish` - Add `DELETE /props/{propId}/publish` Users: - Add `GET /users/{userId}/groups/invited` - Add `GET /users/{userId}/groups/permissions` - Add `GET /users/{userId}/groups/userblocked` - Add `DELETE /users/{userId}/persist` NotificationV2: - Update NotificationV2Type to add `group.transfer` - Update NotificationV2 to add data types - Add NotificationV2DataGroupInformative - Add NotificationV2DataGroupTransfer --- openapi/components/parameters.yaml | 14 ++ openapi/components/paths.yaml | 26 +++ openapi/components/paths/files.yaml | 91 +++++++++ openapi/components/paths/groups.yaml | 181 +++++++++++++++++- openapi/components/paths/props.yaml | 137 +++++++++++++ openapi/components/paths/users.yaml | 69 +++++++ .../components/requests/AgreementRequest.yaml | 22 +++ .../requests/CreatePropRequest.yaml | 43 +++++ .../requests/DeclineGroupInviteRequest.yaml | 6 + .../requests/GalleryFileOrderRequest.yaml | 12 ++ .../components/requests/JoinGroupRequest.yaml | 5 + .../SubmitAssetReviewNotesRequest.yaml | 22 +++ .../requests/TransferGroupRequest.yaml | 5 + .../requests/UpdatePropRequest.yaml | 30 +++ .../responses/files/AgreementResponse.yaml | 5 + .../files/AgreementStatusResponse.yaml | 5 + .../files/GalleryFileOrderResponse.yaml | 5 + .../responses/groups/BlockGroupSuccess.yaml | 11 ++ .../DeclineGroupInviteBadRequestError.yaml | 11 ++ .../groups/DeclineGroupInviteSuccess.yaml | 11 ++ .../groups/GroupAlreadyBlockedError.yaml | 11 ++ .../GroupAuditLogEntryTypeListResponse.yaml | 7 + .../groups/GroupTransferCanceledSuccess.yaml | 11 ++ .../groups/GroupTransferInvalidError.yaml | 11 ++ .../groups/GroupTransferSuccess.yaml | 16 ++ .../groups/GroupTransferableResponse.yaml | 5 + .../groups/NoGroupTransferError.yaml | 11 ++ .../responses/props/NoSuchPropError.yaml | 11 ++ .../responses/props/PropListResponse.yaml | 7 + .../props/PropPublishStatusResponse.yaml | 5 + .../UserAllGroupPermissionsResponse.yaml | 5 + openapi/components/schemas/Agreement.yaml | 31 +++ openapi/components/schemas/AgreementCode.yaml | 7 + .../components/schemas/AgreementStatus.yaml | 25 +++ openapi/components/schemas/Avatar.yaml | 3 + .../schemas/GroupAuditLogEntry.yaml | 5 +- .../schemas/GroupAuditLogEntryType.yaml | 5 + openapi/components/schemas/GroupGallery.yaml | 2 +- .../schemas/GroupGalleryFileOrder.yaml | 9 + .../components/schemas/GroupTransferable.yaml | 24 +++ .../components/schemas/NotificationV2.yaml | 2 + .../NotificationV2DataGroupInformative.yaml | 12 ++ .../NotificationV2DataGroupTransfer.yaml | 10 + .../schemas/NotificationV2Type.yaml | 1 + .../components/schemas/PropPublishStatus.yaml | 6 + .../schemas/UserAllGroupPermissions.yaml | 7 + 46 files changed, 954 insertions(+), 6 deletions(-) create mode 100644 openapi/components/requests/AgreementRequest.yaml create mode 100644 openapi/components/requests/CreatePropRequest.yaml create mode 100644 openapi/components/requests/DeclineGroupInviteRequest.yaml create mode 100644 openapi/components/requests/GalleryFileOrderRequest.yaml create mode 100644 openapi/components/requests/JoinGroupRequest.yaml create mode 100644 openapi/components/requests/SubmitAssetReviewNotesRequest.yaml create mode 100644 openapi/components/requests/TransferGroupRequest.yaml create mode 100644 openapi/components/requests/UpdatePropRequest.yaml create mode 100644 openapi/components/responses/files/AgreementResponse.yaml create mode 100644 openapi/components/responses/files/AgreementStatusResponse.yaml create mode 100644 openapi/components/responses/files/GalleryFileOrderResponse.yaml create mode 100644 openapi/components/responses/groups/BlockGroupSuccess.yaml create mode 100644 openapi/components/responses/groups/DeclineGroupInviteBadRequestError.yaml create mode 100644 openapi/components/responses/groups/DeclineGroupInviteSuccess.yaml create mode 100644 openapi/components/responses/groups/GroupAlreadyBlockedError.yaml create mode 100644 openapi/components/responses/groups/GroupAuditLogEntryTypeListResponse.yaml create mode 100644 openapi/components/responses/groups/GroupTransferCanceledSuccess.yaml create mode 100644 openapi/components/responses/groups/GroupTransferInvalidError.yaml create mode 100644 openapi/components/responses/groups/GroupTransferSuccess.yaml create mode 100644 openapi/components/responses/groups/GroupTransferableResponse.yaml create mode 100644 openapi/components/responses/groups/NoGroupTransferError.yaml create mode 100644 openapi/components/responses/props/NoSuchPropError.yaml create mode 100644 openapi/components/responses/props/PropListResponse.yaml create mode 100644 openapi/components/responses/props/PropPublishStatusResponse.yaml create mode 100644 openapi/components/responses/users/UserAllGroupPermissionsResponse.yaml create mode 100644 openapi/components/schemas/Agreement.yaml create mode 100644 openapi/components/schemas/AgreementCode.yaml create mode 100644 openapi/components/schemas/AgreementStatus.yaml create mode 100644 openapi/components/schemas/GroupAuditLogEntryType.yaml create mode 100644 openapi/components/schemas/GroupGalleryFileOrder.yaml create mode 100644 openapi/components/schemas/GroupTransferable.yaml create mode 100644 openapi/components/schemas/NotificationV2DataGroupInformative.yaml create mode 100644 openapi/components/schemas/NotificationV2DataGroupTransfer.yaml create mode 100644 openapi/components/schemas/PropPublishStatus.yaml create mode 100644 openapi/components/schemas/UserAllGroupPermissions.yaml diff --git a/openapi/components/parameters.yaml b/openapi/components/parameters.yaml index 87507955..159a9250 100644 --- a/openapi/components/parameters.yaml +++ b/openapi/components/parameters.yaml @@ -21,6 +21,13 @@ adminAssetBundleId: schema: type: string example: aab_e159e72c-ce54-4fbe-8c37-96af02f6d18d +assetReviewId: + name: assetReviewId + description: Must be an valid asset review ID. + required: true + in: path + schema: + type: string avatarId: name: avatarId description: Must be a valid avatar ID. @@ -28,6 +35,13 @@ avatarId: in: path schema: $ref: ./schemas/AvatarID.yaml +authorId: + name: authorId + description: Must be a valid user ID. + required: true + in: query + schema: + $ref: ./schemas/UserID.yaml avatarModerationType: name: avatarModerationType description: The avatar moderation type associated with the avatar. diff --git a/openapi/components/paths.yaml b/openapi/components/paths.yaml index 40e2da8f..7ef63419 100644 --- a/openapi/components/paths.yaml +++ b/openapi/components/paths.yaml @@ -8,12 +8,16 @@ $ref: "./paths/economy.yaml#/paths/~1Steam~1transactions~1{transactionId}" "/adminassetbundles/{adminAssetBundleId}": $ref: "./paths/files.yaml#/paths/~1adminassetbundles~1{adminAssetBundleId}" +/agreement: + $ref: "./paths/files.yaml#/paths/~1agreement" "/analysis/{fileId}/{versionId}": $ref: "./paths/files.yaml#/paths/~1analysis~1{fileId}~1{versionId}" "/analysis/{fileId}/{versionId}/security": $ref: "./paths/files.yaml#/paths/~1analysis~1{fileId}~1{versionId}~1security" "/analysis/{fileId}/{versionId}/standard": $ref: "./paths/files.yaml#/paths/~1analysis~1{fileId}~1{versionId}~1standard" +"/assetReview/{assetReviewId}/notes": + $ref: "./paths/files.yaml#/paths/~1assetReview~1{assetReviewId}~1notes" /auth: $ref: "./paths/authentication.yaml#/paths/~1auth" /auth/confirmEmail: @@ -152,6 +156,8 @@ $ref: "./paths/files.yaml#/paths/~1file~1{fileId}~1{versionId}~1{fileType}~1status" /files: $ref: "./paths/files.yaml#/paths/~1files" +/files/order: + $ref: "./paths/files.yaml#/paths/~1files~1order" /gallery: $ref: "./paths/files.yaml#/paths/~1gallery" /groups: @@ -162,12 +168,16 @@ $ref: "./paths/groups.yaml#/paths/~1groups~1{groupId}" "/groups/{groupId}/announcement": $ref: "./paths/groups.yaml#/paths/~1groups~1{groupId}~1announcement" +"/groups/{groupId}/auditLogTypes": + $ref: "./paths/groups.yaml#/paths/~1groups~1{groupId}~1auditLogTypes" "/groups/{groupId}/auditLogs": $ref: "./paths/groups.yaml#/paths/~1groups~1{groupId}~1auditLogs" "/groups/{groupId}/bans": $ref: "./paths/groups.yaml#/paths/~1groups~1{groupId}~1bans" "/groups/{groupId}/bans/{userId}": $ref: "./paths/groups.yaml#/paths/~1groups~1{groupId}~1bans~1{userId}" +"/groups/{groupId}/block": + $ref: "./paths/groups.yaml#/paths/~1groups~1{groupId}~1block" "/groups/{groupId}/galleries": $ref: "./paths/groups.yaml#/paths/~1groups~1{groupId}~1galleries" "/groups/{groupId}/galleries/{groupGalleryId}": @@ -188,6 +198,8 @@ $ref: "./paths/groups.yaml#/paths/~1groups~1{groupId}~1leave" "/groups/{groupId}/members": $ref: "./paths/groups.yaml#/paths/~1groups~1{groupId}~1members" +"/groups/{groupId}/members/search": + $ref: "./paths/groups.yaml#/paths/~1groups~1{groupId}~1members~1search" "/groups/{groupId}/members/{userId}": $ref: "./paths/groups.yaml#/paths/~1groups~1{groupId}~1members~1{userId}" "/groups/{groupId}/members/{userId}/roles/{groupRoleId}": @@ -208,6 +220,8 @@ $ref: "./paths/groups.yaml#/paths/~1groups~1{groupId}~1roles" "/groups/{groupId}/roles/{groupRoleId}": $ref: "./paths/groups.yaml#/paths/~1groups~1{groupId}~1roles~1{groupRoleId}" +"/groups/{groupId}/transfer": + $ref: "./paths/groups.yaml#/paths/~1groups~1{groupId}~1roles~1{groupRoleId}" /health: $ref: "./paths/miscellaneous.yaml#/paths/~1health" /icon: @@ -298,8 +312,12 @@ $ref: "./paths/prints.yaml#/paths/~1prints~1{printId}" "/products/{productId}": $ref: "./paths/economy.yaml#/paths/~1products~1{productId}" +/props: + $ref: "./paths/props.yaml#/paths/~1props" "/props/{propId}": $ref: "./paths/props.yaml#/paths/~1props~1{propId}" +"/props/{propId}/publish": + $ref: "./paths/props.yaml#/paths/~1props~1{propId}/publish" "/requestInvite/{userId}": $ref: "./paths/invite.yaml#/paths/~1requestInvite~1{userId}" "/requestInvite/{userId}/photo": @@ -358,10 +376,16 @@ $ref: "./paths/users.yaml#/paths/~1users~1{userId}~1feedback" "/users/{userId}/groups": $ref: "./paths/users.yaml#/paths/~1users~1{userId}~1groups" +"/users/{userId}/groups/invited": + $ref: "./paths/users.yaml#/paths/~1users~1{userId}~1groups~1invited" +"/users/{userId}/groups/permissions": + $ref: "./paths/users.yaml#/paths/~1users~1{userId}~1groups~1permissions" "/users/{userId}/groups/represented": $ref: "./paths/users.yaml#/paths/~1users~1{userId}~1groups~1represented" "/users/{userId}/groups/requested": $ref: "./paths/users.yaml#/paths/~1users~1{userId}~1groups~1requested" +"/users/{userId}/groups/userblocked": + $ref: "./paths/users.yaml#/paths/~1users~1{userId}~1groups~1userblocked" "/users/{userId}/instances/groups": $ref: "./paths/users.yaml#/paths/~1users~1{userId}~1instances~1groups" "/users/{userId}/instances/groups/{groupId}": @@ -372,6 +396,8 @@ $ref: "./paths/users.yaml#/paths/~1users~1{userId}~1mutuals~1friends" "/users/{userId}/mutuals/groups": $ref: "./paths/users.yaml#/paths/~1users~1{userId}~1mutuals~1groups" +"/users/{userId}/persist": + $ref: "./paths/users.yaml#/paths/~1users~1{userId}~1persist" "/users/{userId}/removeTags": $ref: "./paths/users.yaml#/paths/~1users~1{userId}~1removeTags" "/users/{userId}/subscription/eligible": diff --git a/openapi/components/paths/files.yaml b/openapi/components/paths/files.yaml index 21d6bac6..c25844d4 100644 --- a/openapi/components/paths/files.yaml +++ b/openapi/components/paths/files.yaml @@ -18,6 +18,59 @@ paths: responses: "200": $ref: ../responses/files/AdminAssetBundleResponse.yaml + /agreement: + get: + operationId: getContentAgreementStatus + summary: Get Content Agreement Status + description: Returns the agreement status of the currently authenticated user for the given agreementCode, contentId, and version. + tags: + - files + parameters: + - name: agreementCode + description: The type of agreement (currently content.copyright.owned) + required: true + in: query + schema: + $ref: ../schemas/AgreementCode.yaml + - name: contentId + description: The id of the content being uploaded, such as a WorldID, AvatarID, or PropID + required: true + in: query + schema: + type: string + example: avtr_c38a1615-5bf5-42b4-84eb-a8b6c37cbd11 + - name: version + description: The version of the agreement (currently 1) + required: true + in: query + schema: + type: integer + example: 1 + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/files/AgreementStatusResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + post: + operationId: submitContentAgreement + summary: Submit Content Agreement + description: Returns the agreement of the currently authenticated user for the given agreementCode, contentId, and version. + tags: + - files + requestBody: + content: + application/json: + schema: + $ref: ../requests/AgreementRequest.yaml + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/files/AgreementResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml "/analysis/{fileId}/{versionId}": parameters: - $ref: ../parameters.yaml#/fileId @@ -75,6 +128,25 @@ paths: $ref: ../responses/files/AnalysisNotYetAvailableError.yaml "404": $ref: ../responses/files/FileNotFoundError.yaml + "/assetReview/{assetReviewId}/notes": + put: + operationId: submitAssetReviewNotes + summary: Submit Asset Review Notes + description: Submit notes regarding an asset review. + tags: + - files + requestBody: + content: + application/json: + schema: + $ref: ../requests/SubmitAssetReviewNotesRequest.yaml + security: + - authCookie: [] + responses: + "200": + description: The asset review notes are submitted. + "401": + $ref: ../responses/MissingCredentialsError.yaml /file: post: operationId: createFile @@ -324,6 +396,25 @@ paths: responses: "200": $ref: ../responses/files/FileListResponse.yaml + /files/order: + put: + operationId: setGalleryFileOrder + summary: Set Gallery File Order + description: Set the order of the files in a gallery + tags: + - files + requestBody: + content: + application/json: + schema: + $ref: ../requests/GalleryFileOrderRequest.yaml + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/files/GalleryFileOrderResponse.yaml + "404": + $ref: ../responses/files/FileNotFoundError.yaml /gallery: post: operationId: uploadGalleryImage diff --git a/openapi/components/paths/groups.yaml b/openapi/components/paths/groups.yaml index 7a842c60..cd751a10 100644 --- a/openapi/components/paths/groups.yaml +++ b/openapi/components/paths/groups.yaml @@ -109,6 +109,12 @@ paths: description: Deletes a Group. tags: - groups + parameters: + - name: hardDelete + required: false + in: query + schema: + type: boolean security: - authCookie: [] responses: @@ -175,6 +181,24 @@ paths: $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 @@ -266,6 +290,28 @@ paths: $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 @@ -486,6 +532,29 @@ paths: $ref: ../responses/groups/GroupInviteForbiddenError.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 "/groups/{groupId}/invites/{userId}": parameters: - $ref: ../parameters.yaml#/groupId @@ -514,6 +583,19 @@ paths: 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: @@ -570,6 +652,36 @@ paths: $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/GroupMemberListResponse.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 @@ -614,7 +726,7 @@ paths: 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. + 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: @@ -945,6 +1057,73 @@ paths: $ref: ../responses/MissingCredentialsError.yaml "404": $ref: ../responses/groups/GroupNotMemberError.yaml + "/groups/{groupId}/transfer": + parameters: + - $ref: ../parameters.yaml#/groupId + get: + operationId: getGroupTransferable + summary: Get Group Transferable + 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 targetted 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: diff --git a/openapi/components/paths/props.yaml b/openapi/components/paths/props.yaml index b480bc35..1da8071b 100644 --- a/openapi/components/paths/props.yaml +++ b/openapi/components/paths/props.yaml @@ -4,6 +4,47 @@ info: description: Props are interactable items users can spawn into instances. version: "1.0" paths: + /props: + get: + operationId: listProps + summary: List Props + description: Returns a list Prop objects. + tags: + - props + parameters: + - $ref: ../parameters.yaml#/number + - $ref: ../parameters.yaml#/offset + - $ref: ../parameters.yaml#/authorId + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/props/PropListResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/NoPermission.yaml + post: + operationId: createProp + summary: Create Prop + description: Create a Prop and return the new Prop object. + tags: + - props + requestBody: + required: true + content: + application/json: + schema: + $ref: ../requests/CreatePropRequest.yaml + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/props/PropResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/NoPermission.yaml "/props/{propId}": parameters: - $ref: ../parameters.yaml#/propId @@ -20,6 +61,102 @@ paths: $ref: ../responses/props/PropResponse.yaml "401": $ref: ../responses/MissingCredentialsError.yaml + "404": + $ref: ../responses/props/NoSuchPropError.yaml + 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. + tags: + - props + requestBody: + required: true + content: + application/json: + schema: + $ref: ../requests/UpdatePropRequest.yaml + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/props/PropResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/NoPermission.yaml + "404": + $ref: ../responses/props/NoSuchPropError.yaml + delete: + operationId: deleteProp + summary: Delete Prop + description: Delete a Prop. + tags: + - props + security: + - authCookie: [] + responses: + "200": + description: The Prop is successfully deleted. + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/NoPermission.yaml + "404": + $ref: ../responses/props/NoSuchPropError.yaml + "/props/{propId}/publish": + parameters: + - $ref: ../parameters.yaml#/propId + get: + operationId: getPropPublishStatus + summary: Get Prop Publish Status + description: Returns a PropPublishStatus object. + tags: + - props + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/props/PropPublishStatusResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/NoPermission.yaml + "404": + $ref: ../responses/props/NoSuchPropError.yaml + put: + operationId: publishProp + summary: Publish Prop + description: Publish a Prop and return the updated PropPublishStatus object. + tags: + - props + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/props/PropPublishStatusResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/NoPermission.yaml + "404": + $ref: ../responses/props/NoSuchPropError.yaml + delete: + operationId: unpublishProp + summary: Unpublish Prop + description: Unpublish a Prop and return the updated PropPublishStatus object. + tags: + - props + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/props/PropPublishStatusResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "403": + $ref: ../responses/NoPermission.yaml + "404": + $ref: ../responses/props/NoSuchPropError.yaml components: securitySchemes: $ref: ../securitySchemes.yaml diff --git a/openapi/components/paths/users.yaml b/openapi/components/paths/users.yaml index f42ecd4d..c8d35f77 100644 --- a/openapi/components/paths/users.yaml +++ b/openapi/components/paths/users.yaml @@ -247,6 +247,42 @@ paths: $ref: ../responses/users/LimitedUserGroupListResponse.yaml "401": $ref: ../responses/MissingCredentialsError.yaml + "/users/{userId}/groups/invited": + parameters: + - $ref: ../parameters.yaml#/userId + get: + operationId: getUserGroupInvites + summary: Get User Group Invited + description: Returns a list of Groups the user has been invited to. + tags: + - users + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupListResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml + "/users/{userId}/groups/permissions": + parameters: + - $ref: ../parameters.yaml#/userId + get: + operationId: getUserAllGroupPermissions + summary: Get user's permissions for all joined groups. + description: Returns a mapping of GroupIDs to arrays of GroupPermissions. + tags: + - users + security: + - authCookie: [] + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: ../schemas/UserAllGroupPermissionsResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml "/users/{userId}/groups/represented": parameters: - $ref: ../parameters.yaml#/userId @@ -283,6 +319,22 @@ paths: $ref: ../responses/groups/GroupListResponse.yaml "401": $ref: ../responses/MissingCredentialsError.yaml + "/users/{userId}/groups/userblocked": + parameters: + - $ref: ../parameters.yaml#/userId + get: + operationId: getUserGroupBlocks + summary: Get User Group Blocks + description: Returns a list of Groups the user has blocked. + tags: + - users + security: + - authCookie: [] + responses: + "200": + $ref: ../responses/groups/GroupListResponse.yaml + "401": + $ref: ../responses/MissingCredentialsError.yaml "/users/{userId}/instances/groups": parameters: - $ref: ../parameters.yaml#/userId @@ -372,6 +424,23 @@ paths: $ref: ../responses/users/LimitedUserGroupListResponse.yaml "401": $ref: ../responses/MissingCredentialsError.yaml + "/users/{userId}/persist": + parameters: + - $ref: ../parameters.yaml#/userId + delete: + operationId: deleteAllUserPersistenceData + summary: Delete All User Persistence Data + description: Deletes all of the user's persistence data for every world. + tags: + - users + - worlds + security: + - authCookie: [] + responses: + "200": + description: The user's persistence data for all worlds is deleted. + "401": + $ref: ../responses/MissingCredentialsError.yaml "/users/{userId}/removeTags": parameters: - $ref: ../parameters.yaml#/userId diff --git a/openapi/components/requests/AgreementRequest.yaml b/openapi/components/requests/AgreementRequest.yaml new file mode 100644 index 00000000..609d991c --- /dev/null +++ b/openapi/components/requests/AgreementRequest.yaml @@ -0,0 +1,22 @@ +title: AgreementRequest +type: object +properties: + agreementCode: + $ref: ../schemas/AgreementCode.yaml + agreementFulltext: + type: string + description: The full text of the agreement (currently `By clicking OK, I certify that I have the necessary rights to upload this content and that it will not infringe on any third-party legal or intellectual property rights.`). + example: By clicking OK, I certify that I have the necessary rights to upload this content and that it will not infringe on any third-party legal or intellectual property rights. + contentId: + type: string + description: The id of the content being uploaded, such as a WorldID, AvatarID, or PropID. + example: avtr_c38a1615-5bf5-42b4-84eb-a8b6c37cbd11 + version: + type: integer + description: The version of the agreement (currently `1`). + example: 1 +required: + - agreementCode + - agreementFulltext + - contentId + - version diff --git a/openapi/components/requests/CreatePropRequest.yaml b/openapi/components/requests/CreatePropRequest.yaml new file mode 100644 index 00000000..a932f61e --- /dev/null +++ b/openapi/components/requests/CreatePropRequest.yaml @@ -0,0 +1,43 @@ +title: CreatePropRequest +type: object +properties: + assetUrl: + type: string + assetVersion: + type: integer + description: + type: string + id: + $ref: ../schemas/PropID.yaml + imageUrl: + type: string + name: + type: string + platform: + $ref: ../schemas/Platform.yaml + propSignature: + type: string + spawnType: + type: integer + example: 0 + tags: + type: array + items: + $ref: ../schemas/Tag.yaml + unityVersion: + type: string + worldPlacementMask: + type: integer + example: 1 +required: + - assetUrl + - assetVersion + - description + - id + - imageUrl + - name + - platform + - spawnType + - tags + - unityVersion + - worldPlacementMask diff --git a/openapi/components/requests/DeclineGroupInviteRequest.yaml b/openapi/components/requests/DeclineGroupInviteRequest.yaml new file mode 100644 index 00000000..90141e0c --- /dev/null +++ b/openapi/components/requests/DeclineGroupInviteRequest.yaml @@ -0,0 +1,6 @@ +title: DeclineGroupInviteRequest +type: object +properties: + block: + type: boolean + default: false diff --git a/openapi/components/requests/GalleryFileOrderRequest.yaml b/openapi/components/requests/GalleryFileOrderRequest.yaml new file mode 100644 index 00000000..ba85af14 --- /dev/null +++ b/openapi/components/requests/GalleryFileOrderRequest.yaml @@ -0,0 +1,12 @@ +title: GalleryFileOrderRequest +type: object +properties: + galleryId: + $ref: ../schemas/GroupGalleryID.yaml + ids: + type: array + items: + $ref: ../schemas/FileID.yaml +required: + - galleryId + - ids diff --git a/openapi/components/requests/JoinGroupRequest.yaml b/openapi/components/requests/JoinGroupRequest.yaml new file mode 100644 index 00000000..b60395b9 --- /dev/null +++ b/openapi/components/requests/JoinGroupRequest.yaml @@ -0,0 +1,5 @@ +title: JoinGroupRequest +type: object +properties: + inviteId: + type: string diff --git a/openapi/components/requests/SubmitAssetReviewNotesRequest.yaml b/openapi/components/requests/SubmitAssetReviewNotesRequest.yaml new file mode 100644 index 00000000..609d991c --- /dev/null +++ b/openapi/components/requests/SubmitAssetReviewNotesRequest.yaml @@ -0,0 +1,22 @@ +title: AgreementRequest +type: object +properties: + agreementCode: + $ref: ../schemas/AgreementCode.yaml + agreementFulltext: + type: string + description: The full text of the agreement (currently `By clicking OK, I certify that I have the necessary rights to upload this content and that it will not infringe on any third-party legal or intellectual property rights.`). + example: By clicking OK, I certify that I have the necessary rights to upload this content and that it will not infringe on any third-party legal or intellectual property rights. + contentId: + type: string + description: The id of the content being uploaded, such as a WorldID, AvatarID, or PropID. + example: avtr_c38a1615-5bf5-42b4-84eb-a8b6c37cbd11 + version: + type: integer + description: The version of the agreement (currently `1`). + example: 1 +required: + - agreementCode + - agreementFulltext + - contentId + - version diff --git a/openapi/components/requests/TransferGroupRequest.yaml b/openapi/components/requests/TransferGroupRequest.yaml new file mode 100644 index 00000000..0c245c25 --- /dev/null +++ b/openapi/components/requests/TransferGroupRequest.yaml @@ -0,0 +1,5 @@ +title: TransferGroupRequest +type: object +properties: + transferTargetId: + $ref: ./UserID.yaml diff --git a/openapi/components/requests/UpdatePropRequest.yaml b/openapi/components/requests/UpdatePropRequest.yaml new file mode 100644 index 00000000..966f63ff --- /dev/null +++ b/openapi/components/requests/UpdatePropRequest.yaml @@ -0,0 +1,30 @@ +title: UpdatePropRequest +type: object +properties: + assetUrl: + type: string + assetVersion: + type: integer + description: + type: string + imageUrl: + type: string + name: + type: string + platform: + $ref: ../schemas/Platform.yaml + propSignature: + type: string + spawnType: + type: integer + example: 0 + tags: + type: array + items: + $ref: ../schemas/Tag.yaml + unityVersion: + type: string + worldPlacementMask: + type: integer + example: 1 + diff --git a/openapi/components/responses/files/AgreementResponse.yaml b/openapi/components/responses/files/AgreementResponse.yaml new file mode 100644 index 00000000..bba0ffd6 --- /dev/null +++ b/openapi/components/responses/files/AgreementResponse.yaml @@ -0,0 +1,5 @@ +description: Returns a single Agreement object. +content: + application/json: + schema: + $ref: ../../schemas/Agreement.yaml diff --git a/openapi/components/responses/files/AgreementStatusResponse.yaml b/openapi/components/responses/files/AgreementStatusResponse.yaml new file mode 100644 index 00000000..762b4551 --- /dev/null +++ b/openapi/components/responses/files/AgreementStatusResponse.yaml @@ -0,0 +1,5 @@ +description: Returns a single AgreementStatus object. +content: + application/json: + schema: + $ref: ../../schemas/AgreementStatus.yaml diff --git a/openapi/components/responses/files/GalleryFileOrderResponse.yaml b/openapi/components/responses/files/GalleryFileOrderResponse.yaml new file mode 100644 index 00000000..134a8e9f --- /dev/null +++ b/openapi/components/responses/files/GalleryFileOrderResponse.yaml @@ -0,0 +1,5 @@ +description: Returns a list of File IDs. +content: + application/json: + schema: + $ref: ../../schemas/GroupGalleryFileOrder.yaml diff --git a/openapi/components/responses/groups/BlockGroupSuccess.yaml b/openapi/components/responses/groups/BlockGroupSuccess.yaml new file mode 100644 index 00000000..0236244e --- /dev/null +++ b/openapi/components/responses/groups/BlockGroupSuccess.yaml @@ -0,0 +1,11 @@ +description: Successful response after blocking a Group. +content: + application/json: + examples: + Blocked Group: + value: + success: + message: You've blocked the group. + status_code: 200 + schema: + $ref: ../../schemas/Success.yaml diff --git a/openapi/components/responses/groups/DeclineGroupInviteBadRequestError.yaml b/openapi/components/responses/groups/DeclineGroupInviteBadRequestError.yaml new file mode 100644 index 00000000..ee25a8f2 --- /dev/null +++ b/openapi/components/responses/groups/DeclineGroupInviteBadRequestError.yaml @@ -0,0 +1,11 @@ +description: Bad request error response when declining a group invite. +content: + application/json: + examples: + User Not Invited: + value: + error: + message: You can't decline an invite that wasn't sent to you․ + status_code: 400 + schema: + $ref: ../../schemas/Error.yaml diff --git a/openapi/components/responses/groups/DeclineGroupInviteSuccess.yaml b/openapi/components/responses/groups/DeclineGroupInviteSuccess.yaml new file mode 100644 index 00000000..b3dd5e79 --- /dev/null +++ b/openapi/components/responses/groups/DeclineGroupInviteSuccess.yaml @@ -0,0 +1,11 @@ +description: Successful response after declining a group invite. +content: + application/json: + examples: + Blocked Group: + value: + success: + message: Invite declined. + status_code: 200 + schema: + $ref: ../../schemas/Success.yaml diff --git a/openapi/components/responses/groups/GroupAlreadyBlockedError.yaml b/openapi/components/responses/groups/GroupAlreadyBlockedError.yaml new file mode 100644 index 00000000..51e56834 --- /dev/null +++ b/openapi/components/responses/groups/GroupAlreadyBlockedError.yaml @@ -0,0 +1,11 @@ +description: Error response when trying to block a group you already have blocked. +content: + application/json: + examples: + 403 Already BLocked: + value: + error: + message: You must leave a group before blocking it․ + status_code: 403 + schema: + $ref: ../../schemas/Error.yaml diff --git a/openapi/components/responses/groups/GroupAuditLogEntryTypeListResponse.yaml b/openapi/components/responses/groups/GroupAuditLogEntryTypeListResponse.yaml new file mode 100644 index 00000000..86e76ba8 --- /dev/null +++ b/openapi/components/responses/groups/GroupAuditLogEntryTypeListResponse.yaml @@ -0,0 +1,7 @@ +description: Returns a list of GroupAuditLogEntryTypes. +content: + application/json: + schema: + type: array + items: + $ref: ../../schemas/GroupAuditLogEntryType.yaml diff --git a/openapi/components/responses/groups/GroupTransferCanceledSuccess.yaml b/openapi/components/responses/groups/GroupTransferCanceledSuccess.yaml new file mode 100644 index 00000000..bc36d227 --- /dev/null +++ b/openapi/components/responses/groups/GroupTransferCanceledSuccess.yaml @@ -0,0 +1,11 @@ +description: Successful response after cancelling a group transfer. +content: + application/json: + examples: + Initiate Transfer: + value: + success: + message: Group transfer cancelled. + status_code: 200 + schema: + $ref: ../../schemas/Success.yaml diff --git a/openapi/components/responses/groups/GroupTransferInvalidError.yaml b/openapi/components/responses/groups/GroupTransferInvalidError.yaml new file mode 100644 index 00000000..b4f0722f --- /dev/null +++ b/openapi/components/responses/groups/GroupTransferInvalidError.yaml @@ -0,0 +1,11 @@ +description: Error response when trying to transfer a group to an ineligible target user. +content: + application/json: + examples: + 403 Ineligible Target: + value: + error: + message: Cannot transfer this group. + status_code: 403 + schema: + $ref: ../../schemas/Error.yaml diff --git a/openapi/components/responses/groups/GroupTransferSuccess.yaml b/openapi/components/responses/groups/GroupTransferSuccess.yaml new file mode 100644 index 00000000..5e878172 --- /dev/null +++ b/openapi/components/responses/groups/GroupTransferSuccess.yaml @@ -0,0 +1,16 @@ +description: Successful response after initiating or completing a group transfer. +content: + application/json: + examples: + Complete Transfer: + value: + success: + message: Group transfer completed. + status_code: 200 + Initiate Transfer: + value: + success: + message: Group transfer initiated. + status_code: 200 + schema: + $ref: ../../schemas/Success.yaml diff --git a/openapi/components/responses/groups/GroupTransferableResponse.yaml b/openapi/components/responses/groups/GroupTransferableResponse.yaml new file mode 100644 index 00000000..49a97920 --- /dev/null +++ b/openapi/components/responses/groups/GroupTransferableResponse.yaml @@ -0,0 +1,5 @@ +description: Returns a single GroupTransferable object. +content: + application/json: + schema: + $ref: ../../schemas/GroupTransferable.yaml diff --git a/openapi/components/responses/groups/NoGroupTransferError.yaml b/openapi/components/responses/groups/NoGroupTransferError.yaml new file mode 100644 index 00000000..c91c1f9b --- /dev/null +++ b/openapi/components/responses/groups/NoGroupTransferError.yaml @@ -0,0 +1,11 @@ +description: Error response when trying to cancel a transfer for a group without a pending transfer. +content: + application/json: + examples: + 400 No Pending Transfer: + value: + error: + message: No group transfer to cancel. + status_code: 400 + schema: + $ref: ../../schemas/Error.yaml diff --git a/openapi/components/responses/props/NoSuchPropError.yaml b/openapi/components/responses/props/NoSuchPropError.yaml new file mode 100644 index 00000000..f6d1869a --- /dev/null +++ b/openapi/components/responses/props/NoSuchPropError.yaml @@ -0,0 +1,11 @@ +description: Error response when trying to perform operations on a non-existing prop. +content: + application/json: + examples: + 404 Prop Not Found: + value: + error: + message: That prop does not exist. + status_code: 404 + schema: + $ref: ../schemas/Error.yaml diff --git a/openapi/components/responses/props/PropListResponse.yaml b/openapi/components/responses/props/PropListResponse.yaml new file mode 100644 index 00000000..62c28888 --- /dev/null +++ b/openapi/components/responses/props/PropListResponse.yaml @@ -0,0 +1,7 @@ +description: Returns a list of Prop objects. +content: + application/json: + schema: + type: array + items: + $ref: ../../schemas/Prop.yaml diff --git a/openapi/components/responses/props/PropPublishStatusResponse.yaml b/openapi/components/responses/props/PropPublishStatusResponse.yaml new file mode 100644 index 00000000..273aa610 --- /dev/null +++ b/openapi/components/responses/props/PropPublishStatusResponse.yaml @@ -0,0 +1,5 @@ +description: Returns a single PropPublishStatus object. +content: + application/json: + schema: + $ref: ../../schemas/PropPublishStatus.yaml diff --git a/openapi/components/responses/users/UserAllGroupPermissionsResponse.yaml b/openapi/components/responses/users/UserAllGroupPermissionsResponse.yaml new file mode 100644 index 00000000..e8a4f7e5 --- /dev/null +++ b/openapi/components/responses/users/UserAllGroupPermissionsResponse.yaml @@ -0,0 +1,5 @@ +description: The group permissions the user has for every joined group. +content: + application/json: + schema: + $ref: ../../schemas/UserAllGroupPermissions.yaml diff --git a/openapi/components/schemas/Agreement.yaml b/openapi/components/schemas/Agreement.yaml new file mode 100644 index 00000000..8477a358 --- /dev/null +++ b/openapi/components/schemas/Agreement.yaml @@ -0,0 +1,31 @@ +title: Agreement +type: object +properties: + agreementCode: + $ref: ./AgreementCode.yaml + agreementFulltext: + type: string + description: The full text of the agreement. + example: By clicking OK, I certify that I have the necessary rights to upload this content and that it will not infringe on any third-party legal or intellectual property rights. + contentId: + type: string + description: The id of the content being uploaded, such as a WorldID, AvatarID, or PropID. + example: avtr_c38a1615-5bf5-42b4-84eb-a8b6c37cbd11 + id: + type: string + description: The id of the agreement. + tags: + type: array + items: + $ref: ./Tag.yaml + version: + type: integer + description: The version of the agreement. + example: 1 +required: + - agreementCode + - agreementFulltext + - contentId + - id + - tags + - version diff --git a/openapi/components/schemas/AgreementCode.yaml b/openapi/components/schemas/AgreementCode.yaml new file mode 100644 index 00000000..2bf3f176 --- /dev/null +++ b/openapi/components/schemas/AgreementCode.yaml @@ -0,0 +1,7 @@ +title: AgreementCode +type: string +description: The type of agreement. +enum: + - content.copyright.owned +default: content.copyright.owned +example: content.copyright.owned diff --git a/openapi/components/schemas/AgreementStatus.yaml b/openapi/components/schemas/AgreementStatus.yaml new file mode 100644 index 00000000..501b0bcd --- /dev/null +++ b/openapi/components/schemas/AgreementStatus.yaml @@ -0,0 +1,25 @@ +title: AgreementStatus +type: object +properties: + agreed: + type: boolean + description: Whether the user has agreed for this content. + example: false + agreementCode: + $ref: ./AgreementCode.yaml + contentId: + type: string + description: The id of the content being uploaded, such as a WorldID, AvatarID, or PropID. + example: avtr_c38a1615-5bf5-42b4-84eb-a8b6c37cbd11 + userId: + $ref: ./UserID.yaml + version: + type: integer + description: The version of the agreement. + example: 1 +required: + - agreed + - agreementCode + - contentId + - userId + - version diff --git a/openapi/components/schemas/Avatar.yaml b/openapi/components/schemas/Avatar.yaml index 4a3760ce..f4e5ac02 100644 --- a/openapi/components/schemas/Avatar.yaml +++ b/openapi/components/schemas/Avatar.yaml @@ -4,6 +4,9 @@ description: "" properties: acknowledgements: type: string + activeAssetReviewId: + type: string + 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}`." diff --git a/openapi/components/schemas/GroupAuditLogEntry.yaml b/openapi/components/schemas/GroupAuditLogEntry.yaml index 8181f5dc..9757bf34 100644 --- a/openapi/components/schemas/GroupAuditLogEntry.yaml +++ b/openapi/components/schemas/GroupAuditLogEntry.yaml @@ -23,10 +23,7 @@ properties: description: A human-readable description of the event. example: Group role updated eventType: - type: string - description: The type of event that occurred. This is a string that is prefixed with the type of object that the event occurred on. For example, a group role update event would be prefixed with `group.role`. - default: group.update - example: group.role.update + $ref: ./GroupAuditLogEntryType.yaml groupId: $ref: ./GroupID.yaml id: diff --git a/openapi/components/schemas/GroupAuditLogEntryType.yaml b/openapi/components/schemas/GroupAuditLogEntryType.yaml new file mode 100644 index 00000000..1d87c3ca --- /dev/null +++ b/openapi/components/schemas/GroupAuditLogEntryType.yaml @@ -0,0 +1,5 @@ +title: GroupAuditLogEntryType +type: string +description: The type of event that occurred. This is a string that is prefixed with the type of object that the event occurred on. For example, a group role update event would be prefixed with `group.role`. +default: group.update +example: group.role.update diff --git a/openapi/components/schemas/GroupGallery.yaml b/openapi/components/schemas/GroupGallery.yaml index bbab9ea6..c188e0d3 100644 --- a/openapi/components/schemas/GroupGallery.yaml +++ b/openapi/components/schemas/GroupGallery.yaml @@ -1,4 +1,4 @@ -title: GroupMember +title: GroupGallery type: object properties: createdAt: diff --git a/openapi/components/schemas/GroupGalleryFileOrder.yaml b/openapi/components/schemas/GroupGalleryFileOrder.yaml new file mode 100644 index 00000000..143b0f98 --- /dev/null +++ b/openapi/components/schemas/GroupGalleryFileOrder.yaml @@ -0,0 +1,9 @@ +title: GroupGalleryFileOrder +type: object +properties: + ids: + type: array + items: + $ref: ./FileID.yaml +required: + - ids diff --git a/openapi/components/schemas/GroupTransferable.yaml b/openapi/components/schemas/GroupTransferable.yaml new file mode 100644 index 00000000..e2eb1141 --- /dev/null +++ b/openapi/components/schemas/GroupTransferable.yaml @@ -0,0 +1,24 @@ +title: GroupTransferable +type: object +properties: + groupNotMonetized: + type: boolean + default: false + hasVRCPlus: + type: boolean + default: false + hasVerifiedEmail: + type: boolean + default: false + targetCanOwnMoreGroups: + type: boolean + default: false + targetIsGroupMember: + type: boolean + default: false +required: + - groupNotMonetized + - hasVRCPlus + - hasVerifiedEmail + - targetCanOwnMoreGroups + - targetIsGroupMember diff --git a/openapi/components/schemas/NotificationV2.yaml b/openapi/components/schemas/NotificationV2.yaml index 2c49e257..e13f08c9 100644 --- a/openapi/components/schemas/NotificationV2.yaml +++ b/openapi/components/schemas/NotificationV2.yaml @@ -17,6 +17,8 @@ properties: - NotificationV2DataBoop - NotificationV2DataEventAnnouncement - NotificationV2DataGroupAnnouncement + - NotificationV2DataGroupInformative + - NotificationV2DataGroupTransfer expiresAt: type: string format: date-time diff --git a/openapi/components/schemas/NotificationV2DataGroupInformative.yaml b/openapi/components/schemas/NotificationV2DataGroupInformative.yaml new file mode 100644 index 00000000..e8bd0acb --- /dev/null +++ b/openapi/components/schemas/NotificationV2DataGroupInformative.yaml @@ -0,0 +1,12 @@ +title: NotificationV2DataGroupInformative +type: object +properties: + groupId: + $ref: ./GroupID.yaml + groupName: + type: string + transferTargetDisplayName: + type: string +required: + - groupId + - groupName diff --git a/openapi/components/schemas/NotificationV2DataGroupTransfer.yaml b/openapi/components/schemas/NotificationV2DataGroupTransfer.yaml new file mode 100644 index 00000000..6f0c8be4 --- /dev/null +++ b/openapi/components/schemas/NotificationV2DataGroupTransfer.yaml @@ -0,0 +1,10 @@ +title: NotificationV2DataGroupTransfer +type: object +properties: + groupName: + type: string + ownerUserDisplayName: + type: string +required: + - groupName + - ownerUserDisplayName diff --git a/openapi/components/schemas/NotificationV2Type.yaml b/openapi/components/schemas/NotificationV2Type.yaml index a7c982b6..ed0f59c3 100644 --- a/openapi/components/schemas/NotificationV2Type.yaml +++ b/openapi/components/schemas/NotificationV2Type.yaml @@ -13,6 +13,7 @@ enum: - group.invite - group.joinRequest - group.post + - group.transfer - invite.instance.contentGated - moderation.contentrestriction - moderation.notice diff --git a/openapi/components/schemas/PropPublishStatus.yaml b/openapi/components/schemas/PropPublishStatus.yaml new file mode 100644 index 00000000..e1a88123 --- /dev/null +++ b/openapi/components/schemas/PropPublishStatus.yaml @@ -0,0 +1,6 @@ +title: PropPublishStatus +type: object +properties: + canPublish: + type: boolean + default: false diff --git a/openapi/components/schemas/UserAllGroupPermissions.yaml b/openapi/components/schemas/UserAllGroupPermissions.yaml new file mode 100644 index 00000000..e0c32d8f --- /dev/null +++ b/openapi/components/schemas/UserAllGroupPermissions.yaml @@ -0,0 +1,7 @@ +title: UserAllGroupPermissions +type: object +description: Map from GroupIDs to an array of the GroupPermissions the user has in that group. +additionalProperties: + type: array + items: + $ref: ./GroupPermissions.yaml From 552ef189a53f48a84a3ef6da021f53f17599d6cd Mon Sep 17 00:00:00 2001 From: Vinyarion <38413862+VinyarionHyarmendacil@users.noreply.github.com> Date: Tue, 9 Dec 2025 23:59:33 -0600 Subject: [PATCH 02/19] lint 1 --- openapi/components/parameters.yaml | 14 ++++---- openapi/components/paths.yaml | 2 +- openapi/components/paths/groups.yaml | 36 +++++++++---------- openapi/components/paths/users.yaml | 6 +--- .../requests/UpdatePropRequest.yaml | 1 - .../responses/props/NoSuchPropError.yaml | 2 +- 6 files changed, 28 insertions(+), 33 deletions(-) diff --git a/openapi/components/parameters.yaml b/openapi/components/parameters.yaml index 159a9250..e6c4f19b 100644 --- a/openapi/components/parameters.yaml +++ b/openapi/components/parameters.yaml @@ -28,13 +28,6 @@ assetReviewId: in: path schema: type: string -avatarId: - name: avatarId - description: Must be a valid avatar ID. - required: true - in: path - schema: - $ref: ./schemas/AvatarID.yaml authorId: name: authorId description: Must be a valid user ID. @@ -42,6 +35,13 @@ authorId: in: query schema: $ref: ./schemas/UserID.yaml +avatarId: + name: avatarId + description: Must be a valid avatar ID. + required: true + in: path + schema: + $ref: ./schemas/AvatarID.yaml avatarModerationType: name: avatarModerationType description: The avatar moderation type associated with the avatar. diff --git a/openapi/components/paths.yaml b/openapi/components/paths.yaml index 7ef63419..93ef2677 100644 --- a/openapi/components/paths.yaml +++ b/openapi/components/paths.yaml @@ -317,7 +317,7 @@ "/props/{propId}": $ref: "./paths/props.yaml#/paths/~1props~1{propId}" "/props/{propId}/publish": - $ref: "./paths/props.yaml#/paths/~1props~1{propId}/publish" + $ref: "./paths/props.yaml#/paths/~1props~1{propId}~1publish" "/requestInvite/{userId}": $ref: "./paths/invite.yaml#/paths/~1requestInvite~1{userId}" "/requestInvite/{userId}/photo": diff --git a/openapi/components/paths/groups.yaml b/openapi/components/paths/groups.yaml index cd751a10..c2831c1a 100644 --- a/openapi/components/paths/groups.yaml +++ b/openapi/components/paths/groups.yaml @@ -507,52 +507,52 @@ paths: $ref: ../responses/groups/GroupNotMemberError.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. + put: + operationId: declineGroupInvite + summary: Decline Invite from Group + description: Declines an invite to the user from a group. tags: - groups requestBody: - required: true + required: false content: application/json: schema: - $ref: ../requests/CreateGroupInviteRequest.yaml + $ref: ../requests/DeclineGroupInviteRequest.yaml security: - authCookie: [] responses: "200": - description: OK + $ref: ../responses/groups/DeclineGroupInviteSuccess.yaml "400": - $ref: ../responses/groups/GroupInviteBadRequestError.yaml + $ref: ../responses/groups/DeclineGroupInviteBadRequestError.yaml "401": $ref: ../responses/MissingCredentialsError.yaml - "403": - $ref: ../responses/groups/GroupInviteForbiddenError.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. + post: + operationId: createGroupInvite + summary: Invite User to Group + description: Sends an invite to a user to join the group. tags: - groups requestBody: - required: false + required: true content: application/json: schema: - $ref: ../requests/DeclineGroupInviteRequest.yaml + $ref: ../requests/CreateGroupInviteRequest.yaml security: - authCookie: [] responses: "200": - $ref: ../responses/groups/DeclineGroupInviteSuccess.yaml + description: OK "400": - $ref: ../responses/groups/DeclineGroupInviteBadRequestError.yaml + $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}": diff --git a/openapi/components/paths/users.yaml b/openapi/components/paths/users.yaml index c8d35f77..fbccbbd7 100644 --- a/openapi/components/paths/users.yaml +++ b/openapi/components/paths/users.yaml @@ -276,11 +276,7 @@ paths: - authCookie: [] responses: "200": - description: OK - content: - application/json: - schema: - $ref: ../schemas/UserAllGroupPermissionsResponse.yaml + $ref: ../responses/users/UserAllGroupPermissionsResponse.yaml "401": $ref: ../responses/MissingCredentialsError.yaml "/users/{userId}/groups/represented": diff --git a/openapi/components/requests/UpdatePropRequest.yaml b/openapi/components/requests/UpdatePropRequest.yaml index 966f63ff..dffb7682 100644 --- a/openapi/components/requests/UpdatePropRequest.yaml +++ b/openapi/components/requests/UpdatePropRequest.yaml @@ -27,4 +27,3 @@ properties: worldPlacementMask: type: integer example: 1 - diff --git a/openapi/components/responses/props/NoSuchPropError.yaml b/openapi/components/responses/props/NoSuchPropError.yaml index f6d1869a..9653b508 100644 --- a/openapi/components/responses/props/NoSuchPropError.yaml +++ b/openapi/components/responses/props/NoSuchPropError.yaml @@ -8,4 +8,4 @@ content: message: That prop does not exist. status_code: 404 schema: - $ref: ../schemas/Error.yaml + $ref: ../../schemas/Error.yaml From 438498631d48de867e4144cf4831e5f440b3d817 Mon Sep 17 00:00:00 2001 From: Aries Date: Tue, 9 Dec 2025 23:07:42 -0700 Subject: [PATCH 03/19] Update groups.yaml --- openapi/components/paths/groups.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/openapi/components/paths/groups.yaml b/openapi/components/paths/groups.yaml index c2831c1a..b74caff7 100644 --- a/openapi/components/paths/groups.yaml +++ b/openapi/components/paths/groups.yaml @@ -1061,8 +1061,8 @@ paths: parameters: - $ref: ../parameters.yaml#/groupId get: - operationId: getGroupTransferable - summary: Get Group Transferable + operationId: getGroupTransferability + summary: Get Group Transferability description: Returns the transferability of the group to a given user. tags: - groups @@ -1130,3 +1130,4 @@ components: $ref: ../securitySchemes.yaml tags: $ref: ../tags.yaml + From f0773566fb64d9c7b3827a33d6f14df1ad9cafa5 Mon Sep 17 00:00:00 2001 From: Vinyarion <38413862+VinyarionHyarmendacil@users.noreply.github.com> Date: Wed, 10 Dec 2025 10:10:04 -0600 Subject: [PATCH 04/19] Apply suggestions from code review Co-authored-by: Aries --- openapi/components/paths/users.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openapi/components/paths/users.yaml b/openapi/components/paths/users.yaml index fbccbbd7..54fce50c 100644 --- a/openapi/components/paths/users.yaml +++ b/openapi/components/paths/users.yaml @@ -251,7 +251,7 @@ paths: parameters: - $ref: ../parameters.yaml#/userId get: - operationId: getUserGroupInvites + operationId: getInvitedGroups summary: Get User Group Invited description: Returns a list of Groups the user has been invited to. tags: @@ -319,7 +319,7 @@ paths: parameters: - $ref: ../parameters.yaml#/userId get: - operationId: getUserGroupBlocks + operationId: getBlockedGroups summary: Get User Group Blocks description: Returns a list of Groups the user has blocked. tags: From 34759f15ce2bc74a229db11da732cdaf23400904 Mon Sep 17 00:00:00 2001 From: Vinyarion <38413862+VinyarionHyarmendacil@users.noreply.github.com> Date: Wed, 10 Dec 2025 10:11:02 -0600 Subject: [PATCH 05/19] lint 2 --- openapi/components/paths/files.yaml | 2 ++ openapi/components/paths/groups.yaml | 1 - openapi/components/schemas/Platform.yaml | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/openapi/components/paths/files.yaml b/openapi/components/paths/files.yaml index c25844d4..f8b161f6 100644 --- a/openapi/components/paths/files.yaml +++ b/openapi/components/paths/files.yaml @@ -129,6 +129,8 @@ paths: "404": $ref: ../responses/files/FileNotFoundError.yaml "/assetReview/{assetReviewId}/notes": + parameters: + - $ref: ../parameters.yaml#/assetReviewId put: operationId: submitAssetReviewNotes summary: Submit Asset Review Notes diff --git a/openapi/components/paths/groups.yaml b/openapi/components/paths/groups.yaml index b74caff7..2a38c964 100644 --- a/openapi/components/paths/groups.yaml +++ b/openapi/components/paths/groups.yaml @@ -1130,4 +1130,3 @@ components: $ref: ../securitySchemes.yaml tags: $ref: ../tags.yaml - diff --git a/openapi/components/schemas/Platform.yaml b/openapi/components/schemas/Platform.yaml index ea8d44eb..af6390d9 100644 --- a/openapi/components/schemas/Platform.yaml +++ b/openapi/components/schemas/Platform.yaml @@ -1,4 +1,4 @@ title: Platform type: string -description: "This is normally `android`, `ios`, `standalonewindows`, `web`, or the empty value ``, but also supposedly can be any random Unity verison such as `2019.2.4-801-Release` or `2019.2.2-772-Release` or even `unknownplatform`." +description: "This is normally `android`, `ios`, `standalonewindows`, `web`, or the empty value ``, but also supposedly can be any random Unity version such as `2019.2.4-801-Release` or `2019.2.2-772-Release` or even `unknownplatform`." example: standalonewindows From 628f031be6af3cd2e14e56749f3977a4eca090ec Mon Sep 17 00:00:00 2001 From: Vinyarion <38413862+VinyarionHyarmendacil@users.noreply.github.com> Date: Wed, 10 Dec 2025 15:00:00 -0600 Subject: [PATCH 06/19] Common search parameter, Avatar property, Config properties --- openapi/components/parameters.yaml | 8 + openapi/components/paths/avatars.yaml | 1 + openapi/components/paths/calendar.yaml | 1 + openapi/components/paths/users.yaml | 1 + openapi/components/schemas/APIConfig.yaml | 297 ++++++------------ .../schemas/APIConfigAudioConfig.yaml | 49 +++ .../components/schemas/APIConfigEvents.yaml | 4 + openapi/components/schemas/Avatar.yaml | 3 + 8 files changed, 167 insertions(+), 197 deletions(-) create mode 100644 openapi/components/schemas/APIConfigAudioConfig.yaml diff --git a/openapi/components/parameters.yaml b/openapi/components/parameters.yaml index e6c4f19b..2ae786b2 100644 --- a/openapi/components/parameters.yaml +++ b/openapi/components/parameters.yaml @@ -495,6 +495,14 @@ inventoryTemplateId: schema: type: string example: invt_00000000-0000-0000-0000-000000000000 +isInternalVariant: + name: isInternalVariant + description: Not quite sure what this actually does (exists on the website but doesn't seem to be used) + required: false + in: query + schema: + type: boolean + example: false jamId: name: jamId description: Must be a valid query ID. diff --git a/openapi/components/paths/avatars.yaml b/openapi/components/paths/avatars.yaml index 892b9251..24ade939 100644 --- a/openapi/components/paths/avatars.yaml +++ b/openapi/components/paths/avatars.yaml @@ -42,6 +42,7 @@ paths: - $ref: ../parameters.yaml#/maxUnityVersion - $ref: ../parameters.yaml#/minUnityVersion - $ref: ../parameters.yaml#/platform + - $ref: ../parameters.yaml#/isInternalVariant security: - authCookie: [] responses: diff --git a/openapi/components/paths/calendar.yaml b/openapi/components/paths/calendar.yaml index 4074fc22..1b61ef8f 100644 --- a/openapi/components/paths/calendar.yaml +++ b/openapi/components/paths/calendar.yaml @@ -100,6 +100,7 @@ paths: - $ref: ../parameters.yaml#/utcOffset - $ref: ../parameters.yaml#/number - $ref: ../parameters.yaml#/offset + - $ref: ../parameters.yaml#/isInternalVariant security: - authCookie: [] responses: diff --git a/openapi/components/paths/users.yaml b/openapi/components/paths/users.yaml index 54fce50c..de2211ff 100644 --- a/openapi/components/paths/users.yaml +++ b/openapi/components/paths/users.yaml @@ -77,6 +77,7 @@ paths: type: string - $ref: ../parameters.yaml#/number - $ref: ../parameters.yaml#/offset + - $ref: ../parameters.yaml#/isInternalVariant security: - authCookie: [] responses: diff --git a/openapi/components/schemas/APIConfig.yaml b/openapi/components/schemas/APIConfig.yaml index 363bab7a..79a21f94 100644 --- a/openapi/components/schemas/APIConfig.yaml +++ b/openapi/components/schemas/APIConfig.yaml @@ -1,33 +1,44 @@ title: APIConfig type: object -description: "" +description: Global configuration for various features. properties: + CampaignStatus: + type: string + description: The current platform-wide event taking place + DisableBackgroundPreloads: + type: boolean + description: Toggles if certain assets are preloaded in the background + default: true + LocationGiftingNonSubPrioEnabled: + type: boolean + description: Toggles whether users without a current VRC+ subscription are priority recipients for gift drops + default: true VoiceEnableDegradation: type: boolean - description: "Unknown, probably voice optimization testing" + description: Unknown, probably voice optimization testing default: false VoiceEnableReceiverLimiting: type: boolean - description: "Unknown, probably voice optimization testing" + description: Unknown, probably voice optimization testing default: true accessLogsUrls: type: object properties: Default: type: string - example: "https://help.vrchat.com/hc/en-us/articles/9521522810899-Where-do-I-find-my-output-logs#h_01HT1ZV67JGKX5AE4R1P28XMXR" + example: https://help.vrchat.com/hc/en-us/articles/9521522810899-Where-do-I-find-my-output-logs#h_01HT1ZV67JGKX5AE4R1P28XMXR format: uri Pico: type: string - example: "https://help.vrchat.com/hc/en-us/articles/9521522810899-Where-do-I-find-my-output-logs#h_01HT1ZV67JGKX5AE4R1P28XMXR" + example: https://help.vrchat.com/hc/en-us/articles/9521522810899-Where-do-I-find-my-output-logs#h_01HT1ZV67JGKX5AE4R1P28XMXR format: uri Quest: type: string - example: "https://help.vrchat.com/hc/en-us/articles/9521522810899-Where-do-I-find-my-output-logs#h_01HT1ZV67JGKX5AE4R1P28XMXR" + example: https://help.vrchat.com/hc/en-us/articles/9521522810899-Where-do-I-find-my-output-logs#h_01HT1ZV67JGKX5AE4R1P28XMXR format: uri XRElite: type: string - example: "https://help.vrchat.com/hc/en-us/articles/9521522810899-Where-do-I-find-my-output-logs#h_01HT1ZV67JGKX5AE4R1P28XMXR" + example: https://help.vrchat.com/hc/en-us/articles/9521522810899-Where-do-I-find-my-output-logs#h_01HT1ZV67JGKX5AE4R1P28XMXR format: uri address: type: string @@ -58,6 +69,8 @@ properties: $ref: ./APIConfigAnnouncement.yaml minItems: 0 uniqueItems: true + audioConfig: + $ref: ./APIConfigAudioConfig.yaml availableLanguageCodes: type: array description: List of supported Languages @@ -168,6 +181,10 @@ properties: type: string description: VRChat's copyright-issues-related email minLength: 1 + copyrightFormUrl: + type: string + description: VRChat's DMCA claim webform url + minLength: 1 currentPrivacyVersion: type: integer description: Current version number of the Privacy Agreement @@ -189,7 +206,7 @@ properties: devSdkUrl: deprecated: true type: string - description: "Link to download the development SDK, use downloadUrls instead" + description: Link to download the development SDK, use downloadUrls instead minLength: 1 devSdkVersion: deprecated: true @@ -238,7 +255,7 @@ properties: default: false disableFrontendBuilds: type: boolean - description: "Unknown, probably toggles compilation of frontend web builds? So internal flag?" + description: Unknown, probably toggles compilation of frontend web builds? So internal flag? default: false disableGiftDrops: type: boolean @@ -281,17 +298,31 @@ properties: $ref: ./APIConfigDownloadURLList.yaml dynamicWorldRows: type: array - description: "Array of DynamicWorldRow objects, used by the game to display the list of world rows" + description: Array of DynamicWorldRow objects, used by the game to display the list of world rows items: $ref: ./DynamicContentRow.yaml minItems: 1 uniqueItems: true + economyLedgerBackfill: + type: boolean + description: Unknown + economyLedgerMigrationStop: + type: string + description: Unknown + economyLedgerMode: + type: string + description: Unknown economyPauseEnd: type: string description: Unknown + format: date-time economyPauseStart: type: string description: Unknown + format: date-time + economyPurchaseRepairEnabled: + type: boolean + description: Unknown economyState: type: integer description: Unknown @@ -314,7 +345,7 @@ properties: homepageRedirectTarget: type: string description: Redirect target if you try to open the base API domain in your browser - default: "https://hello.vrchat.com" + default: https://hello.vrchat.com minLength: 1 hubWorldId: $ref: ./WorldID.yaml @@ -323,10 +354,34 @@ properties: description: A list of explicitly allowed origins that worlds can request images from via the Udon's [VRCImageDownloader#DownloadImage](https://creators.vrchat.com/worlds/udon/image-loading/#downloadimage). items: type: string + iosAppVersion: + type: array + description: Current app version for iOS + items: + type: string + iosVersion: + type: object + description: Current version for iOS + properties: + major: + type: integer + minor: + type: integer + required: + - major + - minor jobsEmail: type: string description: VRChat's job application email minLength: 1 + maxUserEmoji: + type: integer + description: The maximum number of custom emoji each user may have at a given time. + default: 18 + maxUserStickers: + type: integer + description: The maximum number of custom stickers each user may have at a given time. + default: 18 minSupportedClientBuildNumber: type: object description: Minimum supported client build number for various platforms @@ -413,200 +468,32 @@ properties: reportCategories: type: object description: Categories available for reporting objectionable content - properties: - avatar: - $ref: ./ReportCategory.yaml - avatarpage: - $ref: ./ReportCategory.yaml - behavior: - $ref: ./ReportCategory.yaml - chat: - $ref: ./ReportCategory.yaml - emoji: - $ref: ./ReportCategory.yaml - environment: - $ref: ./ReportCategory.yaml - groupstore: - $ref: ./ReportCategory.yaml - image: - $ref: ./ReportCategory.yaml - sticker: - $ref: ./ReportCategory.yaml - text: - $ref: ./ReportCategory.yaml - warnings: - $ref: ./ReportCategory.yaml - worldimage: - $ref: ./ReportCategory.yaml - worldstore: - $ref: ./ReportCategory.yaml - required: - - avatar - - behavior - - chat - - environment - - groupstore - - image - - text - - warnings - - worldimage - - worldstore + additionalProperties: + $ref: ./ReportCategory.yaml reportFormUrl: type: string description: URL to the report form default: "https://help.vrchat.com/hc/en-us/requests/new?ticket_form_id=1500000182242&tf_360056455174=user_report&tf_360057451993={userId}&tf_1500001445142={reportedId}&tf_subject={reason} {category} By {contentType} {reportedName}&tf_description={description}" reportOptions: type: object - description: Options for reporting content - properties: - avatar: - type: object - properties: - avatar: - type: array - items: - type: string - avatarpage: - type: array - items: - type: string - warnings: - type: array - items: - type: string - group: - type: object - properties: - groupstore: - type: array - items: - type: string - image: - type: array - items: - type: string - text: - type: array - items: - type: string - user: - type: object - properties: - behavior: - type: array - items: - type: string - chat: - type: array - items: - type: string - emoji: - type: array - items: - type: string - image: - type: array - items: - type: string - sticker: - type: array - items: - type: string - text: - type: array - items: - type: string - world: - type: object - properties: - environment: - type: array - items: - type: string - text: - type: array - items: - type: string - warnings: - type: array - items: - type: string - worldimage: - type: array - items: - type: string - worldstore: - type: array - items: - type: string + description: |- + Options for reporting content. + Select a key+value from this mapping as the `type` of the report. + Select one key+value from the object at reportOptions[type] as the `category` of the report. + reportCategories[category] contains user-facing text to display for all possible categories. + Select one value from the array at reportOptions[type][category] as the `reason` of the report. + reportReasons[reason] contains user-facing text to display for all possible categories. + additionalProperties: + type: object + additionalProperties: + type: array + items: + type: string reportReasons: type: object - description: Reasons available for reporting users - properties: - billing: - $ref: ./ReportReason.yaml - botting: - $ref: ./ReportReason.yaml - cancellation: - $ref: ./ReportReason.yaml - copyright: - $ref: ./ReportReason.yaml - fraud: - $ref: ./ReportReason.yaml - gore: - $ref: ./ReportReason.yaml - hacking: - $ref: ./ReportReason.yaml - harassing: - $ref: ./ReportReason.yaml - hateful: - $ref: ./ReportReason.yaml - impersonation: - $ref: ./ReportReason.yaml - inappropriate: - $ref: ./ReportReason.yaml - leaking: - $ref: ./ReportReason.yaml - malicious: - $ref: ./ReportReason.yaml - missing: - $ref: ./ReportReason.yaml - nudity: - $ref: ./ReportReason.yaml - renewal: - $ref: ./ReportReason.yaml - security: - $ref: ./ReportReason.yaml - service: - $ref: ./ReportReason.yaml - sexual: - $ref: ./ReportReason.yaml - technical: - $ref: ./ReportReason.yaml - threatening: - $ref: ./ReportReason.yaml - visuals: - $ref: ./ReportReason.yaml - required: - - billing - - botting - - cancellation - - gore - - hacking - - harassing - - hateful - - impersonation - - inappropriate - - leaking - - malicious - - missing - - nudity - - renewal - - security - - service - - sexual - - threatening - - visuals + description: Reasons available for submitting a report + additionalProperties: + $ref: ./ReportReason.yaml requireAgeVerificationBetaTag: type: boolean sdkDeveloperFaqUrl: @@ -691,6 +578,9 @@ properties: items: type: string required: + - CampaignStatus + - DisableBackgroundPreloads + - LocationGiftingNonSubPrioEnabled - VoiceEnableDegradation - VoiceEnableReceiverLimiting - accessLogsUrls @@ -716,6 +606,8 @@ required: - constants - contactEmail - copyrightEmail + - copyrightFormUrl + - currentPrivacyVersion - currentTOSVersion - defaultAvatar - defaultStickerSet @@ -741,6 +633,13 @@ required: - downloadLinkWindows - downloadUrls - dynamicWorldRows + - economyLedgerBackfill + - economyLedgerMigrationStop + - economyLedgerMode + - economyPauseEnd + - economyPauseStart + - economyPurchaseRepairEnabled + - economyState - events - forceUseLatestWorld - giftDisplayType @@ -749,7 +648,11 @@ required: - homepageRedirectTarget - hubWorldId - imageHostUrlList + - iosAppVersion + - iosVersion - jobsEmail + - maxUserEmoji + - maxUserStickers - minSupportedClientBuildNumber - minimumUnityVersionForUploads - moderationEmail diff --git a/openapi/components/schemas/APIConfigAudioConfig.yaml b/openapi/components/schemas/APIConfigAudioConfig.yaml new file mode 100644 index 00000000..56215dcb --- /dev/null +++ b/openapi/components/schemas/APIConfigAudioConfig.yaml @@ -0,0 +1,49 @@ +title: APIConfigAudioConfig +type: object +description: Global configuration for Steam Audio +properties: + eq: + type: number + description: Unknown + nearFieldILDNudge: + type: number + description: Unknown + nearFieldILDNudgeDistance: + type: number + description: Unknown + nearFieldILDNudgeEarRadius: + type: number + description: Unknown + perEarDirectionalityEarRadius: + type: number + description: Unknown + perEarDirectionalityFadeDistance: + type: number + description: Unknown + perEarDirectionalityMaxScale: + type: number + description: Unknown + perEarDirectionalityPCFactor: + type: number + description: Unknown + trackingScaleMax: + type: number + description: Unknown + trackingScaleMin: + type: number + description: Unknown + trackingScaleMultiplier: + type: number + description: Unknown +required: + - eq + - nearFieldILDNudge + - nearFieldILDNudgeDistance + - nearFieldILDNudgeEarRadius + - perEarDirectionalityEarRadius + - perEarDirectionalityFadeDistance + - perEarDirectionalityMaxScale + - perEarDirectionalityPCFactor + - trackingScaleMax + - trackingScaleMin + - trackingScaleMultiplier diff --git a/openapi/components/schemas/APIConfigEvents.yaml b/openapi/components/schemas/APIConfigEvents.yaml index ca89b54d..6632e54b 100644 --- a/openapi/components/schemas/APIConfigEvents.yaml +++ b/openapi/components/schemas/APIConfigEvents.yaml @@ -28,6 +28,9 @@ properties: slowUpdateFactorThreshold: type: integer description: Unknown + useDirectPlayerSerialization: + type: boolean + description: Unknown viewSegmentLength: type: integer description: Unknown @@ -41,4 +44,5 @@ required: - playerOrderBucketSize - playerOrderFactor - slowUpdateFactorThreshold + - useDirectPlayerSerialization - viewSegmentLength diff --git a/openapi/components/schemas/Avatar.yaml b/openapi/components/schemas/Avatar.yaml index f4e5ac02..c9adfec7 100644 --- a/openapi/components/schemas/Avatar.yaml +++ b/openapi/components/schemas/Avatar.yaml @@ -47,6 +47,9 @@ properties: name: type: string minLength: 1 + pendingUpload: + type: boolean + default: false performance: type: object properties: From 7a1e23db7fb0b47307e3781bde5cc604455d1b79 Mon Sep 17 00:00:00 2001 From: jellejurre Date: Wed, 10 Dec 2025 22:24:44 +0100 Subject: [PATCH 07/19] Fix path --- openapi/components/paths.yaml | 2 +- openapi/components/requests/TransferGroupRequest.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openapi/components/paths.yaml b/openapi/components/paths.yaml index 93ef2677..bcc5c6a8 100644 --- a/openapi/components/paths.yaml +++ b/openapi/components/paths.yaml @@ -221,7 +221,7 @@ "/groups/{groupId}/roles/{groupRoleId}": $ref: "./paths/groups.yaml#/paths/~1groups~1{groupId}~1roles~1{groupRoleId}" "/groups/{groupId}/transfer": - $ref: "./paths/groups.yaml#/paths/~1groups~1{groupId}~1roles~1{groupRoleId}" + $ref: "./paths/groups.yaml#/paths/~1groups~1{groupId}~1transfer" /health: $ref: "./paths/miscellaneous.yaml#/paths/~1health" /icon: diff --git a/openapi/components/requests/TransferGroupRequest.yaml b/openapi/components/requests/TransferGroupRequest.yaml index 0c245c25..e0827b2a 100644 --- a/openapi/components/requests/TransferGroupRequest.yaml +++ b/openapi/components/requests/TransferGroupRequest.yaml @@ -2,4 +2,4 @@ title: TransferGroupRequest type: object properties: transferTargetId: - $ref: ./UserID.yaml + $ref: ../schemas/UserID.yaml From be8e277c3b042e04b50df7140ab1782b088652dc Mon Sep 17 00:00:00 2001 From: Vinyarion <38413862+VinyarionHyarmendacil@users.noreply.github.com> Date: Thu, 11 Dec 2025 08:15:49 -0600 Subject: [PATCH 08/19] Describe prop spawnType and worldPlacementMask based on known examples --- openapi/components/requests/CreatePropRequest.yaml | 6 ++---- openapi/components/requests/UpdatePropRequest.yaml | 6 ++---- openapi/components/schemas/Prop.yaml | 6 ++---- openapi/components/schemas/PropPlacementMask.yaml | 10 ++++++++++ openapi/components/schemas/PropSpawnType.yaml | 9 +++++++++ 5 files changed, 25 insertions(+), 12 deletions(-) create mode 100644 openapi/components/schemas/PropPlacementMask.yaml create mode 100644 openapi/components/schemas/PropSpawnType.yaml diff --git a/openapi/components/requests/CreatePropRequest.yaml b/openapi/components/requests/CreatePropRequest.yaml index a932f61e..85d3490f 100644 --- a/openapi/components/requests/CreatePropRequest.yaml +++ b/openapi/components/requests/CreatePropRequest.yaml @@ -18,8 +18,7 @@ properties: propSignature: type: string spawnType: - type: integer - example: 0 + $ref: ./PropSpawnType.yaml tags: type: array items: @@ -27,8 +26,7 @@ properties: unityVersion: type: string worldPlacementMask: - type: integer - example: 1 + $ref: ./PropPlacementMask.yaml required: - assetUrl - assetVersion diff --git a/openapi/components/requests/UpdatePropRequest.yaml b/openapi/components/requests/UpdatePropRequest.yaml index dffb7682..c902e90e 100644 --- a/openapi/components/requests/UpdatePropRequest.yaml +++ b/openapi/components/requests/UpdatePropRequest.yaml @@ -16,8 +16,7 @@ properties: propSignature: type: string spawnType: - type: integer - example: 0 + $ref: ./PropSpawnType.yaml tags: type: array items: @@ -25,5 +24,4 @@ properties: unityVersion: type: string worldPlacementMask: - type: integer - example: 1 + $ref: ./PropPlacementMask.yaml diff --git a/openapi/components/schemas/Prop.yaml b/openapi/components/schemas/Prop.yaml index c2836847..43a7df88 100644 --- a/openapi/components/schemas/Prop.yaml +++ b/openapi/components/schemas/Prop.yaml @@ -26,8 +26,7 @@ properties: releaseStatus: $ref: ./ReleaseStatus.yaml spawnType: - type: integer - default: 0 + $ref: ./PropSpawnType.yaml tags: type: array items: @@ -44,8 +43,7 @@ properties: minItems: 1 uniqueItems: true worldPlacementMask: - type: integer - default: 1 + $ref: ./PropPlacementMask.yaml required: - _created_at - _updated_at diff --git a/openapi/components/schemas/PropPlacementMask.yaml b/openapi/components/schemas/PropPlacementMask.yaml new file mode 100644 index 00000000..44e6c593 --- /dev/null +++ b/openapi/components/schemas/PropPlacementMask.yaml @@ -0,0 +1,10 @@ +title: PropPlacementMask +type: integer +description: |- + Bitmask for restrictions on what world surfaces a prop may be summoned. + 0: no restrictions + 1: floors + 2: walls + 4: ceilings +default: 1 +minimum: 0 diff --git a/openapi/components/schemas/PropSpawnType.yaml b/openapi/components/schemas/PropSpawnType.yaml new file mode 100644 index 00000000..bfe854d7 --- /dev/null +++ b/openapi/components/schemas/PropSpawnType.yaml @@ -0,0 +1,9 @@ +title: PropSpawnType +type: integer +description: |- + How a prop is summoned and interacted with. + 0: the prop fixed to some surface in the world + 1: the prop is a pickup and may be held by users + 2: ??? +default: 1 +minimum: 0 From 90632d93cee0a9d069427d628e7a5125dfa964f7 Mon Sep 17 00:00:00 2001 From: Vinyarion <38413862+VinyarionHyarmendacil@users.noreply.github.com> Date: Thu, 11 Dec 2025 08:19:00 -0600 Subject: [PATCH 09/19] duh --- openapi/components/requests/CreatePropRequest.yaml | 4 ++-- openapi/components/requests/UpdatePropRequest.yaml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/openapi/components/requests/CreatePropRequest.yaml b/openapi/components/requests/CreatePropRequest.yaml index 85d3490f..e25ab5a9 100644 --- a/openapi/components/requests/CreatePropRequest.yaml +++ b/openapi/components/requests/CreatePropRequest.yaml @@ -18,7 +18,7 @@ properties: propSignature: type: string spawnType: - $ref: ./PropSpawnType.yaml + $ref: ../schemas/PropSpawnType.yaml tags: type: array items: @@ -26,7 +26,7 @@ properties: unityVersion: type: string worldPlacementMask: - $ref: ./PropPlacementMask.yaml + $ref: ../schemas/PropPlacementMask.yaml required: - assetUrl - assetVersion diff --git a/openapi/components/requests/UpdatePropRequest.yaml b/openapi/components/requests/UpdatePropRequest.yaml index c902e90e..af523331 100644 --- a/openapi/components/requests/UpdatePropRequest.yaml +++ b/openapi/components/requests/UpdatePropRequest.yaml @@ -16,7 +16,7 @@ properties: propSignature: type: string spawnType: - $ref: ./PropSpawnType.yaml + $ref: ../schemas/PropSpawnType.yaml tags: type: array items: @@ -24,4 +24,4 @@ properties: unityVersion: type: string worldPlacementMask: - $ref: ./PropPlacementMask.yaml + $ref: ../schemas/PropPlacementMask.yaml From 28bb2ec0f87dc2cbbb5b42b1817c51b4344bfb09 Mon Sep 17 00:00:00 2001 From: Vinyarion <38413862+VinyarionHyarmendacil@users.noreply.github.com> Date: Thu, 11 Dec 2025 11:37:35 -0600 Subject: [PATCH 10/19] Add playerPersistenceEnabled property to CreateInstanceRequest --- openapi/components/requests/CreateInstanceRequest.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/openapi/components/requests/CreateInstanceRequest.yaml b/openapi/components/requests/CreateInstanceRequest.yaml index 08518989..7c05998f 100644 --- a/openapi/components/requests/CreateInstanceRequest.yaml +++ b/openapi/components/requests/CreateInstanceRequest.yaml @@ -31,6 +31,9 @@ properties: default: false ownerId: $ref: ../schemas/InstanceOwnerId.yaml + playerPersistenceEnabled: + type: boolean + nullable: true queueEnabled: type: boolean default: false From 55f4a767f5b78d752aa04fcb8633c3a54574a6e6 Mon Sep 17 00:00:00 2001 From: Vinyarion <38413862+VinyarionHyarmendacil@users.noreply.github.com> Date: Sun, 14 Dec 2025 02:54:34 -0600 Subject: [PATCH 11/19] Fix NotificationV2 data vs. details, data for badge.earned --- openapi/components/schemas/NotificationV2.yaml | 8 ++++++++ .../schemas/NotificationV2DataBadgeEarned.yaml | 13 +++++++++++++ .../schemas/NotificationV2DataBoop.yaml | 11 ++++------- .../schemas/NotificationV2DetailsBoop.yaml | 15 +++++++++++++++ .../components/schemas/NotificationV2Type.yaml | 2 ++ 5 files changed, 42 insertions(+), 7 deletions(-) create mode 100644 openapi/components/schemas/NotificationV2DataBadgeEarned.yaml create mode 100644 openapi/components/schemas/NotificationV2DetailsBoop.yaml diff --git a/openapi/components/schemas/NotificationV2.yaml b/openapi/components/schemas/NotificationV2.yaml index e13f08c9..d1422b05 100644 --- a/openapi/components/schemas/NotificationV2.yaml +++ b/openapi/components/schemas/NotificationV2.yaml @@ -14,11 +14,19 @@ properties: example: OneOf: - {} + - NotificationV2DataBadgeEarned - NotificationV2DataBoop - NotificationV2DataEventAnnouncement - NotificationV2DataGroupAnnouncement - NotificationV2DataGroupInformative - NotificationV2DataGroupTransfer + details: + type: object + description: Only boops appear to have this property + example: + OneOf: + - {} + - NotificationV2DetailsBoop expiresAt: type: string format: date-time diff --git a/openapi/components/schemas/NotificationV2DataBadgeEarned.yaml b/openapi/components/schemas/NotificationV2DataBadgeEarned.yaml new file mode 100644 index 00000000..fd298544 --- /dev/null +++ b/openapi/components/schemas/NotificationV2DataBadgeEarned.yaml @@ -0,0 +1,13 @@ +title: NotificationV2DataBadgeEarned +type: object +properties: + badgeDescription: + type: string + badgeId: + $ref: ./BadgeID.yaml + badgeName: + type: string +required: + - badgeDescription + - badgeId + - badgeName diff --git a/openapi/components/schemas/NotificationV2DataBoop.yaml b/openapi/components/schemas/NotificationV2DataBoop.yaml index 41c51aae..11896ba4 100644 --- a/openapi/components/schemas/NotificationV2DataBoop.yaml +++ b/openapi/components/schemas/NotificationV2DataBoop.yaml @@ -1,10 +1,7 @@ title: NotificationV2DataBoop type: object -description: Either inventoryItemId by itself, or emojiId with optional emojiVersion properties: - emojiId: - $ref: ../schemas/EmojiID.yaml - emojiVersion: - type: integer - inventoryItemId: - $ref: ../schemas/InventoryItemID.yaml + boopingUserDisplayName: + type: string +required: + - boopingUserDisplayName diff --git a/openapi/components/schemas/NotificationV2DetailsBoop.yaml b/openapi/components/schemas/NotificationV2DetailsBoop.yaml new file mode 100644 index 00000000..c9f5de1b --- /dev/null +++ b/openapi/components/schemas/NotificationV2DetailsBoop.yaml @@ -0,0 +1,15 @@ +title: NotificationV2DetailsBoop +type: object +description: Either inventoryItemId by itself, or emojiId with optional emojiVersion +properties: + emojiId: + $ref: ../schemas/EmojiID.yaml + emojiVersion: + type: integer + nullable: true + inventoryItemId: + $ref: ../schemas/InventoryItemID.yaml +required: + - emojiId + - emojiVersion + - inventoryItemId diff --git a/openapi/components/schemas/NotificationV2Type.yaml b/openapi/components/schemas/NotificationV2Type.yaml index ed0f59c3..b14b3490 100644 --- a/openapi/components/schemas/NotificationV2Type.yaml +++ b/openapi/components/schemas/NotificationV2Type.yaml @@ -9,6 +9,8 @@ enum: - economy.received.gift - event.announcement - group.announcement + - group.event.created + - group.event.starting - group.informative - group.invite - group.joinRequest From 554bc46d92f6133d9ad260a424195713e700e8a0 Mon Sep 17 00:00:00 2001 From: Vinyarion <38413862+VinyarionHyarmendacil@users.noreply.github.com> Date: Sun, 14 Dec 2025 03:42:39 -0600 Subject: [PATCH 12/19] Update NotificationV2ResponseType.yaml --- openapi/components/schemas/NotificationV2ResponseType.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/openapi/components/schemas/NotificationV2ResponseType.yaml b/openapi/components/schemas/NotificationV2ResponseType.yaml index b58c54f4..a9491871 100644 --- a/openapi/components/schemas/NotificationV2ResponseType.yaml +++ b/openapi/components/schemas/NotificationV2ResponseType.yaml @@ -1,8 +1,12 @@ title: NotificationV2ResponseType type: string example: > + Accept: + value: accept Boop: value: boop + Decline: + value: decline Delete: value: delete Unsubscribe: From f0e277c69e9bcf829df7f7b19b6bd82777df87bc Mon Sep 17 00:00:00 2001 From: Vinyarion <38413862+VinyarionHyarmendacil@users.noreply.github.com> Date: Tue, 16 Dec 2025 15:09:01 -0600 Subject: [PATCH 13/19] Add groupIds parameter to getUserAllGroupPermissions --- openapi/components/paths/users.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/openapi/components/paths/users.yaml b/openapi/components/paths/users.yaml index de2211ff..e21ce3f4 100644 --- a/openapi/components/paths/users.yaml +++ b/openapi/components/paths/users.yaml @@ -273,6 +273,13 @@ paths: description: Returns a mapping of GroupIDs to arrays of GroupPermissions. tags: - users + parameters: + - name: groupIds + description: Comma-separated list of GroupIDs to retrieve permissions for. + in: query + required: false + schema: + type: string security: - authCookie: [] responses: From af37f3496ccb87290b8bc585dfa8084276bc32dd Mon Sep 17 00:00:00 2001 From: Vinyarion <38413862+VinyarionHyarmendacil@users.noreply.github.com> Date: Tue, 16 Dec 2025 15:30:40 -0600 Subject: [PATCH 14/19] Update users.yaml --- openapi/components/paths/users.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/openapi/components/paths/users.yaml b/openapi/components/paths/users.yaml index e21ce3f4..6d6d0b65 100644 --- a/openapi/components/paths/users.yaml +++ b/openapi/components/paths/users.yaml @@ -275,11 +275,12 @@ paths: - users parameters: - name: groupIds - description: Comma-separated list of GroupIDs to retrieve permissions for. - in: query + description: Comma-separated (no spaces!) list of GroupIDs to retrieve permissions for. required: false + in: query schema: type: string + example: grp_00000000-0000-0000-0000-000000000000,grp_11111111-1111-1111-1111-111111111111 security: - authCookie: [] responses: From f8067afb26c549b0fe0ec9e8d68be93cadf629a4 Mon Sep 17 00:00:00 2001 From: Vinyarion <38413862+VinyarionHyarmendacil@users.noreply.github.com> Date: Tue, 16 Dec 2025 16:38:12 -0600 Subject: [PATCH 15/19] Add calendarEntryId property to CreateInstanceRequest --- openapi/components/requests/CreateInstanceRequest.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openapi/components/requests/CreateInstanceRequest.yaml b/openapi/components/requests/CreateInstanceRequest.yaml index 7c05998f..5b48b7b0 100644 --- a/openapi/components/requests/CreateInstanceRequest.yaml +++ b/openapi/components/requests/CreateInstanceRequest.yaml @@ -4,6 +4,8 @@ properties: ageGate: type: boolean default: false + calendarEntryId: + type: string canRequestInvite: type: boolean description: Only applies to invite type instances to make them invite+ From 86fc8fb2cd4c8bb420ed3ec88a84d4256212c0df Mon Sep 17 00:00:00 2001 From: Vinyarion <38413862+VinyarionHyarmendacil@users.noreply.github.com> Date: Wed, 17 Dec 2025 14:02:55 -0600 Subject: [PATCH 16/19] NotificationV2 data x-if, SentNotification details x-if, uploadImage body properties --- openapi/components/paths/files.yaml | 9 ++++-- .../schemas/NotificationDetailEmpty.yaml | 2 ++ .../schemas/NotificationDetailGeneric.yaml | 4 +++ .../components/schemas/NotificationV2.yaml | 30 +++++++++---------- .../schemas/NotificationV2DataEmpty.yaml | 2 ++ .../schemas/NotificationV2DataGeneric.yaml | 4 +++ .../components/schemas/SentNotification.yaml | 23 +++++++------- 7 files changed, 45 insertions(+), 29 deletions(-) create mode 100644 openapi/components/schemas/NotificationDetailEmpty.yaml create mode 100644 openapi/components/schemas/NotificationDetailGeneric.yaml create mode 100644 openapi/components/schemas/NotificationV2DataEmpty.yaml create mode 100644 openapi/components/schemas/NotificationV2DataGeneric.yaml diff --git a/openapi/components/paths/files.yaml b/openapi/components/paths/files.yaml index f8b161f6..5f4972c9 100644 --- a/openapi/components/paths/files.yaml +++ b/openapi/components/paths/files.yaml @@ -181,7 +181,7 @@ paths: properties: animationStyle: type: string - description: Animation style for sticker, required for emoji. + description: Animation style for sticker, required for emoji. Must be one of aura, bats, bees, bounce, cloud, confetti, crying, dislike, fire, idea, lasers, like, magnet, mistletoe, money, noise, orbit, pizza, rain, rotate, shake, snow, snowball, spin, splazh, stop, zzz. example: bats file: type: string @@ -193,13 +193,16 @@ paths: framesOverTime: type: integer description: Required for emojianimated. Animation frames per second (1-64) + loopStyle: + type: string + description: Optional for emojianimated. Must be either linear or pingpong. Defaults to linear. maskTag: type: string - description: Mask of the sticker, optional for emoji. + description: Mask of the sticker, optional for emoji. Must be one of square, circle, flower, heart, star, pow. example: square tag: type: string - description: Needs to be either icon, gallery, sticker, emoji, or emojianimated + description: Must be one of product, gallery, icon, emoji, emojianimated, sticker, avatargallery, listinggallery, avatarimage, bundle, admin. required: - file - tag diff --git a/openapi/components/schemas/NotificationDetailEmpty.yaml b/openapi/components/schemas/NotificationDetailEmpty.yaml new file mode 100644 index 00000000..fc874d4a --- /dev/null +++ b/openapi/components/schemas/NotificationDetailEmpty.yaml @@ -0,0 +1,2 @@ +title: NotificationDetailEmpty +type: object diff --git a/openapi/components/schemas/NotificationDetailGeneric.yaml b/openapi/components/schemas/NotificationDetailGeneric.yaml new file mode 100644 index 00000000..df5ac867 --- /dev/null +++ b/openapi/components/schemas/NotificationDetailGeneric.yaml @@ -0,0 +1,4 @@ +title: NotificationDetailGeneric +type: object +additionalProperties: + type: string diff --git a/openapi/components/schemas/NotificationV2.yaml b/openapi/components/schemas/NotificationV2.yaml index d1422b05..20fa8840 100644 --- a/openapi/components/schemas/NotificationV2.yaml +++ b/openapi/components/schemas/NotificationV2.yaml @@ -10,23 +10,21 @@ properties: type: string format: date-time data: - type: object - example: - OneOf: - - {} - - NotificationV2DataBadgeEarned - - NotificationV2DataBoop - - NotificationV2DataEventAnnouncement - - NotificationV2DataGroupAnnouncement - - NotificationV2DataGroupInformative - - NotificationV2DataGroupTransfer + x-if: + when: jsonschema + then: + oneOf: + - $ref: ./NotificationV2DataEmpty.yaml + - $ref: ./NotificationV2DataBadgeEarned.yaml + - $ref: ./NotificationV2DataBoop.yaml + - $ref: ./NotificationV2DataEventAnnouncement.yaml + - $ref: ./NotificationV2DataGroupAnnouncement.yaml + - $ref: ./NotificationV2DataGroupInformative.yaml + - $ref: ./NotificationV2DataGroupTransfer.yaml + else: + - $ref: ./NotificationV2DataGeneric.yaml details: - type: object - description: Only boops appear to have this property - example: - OneOf: - - {} - - NotificationV2DetailsBoop + - $ref: ./NotificationV2DetailsBoop.yaml expiresAt: type: string format: date-time diff --git a/openapi/components/schemas/NotificationV2DataEmpty.yaml b/openapi/components/schemas/NotificationV2DataEmpty.yaml new file mode 100644 index 00000000..61db4d34 --- /dev/null +++ b/openapi/components/schemas/NotificationV2DataEmpty.yaml @@ -0,0 +1,2 @@ +title: NotificationV2DataEmpty +type: object diff --git a/openapi/components/schemas/NotificationV2DataGeneric.yaml b/openapi/components/schemas/NotificationV2DataGeneric.yaml new file mode 100644 index 00000000..a07dd271 --- /dev/null +++ b/openapi/components/schemas/NotificationV2DataGeneric.yaml @@ -0,0 +1,4 @@ +title: NotificationV2DataGeneric +type: object +additionalProperties: + type: string diff --git a/openapi/components/schemas/SentNotification.yaml b/openapi/components/schemas/SentNotification.yaml index ed57bb71..c8704fef 100644 --- a/openapi/components/schemas/SentNotification.yaml +++ b/openapi/components/schemas/SentNotification.yaml @@ -6,16 +6,19 @@ properties: type: string format: date-time details: - type: object - example: - OneOf: - - {} - - NotificationDetailBoop - - NotificationDetailInvite - - NotificationDetailInviteResponse - - NotificationDetailRequestInvite - - NotificationDetailRequestInviteResponse - - NotificationDetailVoteToKick + x-if: + when: jsonschema + then: + oneOf: + - $ref: ./NotificationDetailEmpty.yaml + - $ref: ./NotificationDetailBoop.yaml + - $ref: ./NotificationDetailInvite.yaml + - $ref: ./NotificationDetailInviteResponse.yaml + - $ref: ./NotificationDetailRequestInvite.yaml + - $ref: ./NotificationDetailRequestInviteResponse.yaml + - $ref: ./NotificationDetailVoteToKick.yaml + else: + - $ref: ./NotificationDetailGeneric.yaml id: type: string minLength: 1 From 7ea6235d506902bc6a36a586beef21ae9b5e1cf5 Mon Sep 17 00:00:00 2001 From: Vinyarion <38413862+VinyarionHyarmendacil@users.noreply.github.com> Date: Wed, 17 Dec 2025 17:12:25 -0600 Subject: [PATCH 17/19] fix NotificationV2 details property schema reference, enumize uploadFile and File properties --- openapi/components/paths/files.yaml | 22 ++++++------- openapi/components/schemas/File.yaml | 21 +++++++++--- .../schemas/ImageAnimationStyle.yaml | 32 +++++++++++++++++++ .../components/schemas/ImageLoopStyle.yaml | 7 ++++ openapi/components/schemas/ImageMask.yaml | 12 +++++++ openapi/components/schemas/ImageType.yaml | 17 ++++++++++ .../components/schemas/NotificationV2.yaml | 2 +- 7 files changed, 96 insertions(+), 17 deletions(-) create mode 100644 openapi/components/schemas/ImageAnimationStyle.yaml create mode 100644 openapi/components/schemas/ImageLoopStyle.yaml create mode 100644 openapi/components/schemas/ImageMask.yaml create mode 100644 openapi/components/schemas/ImageType.yaml diff --git a/openapi/components/paths/files.yaml b/openapi/components/paths/files.yaml index 5f4972c9..73c503e9 100644 --- a/openapi/components/paths/files.yaml +++ b/openapi/components/paths/files.yaml @@ -180,29 +180,27 @@ paths: type: object properties: animationStyle: - type: string - description: Animation style for sticker, required for emoji. Must be one of aura, bats, bees, bounce, cloud, confetti, crying, dislike, fire, idea, lasers, like, magnet, mistletoe, money, noise, orbit, pizza, rain, rotate, shake, snow, snowball, spin, splazh, stop, zzz. - example: bats + $ref: ../schemas/ImageAnimationStyle.yaml file: type: string description: The binary blob of the png file. format: binary frames: type: integer - description: Required for emojianimated. Total number of frames to be animated (2-64) + description: Required for animated images. Total number of frames of the spritesheet to be animated. + maximum: 64 + minimum: 2 framesOverTime: type: integer - description: Required for emojianimated. Animation frames per second (1-64) + description: Required for animated images. Animation frames per second. + maximum: 64 + minimum: 1 loopStyle: - type: string - description: Optional for emojianimated. Must be either linear or pingpong. Defaults to linear. + $ref: ../schemas/ImageLoopStyle.yaml maskTag: - type: string - description: Mask of the sticker, optional for emoji. Must be one of square, circle, flower, heart, star, pow. - example: square + $ref: ../schemas/ImageMask.yaml tag: - type: string - description: Must be one of product, gallery, icon, emoji, emojianimated, sticker, avatargallery, listinggallery, avatarimage, bundle, admin. + $ref: ../schemas/ImagePurpose.yaml required: - file - tag diff --git a/openapi/components/schemas/File.yaml b/openapi/components/schemas/File.yaml index d01d518a..6b9feffe 100644 --- a/openapi/components/schemas/File.yaml +++ b/openapi/components/schemas/File.yaml @@ -3,19 +3,32 @@ type: object description: "" properties: animationStyle: - type: string - example: bats + $ref: ./ImageAnimationStyle.yaml extension: type: string example: .unitypackage minLength: 1 + frames: + type: integer + description: The number of frames for animated spritesheet images. + maximum: 64 + minimum: 2 + framesOverTime: + type: integer + description: The frames per second for animated spritesheet images. + maximum: 64 + minimum: 1 id: $ref: ./FileID.yaml + loopStyle: + $ref: ./ImageLoopStyle.yaml maskTag: - type: string - example: square + $ref: ./ImageMask.yaml mimeType: $ref: ./MIMEType.yaml + modifiedThumbnailFileName: + type: string + example: thumbnails/file_00000000-0000-0000-0000-000000000000.ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff.1.modified-thumbnail-256.png name: type: string description: "" diff --git a/openapi/components/schemas/ImageAnimationStyle.yaml b/openapi/components/schemas/ImageAnimationStyle.yaml new file mode 100644 index 00000000..544918ef --- /dev/null +++ b/openapi/components/schemas/ImageAnimationStyle.yaml @@ -0,0 +1,32 @@ +title: ImageAnimationStyle +type: string +description: Animation style for images. +enum: + - aura + - bats + - bees + - bounce + - cloud + - confetti + - crying + - dislike + - fire + - idea + - lasers + - like + - magnet + - mistletoe + - money + - noise + - orbit + - pizza + - rain + - rotate + - shake + - snow + - snowball + - spin + - splash + - stop + - zzz +example: bats diff --git a/openapi/components/schemas/ImageLoopStyle.yaml b/openapi/components/schemas/ImageLoopStyle.yaml new file mode 100644 index 00000000..cb8d3ac4 --- /dev/null +++ b/openapi/components/schemas/ImageLoopStyle.yaml @@ -0,0 +1,7 @@ +title: ImageLoopStyle +type: string +description: Animation looping style for images. +enum: + - linear + - pingpong +default: linear diff --git a/openapi/components/schemas/ImageMask.yaml b/openapi/components/schemas/ImageMask.yaml new file mode 100644 index 00000000..4a6fe4fe --- /dev/null +++ b/openapi/components/schemas/ImageMask.yaml @@ -0,0 +1,12 @@ +title: ImageMask +type: string +description: Mask shape for images. +enum: + - circle + - flower + - heart + - pow + - square + - star +default: square +example: circle diff --git a/openapi/components/schemas/ImageType.yaml b/openapi/components/schemas/ImageType.yaml new file mode 100644 index 00000000..a1e07213 --- /dev/null +++ b/openapi/components/schemas/ImageType.yaml @@ -0,0 +1,17 @@ +title: ImagePurpose +type: string +description: Indication of the purpose for uploading images. +enum: + - admin + - avatargallery + - avatarimage + - bundle + - emoji + - emojianimated + - gallery + - icon + - listinggallery + - product + - sticker +default: gallery +example: emojianimated diff --git a/openapi/components/schemas/NotificationV2.yaml b/openapi/components/schemas/NotificationV2.yaml index 20fa8840..fb2dbeb2 100644 --- a/openapi/components/schemas/NotificationV2.yaml +++ b/openapi/components/schemas/NotificationV2.yaml @@ -24,7 +24,7 @@ properties: else: - $ref: ./NotificationV2DataGeneric.yaml details: - - $ref: ./NotificationV2DetailsBoop.yaml + $ref: ./NotificationV2DetailsBoop.yaml expiresAt: type: string format: date-time From 4437da97eb0d8069ffbe042532485c2946d2d455 Mon Sep 17 00:00:00 2001 From: Vinyarion <38413862+VinyarionHyarmendacil@users.noreply.github.com> Date: Wed, 17 Dec 2025 17:15:13 -0600 Subject: [PATCH 18/19] ah yes, renaming a file deletes the old one and creates a new one, very logical --- openapi/components/schemas/{ImageType.yaml => ImagePurpose.yaml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename openapi/components/schemas/{ImageType.yaml => ImagePurpose.yaml} (100%) diff --git a/openapi/components/schemas/ImageType.yaml b/openapi/components/schemas/ImagePurpose.yaml similarity index 100% rename from openapi/components/schemas/ImageType.yaml rename to openapi/components/schemas/ImagePurpose.yaml From 1b11ff8d9279b19f2af3af34d9c8b4b38322bd0a Mon Sep 17 00:00:00 2001 From: Vinyarion <38413862+VinyarionHyarmendacil@users.noreply.github.com> Date: Wed, 17 Dec 2025 18:38:02 -0600 Subject: [PATCH 19/19] Ctrl+X Crtl+V --- openapi/components/schemas/NotificationV2.yaml | 2 +- openapi/components/schemas/SentNotification.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openapi/components/schemas/NotificationV2.yaml b/openapi/components/schemas/NotificationV2.yaml index fb2dbeb2..8f673483 100644 --- a/openapi/components/schemas/NotificationV2.yaml +++ b/openapi/components/schemas/NotificationV2.yaml @@ -22,7 +22,7 @@ properties: - $ref: ./NotificationV2DataGroupInformative.yaml - $ref: ./NotificationV2DataGroupTransfer.yaml else: - - $ref: ./NotificationV2DataGeneric.yaml + $ref: ./NotificationV2DataGeneric.yaml details: $ref: ./NotificationV2DetailsBoop.yaml expiresAt: diff --git a/openapi/components/schemas/SentNotification.yaml b/openapi/components/schemas/SentNotification.yaml index c8704fef..1f49a160 100644 --- a/openapi/components/schemas/SentNotification.yaml +++ b/openapi/components/schemas/SentNotification.yaml @@ -18,7 +18,7 @@ properties: - $ref: ./NotificationDetailRequestInviteResponse.yaml - $ref: ./NotificationDetailVoteToKick.yaml else: - - $ref: ./NotificationDetailGeneric.yaml + $ref: ./NotificationDetailGeneric.yaml id: type: string minLength: 1