diff --git a/.gitmodules b/.gitmodules
index b3e72e9d6..ab5a6af0a 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -128,3 +128,8 @@
url = https://github.com/distilled-mirror/spec-mirror-modal.git
ignore = dirty
shallow = true
+[submodule "packages/modrinth/specs/spec-mirror-modrinth"]
+ path = packages/modrinth/specs/spec-mirror-modrinth
+ url = https://github.com/distilled-mirror/spec-mirror-modrinth.git
+ ignore = dirty
+ shallow = true
diff --git a/packages/modrinth/.generated-specs/modrinth.json b/packages/modrinth/.generated-specs/modrinth.json
new file mode 100644
index 000000000..d3a05b98c
--- /dev/null
+++ b/packages/modrinth/.generated-specs/modrinth.json
@@ -0,0 +1,10950 @@
+{
+ "smithy": "2.0",
+ "metadata": {
+ "suppressions": [
+ {
+ "id": "HttpUriConflict",
+ "namespace": "*"
+ },
+ {
+ "id": "HttpMethodSemantics",
+ "namespace": "*"
+ },
+ {
+ "id": "UnreferencedShape",
+ "namespace": "*"
+ }
+ ]
+ },
+ "shapes": {
+ "com.modrinth.api#SearchProjectsRequestIndex": {
+ "type": "enum",
+ "members": {
+ "RELEVANCE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "relevance"
+ }
+ },
+ "DOWNLOADS": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "downloads"
+ }
+ },
+ "FOLLOWS": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "follows"
+ }
+ },
+ "NEWEST": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "newest"
+ }
+ },
+ "UPDATED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "updated"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#SearchProjectsRequest": {
+ "type": "structure",
+ "members": {
+ "query": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpQuery": "query",
+ "smithy.api#documentation": "The query to search for"
+ }
+ },
+ "facets": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpQuery": "facets",
+ "smithy.api#documentation": "Facets are an essential concept for understanding how to filter out results.\n\nThese are the most commonly used facet types:\n- `project_type`\n- `all_project_types` (matches against every project type across all of the project's versions, not just the primary/version-specific type)\n- `categories` (loaders are lumped in with categories in search)\n- `versions`\n- `open_source`\n- `environment` (one of the following values)\n - `client_and_server`\n - `client_only`\n - `client_only_server_optional`\n - `singleplayer_only`\n - `server_only`\n - `server_only_client_optional`\n - `dedicated_server_only`\n - `client_or_server`\n - `client_or_server_prefers_both`\n - `unknown`\n- `disclosure_types` (list of any of the following values)\n - `ai_content`\n - `ai_content_code`\n - `ai_content_assets`\n - `ai_content_text`\n - `ai_content_functionality`\n - `advertisements`\n - `epilepsy_triggers`\n - `system_interactions`\n - `telemetry`\n - `telemetry_opt_in`\n - `telemetry_opt_out`\n - `telemetry_always_active`\n - `derivative_work`\n - `paid_features`\n - `archived`\n- `client_side` (deprecated - use `environment` instead)\n- `server_side` (deprecated - use `environment` instead)\n\nSeveral others are also available for use, though these should not be used outside very specific use cases.\n- `title`\n- `author`\n- `follows`\n- `project_id`\n- `license`\n- `downloads`\n- `created_timestamp` (uses Unix timestamp)\n- `modified_timestamp` (uses Unix timestamp)\n\nIn order to then use these facets, you need a value to filter by, as well as an operation to perform on this value.\nThe most common operation is `:` (same as `=`), though you can also use `!=`, `>=`, `>`, `<=`, and `<`.\nJoin together the type, operation, and value, and you've got your string.\n```\n{type} {operation} {value}\n```\n\nExamples:\n```\ncategories = adventure\nversions != 1.20.1\ndownloads <= 100\n```\n\nYou then join these strings together in arrays to signal `AND` and `OR` operators.\n\n##### OR\nAll elements in a single array are considered to be joined by OR statements.\nFor example, the search `[[\"versions:1.16.5\", \"versions:1.17.1\"]]` translates to `Projects that support 1.16.5 OR 1.17.1`.\n\n##### AND\nSeparate arrays are considered to be joined by AND statements.\nFor example, the search `[[\"versions:1.16.5\"], [\"project_type:modpack\"]]` translates to `Projects that support 1.16.5 AND are modpacks`.\n"
+ }
+ },
+ "index": {
+ "target": "com.modrinth.api#SearchProjectsRequestIndex",
+ "traits": {
+ "smithy.api#httpQuery": "index",
+ "smithy.api#documentation": "The sorting method used for sorting search results"
+ }
+ },
+ "offset": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#httpQuery": "offset",
+ "smithy.api#documentation": "The offset into the search. Skips this number of results"
+ }
+ },
+ "limit": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#httpQuery": "limit",
+ "smithy.api#documentation": "The number of results returned by the search"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#SearchResults": {
+ "type": "structure",
+ "members": {
+ "hits": {
+ "target": "com.modrinth.api#SearchResultsHitsList",
+ "traits": {
+ "smithy.api#documentation": "The list of results",
+ "smithy.api#required": {}
+ }
+ },
+ "offset": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "The number of results that were skipped by the query",
+ "smithy.api#required": {}
+ }
+ },
+ "limit": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "The number of results that were returned by the query",
+ "smithy.api#required": {}
+ }
+ },
+ "total_hits": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "The total number of results that match the query",
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#ProjectResult": {
+ "type": "structure",
+ "members": {
+ "project_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the project, encoded as a base62 string",
+ "smithy.api#required": {}
+ }
+ },
+ "project_type": {
+ "target": "com.modrinth.api#ProjectResultProjectType",
+ "traits": {
+ "smithy.api#documentation": "The project type of the project",
+ "smithy.api#required": {}
+ }
+ },
+ "all_project_types": {
+ "target": "com.modrinth.api#ProjectResultAllProjectTypesList",
+ "traits": {
+ "smithy.api#documentation": "All project types across every version of the project, unlike `project_type` which only reflects a version-specific type",
+ "smithy.api#required": {}
+ }
+ },
+ "title": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The title or name of the project",
+ "smithy.api#required": {}
+ }
+ },
+ "description": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "A short sentence summarizing the project, no more than a sentence or two.",
+ "smithy.api#required": {}
+ }
+ },
+ "author": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The username of the project's author",
+ "smithy.api#required": {}
+ }
+ },
+ "categories": {
+ "target": "com.modrinth.api#ProjectResultCategoriesList",
+ "traits": {
+ "smithy.api#documentation": "A list of the featured categories that the project has.",
+ "smithy.api#required": {}
+ }
+ },
+ "display_categories": {
+ "target": "com.modrinth.api#ProjectResultDisplayCategoriesList",
+ "traits": {
+ "smithy.api#documentation": "A list of the featured categories that the project has. Equivalent to `categories` on the project itself.",
+ "smithy.api#required": {}
+ }
+ },
+ "versions": {
+ "target": "com.modrinth.api#ProjectResultVersionsList",
+ "traits": {
+ "smithy.api#documentation": "A list of the minecraft versions supported by the project",
+ "smithy.api#required": {}
+ }
+ },
+ "downloads": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "The total number of downloads of the project",
+ "smithy.api#required": {}
+ }
+ },
+ "follows": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "The total number of users following the project",
+ "smithy.api#required": {}
+ }
+ },
+ "icon_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The URL of the project's icon",
+ "smithy.api#required": {}
+ }
+ },
+ "date_created": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The date the project was created",
+ "smithy.api#required": {}
+ }
+ },
+ "date_modified": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The date the latest version of the project was created",
+ "smithy.api#required": {}
+ }
+ },
+ "latest_version": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the latest version of the project",
+ "smithy.api#required": {}
+ }
+ },
+ "license": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The SPDX license ID of a project",
+ "smithy.api#required": {}
+ }
+ },
+ "environment": {
+ "target": "com.modrinth.api#ProjectResultEnvironmentList",
+ "traits": {
+ "smithy.api#documentation": "All the environments that versions of this project support. Not in any particular order, we recommend using the environment information on a version instead. For an explanation of each environment, see the blog post here: https://modrinth.com/news/article/new-environments/#new-system",
+ "smithy.api#required": {}
+ }
+ },
+ "disclosure_types": {
+ "target": "com.modrinth.api#ProjectResultDisclosureTypesList",
+ "traits": {
+ "smithy.api#documentation": "Disclosures listed on the project.",
+ "smithy.api#required": {}
+ }
+ },
+ "gallery": {
+ "target": "com.modrinth.api#ProjectResultGalleryList",
+ "traits": {
+ "smithy.api#documentation": "A list of images that have been uploaded to the project's gallery",
+ "smithy.api#required": {}
+ }
+ },
+ "slug": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The slug of a project, used for vanity URLs. Regex: ```^[\\w!@$()`.+,\"\\-']{3,64}$```",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "author_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the project's author",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "organization": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The name of the organization that owns this project",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "organization_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the organization that owns this project",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "featured_gallery": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The featured gallery image of the project",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "color": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "The RGB color of the project, automatically generated from the project icon",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "client_side": {
+ "target": "com.modrinth.api#ProjectResultClientSide",
+ "traits": {
+ "smithy.api#documentation": "Deprecated - use `environment` instead. The client side support of the project",
+ "smithy.api#required": {}
+ }
+ },
+ "server_side": {
+ "target": "com.modrinth.api#ProjectResultServerSide",
+ "traits": {
+ "smithy.api#documentation": "Deprecated - use `environment` instead. The server side support of the project",
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#ProjectResultProjectType": {
+ "type": "enum",
+ "members": {
+ "MOD": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "mod"
+ }
+ },
+ "MODPACK": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "modpack"
+ }
+ },
+ "RESOURCEPACK": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "resourcepack"
+ }
+ },
+ "SHADER": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "shader"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The project type of the project"
+ }
+ },
+ "com.modrinth.api#ProjectResultAllProjectTypesItem": {
+ "type": "enum",
+ "members": {
+ "MOD": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "mod"
+ }
+ },
+ "RESOURCEPACK": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "resourcepack"
+ }
+ },
+ "DATAPACK": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "datapack"
+ }
+ },
+ "SHADER": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "shader"
+ }
+ },
+ "MODPACK": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "modpack"
+ }
+ },
+ "PLUGIN": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "plugin"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#ProjectResultAllProjectTypesList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#ProjectResultAllProjectTypesItem"
+ },
+ "traits": {
+ "smithy.api#documentation": "All project types across every version of the project, unlike `project_type` which only reflects a version-specific type"
+ }
+ },
+ "com.modrinth.api#ProjectResultCategoriesList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of the featured categories that the project has."
+ }
+ },
+ "com.modrinth.api#ProjectResultDisplayCategoriesList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of the featured categories that the project has. Equivalent to `categories` on the project itself."
+ }
+ },
+ "com.modrinth.api#ProjectResultVersionsList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of the minecraft versions supported by the project"
+ }
+ },
+ "com.modrinth.api#EnvironmentEnum": {
+ "type": "enum",
+ "members": {
+ "CLIENT_AND_SERVER": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "client_and_server"
+ }
+ },
+ "CLIENT_ONLY": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "client_only"
+ }
+ },
+ "CLIENT_ONLY_SERVER_OPTIONAL": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "client_only_server_optional"
+ }
+ },
+ "SINGLEPLAYER_ONLY": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "singleplayer_only"
+ }
+ },
+ "SERVER_ONLY": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "server_only"
+ }
+ },
+ "SERVER_ONLY_CLIENT_OPTIONAL": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "server_only_client_optional"
+ }
+ },
+ "DEDICATED_SERVER_ONLY": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "dedicated_server_only"
+ }
+ },
+ "CLIENT_OR_SERVER": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "client_or_server"
+ }
+ },
+ "CLIENT_OR_SERVER_PREFERS_BOTH": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "client_or_server_prefers_both"
+ }
+ },
+ "UNKNOWN": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unknown"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The environment a project or version supports. For an explanation of each environment, see the blog post here: https://modrinth.com/news/article/new-environments/#new-system"
+ }
+ },
+ "com.modrinth.api#ProjectResultEnvironmentList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#EnvironmentEnum"
+ },
+ "traits": {
+ "smithy.api#documentation": "All the environments that versions of this project support. Not in any particular order, we recommend using the environment information on a version instead. For an explanation of each environment, see the blog post here: https://modrinth.com/news/article/new-environments/#new-system"
+ }
+ },
+ "com.modrinth.api#DisclosureTypeEnum": {
+ "type": "enum",
+ "members": {
+ "AI_CONTENT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "ai_content"
+ }
+ },
+ "AI_CONTENT_CODE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "ai_content_code"
+ }
+ },
+ "AI_CONTENT_ASSETS": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "ai_content_assets"
+ }
+ },
+ "AI_CONTENT_TEXT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "ai_content_text"
+ }
+ },
+ "AI_CONTENT_FUNCTIONALITY": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "ai_content_functionality"
+ }
+ },
+ "ADVERTISEMENTS": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "advertisements"
+ }
+ },
+ "EPILEPSY_TRIGGERS": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "epilepsy_triggers"
+ }
+ },
+ "SYSTEM_INTERACTIONS": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "system_interactions"
+ }
+ },
+ "TELEMETRY": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "telemetry"
+ }
+ },
+ "TELEMETRY_OPT_IN": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "telemetry_opt_in"
+ }
+ },
+ "TELEMETRY_OPT_OUT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "telemetry_opt_out"
+ }
+ },
+ "TELEMETRY_ALWAYS_ACTIVE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "telemetry_always_active"
+ }
+ },
+ "DERIVATIVE_WORK": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "derivative_work"
+ }
+ },
+ "PAID_FEATURES": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "paid_features"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#ProjectResultDisclosureTypesList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#DisclosureTypeEnum"
+ },
+ "traits": {
+ "smithy.api#documentation": "Disclosures listed on the project."
+ }
+ },
+ "com.modrinth.api#ProjectResultGalleryList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of images that have been uploaded to the project's gallery"
+ }
+ },
+ "com.modrinth.api#ProjectResultClientSide": {
+ "type": "enum",
+ "members": {
+ "REQUIRED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "required"
+ }
+ },
+ "OPTIONAL": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "optional"
+ }
+ },
+ "UNSUPPORTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unsupported"
+ }
+ },
+ "UNKNOWN": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unknown"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "Deprecated - use `environment` instead. The client side support of the project"
+ }
+ },
+ "com.modrinth.api#ProjectResultServerSide": {
+ "type": "enum",
+ "members": {
+ "REQUIRED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "required"
+ }
+ },
+ "OPTIONAL": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "optional"
+ }
+ },
+ "UNSUPPORTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unsupported"
+ }
+ },
+ "UNKNOWN": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unknown"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "Deprecated - use `environment` instead. The server side support of the project"
+ }
+ },
+ "com.modrinth.api#SearchResultsHitsList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#ProjectResult"
+ },
+ "traits": {
+ "smithy.api#documentation": "The list of results"
+ }
+ },
+ "com.modrinth.api#SearchProjects": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#SearchProjectsRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#SearchResults"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#BadRequest"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/search",
+ "code": 200
+ },
+ "smithy.api#documentation": "Search projects"
+ }
+ },
+ "com.modrinth.api#GetProjectRequest": {
+ "type": "structure",
+ "members": {
+ "id_slug": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID or slug of the project"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#Project": {
+ "type": "structure",
+ "members": {
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the project, encoded as a base62 string",
+ "smithy.api#required": {}
+ }
+ },
+ "team": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the team that has ownership of this project",
+ "smithy.api#required": {}
+ }
+ },
+ "title": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The title or name of the project",
+ "smithy.api#required": {}
+ }
+ },
+ "description": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "A short sentence summarizing the project, no more than a sentence or two.",
+ "smithy.api#required": {}
+ }
+ },
+ "body": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "A long form description of the project",
+ "smithy.api#required": {}
+ }
+ },
+ "status": {
+ "target": "com.modrinth.api#ProjectStatus",
+ "traits": {
+ "smithy.api#documentation": "The status of the project",
+ "smithy.api#required": {}
+ }
+ },
+ "project_type": {
+ "target": "com.modrinth.api#ProjectProjectType",
+ "traits": {
+ "smithy.api#documentation": "The project type of the project",
+ "smithy.api#required": {}
+ }
+ },
+ "categories": {
+ "target": "com.modrinth.api#ProjectCategoriesList",
+ "traits": {
+ "smithy.api#documentation": "A list of the featured categories that the project has.",
+ "smithy.api#required": {}
+ }
+ },
+ "additional_categories": {
+ "target": "com.modrinth.api#ProjectAdditionalCategoriesList",
+ "traits": {
+ "smithy.api#documentation": "A list of additional categories that the project also has. These are supplementary to the featured categories, and does not include them again.",
+ "smithy.api#required": {}
+ }
+ },
+ "environment": {
+ "target": "com.modrinth.api#ProjectEnvironmentList",
+ "traits": {
+ "smithy.api#documentation": "All the environments that versions of this project support. Not in any particular order, we recommend using the environment information on a version instead. For an explanation of each environment, see the blog post here: https://modrinth.com/news/article/new-environments/#new-system",
+ "smithy.api#required": {}
+ }
+ },
+ "game_versions": {
+ "target": "com.modrinth.api#ProjectGameVersionsList",
+ "traits": {
+ "smithy.api#documentation": "A list of all of the game versions supported by the project",
+ "smithy.api#required": {}
+ }
+ },
+ "loaders": {
+ "target": "com.modrinth.api#ProjectLoadersList",
+ "traits": {
+ "smithy.api#documentation": "A list of all of the loaders supported by the project. These vary based on project type.",
+ "smithy.api#required": {}
+ }
+ },
+ "versions": {
+ "target": "com.modrinth.api#ProjectVersionsList",
+ "traits": {
+ "smithy.api#documentation": "A list of the version IDs of the project",
+ "smithy.api#required": {}
+ }
+ },
+ "license": {
+ "target": "com.modrinth.api#ProjectLicense",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ },
+ "published": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The date the project was created",
+ "smithy.api#required": {}
+ }
+ },
+ "updated": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The date the latest version of the project was created",
+ "smithy.api#required": {}
+ }
+ },
+ "downloads": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "The total number of downloads of the project",
+ "smithy.api#required": {}
+ }
+ },
+ "followers": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "The total number of users following the project",
+ "smithy.api#required": {}
+ }
+ },
+ "gallery": {
+ "target": "com.modrinth.api#ProjectGalleryList",
+ "traits": {
+ "smithy.api#documentation": "A list of images that have been uploaded to the project's gallery",
+ "smithy.api#required": {}
+ }
+ },
+ "thread_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the moderation thread associated with this project",
+ "smithy.api#required": {}
+ }
+ },
+ "monetization_status": {
+ "target": "com.modrinth.api#ProjectMonetizationStatus",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ },
+ "slug": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The slug of a project, used for vanity URLs. Regex: ```^[\\w!@$()`.+,\"\\-']{3,64}$```",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "organization": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the organization that owns this project",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "requested_status": {
+ "target": "com.modrinth.api#ProjectRequestedStatus",
+ "traits": {
+ "smithy.api#documentation": "The requested status when submitting for review or scheduling the project for release. Approved status refers to \"Public\" visibility.",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "approved": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The date the project was first published",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "queued": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The date the project's status was submitted to moderators for review",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "icon_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The URL of the project's icon",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "raw_icon_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The URL of the project's icon without CDN transforms applied",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "color": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "The RGB color of the project, automatically generated from the project icon",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "issues_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "An optional link to where to submit bugs or issues with the project",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "source_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "An optional link to the source code of the project",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "wiki_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "An optional link to the project's wiki page or other relevant information",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "discord_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "An optional invite link to the project's discord.",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "donation_urls": {
+ "target": "com.modrinth.api#ProjectDonationUrlsList",
+ "traits": {
+ "smithy.api#documentation": "A list of donation links for the project",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "client_side": {
+ "target": "com.modrinth.api#ProjectClientSide",
+ "traits": {
+ "smithy.api#documentation": "Deprecated - use `environment` instead.",
+ "smithy.api#required": {}
+ }
+ },
+ "server_side": {
+ "target": "com.modrinth.api#ProjectServerSide",
+ "traits": {
+ "smithy.api#documentation": "Deprecated - use `environment` instead.",
+ "smithy.api#required": {}
+ }
+ },
+ "body_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "Deprecated - The link to the long description of the project. Always null, only kept for legacy compatibility.",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "moderator_message": {
+ "target": "com.modrinth.api#ModeratorMessage",
+ "traits": {
+ "com.distilled.openapi#nullable": {}
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#ProjectStatus": {
+ "type": "enum",
+ "members": {
+ "APPROVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "approved"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "REJECTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "rejected"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ },
+ "PROCESSING": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "processing"
+ }
+ },
+ "WITHHELD": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "withheld"
+ }
+ },
+ "SCHEDULED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "scheduled"
+ }
+ },
+ "PRIVATE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "private"
+ }
+ },
+ "UNKNOWN": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unknown"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The status of the project"
+ }
+ },
+ "com.modrinth.api#ProjectProjectType": {
+ "type": "enum",
+ "members": {
+ "MOD": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "mod"
+ }
+ },
+ "MODPACK": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "modpack"
+ }
+ },
+ "RESOURCEPACK": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "resourcepack"
+ }
+ },
+ "SHADER": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "shader"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The project type of the project"
+ }
+ },
+ "com.modrinth.api#ProjectCategoriesList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of the featured categories that the project has."
+ }
+ },
+ "com.modrinth.api#ProjectAdditionalCategoriesList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of additional categories that the project also has. These are supplementary to the featured categories, and does not include them again."
+ }
+ },
+ "com.modrinth.api#ProjectEnvironmentList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#EnvironmentEnum"
+ },
+ "traits": {
+ "smithy.api#documentation": "All the environments that versions of this project support. Not in any particular order, we recommend using the environment information on a version instead. For an explanation of each environment, see the blog post here: https://modrinth.com/news/article/new-environments/#new-system"
+ }
+ },
+ "com.modrinth.api#ProjectGameVersionsList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of all of the game versions supported by the project"
+ }
+ },
+ "com.modrinth.api#ProjectLoadersList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of all of the loaders supported by the project. These vary based on project type."
+ }
+ },
+ "com.modrinth.api#ProjectVersionsList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of the version IDs of the project"
+ }
+ },
+ "com.modrinth.api#ProjectLicense": {
+ "type": "structure",
+ "members": {
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The SPDX license ID of a project"
+ }
+ },
+ "name": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The long name of a license"
+ }
+ },
+ "url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The URL to this license",
+ "com.distilled.openapi#nullable": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The license of the project"
+ }
+ },
+ "com.modrinth.api#GalleryImage": {
+ "type": "structure",
+ "members": {
+ "url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The URL of the gallery image",
+ "smithy.api#required": {}
+ }
+ },
+ "featured": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether the image is featured in the gallery",
+ "smithy.api#required": {}
+ }
+ },
+ "title": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The title of the gallery image",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "description": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The description of the gallery image",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "created": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The date and time the gallery image was created",
+ "smithy.api#required": {}
+ }
+ },
+ "ordering": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "The order of the gallery image. Gallery images are sorted by this field and then alphabetically by title."
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#ProjectGalleryList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#GalleryImage"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of images that have been uploaded to the project's gallery"
+ }
+ },
+ "com.modrinth.api#ProjectMonetizationStatus": {
+ "type": "enum",
+ "members": {
+ "MONETIZED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "monetized"
+ }
+ },
+ "DEMONETIZED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "demonetized"
+ }
+ },
+ "FORCE_DEMONETIZED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "force-demonetized"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#ProjectRequestedStatus": {
+ "type": "enum",
+ "members": {
+ "APPROVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "approved"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ },
+ "PRIVATE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "private"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The requested status when submitting for review or scheduling the project for release. Approved status refers to \"Public\" visibility."
+ }
+ },
+ "com.modrinth.api#ProjectDonationURL": {
+ "type": "structure",
+ "members": {
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the donation platform"
+ }
+ },
+ "platform": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The donation platform this link is to"
+ }
+ },
+ "url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The URL of the donation platform and user"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#ProjectDonationUrlsList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#ProjectDonationURL"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of donation links for the project"
+ }
+ },
+ "com.modrinth.api#ProjectClientSide": {
+ "type": "enum",
+ "members": {
+ "REQUIRED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "required"
+ }
+ },
+ "OPTIONAL": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "optional"
+ }
+ },
+ "UNSUPPORTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unsupported"
+ }
+ },
+ "UNKNOWN": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unknown"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "Deprecated - use `environment` instead."
+ }
+ },
+ "com.modrinth.api#ProjectServerSide": {
+ "type": "enum",
+ "members": {
+ "REQUIRED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "required"
+ }
+ },
+ "OPTIONAL": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "optional"
+ }
+ },
+ "UNSUPPORTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unsupported"
+ }
+ },
+ "UNKNOWN": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unknown"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "Deprecated - use `environment` instead."
+ }
+ },
+ "com.modrinth.api#ModeratorMessage": {
+ "type": "structure",
+ "members": {
+ "message": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The message that a moderator has left for the project"
+ }
+ },
+ "body": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The longer body of the message that a moderator has left for the project",
+ "com.distilled.openapi#nullable": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "Deprecated - A message that a moderator sent regarding the project"
+ }
+ },
+ "com.modrinth.api#GetProject": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#GetProjectRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#Project"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/project/{id_slug}",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get a project"
+ }
+ },
+ "com.modrinth.api#ModifyProjectRequestCategoriesList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of the featured categories that the project has."
+ }
+ },
+ "com.modrinth.api#ModifyProjectRequestAdditionalCategoriesList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of additional categories that the project also has. These are supplementary to the featured categories, and does not include them again."
+ }
+ },
+ "com.modrinth.api#ModifyProjectRequestStatus": {
+ "type": "enum",
+ "members": {
+ "APPROVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "approved"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "REJECTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "rejected"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ },
+ "PROCESSING": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "processing"
+ }
+ },
+ "WITHHELD": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "withheld"
+ }
+ },
+ "SCHEDULED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "scheduled"
+ }
+ },
+ "PRIVATE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "private"
+ }
+ },
+ "UNKNOWN": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unknown"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The status of the project"
+ }
+ },
+ "com.modrinth.api#ModifyProjectRequestRequestedStatus": {
+ "type": "enum",
+ "members": {
+ "APPROVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "approved"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ },
+ "PRIVATE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "private"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The requested status when submitting for review or scheduling the project for release. Approved status refers to \"Public\" visibility."
+ }
+ },
+ "com.modrinth.api#ModifyProjectRequestDonationUrlsList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#ProjectDonationURL"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of donation links for the project"
+ }
+ },
+ "com.modrinth.api#ModifyProjectRequestClientSide": {
+ "type": "enum",
+ "members": {
+ "REQUIRED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "required"
+ }
+ },
+ "OPTIONAL": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "optional"
+ }
+ },
+ "UNSUPPORTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unsupported"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "Deprecated - use `environment` instead."
+ }
+ },
+ "com.modrinth.api#ModifyProjectRequestServerSide": {
+ "type": "enum",
+ "members": {
+ "REQUIRED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "required"
+ }
+ },
+ "OPTIONAL": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "optional"
+ }
+ },
+ "UNSUPPORTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unsupported"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "Deprecated - use `environment` instead."
+ }
+ },
+ "com.modrinth.api#ModifyProjectRequest": {
+ "type": "structure",
+ "members": {
+ "id_slug": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID or slug of the project"
+ }
+ },
+ "slug": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The slug of a project, used for vanity URLs. Regex: ```^[\\w!@$()`.+,\"\\-']{3,64}$```"
+ }
+ },
+ "title": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The title or name of the project"
+ }
+ },
+ "description": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "A short sentence summarizing the project, no more than a sentence or two."
+ }
+ },
+ "body": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "A long form description of the project"
+ }
+ },
+ "categories": {
+ "target": "com.modrinth.api#ModifyProjectRequestCategoriesList",
+ "traits": {
+ "smithy.api#documentation": "A list of the featured categories that the project has."
+ }
+ },
+ "additional_categories": {
+ "target": "com.modrinth.api#ModifyProjectRequestAdditionalCategoriesList",
+ "traits": {
+ "smithy.api#documentation": "A list of additional categories that the project also has. These are supplementary to the featured categories, and does not include them again."
+ }
+ },
+ "status": {
+ "target": "com.modrinth.api#ModifyProjectRequestStatus",
+ "traits": {
+ "smithy.api#documentation": "The status of the project"
+ }
+ },
+ "requested_status": {
+ "target": "com.modrinth.api#ModifyProjectRequestRequestedStatus",
+ "traits": {
+ "smithy.api#documentation": "The requested status when submitting for review or scheduling the project for release. Approved status refers to \"Public\" visibility.",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "issues_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "An optional link to where to submit bugs or issues with the project",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "source_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "An optional link to the source code of the project",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "wiki_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "An optional link to the project's wiki page or other relevant information",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "discord_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "An optional invite link to the project's discord.",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "donation_urls": {
+ "target": "com.modrinth.api#ModifyProjectRequestDonationUrlsList",
+ "traits": {
+ "smithy.api#documentation": "A list of donation links for the project"
+ }
+ },
+ "client_side": {
+ "target": "com.modrinth.api#ModifyProjectRequestClientSide",
+ "traits": {
+ "smithy.api#documentation": "Deprecated - use `environment` instead."
+ }
+ },
+ "server_side": {
+ "target": "com.modrinth.api#ModifyProjectRequestServerSide",
+ "traits": {
+ "smithy.api#documentation": "Deprecated - use `environment` instead."
+ }
+ },
+ "license_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The SPDX license ID of a project"
+ }
+ },
+ "license_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The URL to this license",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "moderation_message": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The title of the moderators' message for the project",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "moderation_message_body": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The body of the moderators' message for the project",
+ "com.distilled.openapi#nullable": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#ModifyProject": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#ModifyProjectRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "PATCH",
+ "uri": "/project/{id_slug}",
+ "code": 200
+ },
+ "smithy.api#documentation": "Modify a project"
+ }
+ },
+ "com.modrinth.api#DeleteProjectRequest": {
+ "type": "structure",
+ "members": {
+ "id_slug": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID or slug of the project"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#DeleteProject": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#DeleteProjectRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#BadRequest"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "DELETE",
+ "uri": "/project/{id_slug}",
+ "code": 200
+ },
+ "smithy.api#documentation": "Delete a project"
+ }
+ },
+ "com.modrinth.api#GetProjectsRequest": {
+ "type": "structure",
+ "members": {
+ "ids": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpQuery": "ids",
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The IDs and/or slugs of the projects"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#GetProjectsResponseBodyList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#Project"
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetProjectsResponse": {
+ "type": "structure",
+ "members": {
+ "body": {
+ "target": "com.modrinth.api#GetProjectsResponseBodyList",
+ "traits": {
+ "com.distilled.openapi#rawResponse": {},
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#GetProjects": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#GetProjectsRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#GetProjectsResponse"
+ },
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/projects",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get multiple projects"
+ }
+ },
+ "com.modrinth.api#PatchProjectsRequestCategoriesList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "Set all of the categories to the categories specified here"
+ }
+ },
+ "com.modrinth.api#PatchProjectsRequestAddCategoriesList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "Add all of the categories specified here"
+ }
+ },
+ "com.modrinth.api#PatchProjectsRequestRemoveCategoriesList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "Remove all of the categories specified here"
+ }
+ },
+ "com.modrinth.api#PatchProjectsRequestAdditionalCategoriesList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "Set all of the additional categories to the categories specified here"
+ }
+ },
+ "com.modrinth.api#PatchProjectsRequestAddAdditionalCategoriesList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "Add all of the additional categories specified here"
+ }
+ },
+ "com.modrinth.api#PatchProjectsRequestRemoveAdditionalCategoriesList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "Remove all of the additional categories specified here"
+ }
+ },
+ "com.modrinth.api#PatchProjectsRequestDonationUrlsList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#ProjectDonationURL"
+ },
+ "traits": {
+ "smithy.api#documentation": "Set all of the donation links to the donation links specified here"
+ }
+ },
+ "com.modrinth.api#PatchProjectsRequestAddDonationUrlsList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#ProjectDonationURL"
+ },
+ "traits": {
+ "smithy.api#documentation": "Add all of the donation links specified here"
+ }
+ },
+ "com.modrinth.api#PatchProjectsRequestRemoveDonationUrlsList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#ProjectDonationURL"
+ },
+ "traits": {
+ "smithy.api#documentation": "Remove all of the donation links specified here"
+ }
+ },
+ "com.modrinth.api#PatchProjectsRequest": {
+ "type": "structure",
+ "members": {
+ "ids": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpQuery": "ids",
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The IDs and/or slugs of the projects"
+ }
+ },
+ "categories": {
+ "target": "com.modrinth.api#PatchProjectsRequestCategoriesList",
+ "traits": {
+ "smithy.api#documentation": "Set all of the categories to the categories specified here"
+ }
+ },
+ "add_categories": {
+ "target": "com.modrinth.api#PatchProjectsRequestAddCategoriesList",
+ "traits": {
+ "smithy.api#documentation": "Add all of the categories specified here"
+ }
+ },
+ "remove_categories": {
+ "target": "com.modrinth.api#PatchProjectsRequestRemoveCategoriesList",
+ "traits": {
+ "smithy.api#documentation": "Remove all of the categories specified here"
+ }
+ },
+ "additional_categories": {
+ "target": "com.modrinth.api#PatchProjectsRequestAdditionalCategoriesList",
+ "traits": {
+ "smithy.api#documentation": "Set all of the additional categories to the categories specified here"
+ }
+ },
+ "add_additional_categories": {
+ "target": "com.modrinth.api#PatchProjectsRequestAddAdditionalCategoriesList",
+ "traits": {
+ "smithy.api#documentation": "Add all of the additional categories specified here"
+ }
+ },
+ "remove_additional_categories": {
+ "target": "com.modrinth.api#PatchProjectsRequestRemoveAdditionalCategoriesList",
+ "traits": {
+ "smithy.api#documentation": "Remove all of the additional categories specified here"
+ }
+ },
+ "donation_urls": {
+ "target": "com.modrinth.api#PatchProjectsRequestDonationUrlsList",
+ "traits": {
+ "smithy.api#documentation": "Set all of the donation links to the donation links specified here"
+ }
+ },
+ "add_donation_urls": {
+ "target": "com.modrinth.api#PatchProjectsRequestAddDonationUrlsList",
+ "traits": {
+ "smithy.api#documentation": "Add all of the donation links specified here"
+ }
+ },
+ "remove_donation_urls": {
+ "target": "com.modrinth.api#PatchProjectsRequestRemoveDonationUrlsList",
+ "traits": {
+ "smithy.api#documentation": "Remove all of the donation links specified here"
+ }
+ },
+ "issues_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "An optional link to where to submit bugs or issues with the projects",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "source_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "An optional link to the source code of the projects",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "wiki_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "An optional link to the projects' wiki page or other relevant information",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "discord_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "An optional invite link to the projects' discord",
+ "com.distilled.openapi#nullable": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#PatchProjects": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#PatchProjectsRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#BadRequest"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "PATCH",
+ "uri": "/projects",
+ "code": 200
+ },
+ "smithy.api#documentation": "Bulk-edit multiple projects"
+ }
+ },
+ "com.modrinth.api#RandomProjectsRequest": {
+ "type": "structure",
+ "members": {
+ "count": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#httpQuery": "count",
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The number of random projects to return"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#RandomProjectsResponseBodyList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#Project"
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#RandomProjectsResponse": {
+ "type": "structure",
+ "members": {
+ "body": {
+ "target": "com.modrinth.api#RandomProjectsResponseBodyList",
+ "traits": {
+ "com.distilled.openapi#rawResponse": {},
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#RandomProjects": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#RandomProjectsRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#RandomProjectsResponse"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#BadRequest"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/projects_random",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get a list of random projects"
+ }
+ },
+ "com.modrinth.api#CreatableProject": {
+ "type": "structure",
+ "members": {
+ "slug": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The slug of a project, used for vanity URLs. Regex: ```^[\\w!@$()`.+,\"\\-']{3,64}$```",
+ "smithy.api#required": {}
+ }
+ },
+ "title": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The title or name of the project",
+ "smithy.api#required": {}
+ }
+ },
+ "description": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "A short sentence summarizing the project, no more than a sentence or two.",
+ "smithy.api#required": {}
+ }
+ },
+ "body": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "A long form description of the project",
+ "smithy.api#required": {}
+ }
+ },
+ "categories": {
+ "target": "com.modrinth.api#CreatableProjectCategoriesList",
+ "traits": {
+ "smithy.api#documentation": "A list of the featured categories that the project has.",
+ "smithy.api#required": {}
+ }
+ },
+ "additional_categories": {
+ "target": "com.modrinth.api#CreatableProjectAdditionalCategoriesList",
+ "traits": {
+ "smithy.api#documentation": "A list of additional categories that the project also has. These are supplementary to the featured categories, and does not include them again."
+ }
+ },
+ "status": {
+ "target": "com.modrinth.api#CreatableProjectStatus",
+ "traits": {
+ "smithy.api#documentation": "The status of the project"
+ }
+ },
+ "requested_status": {
+ "target": "com.modrinth.api#CreatableProjectRequestedStatus",
+ "traits": {
+ "smithy.api#documentation": "The requested status when submitting for review or scheduling the project for release. Approved status refers to \"Public\" visibility.",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "issues_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "An optional link to where to submit bugs or issues with the project",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "source_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "An optional link to the source code of the project",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "wiki_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "An optional link to the project's wiki page or other relevant information",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "discord_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "An optional invite link to the project's discord.",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "donation_urls": {
+ "target": "com.modrinth.api#CreatableProjectDonationUrlsList",
+ "traits": {
+ "smithy.api#documentation": "A list of donation links for the project"
+ }
+ },
+ "client_side": {
+ "target": "com.modrinth.api#CreatableProjectClientSide",
+ "traits": {
+ "smithy.api#documentation": "Deprecated - use `environment` instead.",
+ "smithy.api#required": {}
+ }
+ },
+ "server_side": {
+ "target": "com.modrinth.api#CreatableProjectServerSide",
+ "traits": {
+ "smithy.api#documentation": "Deprecated - use `environment` instead.",
+ "smithy.api#required": {}
+ }
+ },
+ "license_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The SPDX license ID of a project",
+ "smithy.api#required": {}
+ }
+ },
+ "license_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The URL to this license",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "project_type": {
+ "target": "com.modrinth.api#CreatableProjectProjectType",
+ "traits": {
+ "smithy.api#documentation": "The project type of the project",
+ "smithy.api#required": {}
+ }
+ },
+ "initial_versions": {
+ "target": "com.modrinth.api#CreatableProjectInitialVersionsList",
+ "traits": {
+ "smithy.api#documentation": "A list of initial versions to upload with the created project. Deprecated - please upload version files after initial upload."
+ }
+ },
+ "is_draft": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether the project should be saved as a draft instead of being sent to moderation for review. Deprecated - please always mark this as true."
+ }
+ },
+ "gallery_items": {
+ "target": "com.modrinth.api#CreatableProjectGalleryItemsList",
+ "traits": {
+ "smithy.api#documentation": "Gallery images to be uploaded with the created project. Deprecated - please upload gallery images after initial upload."
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#CreatableProjectCategoriesList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of the featured categories that the project has."
+ }
+ },
+ "com.modrinth.api#CreatableProjectAdditionalCategoriesList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of additional categories that the project also has. These are supplementary to the featured categories, and does not include them again."
+ }
+ },
+ "com.modrinth.api#CreatableProjectStatus": {
+ "type": "enum",
+ "members": {
+ "APPROVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "approved"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "REJECTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "rejected"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ },
+ "PROCESSING": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "processing"
+ }
+ },
+ "WITHHELD": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "withheld"
+ }
+ },
+ "SCHEDULED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "scheduled"
+ }
+ },
+ "PRIVATE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "private"
+ }
+ },
+ "UNKNOWN": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unknown"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The status of the project"
+ }
+ },
+ "com.modrinth.api#CreatableProjectRequestedStatus": {
+ "type": "enum",
+ "members": {
+ "APPROVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "approved"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ },
+ "PRIVATE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "private"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The requested status when submitting for review or scheduling the project for release. Approved status refers to \"Public\" visibility."
+ }
+ },
+ "com.modrinth.api#CreatableProjectDonationUrlsList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#ProjectDonationURL"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of donation links for the project"
+ }
+ },
+ "com.modrinth.api#CreatableProjectClientSide": {
+ "type": "enum",
+ "members": {
+ "REQUIRED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "required"
+ }
+ },
+ "OPTIONAL": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "optional"
+ }
+ },
+ "UNSUPPORTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unsupported"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "Deprecated - use `environment` instead."
+ }
+ },
+ "com.modrinth.api#CreatableProjectServerSide": {
+ "type": "enum",
+ "members": {
+ "REQUIRED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "required"
+ }
+ },
+ "OPTIONAL": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "optional"
+ }
+ },
+ "UNSUPPORTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unsupported"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "Deprecated - use `environment` instead."
+ }
+ },
+ "com.modrinth.api#CreatableProjectProjectType": {
+ "type": "enum",
+ "members": {
+ "MOD": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "mod"
+ }
+ },
+ "MODPACK": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "modpack"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The project type of the project"
+ }
+ },
+ "com.modrinth.api#EditableVersion": {
+ "type": "structure",
+ "members": {
+ "name": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The name of this version"
+ }
+ },
+ "version_number": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The version number. Ideally will follow semantic versioning"
+ }
+ },
+ "changelog": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The changelog for this version",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "dependencies": {
+ "target": "com.modrinth.api#EditableVersionDependenciesList",
+ "traits": {
+ "smithy.api#documentation": "A list of specific versions of projects that this version depends on"
+ }
+ },
+ "game_versions": {
+ "target": "com.modrinth.api#EditableVersionGameVersionsList",
+ "traits": {
+ "smithy.api#documentation": "A list of versions of Minecraft that this version supports"
+ }
+ },
+ "version_type": {
+ "target": "com.modrinth.api#EditableVersionVersionType",
+ "traits": {
+ "smithy.api#documentation": "The release channel for this version"
+ }
+ },
+ "loaders": {
+ "target": "com.modrinth.api#EditableVersionLoadersList",
+ "traits": {
+ "smithy.api#documentation": "The mod loaders that this version supports. In case of resource packs, use \"minecraft\""
+ }
+ },
+ "featured": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether the version is featured or not"
+ }
+ },
+ "status": {
+ "target": "com.modrinth.api#EditableVersionStatus"
+ },
+ "requested_status": {
+ "target": "com.modrinth.api#EditableVersionRequestedStatus",
+ "traits": {
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "primary_file": {
+ "target": "com.modrinth.api#EditableVersionPrimaryFileList",
+ "traits": {
+ "smithy.api#documentation": "The hash format and the hash of the new primary file"
+ }
+ },
+ "file_types": {
+ "target": "com.modrinth.api#EditableVersionFileTypesList",
+ "traits": {
+ "smithy.api#documentation": "A list of file_types to edit"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#VersionDependency": {
+ "type": "structure",
+ "members": {
+ "version_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the version that this version depends on",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "project_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the project that this version depends on",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "file_name": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The file name of the dependency, mostly used for showing external dependencies on modpacks",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "dependency_type": {
+ "target": "com.modrinth.api#VersionDependencyDependencyType",
+ "traits": {
+ "smithy.api#documentation": "The type of dependency that this version has",
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#VersionDependencyDependencyType": {
+ "type": "enum",
+ "members": {
+ "REQUIRED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "required"
+ }
+ },
+ "OPTIONAL": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "optional"
+ }
+ },
+ "INCOMPATIBLE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "incompatible"
+ }
+ },
+ "EMBEDDED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "embedded"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The type of dependency that this version has"
+ }
+ },
+ "com.modrinth.api#EditableVersionDependenciesList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#VersionDependency"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of specific versions of projects that this version depends on"
+ }
+ },
+ "com.modrinth.api#EditableVersionGameVersionsList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of versions of Minecraft that this version supports"
+ }
+ },
+ "com.modrinth.api#EditableVersionVersionType": {
+ "type": "enum",
+ "members": {
+ "RELEASE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "release"
+ }
+ },
+ "BETA": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "beta"
+ }
+ },
+ "ALPHA": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "alpha"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The release channel for this version"
+ }
+ },
+ "com.modrinth.api#EditableVersionLoadersList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "The mod loaders that this version supports. In case of resource packs, use \"minecraft\""
+ }
+ },
+ "com.modrinth.api#EditableVersionStatus": {
+ "type": "enum",
+ "members": {
+ "LISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "listed"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ },
+ "SCHEDULED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "scheduled"
+ }
+ },
+ "UNKNOWN": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unknown"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#EditableVersionRequestedStatus": {
+ "type": "enum",
+ "members": {
+ "LISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "listed"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#EditableVersionPrimaryFileList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "The hash format and the hash of the new primary file"
+ }
+ },
+ "com.modrinth.api#EditableFileType": {
+ "type": "structure",
+ "members": {
+ "algorithm": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The hash algorithm of the hash specified in the hash field",
+ "smithy.api#required": {}
+ }
+ },
+ "hash": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The hash of the file you're editing",
+ "smithy.api#required": {}
+ }
+ },
+ "file_type": {
+ "target": "smithy.api#Document",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#EditableVersionFileTypesList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#EditableFileType"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of file_types to edit"
+ }
+ },
+ "com.modrinth.api#CreatableProjectInitialVersionsList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#EditableVersion"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of initial versions to upload with the created project. Deprecated - please upload version files after initial upload."
+ }
+ },
+ "com.modrinth.api#CreatableProjectGalleryItem": {
+ "type": "structure",
+ "members": {
+ "item": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The name of the multipart item where the gallery media is located"
+ }
+ },
+ "featured": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether the image is featured in the gallery"
+ }
+ },
+ "title": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The title of the gallery image",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "description": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The description of the gallery image",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "ordering": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "The order of the gallery image. Gallery images are sorted by this field and then alphabetically by title."
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#CreatableProjectGalleryItemsList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#CreatableProjectGalleryItem"
+ },
+ "traits": {
+ "smithy.api#documentation": "Gallery images to be uploaded with the created project. Deprecated - please upload gallery images after initial upload."
+ }
+ },
+ "com.modrinth.api#CreateProjectRequestIcon": {
+ "type": "enum",
+ "members": {
+ "PNG": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "*.png"
+ }
+ },
+ "JPG": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "*.jpg"
+ }
+ },
+ "JPEG": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "*.jpeg"
+ }
+ },
+ "BMP": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "*.bmp"
+ }
+ },
+ "GIF": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "*.gif"
+ }
+ },
+ "WEBP": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "*.webp"
+ }
+ },
+ "SVG": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "*.svg"
+ }
+ },
+ "SVGZ": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "*.svgz"
+ }
+ },
+ "RGB": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "*.rgb"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "Project icon file"
+ }
+ },
+ "com.modrinth.api#CreateProjectRequest": {
+ "type": "structure",
+ "members": {
+ "data": {
+ "target": "com.modrinth.api#CreatableProject",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ },
+ "icon": {
+ "target": "com.modrinth.api#CreateProjectRequestIcon",
+ "traits": {
+ "smithy.api#documentation": "Project icon file"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#CreateProject": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#CreateProjectRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#Project"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#BadRequest"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "POST",
+ "uri": "/project",
+ "code": 200,
+ "contentType": "multipart"
+ },
+ "smithy.api#documentation": "Create a project",
+ "com.distilled.openapi#contentType": "multipart"
+ }
+ },
+ "com.modrinth.api#ChangeProjectIconRequestExt": {
+ "type": "enum",
+ "members": {
+ "PNG": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "png"
+ }
+ },
+ "JPG": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "jpg"
+ }
+ },
+ "JPEG": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "jpeg"
+ }
+ },
+ "BMP": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "bmp"
+ }
+ },
+ "GIF": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "gif"
+ }
+ },
+ "WEBP": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "webp"
+ }
+ },
+ "SVG": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "svg"
+ }
+ },
+ "SVGZ": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "svgz"
+ }
+ },
+ "RGB": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "rgb"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#ChangeProjectIconRequest": {
+ "type": "structure",
+ "members": {
+ "id_slug": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID or slug of the project"
+ }
+ },
+ "ext": {
+ "target": "com.modrinth.api#ChangeProjectIconRequestExt",
+ "traits": {
+ "smithy.api#httpQuery": "ext",
+ "smithy.api#required": {},
+ "smithy.api#documentation": "Image extension"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#ChangeProjectIcon": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#ChangeProjectIconRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#BadRequest"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "PATCH",
+ "uri": "/project/{id_slug}/icon",
+ "code": 200
+ },
+ "smithy.api#documentation": "Change project's icon\n\nThe new icon may be up to 256KiB in size."
+ }
+ },
+ "com.modrinth.api#DeleteProjectIconRequest": {
+ "type": "structure",
+ "members": {
+ "id_slug": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID or slug of the project"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#DeleteProjectIcon": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#DeleteProjectIconRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#BadRequest"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "DELETE",
+ "uri": "/project/{id_slug}/icon",
+ "code": 200
+ },
+ "smithy.api#documentation": "Delete project's icon"
+ }
+ },
+ "com.modrinth.api#CheckProjectValidityRequest": {
+ "type": "structure",
+ "members": {
+ "id_slug": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID or slug of the project"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#ProjectIdentifier": {
+ "type": "structure",
+ "members": {
+ "id": {
+ "target": "smithy.api#String"
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#CheckProjectValidity": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#CheckProjectValidityRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#ProjectIdentifier"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/project/{id_slug}/check",
+ "code": 200
+ },
+ "smithy.api#documentation": "Check project slug/ID validity"
+ }
+ },
+ "com.modrinth.api#AddGalleryImageRequestExt": {
+ "type": "enum",
+ "members": {
+ "PNG": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "png"
+ }
+ },
+ "JPG": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "jpg"
+ }
+ },
+ "JPEG": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "jpeg"
+ }
+ },
+ "BMP": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "bmp"
+ }
+ },
+ "GIF": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "gif"
+ }
+ },
+ "WEBP": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "webp"
+ }
+ },
+ "SVG": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "svg"
+ }
+ },
+ "SVGZ": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "svgz"
+ }
+ },
+ "RGB": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "rgb"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#AddGalleryImageRequest": {
+ "type": "structure",
+ "members": {
+ "id_slug": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID or slug of the project"
+ }
+ },
+ "ext": {
+ "target": "com.modrinth.api#AddGalleryImageRequestExt",
+ "traits": {
+ "smithy.api#httpQuery": "ext",
+ "smithy.api#required": {},
+ "smithy.api#documentation": "Image extension"
+ }
+ },
+ "featured": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#httpQuery": "featured",
+ "smithy.api#required": {},
+ "smithy.api#documentation": "Whether an image is featured"
+ }
+ },
+ "title": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpQuery": "title",
+ "smithy.api#documentation": "Title of the image"
+ }
+ },
+ "description": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpQuery": "description",
+ "smithy.api#documentation": "Description of the image"
+ }
+ },
+ "ordering": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#httpQuery": "ordering",
+ "smithy.api#documentation": "Ordering of the image"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#AddGalleryImage": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#AddGalleryImageRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#BadRequest"
+ },
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "POST",
+ "uri": "/project/{id_slug}/gallery",
+ "code": 200
+ },
+ "smithy.api#documentation": "Add a gallery image\n\nModrinth allows you to upload files of up to 5MiB to a project's gallery."
+ }
+ },
+ "com.modrinth.api#ModifyGalleryImageRequest": {
+ "type": "structure",
+ "members": {
+ "id_slug": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID or slug of the project"
+ }
+ },
+ "url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpQuery": "url",
+ "smithy.api#required": {},
+ "smithy.api#documentation": "URL link of the image to modify"
+ }
+ },
+ "featured": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#httpQuery": "featured",
+ "smithy.api#documentation": "Whether the image is featured"
+ }
+ },
+ "title": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpQuery": "title",
+ "smithy.api#documentation": "New title of the image"
+ }
+ },
+ "description": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpQuery": "description",
+ "smithy.api#documentation": "New description of the image"
+ }
+ },
+ "ordering": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#httpQuery": "ordering",
+ "smithy.api#documentation": "New ordering of the image"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#ModifyGalleryImage": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#ModifyGalleryImageRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "PATCH",
+ "uri": "/project/{id_slug}/gallery",
+ "code": 200
+ },
+ "smithy.api#documentation": "Modify a gallery image"
+ }
+ },
+ "com.modrinth.api#DeleteGalleryImageRequest": {
+ "type": "structure",
+ "members": {
+ "id_slug": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID or slug of the project"
+ }
+ },
+ "url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpQuery": "url",
+ "smithy.api#required": {},
+ "smithy.api#documentation": "URL link of the image to delete"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#DeleteGalleryImage": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#DeleteGalleryImageRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#BadRequest"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "DELETE",
+ "uri": "/project/{id_slug}/gallery",
+ "code": 200
+ },
+ "smithy.api#documentation": "Delete a gallery image"
+ }
+ },
+ "com.modrinth.api#GetDependenciesRequest": {
+ "type": "structure",
+ "members": {
+ "id_slug": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID or slug of the project"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#ProjectDependencyList": {
+ "type": "structure",
+ "members": {
+ "projects": {
+ "target": "com.modrinth.api#ProjectDependencyListProjectsList",
+ "traits": {
+ "smithy.api#documentation": "Projects that the project depends upon"
+ }
+ },
+ "versions": {
+ "target": "com.modrinth.api#ProjectDependencyListVersionsList",
+ "traits": {
+ "smithy.api#documentation": "Versions that the project depends upon"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#ProjectDependencyListProjectsList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#Project"
+ },
+ "traits": {
+ "smithy.api#documentation": "Projects that the project depends upon"
+ }
+ },
+ "com.modrinth.api#Version": {
+ "type": "structure",
+ "members": {
+ "name": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The name of this version",
+ "smithy.api#required": {}
+ }
+ },
+ "version_number": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The version number. Ideally will follow semantic versioning",
+ "smithy.api#required": {}
+ }
+ },
+ "changelog": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The changelog for this version",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "dependencies": {
+ "target": "com.modrinth.api#VersionDependenciesList",
+ "traits": {
+ "smithy.api#documentation": "A list of specific versions of projects that this version depends on"
+ }
+ },
+ "game_versions": {
+ "target": "com.modrinth.api#VersionGameVersionsList",
+ "traits": {
+ "smithy.api#documentation": "A list of versions of Minecraft that this version supports",
+ "smithy.api#required": {}
+ }
+ },
+ "version_type": {
+ "target": "com.modrinth.api#VersionVersionType",
+ "traits": {
+ "smithy.api#documentation": "The release channel for this version",
+ "smithy.api#required": {}
+ }
+ },
+ "loaders": {
+ "target": "com.modrinth.api#VersionLoadersList",
+ "traits": {
+ "smithy.api#documentation": "The mod loaders that this version supports. In case of resource packs, use \"minecraft\"",
+ "smithy.api#required": {}
+ }
+ },
+ "featured": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether the version is featured or not",
+ "smithy.api#required": {}
+ }
+ },
+ "status": {
+ "target": "com.modrinth.api#VersionStatus"
+ },
+ "requested_status": {
+ "target": "com.modrinth.api#VersionRequestedStatus",
+ "traits": {
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the version, encoded as a base62 string",
+ "smithy.api#required": {}
+ }
+ },
+ "project_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the project this version is for",
+ "smithy.api#required": {}
+ }
+ },
+ "author_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the author who published this version",
+ "smithy.api#required": {}
+ }
+ },
+ "date_published": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ },
+ "downloads": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "The number of times this version has been downloaded",
+ "smithy.api#required": {}
+ }
+ },
+ "changelog_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "A link to the changelog for this version. Always null, only kept for legacy compatibility.",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "environment": {
+ "target": "com.modrinth.api#EnvironmentEnum",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ },
+ "files": {
+ "target": "com.modrinth.api#VersionFilesList",
+ "traits": {
+ "smithy.api#documentation": "A list of files available for download for this version",
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#VersionDependenciesList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#VersionDependency"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of specific versions of projects that this version depends on"
+ }
+ },
+ "com.modrinth.api#VersionGameVersionsList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of versions of Minecraft that this version supports"
+ }
+ },
+ "com.modrinth.api#VersionVersionType": {
+ "type": "enum",
+ "members": {
+ "RELEASE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "release"
+ }
+ },
+ "BETA": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "beta"
+ }
+ },
+ "ALPHA": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "alpha"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The release channel for this version"
+ }
+ },
+ "com.modrinth.api#VersionLoadersList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "The mod loaders that this version supports. In case of resource packs, use \"minecraft\""
+ }
+ },
+ "com.modrinth.api#VersionStatus": {
+ "type": "enum",
+ "members": {
+ "LISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "listed"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ },
+ "SCHEDULED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "scheduled"
+ }
+ },
+ "UNKNOWN": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unknown"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#VersionRequestedStatus": {
+ "type": "enum",
+ "members": {
+ "LISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "listed"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#VersionFile": {
+ "type": "structure",
+ "members": {
+ "hashes": {
+ "target": "com.modrinth.api#VersionFileHashes",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ },
+ "url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "A direct link to the file",
+ "smithy.api#required": {}
+ }
+ },
+ "filename": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The name of the file",
+ "smithy.api#required": {}
+ }
+ },
+ "primary": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether this file is the primary one for its version. Only a maximum of one file per version will have this set to true. If there are not any primary files, it can be inferred that the first file is the primary one.",
+ "smithy.api#required": {}
+ }
+ },
+ "size": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "The size of the file in bytes",
+ "smithy.api#required": {}
+ }
+ },
+ "file_type": {
+ "target": "smithy.api#Document"
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#VersionFileHashes": {
+ "type": "structure",
+ "members": {
+ "sha512": {
+ "target": "smithy.api#String"
+ },
+ "sha1": {
+ "target": "smithy.api#String"
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "A map of hashes of the file. The key is the hashing algorithm and the value is the string version of the hash."
+ }
+ },
+ "com.modrinth.api#VersionFilesList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#VersionFile"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of files available for download for this version"
+ }
+ },
+ "com.modrinth.api#ProjectDependencyListVersionsList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#Version"
+ },
+ "traits": {
+ "smithy.api#documentation": "Versions that the project depends upon"
+ }
+ },
+ "com.modrinth.api#GetDependencies": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#GetDependenciesRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#ProjectDependencyList"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/project/{id_slug}/dependencies",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get all of a project's dependencies"
+ }
+ },
+ "com.modrinth.api#FollowProjectRequest": {
+ "type": "structure",
+ "members": {
+ "id_slug": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID or slug of the project"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#FollowProject": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#FollowProjectRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#BadRequest"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "POST",
+ "uri": "/project/{id_slug}/follow",
+ "code": 200
+ },
+ "smithy.api#documentation": "Follow a project"
+ }
+ },
+ "com.modrinth.api#UnfollowProjectRequest": {
+ "type": "structure",
+ "members": {
+ "id_slug": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID or slug of the project"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#UnfollowProject": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#UnfollowProjectRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#BadRequest"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "DELETE",
+ "uri": "/project/{id_slug}/follow",
+ "code": 200
+ },
+ "smithy.api#documentation": "Unfollow a project"
+ }
+ },
+ "com.modrinth.api#ScheduleProjectRequestRequestedStatus": {
+ "type": "enum",
+ "members": {
+ "APPROVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "approved"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ },
+ "PRIVATE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "private"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The requested status when scheduling the project for release"
+ }
+ },
+ "com.modrinth.api#ScheduleProjectRequest": {
+ "type": "structure",
+ "members": {
+ "id_slug": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID or slug of the project"
+ }
+ },
+ "time": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ },
+ "requested_status": {
+ "target": "com.modrinth.api#ScheduleProjectRequestRequestedStatus",
+ "traits": {
+ "smithy.api#documentation": "The requested status when scheduling the project for release",
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#ScheduleProject": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#ScheduleProjectRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#BadRequest"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "POST",
+ "uri": "/project/{id_slug}/schedule",
+ "code": 200
+ },
+ "smithy.api#documentation": "Schedule a project"
+ }
+ },
+ "com.modrinth.api#GetProjectVersionsRequest": {
+ "type": "structure",
+ "members": {
+ "id_slug": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID or slug of the project"
+ }
+ },
+ "loaders": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpQuery": "loaders",
+ "smithy.api#documentation": "The types of loaders to filter for"
+ }
+ },
+ "game_versions": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpQuery": "game_versions",
+ "smithy.api#documentation": "The game versions to filter for"
+ }
+ },
+ "featured": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#httpQuery": "featured",
+ "smithy.api#documentation": "Allows to filter for featured or non-featured versions only"
+ }
+ },
+ "include_changelog": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#httpQuery": "include_changelog",
+ "smithy.api#documentation": "Allows you to toggle the inclusion of the changelog field in the response. It is highly recommended to use include_changelog=false in most cases unless you specifically need the changelog for all versions."
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#GetProjectVersionsResponseBodyList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#Version"
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetProjectVersionsResponse": {
+ "type": "structure",
+ "members": {
+ "body": {
+ "target": "com.modrinth.api#GetProjectVersionsResponseBodyList",
+ "traits": {
+ "com.distilled.openapi#rawResponse": {},
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#GetProjectVersions": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#GetProjectVersionsRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#GetProjectVersionsResponse"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/project/{id_slug}/version",
+ "code": 200
+ },
+ "smithy.api#documentation": "List project's versions"
+ }
+ },
+ "com.modrinth.api#GetVersionRequest": {
+ "type": "structure",
+ "members": {
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID of the version"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#GetVersionResponseDependenciesList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#VersionDependency"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of specific versions of projects that this version depends on"
+ }
+ },
+ "com.modrinth.api#GetVersionResponseGameVersionsList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of versions of Minecraft that this version supports"
+ }
+ },
+ "com.modrinth.api#GetVersionResponseVersionType": {
+ "type": "enum",
+ "members": {
+ "RELEASE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "release"
+ }
+ },
+ "BETA": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "beta"
+ }
+ },
+ "ALPHA": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "alpha"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The release channel for this version"
+ }
+ },
+ "com.modrinth.api#GetVersionResponseLoadersList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "The mod loaders that this version supports. In case of resource packs, use \"minecraft\""
+ }
+ },
+ "com.modrinth.api#GetVersionResponseStatus": {
+ "type": "enum",
+ "members": {
+ "LISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "listed"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ },
+ "SCHEDULED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "scheduled"
+ }
+ },
+ "UNKNOWN": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unknown"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetVersionResponseRequestedStatus": {
+ "type": "enum",
+ "members": {
+ "LISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "listed"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetVersionResponseFilesList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#VersionFile"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of files available for download for this version"
+ }
+ },
+ "com.modrinth.api#GetVersionResponse": {
+ "type": "structure",
+ "members": {
+ "name": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The name of this version",
+ "smithy.api#required": {}
+ }
+ },
+ "version_number": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The version number. Ideally will follow semantic versioning",
+ "smithy.api#required": {}
+ }
+ },
+ "changelog": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The changelog for this version",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "dependencies": {
+ "target": "com.modrinth.api#GetVersionResponseDependenciesList",
+ "traits": {
+ "smithy.api#documentation": "A list of specific versions of projects that this version depends on"
+ }
+ },
+ "game_versions": {
+ "target": "com.modrinth.api#GetVersionResponseGameVersionsList",
+ "traits": {
+ "smithy.api#documentation": "A list of versions of Minecraft that this version supports",
+ "smithy.api#required": {}
+ }
+ },
+ "version_type": {
+ "target": "com.modrinth.api#GetVersionResponseVersionType",
+ "traits": {
+ "smithy.api#documentation": "The release channel for this version",
+ "smithy.api#required": {}
+ }
+ },
+ "loaders": {
+ "target": "com.modrinth.api#GetVersionResponseLoadersList",
+ "traits": {
+ "smithy.api#documentation": "The mod loaders that this version supports. In case of resource packs, use \"minecraft\"",
+ "smithy.api#required": {}
+ }
+ },
+ "featured": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether the version is featured or not",
+ "smithy.api#required": {}
+ }
+ },
+ "status": {
+ "target": "com.modrinth.api#GetVersionResponseStatus"
+ },
+ "requested_status": {
+ "target": "com.modrinth.api#GetVersionResponseRequestedStatus",
+ "traits": {
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the version, encoded as a base62 string",
+ "smithy.api#required": {}
+ }
+ },
+ "project_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the project this version is for",
+ "smithy.api#required": {}
+ }
+ },
+ "author_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the author who published this version",
+ "smithy.api#required": {}
+ }
+ },
+ "date_published": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ },
+ "downloads": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "The number of times this version has been downloaded",
+ "smithy.api#required": {}
+ }
+ },
+ "changelog_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "A link to the changelog for this version. Always null, only kept for legacy compatibility.",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "environment": {
+ "target": "com.modrinth.api#EnvironmentEnum",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ },
+ "files": {
+ "target": "com.modrinth.api#GetVersionResponseFilesList",
+ "traits": {
+ "smithy.api#documentation": "A list of files available for download for this version",
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#GetVersion": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#GetVersionRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#GetVersionResponse"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/version/{id}",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get a version"
+ }
+ },
+ "com.modrinth.api#ModifyVersionRequestDependenciesList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#VersionDependency"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of specific versions of projects that this version depends on"
+ }
+ },
+ "com.modrinth.api#ModifyVersionRequestGameVersionsList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of versions of Minecraft that this version supports"
+ }
+ },
+ "com.modrinth.api#ModifyVersionRequestVersionType": {
+ "type": "enum",
+ "members": {
+ "RELEASE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "release"
+ }
+ },
+ "BETA": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "beta"
+ }
+ },
+ "ALPHA": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "alpha"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The release channel for this version"
+ }
+ },
+ "com.modrinth.api#ModifyVersionRequestLoadersList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "The mod loaders that this version supports. In case of resource packs, use \"minecraft\""
+ }
+ },
+ "com.modrinth.api#ModifyVersionRequestStatus": {
+ "type": "enum",
+ "members": {
+ "LISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "listed"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ },
+ "SCHEDULED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "scheduled"
+ }
+ },
+ "UNKNOWN": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unknown"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#ModifyVersionRequestRequestedStatus": {
+ "type": "enum",
+ "members": {
+ "LISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "listed"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#ModifyVersionRequestPrimaryFileList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "The hash format and the hash of the new primary file"
+ }
+ },
+ "com.modrinth.api#ModifyVersionRequestFileTypesList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#EditableFileType"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of file_types to edit"
+ }
+ },
+ "com.modrinth.api#ModifyVersionRequest": {
+ "type": "structure",
+ "members": {
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID of the version"
+ }
+ },
+ "name": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The name of this version"
+ }
+ },
+ "version_number": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The version number. Ideally will follow semantic versioning"
+ }
+ },
+ "changelog": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The changelog for this version",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "dependencies": {
+ "target": "com.modrinth.api#ModifyVersionRequestDependenciesList",
+ "traits": {
+ "smithy.api#documentation": "A list of specific versions of projects that this version depends on"
+ }
+ },
+ "game_versions": {
+ "target": "com.modrinth.api#ModifyVersionRequestGameVersionsList",
+ "traits": {
+ "smithy.api#documentation": "A list of versions of Minecraft that this version supports"
+ }
+ },
+ "version_type": {
+ "target": "com.modrinth.api#ModifyVersionRequestVersionType",
+ "traits": {
+ "smithy.api#documentation": "The release channel for this version"
+ }
+ },
+ "loaders": {
+ "target": "com.modrinth.api#ModifyVersionRequestLoadersList",
+ "traits": {
+ "smithy.api#documentation": "The mod loaders that this version supports. In case of resource packs, use \"minecraft\""
+ }
+ },
+ "featured": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether the version is featured or not"
+ }
+ },
+ "status": {
+ "target": "com.modrinth.api#ModifyVersionRequestStatus"
+ },
+ "requested_status": {
+ "target": "com.modrinth.api#ModifyVersionRequestRequestedStatus",
+ "traits": {
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "primary_file": {
+ "target": "com.modrinth.api#ModifyVersionRequestPrimaryFileList",
+ "traits": {
+ "smithy.api#documentation": "The hash format and the hash of the new primary file"
+ }
+ },
+ "file_types": {
+ "target": "com.modrinth.api#ModifyVersionRequestFileTypesList",
+ "traits": {
+ "smithy.api#documentation": "A list of file_types to edit"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#ModifyVersion": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#ModifyVersionRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "PATCH",
+ "uri": "/version/{id}",
+ "code": 200
+ },
+ "smithy.api#documentation": "Modify a version"
+ }
+ },
+ "com.modrinth.api#DeleteVersionRequest": {
+ "type": "structure",
+ "members": {
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID of the version"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#DeleteVersion": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#DeleteVersionRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "DELETE",
+ "uri": "/version/{id}",
+ "code": 200
+ },
+ "smithy.api#documentation": "Delete a version"
+ }
+ },
+ "com.modrinth.api#GetVersionFromIdOrNumberRequest": {
+ "type": "structure",
+ "members": {
+ "id_slug": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID or slug of the project"
+ }
+ },
+ "id_number": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The version ID or version number"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#GetVersionFromIdOrNumberResponseDependenciesList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#VersionDependency"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of specific versions of projects that this version depends on"
+ }
+ },
+ "com.modrinth.api#GetVersionFromIdOrNumberResponseGameVersionsList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of versions of Minecraft that this version supports"
+ }
+ },
+ "com.modrinth.api#GetVersionFromIdOrNumberResponseVersionType": {
+ "type": "enum",
+ "members": {
+ "RELEASE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "release"
+ }
+ },
+ "BETA": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "beta"
+ }
+ },
+ "ALPHA": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "alpha"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The release channel for this version"
+ }
+ },
+ "com.modrinth.api#GetVersionFromIdOrNumberResponseLoadersList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "The mod loaders that this version supports. In case of resource packs, use \"minecraft\""
+ }
+ },
+ "com.modrinth.api#GetVersionFromIdOrNumberResponseStatus": {
+ "type": "enum",
+ "members": {
+ "LISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "listed"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ },
+ "SCHEDULED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "scheduled"
+ }
+ },
+ "UNKNOWN": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unknown"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetVersionFromIdOrNumberResponseRequestedStatus": {
+ "type": "enum",
+ "members": {
+ "LISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "listed"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetVersionFromIdOrNumberResponseFilesList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#VersionFile"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of files available for download for this version"
+ }
+ },
+ "com.modrinth.api#GetVersionFromIdOrNumberResponse": {
+ "type": "structure",
+ "members": {
+ "name": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The name of this version",
+ "smithy.api#required": {}
+ }
+ },
+ "version_number": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The version number. Ideally will follow semantic versioning",
+ "smithy.api#required": {}
+ }
+ },
+ "changelog": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The changelog for this version",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "dependencies": {
+ "target": "com.modrinth.api#GetVersionFromIdOrNumberResponseDependenciesList",
+ "traits": {
+ "smithy.api#documentation": "A list of specific versions of projects that this version depends on"
+ }
+ },
+ "game_versions": {
+ "target": "com.modrinth.api#GetVersionFromIdOrNumberResponseGameVersionsList",
+ "traits": {
+ "smithy.api#documentation": "A list of versions of Minecraft that this version supports",
+ "smithy.api#required": {}
+ }
+ },
+ "version_type": {
+ "target": "com.modrinth.api#GetVersionFromIdOrNumberResponseVersionType",
+ "traits": {
+ "smithy.api#documentation": "The release channel for this version",
+ "smithy.api#required": {}
+ }
+ },
+ "loaders": {
+ "target": "com.modrinth.api#GetVersionFromIdOrNumberResponseLoadersList",
+ "traits": {
+ "smithy.api#documentation": "The mod loaders that this version supports. In case of resource packs, use \"minecraft\"",
+ "smithy.api#required": {}
+ }
+ },
+ "featured": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether the version is featured or not",
+ "smithy.api#required": {}
+ }
+ },
+ "status": {
+ "target": "com.modrinth.api#GetVersionFromIdOrNumberResponseStatus"
+ },
+ "requested_status": {
+ "target": "com.modrinth.api#GetVersionFromIdOrNumberResponseRequestedStatus",
+ "traits": {
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the version, encoded as a base62 string",
+ "smithy.api#required": {}
+ }
+ },
+ "project_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the project this version is for",
+ "smithy.api#required": {}
+ }
+ },
+ "author_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the author who published this version",
+ "smithy.api#required": {}
+ }
+ },
+ "date_published": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ },
+ "downloads": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "The number of times this version has been downloaded",
+ "smithy.api#required": {}
+ }
+ },
+ "changelog_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "A link to the changelog for this version. Always null, only kept for legacy compatibility.",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "environment": {
+ "target": "com.modrinth.api#EnvironmentEnum",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ },
+ "files": {
+ "target": "com.modrinth.api#GetVersionFromIdOrNumberResponseFilesList",
+ "traits": {
+ "smithy.api#documentation": "A list of files available for download for this version",
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#GetVersionFromIdOrNumber": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#GetVersionFromIdOrNumberRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#GetVersionFromIdOrNumberResponse"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/project/{id_slug}/version/{id_number}",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get a version given a version number or ID\n\nPlease note that, if the version number provided matches multiple versions, only the **oldest matching version** will be returned."
+ }
+ },
+ "com.modrinth.api#CreatableVersion": {
+ "type": "structure",
+ "members": {
+ "name": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The name of this version",
+ "smithy.api#required": {}
+ }
+ },
+ "version_number": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The version number. Ideally will follow semantic versioning",
+ "smithy.api#required": {}
+ }
+ },
+ "changelog": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The changelog for this version",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "dependencies": {
+ "target": "com.modrinth.api#CreatableVersionDependenciesList",
+ "traits": {
+ "smithy.api#documentation": "A list of specific versions of projects that this version depends on",
+ "smithy.api#required": {}
+ }
+ },
+ "game_versions": {
+ "target": "com.modrinth.api#CreatableVersionGameVersionsList",
+ "traits": {
+ "smithy.api#documentation": "A list of versions of Minecraft that this version supports",
+ "smithy.api#required": {}
+ }
+ },
+ "version_type": {
+ "target": "com.modrinth.api#CreatableVersionVersionType",
+ "traits": {
+ "smithy.api#documentation": "The release channel for this version",
+ "smithy.api#required": {}
+ }
+ },
+ "loaders": {
+ "target": "com.modrinth.api#CreatableVersionLoadersList",
+ "traits": {
+ "smithy.api#documentation": "The mod loaders that this version supports. In case of resource packs, use \"minecraft\"",
+ "smithy.api#required": {}
+ }
+ },
+ "featured": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether the version is featured or not",
+ "smithy.api#required": {}
+ }
+ },
+ "status": {
+ "target": "com.modrinth.api#CreatableVersionStatus"
+ },
+ "requested_status": {
+ "target": "com.modrinth.api#CreatableVersionRequestedStatus",
+ "traits": {
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "project_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the project this version is for",
+ "smithy.api#required": {}
+ }
+ },
+ "file_parts": {
+ "target": "com.modrinth.api#CreatableVersionFilePartsList",
+ "traits": {
+ "smithy.api#documentation": "An array of the multipart field names of each file that goes with this version",
+ "smithy.api#required": {}
+ }
+ },
+ "primary_file": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The multipart field name of the primary file"
+ }
+ },
+ "environment": {
+ "target": "com.modrinth.api#EnvironmentInputEnum"
+ },
+ "file_types": {
+ "target": "com.modrinth.api#CreatableVersionFileTypesMap",
+ "traits": {
+ "smithy.api#documentation": "A map of file parts to their associated file type, a file type is used for additional files such as sources jars."
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#CreatableVersionDependenciesList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#VersionDependency"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of specific versions of projects that this version depends on"
+ }
+ },
+ "com.modrinth.api#CreatableVersionGameVersionsList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of versions of Minecraft that this version supports"
+ }
+ },
+ "com.modrinth.api#CreatableVersionVersionType": {
+ "type": "enum",
+ "members": {
+ "RELEASE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "release"
+ }
+ },
+ "BETA": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "beta"
+ }
+ },
+ "ALPHA": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "alpha"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The release channel for this version"
+ }
+ },
+ "com.modrinth.api#CreatableVersionLoadersList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "The mod loaders that this version supports. In case of resource packs, use \"minecraft\""
+ }
+ },
+ "com.modrinth.api#CreatableVersionStatus": {
+ "type": "enum",
+ "members": {
+ "LISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "listed"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ },
+ "SCHEDULED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "scheduled"
+ }
+ },
+ "UNKNOWN": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unknown"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#CreatableVersionRequestedStatus": {
+ "type": "enum",
+ "members": {
+ "LISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "listed"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#CreatableVersionFilePartsList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "An array of the multipart field names of each file that goes with this version"
+ }
+ },
+ "com.modrinth.api#EnvironmentInputEnum": {
+ "type": "enum",
+ "members": {
+ "CLIENT_AND_SERVER": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "client_and_server"
+ }
+ },
+ "CLIENT_ONLY": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "client_only"
+ }
+ },
+ "CLIENT_ONLY_SERVER_OPTIONAL": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "client_only_server_optional"
+ }
+ },
+ "SINGLEPLAYER_ONLY": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "singleplayer_only"
+ }
+ },
+ "SERVER_ONLY": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "server_only"
+ }
+ },
+ "SERVER_ONLY_CLIENT_OPTIONAL": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "server_only_client_optional"
+ }
+ },
+ "DEDICATED_SERVER_ONLY": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "dedicated_server_only"
+ }
+ },
+ "CLIENT_OR_SERVER": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "client_or_server"
+ }
+ },
+ "CLIENT_OR_SERVER_PREFERS_BOTH": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "client_or_server_prefers_both"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The environment a version supports. For an explanation of each environment, see the blog post here: https://modrinth.com/news/article/new-environments/#new-system"
+ }
+ },
+ "com.modrinth.api#FileTypeEnum": {
+ "type": "enum",
+ "members": {
+ "REQUIRED_RESOURCE_PACK": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "required-resource-pack"
+ }
+ },
+ "OPTIONAL_RESOURCE_PACK": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "optional-resource-pack"
+ }
+ },
+ "SOURCES_JAR": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "sources-jar"
+ }
+ },
+ "DEV_JAR": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "dev-jar"
+ }
+ },
+ "JAVADOC_JAR": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "javadoc-jar"
+ }
+ },
+ "UNKNOWN": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unknown"
+ }
+ },
+ "SIGNATURE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "signature"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#CreatableVersionFileTypesMap": {
+ "type": "map",
+ "key": {
+ "target": "smithy.api#String"
+ },
+ "value": {
+ "target": "com.modrinth.api#FileTypeEnum"
+ },
+ "traits": {
+ "smithy.api#documentation": "A map of file parts to their associated file type, a file type is used for additional files such as sources jars."
+ }
+ },
+ "com.modrinth.api#CreateVersionRequest": {
+ "type": "structure",
+ "members": {
+ "data": {
+ "target": "com.modrinth.api#CreatableVersion",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#CreateVersionResponseDependenciesList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#VersionDependency"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of specific versions of projects that this version depends on"
+ }
+ },
+ "com.modrinth.api#CreateVersionResponseGameVersionsList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of versions of Minecraft that this version supports"
+ }
+ },
+ "com.modrinth.api#CreateVersionResponseVersionType": {
+ "type": "enum",
+ "members": {
+ "RELEASE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "release"
+ }
+ },
+ "BETA": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "beta"
+ }
+ },
+ "ALPHA": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "alpha"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The release channel for this version"
+ }
+ },
+ "com.modrinth.api#CreateVersionResponseLoadersList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "The mod loaders that this version supports. In case of resource packs, use \"minecraft\""
+ }
+ },
+ "com.modrinth.api#CreateVersionResponseStatus": {
+ "type": "enum",
+ "members": {
+ "LISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "listed"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ },
+ "SCHEDULED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "scheduled"
+ }
+ },
+ "UNKNOWN": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unknown"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#CreateVersionResponseRequestedStatus": {
+ "type": "enum",
+ "members": {
+ "LISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "listed"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#CreateVersionResponseFilesList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#VersionFile"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of files available for download for this version"
+ }
+ },
+ "com.modrinth.api#CreateVersionResponse": {
+ "type": "structure",
+ "members": {
+ "name": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The name of this version",
+ "smithy.api#required": {}
+ }
+ },
+ "version_number": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The version number. Ideally will follow semantic versioning",
+ "smithy.api#required": {}
+ }
+ },
+ "changelog": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The changelog for this version",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "dependencies": {
+ "target": "com.modrinth.api#CreateVersionResponseDependenciesList",
+ "traits": {
+ "smithy.api#documentation": "A list of specific versions of projects that this version depends on"
+ }
+ },
+ "game_versions": {
+ "target": "com.modrinth.api#CreateVersionResponseGameVersionsList",
+ "traits": {
+ "smithy.api#documentation": "A list of versions of Minecraft that this version supports",
+ "smithy.api#required": {}
+ }
+ },
+ "version_type": {
+ "target": "com.modrinth.api#CreateVersionResponseVersionType",
+ "traits": {
+ "smithy.api#documentation": "The release channel for this version",
+ "smithy.api#required": {}
+ }
+ },
+ "loaders": {
+ "target": "com.modrinth.api#CreateVersionResponseLoadersList",
+ "traits": {
+ "smithy.api#documentation": "The mod loaders that this version supports. In case of resource packs, use \"minecraft\"",
+ "smithy.api#required": {}
+ }
+ },
+ "featured": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether the version is featured or not",
+ "smithy.api#required": {}
+ }
+ },
+ "status": {
+ "target": "com.modrinth.api#CreateVersionResponseStatus"
+ },
+ "requested_status": {
+ "target": "com.modrinth.api#CreateVersionResponseRequestedStatus",
+ "traits": {
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the version, encoded as a base62 string",
+ "smithy.api#required": {}
+ }
+ },
+ "project_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the project this version is for",
+ "smithy.api#required": {}
+ }
+ },
+ "author_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the author who published this version",
+ "smithy.api#required": {}
+ }
+ },
+ "date_published": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ },
+ "downloads": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "The number of times this version has been downloaded",
+ "smithy.api#required": {}
+ }
+ },
+ "changelog_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "A link to the changelog for this version. Always null, only kept for legacy compatibility.",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "environment": {
+ "target": "com.modrinth.api#EnvironmentEnum",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ },
+ "files": {
+ "target": "com.modrinth.api#CreateVersionResponseFilesList",
+ "traits": {
+ "smithy.api#documentation": "A list of files available for download for this version",
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#CreateVersion": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#CreateVersionRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#CreateVersionResponse"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#BadRequest"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "POST",
+ "uri": "/version",
+ "code": 200,
+ "contentType": "multipart"
+ },
+ "smithy.api#documentation": "Create a version\n\nThis route creates a version on an existing project. There must be at least one file attached to each new version, unless the new version's status is `draft`. `.mrpack`, `.jar`, `.zip`, and `.litemod` files are accepted.\n\nThe request is a [multipart request](https://www.ietf.org/rfc/rfc2388.txt) with at least two form fields: one is `data`, which includes a JSON body with the version metadata as shown below, and at least one field containing an upload file.\n\nYou can name the file parts anything you would like, but you must list each of the parts' names in `file_parts`, and optionally, provide one to use as the primary file in `primary_file`.",
+ "com.distilled.openapi#contentType": "multipart"
+ }
+ },
+ "com.modrinth.api#ScheduleVersionRequestRequestedStatus": {
+ "type": "enum",
+ "members": {
+ "APPROVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "approved"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ },
+ "PRIVATE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "private"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The requested status when scheduling the project for release"
+ }
+ },
+ "com.modrinth.api#ScheduleVersionRequest": {
+ "type": "structure",
+ "members": {
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID of the version"
+ }
+ },
+ "time": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ },
+ "requested_status": {
+ "target": "com.modrinth.api#ScheduleVersionRequestRequestedStatus",
+ "traits": {
+ "smithy.api#documentation": "The requested status when scheduling the project for release",
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#ScheduleVersion": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#ScheduleVersionRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#BadRequest"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "POST",
+ "uri": "/version/{id}/schedule",
+ "code": 200
+ },
+ "smithy.api#documentation": "Schedule a version"
+ }
+ },
+ "com.modrinth.api#GetVersionsRequest": {
+ "type": "structure",
+ "members": {
+ "ids": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpQuery": "ids",
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The IDs of the versions"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#GetVersionsResponseBodyList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#Version"
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetVersionsResponse": {
+ "type": "structure",
+ "members": {
+ "body": {
+ "target": "com.modrinth.api#GetVersionsResponseBodyList",
+ "traits": {
+ "com.distilled.openapi#rawResponse": {},
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#GetVersions": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#GetVersionsRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#GetVersionsResponse"
+ },
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/versions",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get multiple versions"
+ }
+ },
+ "com.modrinth.api#AddFilesToVersionRequest": {
+ "type": "structure",
+ "members": {
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID of the version"
+ }
+ },
+ "data": {
+ "target": "smithy.api#Document"
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#AddFilesToVersion": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#AddFilesToVersionRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "POST",
+ "uri": "/version/{id}/file",
+ "code": 200,
+ "contentType": "multipart"
+ },
+ "smithy.api#documentation": "Add files to version\n\nProject files are attached. `.mrpack` and `.jar` files are accepted.",
+ "com.distilled.openapi#contentType": "multipart"
+ }
+ },
+ "com.modrinth.api#VersionFromHashRequestAlgorithm": {
+ "type": "enum",
+ "members": {
+ "SHA1": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "sha1"
+ }
+ },
+ "SHA512": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "sha512"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#VersionFromHashRequest": {
+ "type": "structure",
+ "members": {
+ "hash": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The hash of the file, considering its byte content, and encoded in hexadecimal"
+ }
+ },
+ "algorithm": {
+ "target": "com.modrinth.api#VersionFromHashRequestAlgorithm",
+ "traits": {
+ "smithy.api#httpQuery": "algorithm",
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The algorithm of the hash"
+ }
+ },
+ "multiple": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#httpQuery": "multiple",
+ "smithy.api#documentation": "Whether to return multiple results when looking for this hash"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#VersionFromHashResponseDependenciesList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#VersionDependency"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of specific versions of projects that this version depends on"
+ }
+ },
+ "com.modrinth.api#VersionFromHashResponseGameVersionsList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of versions of Minecraft that this version supports"
+ }
+ },
+ "com.modrinth.api#VersionFromHashResponseVersionType": {
+ "type": "enum",
+ "members": {
+ "RELEASE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "release"
+ }
+ },
+ "BETA": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "beta"
+ }
+ },
+ "ALPHA": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "alpha"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The release channel for this version"
+ }
+ },
+ "com.modrinth.api#VersionFromHashResponseLoadersList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "The mod loaders that this version supports. In case of resource packs, use \"minecraft\""
+ }
+ },
+ "com.modrinth.api#VersionFromHashResponseStatus": {
+ "type": "enum",
+ "members": {
+ "LISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "listed"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ },
+ "SCHEDULED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "scheduled"
+ }
+ },
+ "UNKNOWN": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unknown"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#VersionFromHashResponseRequestedStatus": {
+ "type": "enum",
+ "members": {
+ "LISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "listed"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#VersionFromHashResponseFilesList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#VersionFile"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of files available for download for this version"
+ }
+ },
+ "com.modrinth.api#VersionFromHashResponse": {
+ "type": "structure",
+ "members": {
+ "name": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The name of this version",
+ "smithy.api#required": {}
+ }
+ },
+ "version_number": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The version number. Ideally will follow semantic versioning",
+ "smithy.api#required": {}
+ }
+ },
+ "changelog": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The changelog for this version",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "dependencies": {
+ "target": "com.modrinth.api#VersionFromHashResponseDependenciesList",
+ "traits": {
+ "smithy.api#documentation": "A list of specific versions of projects that this version depends on"
+ }
+ },
+ "game_versions": {
+ "target": "com.modrinth.api#VersionFromHashResponseGameVersionsList",
+ "traits": {
+ "smithy.api#documentation": "A list of versions of Minecraft that this version supports",
+ "smithy.api#required": {}
+ }
+ },
+ "version_type": {
+ "target": "com.modrinth.api#VersionFromHashResponseVersionType",
+ "traits": {
+ "smithy.api#documentation": "The release channel for this version",
+ "smithy.api#required": {}
+ }
+ },
+ "loaders": {
+ "target": "com.modrinth.api#VersionFromHashResponseLoadersList",
+ "traits": {
+ "smithy.api#documentation": "The mod loaders that this version supports. In case of resource packs, use \"minecraft\"",
+ "smithy.api#required": {}
+ }
+ },
+ "featured": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether the version is featured or not",
+ "smithy.api#required": {}
+ }
+ },
+ "status": {
+ "target": "com.modrinth.api#VersionFromHashResponseStatus"
+ },
+ "requested_status": {
+ "target": "com.modrinth.api#VersionFromHashResponseRequestedStatus",
+ "traits": {
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the version, encoded as a base62 string",
+ "smithy.api#required": {}
+ }
+ },
+ "project_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the project this version is for",
+ "smithy.api#required": {}
+ }
+ },
+ "author_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the author who published this version",
+ "smithy.api#required": {}
+ }
+ },
+ "date_published": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ },
+ "downloads": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "The number of times this version has been downloaded",
+ "smithy.api#required": {}
+ }
+ },
+ "changelog_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "A link to the changelog for this version. Always null, only kept for legacy compatibility.",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "environment": {
+ "target": "com.modrinth.api#EnvironmentEnum",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ },
+ "files": {
+ "target": "com.modrinth.api#VersionFromHashResponseFilesList",
+ "traits": {
+ "smithy.api#documentation": "A list of files available for download for this version",
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#VersionFromHash": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#VersionFromHashRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#VersionFromHashResponse"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/version_file/{hash}",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get version from hash"
+ }
+ },
+ "com.modrinth.api#DeleteFileFromHashRequestAlgorithm": {
+ "type": "enum",
+ "members": {
+ "SHA1": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "sha1"
+ }
+ },
+ "SHA512": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "sha512"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#DeleteFileFromHashRequest": {
+ "type": "structure",
+ "members": {
+ "hash": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The hash of the file, considering its byte content, and encoded in hexadecimal"
+ }
+ },
+ "algorithm": {
+ "target": "com.modrinth.api#DeleteFileFromHashRequestAlgorithm",
+ "traits": {
+ "smithy.api#httpQuery": "algorithm",
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The algorithm of the hash"
+ }
+ },
+ "version_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpQuery": "version_id",
+ "smithy.api#documentation": "Version ID to delete the version from, if multiple files of the same hash exist"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#DeleteFileFromHash": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#DeleteFileFromHashRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "DELETE",
+ "uri": "/version_file/{hash}",
+ "code": 200
+ },
+ "smithy.api#documentation": "Delete a file from its hash"
+ }
+ },
+ "com.modrinth.api#GetLatestVersionFromHashRequestAlgorithm": {
+ "type": "enum",
+ "members": {
+ "SHA1": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "sha1"
+ }
+ },
+ "SHA512": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "sha512"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetLatestVersionFromHashRequestLoadersList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetLatestVersionFromHashRequestGameVersionsList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetLatestVersionFromHashRequestVersionTypes": {
+ "type": "enum",
+ "members": {
+ "RELEASE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "release"
+ }
+ },
+ "ALPHA": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "alpha"
+ }
+ },
+ "BETA": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "beta"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetLatestVersionFromHashRequest": {
+ "type": "structure",
+ "members": {
+ "hash": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The hash of the file, considering its byte content, and encoded in hexadecimal"
+ }
+ },
+ "algorithm": {
+ "target": "com.modrinth.api#GetLatestVersionFromHashRequestAlgorithm",
+ "traits": {
+ "smithy.api#httpQuery": "algorithm",
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The algorithm of the hash"
+ }
+ },
+ "loaders": {
+ "target": "com.modrinth.api#GetLatestVersionFromHashRequestLoadersList",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ },
+ "game_versions": {
+ "target": "com.modrinth.api#GetLatestVersionFromHashRequestGameVersionsList",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ },
+ "version_types": {
+ "target": "com.modrinth.api#GetLatestVersionFromHashRequestVersionTypes"
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#GetLatestVersionFromHashResponseDependenciesList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#VersionDependency"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of specific versions of projects that this version depends on"
+ }
+ },
+ "com.modrinth.api#GetLatestVersionFromHashResponseGameVersionsList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of versions of Minecraft that this version supports"
+ }
+ },
+ "com.modrinth.api#GetLatestVersionFromHashResponseVersionType": {
+ "type": "enum",
+ "members": {
+ "RELEASE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "release"
+ }
+ },
+ "BETA": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "beta"
+ }
+ },
+ "ALPHA": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "alpha"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The release channel for this version"
+ }
+ },
+ "com.modrinth.api#GetLatestVersionFromHashResponseLoadersList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "The mod loaders that this version supports. In case of resource packs, use \"minecraft\""
+ }
+ },
+ "com.modrinth.api#GetLatestVersionFromHashResponseStatus": {
+ "type": "enum",
+ "members": {
+ "LISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "listed"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ },
+ "SCHEDULED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "scheduled"
+ }
+ },
+ "UNKNOWN": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unknown"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetLatestVersionFromHashResponseRequestedStatus": {
+ "type": "enum",
+ "members": {
+ "LISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "listed"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetLatestVersionFromHashResponseFilesList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#VersionFile"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of files available for download for this version"
+ }
+ },
+ "com.modrinth.api#GetLatestVersionFromHashResponse": {
+ "type": "structure",
+ "members": {
+ "name": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The name of this version",
+ "smithy.api#required": {}
+ }
+ },
+ "version_number": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The version number. Ideally will follow semantic versioning",
+ "smithy.api#required": {}
+ }
+ },
+ "changelog": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The changelog for this version",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "dependencies": {
+ "target": "com.modrinth.api#GetLatestVersionFromHashResponseDependenciesList",
+ "traits": {
+ "smithy.api#documentation": "A list of specific versions of projects that this version depends on"
+ }
+ },
+ "game_versions": {
+ "target": "com.modrinth.api#GetLatestVersionFromHashResponseGameVersionsList",
+ "traits": {
+ "smithy.api#documentation": "A list of versions of Minecraft that this version supports",
+ "smithy.api#required": {}
+ }
+ },
+ "version_type": {
+ "target": "com.modrinth.api#GetLatestVersionFromHashResponseVersionType",
+ "traits": {
+ "smithy.api#documentation": "The release channel for this version",
+ "smithy.api#required": {}
+ }
+ },
+ "loaders": {
+ "target": "com.modrinth.api#GetLatestVersionFromHashResponseLoadersList",
+ "traits": {
+ "smithy.api#documentation": "The mod loaders that this version supports. In case of resource packs, use \"minecraft\"",
+ "smithy.api#required": {}
+ }
+ },
+ "featured": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether the version is featured or not",
+ "smithy.api#required": {}
+ }
+ },
+ "status": {
+ "target": "com.modrinth.api#GetLatestVersionFromHashResponseStatus"
+ },
+ "requested_status": {
+ "target": "com.modrinth.api#GetLatestVersionFromHashResponseRequestedStatus",
+ "traits": {
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the version, encoded as a base62 string",
+ "smithy.api#required": {}
+ }
+ },
+ "project_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the project this version is for",
+ "smithy.api#required": {}
+ }
+ },
+ "author_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the author who published this version",
+ "smithy.api#required": {}
+ }
+ },
+ "date_published": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ },
+ "downloads": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "The number of times this version has been downloaded",
+ "smithy.api#required": {}
+ }
+ },
+ "changelog_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "A link to the changelog for this version. Always null, only kept for legacy compatibility.",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "environment": {
+ "target": "com.modrinth.api#EnvironmentEnum",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ },
+ "files": {
+ "target": "com.modrinth.api#GetLatestVersionFromHashResponseFilesList",
+ "traits": {
+ "smithy.api#documentation": "A list of files available for download for this version",
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#GetLatestVersionFromHash": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#GetLatestVersionFromHashRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#GetLatestVersionFromHashResponse"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#BadRequest"
+ },
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "POST",
+ "uri": "/version_file/{hash}/update",
+ "code": 200
+ },
+ "smithy.api#documentation": "Latest version of a project from a hash, loader(s), and game version(s)"
+ }
+ },
+ "com.modrinth.api#VersionsFromHashesRequestHashesList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#VersionsFromHashesRequestAlgorithm": {
+ "type": "enum",
+ "members": {
+ "SHA1": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "sha1"
+ }
+ },
+ "SHA512": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "sha512"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#VersionsFromHashesRequest": {
+ "type": "structure",
+ "members": {
+ "hashes": {
+ "target": "com.modrinth.api#VersionsFromHashesRequestHashesList",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ },
+ "algorithm": {
+ "target": "com.modrinth.api#VersionsFromHashesRequestAlgorithm",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#HashVersionMap": {
+ "type": "map",
+ "key": {
+ "target": "smithy.api#String"
+ },
+ "value": {
+ "target": "com.modrinth.api#Version"
+ },
+ "traits": {
+ "smithy.api#documentation": "A map from hashes to versions"
+ }
+ },
+ "com.modrinth.api#VersionsFromHashesResponse": {
+ "type": "structure",
+ "members": {
+ "body": {
+ "target": "com.modrinth.api#HashVersionMap",
+ "traits": {
+ "com.distilled.openapi#rawResponse": {},
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#VersionsFromHashes": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#VersionsFromHashesRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#VersionsFromHashesResponse"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#BadRequest"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "POST",
+ "uri": "/version_files",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get versions from hashes\n\nThis is the same as [`/version_file/{hash}`](#operation/versionFromHash) except it accepts multiple hashes."
+ }
+ },
+ "com.modrinth.api#GetLatestVersionsFromHashesRequestHashesList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetLatestVersionsFromHashesRequestAlgorithm": {
+ "type": "enum",
+ "members": {
+ "SHA1": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "sha1"
+ }
+ },
+ "SHA512": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "sha512"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetLatestVersionsFromHashesRequestLoadersList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetLatestVersionsFromHashesRequestGameVersionsList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetLatestVersionsFromHashesRequestVersionTypes": {
+ "type": "enum",
+ "members": {
+ "RELEASE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "release"
+ }
+ },
+ "ALPHA": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "alpha"
+ }
+ },
+ "BETA": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "beta"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetLatestVersionsFromHashesRequest": {
+ "type": "structure",
+ "members": {
+ "hashes": {
+ "target": "com.modrinth.api#GetLatestVersionsFromHashesRequestHashesList",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ },
+ "algorithm": {
+ "target": "com.modrinth.api#GetLatestVersionsFromHashesRequestAlgorithm",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ },
+ "loaders": {
+ "target": "com.modrinth.api#GetLatestVersionsFromHashesRequestLoadersList",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ },
+ "game_versions": {
+ "target": "com.modrinth.api#GetLatestVersionsFromHashesRequestGameVersionsList",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ },
+ "version_types": {
+ "target": "com.modrinth.api#GetLatestVersionsFromHashesRequestVersionTypes"
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#GetLatestVersionsFromHashesResponse": {
+ "type": "structure",
+ "members": {
+ "body": {
+ "target": "com.modrinth.api#HashVersionMap",
+ "traits": {
+ "com.distilled.openapi#rawResponse": {},
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#GetLatestVersionsFromHashes": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#GetLatestVersionsFromHashesRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#GetLatestVersionsFromHashesResponse"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#BadRequest"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "POST",
+ "uri": "/version_files/update",
+ "code": 200
+ },
+ "smithy.api#documentation": "Latest versions of multiple projects from hashes, loader(s), and game version(s)\n\nThis is the same as [`/version_file/{hash}/update`](#operation/getLatestVersionFromHash) except it accepts multiple hashes."
+ }
+ },
+ "com.modrinth.api#GetUserRequest": {
+ "type": "structure",
+ "members": {
+ "id_username": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID or username of the user"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#UserPayoutData": {
+ "type": "structure",
+ "members": {
+ "balance": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "The payout balance available for the user to withdraw (note, you cannot modify this in a PATCH request)"
+ }
+ },
+ "payout_wallet": {
+ "target": "com.modrinth.api#UserPayoutDataPayoutWallet",
+ "traits": {
+ "smithy.api#documentation": "The wallet that the user has selected"
+ }
+ },
+ "payout_wallet_type": {
+ "target": "com.modrinth.api#UserPayoutDataPayoutWalletType",
+ "traits": {
+ "smithy.api#documentation": "The type of the user's wallet"
+ }
+ },
+ "payout_address": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The user's payout address"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "Various data relating to the user's payouts status (you can only see your own)"
+ }
+ },
+ "com.modrinth.api#UserPayoutDataPayoutWallet": {
+ "type": "enum",
+ "members": {
+ "PAYPAL": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "paypal"
+ }
+ },
+ "VENMO": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "venmo"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The wallet that the user has selected"
+ }
+ },
+ "com.modrinth.api#UserPayoutDataPayoutWalletType": {
+ "type": "enum",
+ "members": {
+ "EMAIL": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "email"
+ }
+ },
+ "PHONE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "phone"
+ }
+ },
+ "USER_HANDLE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "user_handle"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The type of the user's wallet"
+ }
+ },
+ "com.modrinth.api#GetUserResponseRole": {
+ "type": "enum",
+ "members": {
+ "ADMIN": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "admin"
+ }
+ },
+ "MODERATOR": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "moderator"
+ }
+ },
+ "DEVELOPER": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "developer"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The user's role"
+ }
+ },
+ "com.modrinth.api#GetUserResponseAuthProvidersList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of authentication providers you have signed up for (only displayed if requesting your own account)"
+ }
+ },
+ "com.modrinth.api#GetUserResponse": {
+ "type": "structure",
+ "members": {
+ "username": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The user's username",
+ "smithy.api#required": {}
+ }
+ },
+ "name": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The user's display name",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "email": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The user's email (only displayed if requesting your own account). Requires `USER_READ_EMAIL` PAT scope.",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "bio": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "A description of the user"
+ }
+ },
+ "payout_data": {
+ "target": "com.modrinth.api#UserPayoutData",
+ "traits": {
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The user's ID",
+ "smithy.api#required": {}
+ }
+ },
+ "avatar_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The user's avatar url",
+ "smithy.api#required": {}
+ }
+ },
+ "created": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The time at which the user was created",
+ "smithy.api#required": {}
+ }
+ },
+ "role": {
+ "target": "com.modrinth.api#GetUserResponseRole",
+ "traits": {
+ "smithy.api#documentation": "The user's role",
+ "smithy.api#required": {}
+ }
+ },
+ "badges": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "Any badges applicable to this user. These are currently unused and undisplayed, and as such are subject to change\n\nIn order from first to seventh bit, the current bits are:\n- (unused)\n- EARLY_MODPACK_ADOPTER\n- EARLY_RESPACK_ADOPTER\n- EARLY_PLUGIN_ADOPTER\n- ALPHA_TESTER\n- CONTRIBUTOR\n- TRANSLATOR\n"
+ }
+ },
+ "auth_providers": {
+ "target": "com.modrinth.api#GetUserResponseAuthProvidersList",
+ "traits": {
+ "smithy.api#documentation": "A list of authentication providers you have signed up for (only displayed if requesting your own account)",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "email_verified": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether your email is verified (only displayed if requesting your own account)",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "has_password": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether you have a password associated with your account (only displayed if requesting your own account)",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "has_totp": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether you have TOTP two-factor authentication connected to your account (only displayed if requesting your own account)",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "github_id": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "Deprecated - this is no longer public for security reasons and is always null",
+ "com.distilled.openapi#nullable": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#GetUser": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#GetUserRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#GetUserResponse"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/user/{id_username}",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get a user"
+ }
+ },
+ "com.modrinth.api#ModifyUserRequest": {
+ "type": "structure",
+ "members": {
+ "id_username": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID or username of the user"
+ }
+ },
+ "username": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The user's username",
+ "smithy.api#required": {}
+ }
+ },
+ "name": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The user's display name",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "email": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The user's email (only displayed if requesting your own account). Requires `USER_READ_EMAIL` PAT scope.",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "bio": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "A description of the user"
+ }
+ },
+ "payout_data": {
+ "target": "com.modrinth.api#UserPayoutData",
+ "traits": {
+ "com.distilled.openapi#nullable": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#ModifyUser": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#ModifyUserRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "PATCH",
+ "uri": "/user/{id_username}",
+ "code": 200
+ },
+ "smithy.api#documentation": "Modify a user"
+ }
+ },
+ "com.modrinth.api#GetUserFromAuthResponseRole": {
+ "type": "enum",
+ "members": {
+ "ADMIN": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "admin"
+ }
+ },
+ "MODERATOR": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "moderator"
+ }
+ },
+ "DEVELOPER": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "developer"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The user's role"
+ }
+ },
+ "com.modrinth.api#GetUserFromAuthResponseAuthProvidersList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of authentication providers you have signed up for (only displayed if requesting your own account)"
+ }
+ },
+ "com.modrinth.api#GetUserFromAuthResponse": {
+ "type": "structure",
+ "members": {
+ "username": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The user's username",
+ "smithy.api#required": {}
+ }
+ },
+ "name": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The user's display name",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "email": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The user's email (only displayed if requesting your own account). Requires `USER_READ_EMAIL` PAT scope.",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "bio": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "A description of the user"
+ }
+ },
+ "payout_data": {
+ "target": "com.modrinth.api#UserPayoutData",
+ "traits": {
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The user's ID",
+ "smithy.api#required": {}
+ }
+ },
+ "avatar_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The user's avatar url",
+ "smithy.api#required": {}
+ }
+ },
+ "created": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The time at which the user was created",
+ "smithy.api#required": {}
+ }
+ },
+ "role": {
+ "target": "com.modrinth.api#GetUserFromAuthResponseRole",
+ "traits": {
+ "smithy.api#documentation": "The user's role",
+ "smithy.api#required": {}
+ }
+ },
+ "badges": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "Any badges applicable to this user. These are currently unused and undisplayed, and as such are subject to change\n\nIn order from first to seventh bit, the current bits are:\n- (unused)\n- EARLY_MODPACK_ADOPTER\n- EARLY_RESPACK_ADOPTER\n- EARLY_PLUGIN_ADOPTER\n- ALPHA_TESTER\n- CONTRIBUTOR\n- TRANSLATOR\n"
+ }
+ },
+ "auth_providers": {
+ "target": "com.modrinth.api#GetUserFromAuthResponseAuthProvidersList",
+ "traits": {
+ "smithy.api#documentation": "A list of authentication providers you have signed up for (only displayed if requesting your own account)",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "email_verified": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether your email is verified (only displayed if requesting your own account)",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "has_password": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether you have a password associated with your account (only displayed if requesting your own account)",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "has_totp": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether you have TOTP two-factor authentication connected to your account (only displayed if requesting your own account)",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "github_id": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "Deprecated - this is no longer public for security reasons and is always null",
+ "com.distilled.openapi#nullable": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#GetUserFromAuth": {
+ "type": "operation",
+ "input": {
+ "target": "smithy.api#Unit"
+ },
+ "output": {
+ "target": "com.modrinth.api#GetUserFromAuthResponse"
+ },
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/user",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get user from authorization header"
+ }
+ },
+ "com.modrinth.api#GetUsersRequest": {
+ "type": "structure",
+ "members": {
+ "ids": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpQuery": "ids",
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The IDs of the users"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#User": {
+ "type": "structure",
+ "members": {
+ "username": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The user's username",
+ "smithy.api#required": {}
+ }
+ },
+ "name": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The user's display name",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "email": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The user's email (only displayed if requesting your own account). Requires `USER_READ_EMAIL` PAT scope.",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "bio": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "A description of the user"
+ }
+ },
+ "payout_data": {
+ "target": "com.modrinth.api#UserPayoutData",
+ "traits": {
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The user's ID",
+ "smithy.api#required": {}
+ }
+ },
+ "avatar_url": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The user's avatar url",
+ "smithy.api#required": {}
+ }
+ },
+ "created": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The time at which the user was created",
+ "smithy.api#required": {}
+ }
+ },
+ "role": {
+ "target": "com.modrinth.api#UserRole",
+ "traits": {
+ "smithy.api#documentation": "The user's role",
+ "smithy.api#required": {}
+ }
+ },
+ "badges": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "Any badges applicable to this user. These are currently unused and undisplayed, and as such are subject to change\n\nIn order from first to seventh bit, the current bits are:\n- (unused)\n- EARLY_MODPACK_ADOPTER\n- EARLY_RESPACK_ADOPTER\n- EARLY_PLUGIN_ADOPTER\n- ALPHA_TESTER\n- CONTRIBUTOR\n- TRANSLATOR\n"
+ }
+ },
+ "auth_providers": {
+ "target": "com.modrinth.api#UserAuthProvidersList",
+ "traits": {
+ "smithy.api#documentation": "A list of authentication providers you have signed up for (only displayed if requesting your own account)",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "email_verified": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether your email is verified (only displayed if requesting your own account)",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "has_password": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether you have a password associated with your account (only displayed if requesting your own account)",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "has_totp": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether you have TOTP two-factor authentication connected to your account (only displayed if requesting your own account)",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "github_id": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "Deprecated - this is no longer public for security reasons and is always null",
+ "com.distilled.openapi#nullable": {}
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#UserRole": {
+ "type": "enum",
+ "members": {
+ "ADMIN": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "admin"
+ }
+ },
+ "MODERATOR": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "moderator"
+ }
+ },
+ "DEVELOPER": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "developer"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The user's role"
+ }
+ },
+ "com.modrinth.api#UserAuthProvidersList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of authentication providers you have signed up for (only displayed if requesting your own account)"
+ }
+ },
+ "com.modrinth.api#GetUsersResponseBodyList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#User"
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetUsersResponse": {
+ "type": "structure",
+ "members": {
+ "body": {
+ "target": "com.modrinth.api#GetUsersResponseBodyList",
+ "traits": {
+ "com.distilled.openapi#rawResponse": {},
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#GetUsers": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#GetUsersRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#GetUsersResponse"
+ },
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/users",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get multiple users"
+ }
+ },
+ "com.modrinth.api#ChangeUserIconRequest": {
+ "type": "structure",
+ "members": {
+ "id_username": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID or username of the user"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#ChangeUserIcon": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#ChangeUserIconRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#BadRequest"
+ },
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "PATCH",
+ "uri": "/user/{id_username}/icon",
+ "code": 200
+ },
+ "smithy.api#documentation": "Change user's avatar\n\nThe new avatar may be up to 2MiB in size."
+ }
+ },
+ "com.modrinth.api#DeleteUserIconRequest": {
+ "type": "structure",
+ "members": {
+ "id_username": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID or username of the user"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#DeleteUserIcon": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#DeleteUserIconRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#BadRequest"
+ },
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "DELETE",
+ "uri": "/user/{id_username}/icon",
+ "code": 200
+ },
+ "smithy.api#documentation": "Remove user's avatar"
+ }
+ },
+ "com.modrinth.api#GetUserProjectsRequest": {
+ "type": "structure",
+ "members": {
+ "id_username": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID or username of the user"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#GetUserProjectsResponseBodyList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#Project"
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetUserProjectsResponse": {
+ "type": "structure",
+ "members": {
+ "body": {
+ "target": "com.modrinth.api#GetUserProjectsResponseBodyList",
+ "traits": {
+ "com.distilled.openapi#rawResponse": {},
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#GetUserProjects": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#GetUserProjectsRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#GetUserProjectsResponse"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/user/{id_username}/projects",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get user's projects"
+ }
+ },
+ "com.modrinth.api#GetFollowedProjectsRequest": {
+ "type": "structure",
+ "members": {
+ "id_username": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID or username of the user"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#GetFollowedProjectsResponseBodyList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#Project"
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetFollowedProjectsResponse": {
+ "type": "structure",
+ "members": {
+ "body": {
+ "target": "com.modrinth.api#GetFollowedProjectsResponseBodyList",
+ "traits": {
+ "com.distilled.openapi#rawResponse": {},
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#GetFollowedProjects": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#GetFollowedProjectsRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#GetFollowedProjectsResponse"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/user/{id_username}/follows",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get user's followed projects"
+ }
+ },
+ "com.modrinth.api#GetPayoutHistoryRequest": {
+ "type": "structure",
+ "members": {
+ "id_username": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID or username of the user"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#UserPayoutHistory": {
+ "type": "structure",
+ "members": {
+ "all_time": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The all-time balance accrued by this user in USD"
+ }
+ },
+ "last_month": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The amount in USD made by the user in the previous 30 days"
+ }
+ },
+ "payouts": {
+ "target": "com.modrinth.api#UserPayoutHistoryPayoutsList",
+ "traits": {
+ "smithy.api#documentation": "A history of all of the user's past transactions"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#UserPayoutHistoryEntry": {
+ "type": "structure",
+ "members": {
+ "created": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The date of this transaction"
+ }
+ },
+ "amount": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "The amount of this transaction in USD"
+ }
+ },
+ "status": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The status of this transaction"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#UserPayoutHistoryPayoutsList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#UserPayoutHistoryEntry"
+ },
+ "traits": {
+ "smithy.api#documentation": "A history of all of the user's past transactions"
+ }
+ },
+ "com.modrinth.api#GetPayoutHistory": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#GetPayoutHistoryRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#UserPayoutHistory"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/user/{id_username}/payouts",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get user's payout history"
+ }
+ },
+ "com.modrinth.api#WithdrawPayoutRequest": {
+ "type": "structure",
+ "members": {
+ "id_username": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID or username of the user"
+ }
+ },
+ "amount": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#httpQuery": "amount",
+ "smithy.api#required": {},
+ "smithy.api#documentation": "Amount to withdraw"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#WithdrawPayout": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#WithdrawPayoutRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "POST",
+ "uri": "/user/{id_username}/payouts",
+ "code": 200
+ },
+ "smithy.api#documentation": "Withdraw payout balance to PayPal or Venmo\n\nWarning: certain amounts get withheld for fees. Please do not call this API endpoint without first acknowledging the warnings on the corresponding frontend page."
+ }
+ },
+ "com.modrinth.api#GetUserNotificationsRequest": {
+ "type": "structure",
+ "members": {
+ "id_username": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID or username of the user"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#Notification": {
+ "type": "structure",
+ "members": {
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The id of the notification",
+ "smithy.api#required": {}
+ }
+ },
+ "user_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The id of the user who received the notification",
+ "smithy.api#required": {}
+ }
+ },
+ "type": {
+ "target": "com.modrinth.api#NotificationType",
+ "traits": {
+ "smithy.api#documentation": "The type of notification",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "title": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The title of the notification",
+ "smithy.api#required": {}
+ }
+ },
+ "text": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The body text of the notification",
+ "smithy.api#required": {}
+ }
+ },
+ "link": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "A link to the related project or version",
+ "smithy.api#required": {}
+ }
+ },
+ "read": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether the notification has been read or not",
+ "smithy.api#required": {}
+ }
+ },
+ "created": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The time at which the notification was created",
+ "smithy.api#required": {}
+ }
+ },
+ "actions": {
+ "target": "com.modrinth.api#NotificationActionsList",
+ "traits": {
+ "smithy.api#documentation": "A list of actions that can be performed",
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#NotificationType": {
+ "type": "enum",
+ "members": {
+ "PROJECT_UPDATE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "project_update"
+ }
+ },
+ "TEAM_INVITE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "team_invite"
+ }
+ },
+ "STATUS_CHANGE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "status_change"
+ }
+ },
+ "MODERATOR_MESSAGE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "moderator_message"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The type of notification"
+ }
+ },
+ "com.modrinth.api#NotificationAction": {
+ "type": "structure",
+ "members": {
+ "title": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The friendly name for this action"
+ }
+ },
+ "action_route": {
+ "target": "com.modrinth.api#NotificationActionActionRouteList",
+ "traits": {
+ "smithy.api#documentation": "The HTTP code and path to request in order to perform this action."
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "An action that can be performed on a notification"
+ }
+ },
+ "com.modrinth.api#NotificationActionActionRouteList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "The HTTP code and path to request in order to perform this action."
+ }
+ },
+ "com.modrinth.api#NotificationActionsList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#NotificationAction"
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of actions that can be performed"
+ }
+ },
+ "com.modrinth.api#GetUserNotificationsResponseBodyList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#Notification"
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetUserNotificationsResponse": {
+ "type": "structure",
+ "members": {
+ "body": {
+ "target": "com.modrinth.api#GetUserNotificationsResponseBodyList",
+ "traits": {
+ "com.distilled.openapi#rawResponse": {},
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#GetUserNotifications": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#GetUserNotificationsRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#GetUserNotificationsResponse"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/user/{id_username}/notifications",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get user's notifications"
+ }
+ },
+ "com.modrinth.api#GetNotificationRequest": {
+ "type": "structure",
+ "members": {
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID of the notification"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#GetNotification": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#GetNotificationRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#Notification"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/notification/{id}",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get notification from ID"
+ }
+ },
+ "com.modrinth.api#ReadNotificationRequest": {
+ "type": "structure",
+ "members": {
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID of the notification"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#ReadNotification": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#ReadNotificationRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "PATCH",
+ "uri": "/notification/{id}",
+ "code": 200
+ },
+ "smithy.api#documentation": "Mark notification as read"
+ }
+ },
+ "com.modrinth.api#DeleteNotificationRequest": {
+ "type": "structure",
+ "members": {
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID of the notification"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#DeleteNotification": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#DeleteNotificationRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "DELETE",
+ "uri": "/notification/{id}",
+ "code": 200
+ },
+ "smithy.api#documentation": "Delete notification"
+ }
+ },
+ "com.modrinth.api#GetNotificationsRequest": {
+ "type": "structure",
+ "members": {
+ "ids": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpQuery": "ids",
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The IDs of the notifications"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#GetNotificationsResponseBodyList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#Notification"
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetNotificationsResponse": {
+ "type": "structure",
+ "members": {
+ "body": {
+ "target": "com.modrinth.api#GetNotificationsResponseBodyList",
+ "traits": {
+ "com.distilled.openapi#rawResponse": {},
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#GetNotifications": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#GetNotificationsRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#GetNotificationsResponse"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/notifications",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get multiple notifications"
+ }
+ },
+ "com.modrinth.api#ReadNotificationsRequest": {
+ "type": "structure",
+ "members": {
+ "ids": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpQuery": "ids",
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The IDs of the notifications"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#ReadNotifications": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#ReadNotificationsRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "PATCH",
+ "uri": "/notifications",
+ "code": 200
+ },
+ "smithy.api#documentation": "Mark multiple notifications as read"
+ }
+ },
+ "com.modrinth.api#DeleteNotificationsRequest": {
+ "type": "structure",
+ "members": {
+ "ids": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpQuery": "ids",
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The IDs of the notifications"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#DeleteNotifications": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#DeleteNotificationsRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "DELETE",
+ "uri": "/notifications",
+ "code": 200
+ },
+ "smithy.api#documentation": "Delete multiple notifications"
+ }
+ },
+ "com.modrinth.api#GetOpenReportsRequest": {
+ "type": "structure",
+ "members": {
+ "count": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#httpQuery": "count"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#Report": {
+ "type": "structure",
+ "members": {
+ "report_type": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The type of the report being sent",
+ "smithy.api#required": {}
+ }
+ },
+ "item_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the item (project, version, or user) being reported",
+ "smithy.api#required": {}
+ }
+ },
+ "item_type": {
+ "target": "com.modrinth.api#ReportItemType",
+ "traits": {
+ "smithy.api#documentation": "The type of the item being reported",
+ "smithy.api#required": {}
+ }
+ },
+ "body": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The extended explanation of the report",
+ "smithy.api#required": {}
+ }
+ },
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the report"
+ }
+ },
+ "reporter": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the user who reported the item",
+ "smithy.api#required": {}
+ }
+ },
+ "created": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The time at which the report was created",
+ "smithy.api#required": {}
+ }
+ },
+ "closed": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether the report is resolved",
+ "smithy.api#required": {}
+ }
+ },
+ "thread_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the moderation thread associated with this report",
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#ReportItemType": {
+ "type": "enum",
+ "members": {
+ "PROJECT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "project"
+ }
+ },
+ "USER": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "user"
+ }
+ },
+ "VERSION": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "version"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The type of the item being reported"
+ }
+ },
+ "com.modrinth.api#GetOpenReportsResponseBodyList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#Report"
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetOpenReportsResponse": {
+ "type": "structure",
+ "members": {
+ "body": {
+ "target": "com.modrinth.api#GetOpenReportsResponseBodyList",
+ "traits": {
+ "com.distilled.openapi#rawResponse": {},
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#GetOpenReports": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#GetOpenReportsRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#GetOpenReportsResponse"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/report",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get your open reports"
+ }
+ },
+ "com.modrinth.api#SubmitReportRequestItemType": {
+ "type": "enum",
+ "members": {
+ "PROJECT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "project"
+ }
+ },
+ "USER": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "user"
+ }
+ },
+ "VERSION": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "version"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The type of the item being reported"
+ }
+ },
+ "com.modrinth.api#SubmitReportRequest": {
+ "type": "structure",
+ "members": {
+ "report_type": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The type of the report being sent",
+ "smithy.api#required": {}
+ }
+ },
+ "item_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the item (project, version, or user) being reported",
+ "smithy.api#required": {}
+ }
+ },
+ "item_type": {
+ "target": "com.modrinth.api#SubmitReportRequestItemType",
+ "traits": {
+ "smithy.api#documentation": "The type of the item being reported",
+ "smithy.api#required": {}
+ }
+ },
+ "body": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The extended explanation of the report",
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#SubmitReportResponseItemType": {
+ "type": "enum",
+ "members": {
+ "PROJECT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "project"
+ }
+ },
+ "USER": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "user"
+ }
+ },
+ "VERSION": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "version"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The type of the item being reported"
+ }
+ },
+ "com.modrinth.api#SubmitReportResponse": {
+ "type": "structure",
+ "members": {
+ "report_type": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The type of the report being sent",
+ "smithy.api#required": {}
+ }
+ },
+ "item_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the item (project, version, or user) being reported",
+ "smithy.api#required": {}
+ }
+ },
+ "item_type": {
+ "target": "com.modrinth.api#SubmitReportResponseItemType",
+ "traits": {
+ "smithy.api#documentation": "The type of the item being reported",
+ "smithy.api#required": {}
+ }
+ },
+ "body": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The extended explanation of the report",
+ "smithy.api#required": {}
+ }
+ },
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the report"
+ }
+ },
+ "reporter": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the user who reported the item",
+ "smithy.api#required": {}
+ }
+ },
+ "created": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The time at which the report was created",
+ "smithy.api#required": {}
+ }
+ },
+ "closed": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether the report is resolved",
+ "smithy.api#required": {}
+ }
+ },
+ "thread_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the moderation thread associated with this report",
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#SubmitReport": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#SubmitReportRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#SubmitReportResponse"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#BadRequest"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "POST",
+ "uri": "/report",
+ "code": 200
+ },
+ "smithy.api#documentation": "Report a project, user, or version\n\nBring a project, user, or version to the attention of the moderators by reporting it."
+ }
+ },
+ "com.modrinth.api#GetReportRequest": {
+ "type": "structure",
+ "members": {
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID of the report"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#GetReportResponseItemType": {
+ "type": "enum",
+ "members": {
+ "PROJECT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "project"
+ }
+ },
+ "USER": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "user"
+ }
+ },
+ "VERSION": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "version"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The type of the item being reported"
+ }
+ },
+ "com.modrinth.api#GetReportResponse": {
+ "type": "structure",
+ "members": {
+ "report_type": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The type of the report being sent",
+ "smithy.api#required": {}
+ }
+ },
+ "item_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the item (project, version, or user) being reported",
+ "smithy.api#required": {}
+ }
+ },
+ "item_type": {
+ "target": "com.modrinth.api#GetReportResponseItemType",
+ "traits": {
+ "smithy.api#documentation": "The type of the item being reported",
+ "smithy.api#required": {}
+ }
+ },
+ "body": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The extended explanation of the report",
+ "smithy.api#required": {}
+ }
+ },
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the report"
+ }
+ },
+ "reporter": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the user who reported the item",
+ "smithy.api#required": {}
+ }
+ },
+ "created": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The time at which the report was created",
+ "smithy.api#required": {}
+ }
+ },
+ "closed": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether the report is resolved",
+ "smithy.api#required": {}
+ }
+ },
+ "thread_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the moderation thread associated with this report",
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#GetReport": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#GetReportRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#GetReportResponse"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/report/{id}",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get report from ID"
+ }
+ },
+ "com.modrinth.api#ModifyReportRequest": {
+ "type": "structure",
+ "members": {
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID of the report"
+ }
+ },
+ "body": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The contents of the report"
+ }
+ },
+ "closed": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether the thread should be closed"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#ModifyReport": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#ModifyReportRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#BadRequest"
+ },
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "PATCH",
+ "uri": "/report/{id}",
+ "code": 200
+ },
+ "smithy.api#documentation": "Modify a report"
+ }
+ },
+ "com.modrinth.api#GetReportsRequest": {
+ "type": "structure",
+ "members": {
+ "ids": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpQuery": "ids",
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The IDs of the reports"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#GetReportsResponseBodyList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#Report"
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetReportsResponse": {
+ "type": "structure",
+ "members": {
+ "body": {
+ "target": "com.modrinth.api#GetReportsResponseBodyList",
+ "traits": {
+ "com.distilled.openapi#rawResponse": {},
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#GetReports": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#GetReportsRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#GetReportsResponse"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/reports",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get multiple reports"
+ }
+ },
+ "com.modrinth.api#GetThreadRequest": {
+ "type": "structure",
+ "members": {
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID of the thread"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#Thread": {
+ "type": "structure",
+ "members": {
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the thread",
+ "smithy.api#required": {}
+ }
+ },
+ "type": {
+ "target": "com.modrinth.api#ThreadType",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ },
+ "project_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the associated project if a project thread",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "report_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the associated report if a report thread",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "messages": {
+ "target": "com.modrinth.api#ThreadMessagesList",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ },
+ "members": {
+ "target": "com.modrinth.api#ThreadMembersList",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#ThreadType": {
+ "type": "enum",
+ "members": {
+ "PROJECT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "project"
+ }
+ },
+ "REPORT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "report"
+ }
+ },
+ "DIRECT_MESSAGE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "direct_message"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#ThreadMessage": {
+ "type": "structure",
+ "members": {
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the message itself",
+ "smithy.api#required": {}
+ }
+ },
+ "author_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the author",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "body": {
+ "target": "com.modrinth.api#ThreadMessageBody",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ },
+ "created": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The time at which the message was created",
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#ThreadMessageBody": {
+ "type": "structure",
+ "members": {
+ "type": {
+ "target": "com.modrinth.api#ThreadMessageBodyType",
+ "traits": {
+ "smithy.api#documentation": "The type of message",
+ "smithy.api#required": {}
+ }
+ },
+ "body": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The actual message text. **Only present for `text` message type**"
+ }
+ },
+ "private": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether the message is only visible to moderators. **Only present for `text` message type**"
+ }
+ },
+ "replying_to": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the message being replied to by this message. **Only present for `text` message type**",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "old_status": {
+ "target": "com.modrinth.api#ThreadMessageBodyOldStatus",
+ "traits": {
+ "smithy.api#documentation": "The old status of the project. **Only present for `status_change` message type**"
+ }
+ },
+ "new_status": {
+ "target": "com.modrinth.api#ThreadMessageBodyNewStatus",
+ "traits": {
+ "smithy.api#documentation": "The new status of the project. **Only present for `status_change` message type**"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The contents of the message. **Fields will vary depending on message type.**"
+ }
+ },
+ "com.modrinth.api#ThreadMessageBodyType": {
+ "type": "enum",
+ "members": {
+ "STATUS_CHANGE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "status_change"
+ }
+ },
+ "TEXT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "text"
+ }
+ },
+ "THREAD_CLOSURE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "thread_closure"
+ }
+ },
+ "DELETED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "deleted"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The type of message"
+ }
+ },
+ "com.modrinth.api#ThreadMessageBodyOldStatus": {
+ "type": "enum",
+ "members": {
+ "APPROVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "approved"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "REJECTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "rejected"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ },
+ "PROCESSING": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "processing"
+ }
+ },
+ "WITHHELD": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "withheld"
+ }
+ },
+ "SCHEDULED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "scheduled"
+ }
+ },
+ "PRIVATE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "private"
+ }
+ },
+ "UNKNOWN": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unknown"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The old status of the project. **Only present for `status_change` message type**"
+ }
+ },
+ "com.modrinth.api#ThreadMessageBodyNewStatus": {
+ "type": "enum",
+ "members": {
+ "APPROVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "approved"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "REJECTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "rejected"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ },
+ "PROCESSING": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "processing"
+ }
+ },
+ "WITHHELD": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "withheld"
+ }
+ },
+ "SCHEDULED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "scheduled"
+ }
+ },
+ "PRIVATE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "private"
+ }
+ },
+ "UNKNOWN": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unknown"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The new status of the project. **Only present for `status_change` message type**"
+ }
+ },
+ "com.modrinth.api#ThreadMessagesList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#ThreadMessage"
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#ThreadMembersList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#User"
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetThread": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#GetThreadRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#Thread"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/thread/{id}",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get a thread"
+ }
+ },
+ "com.modrinth.api#SendThreadMessageRequestType": {
+ "type": "enum",
+ "members": {
+ "STATUS_CHANGE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "status_change"
+ }
+ },
+ "TEXT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "text"
+ }
+ },
+ "THREAD_CLOSURE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "thread_closure"
+ }
+ },
+ "DELETED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "deleted"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The type of message"
+ }
+ },
+ "com.modrinth.api#SendThreadMessageRequestOldStatus": {
+ "type": "enum",
+ "members": {
+ "APPROVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "approved"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "REJECTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "rejected"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ },
+ "PROCESSING": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "processing"
+ }
+ },
+ "WITHHELD": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "withheld"
+ }
+ },
+ "SCHEDULED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "scheduled"
+ }
+ },
+ "PRIVATE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "private"
+ }
+ },
+ "UNKNOWN": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unknown"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The old status of the project. **Only present for `status_change` message type**"
+ }
+ },
+ "com.modrinth.api#SendThreadMessageRequestNewStatus": {
+ "type": "enum",
+ "members": {
+ "APPROVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "approved"
+ }
+ },
+ "ARCHIVED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "archived"
+ }
+ },
+ "REJECTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "rejected"
+ }
+ },
+ "DRAFT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "draft"
+ }
+ },
+ "UNLISTED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unlisted"
+ }
+ },
+ "PROCESSING": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "processing"
+ }
+ },
+ "WITHHELD": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "withheld"
+ }
+ },
+ "SCHEDULED": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "scheduled"
+ }
+ },
+ "PRIVATE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "private"
+ }
+ },
+ "UNKNOWN": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "unknown"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The new status of the project. **Only present for `status_change` message type**"
+ }
+ },
+ "com.modrinth.api#SendThreadMessageRequest": {
+ "type": "structure",
+ "members": {
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID of the thread"
+ }
+ },
+ "type": {
+ "target": "com.modrinth.api#SendThreadMessageRequestType",
+ "traits": {
+ "smithy.api#documentation": "The type of message",
+ "smithy.api#required": {}
+ }
+ },
+ "body": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The actual message text. **Only present for `text` message type**"
+ }
+ },
+ "private": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether the message is only visible to moderators. **Only present for `text` message type**"
+ }
+ },
+ "replying_to": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the message being replied to by this message. **Only present for `text` message type**",
+ "com.distilled.openapi#nullable": {}
+ }
+ },
+ "old_status": {
+ "target": "com.modrinth.api#SendThreadMessageRequestOldStatus",
+ "traits": {
+ "smithy.api#documentation": "The old status of the project. **Only present for `status_change` message type**"
+ }
+ },
+ "new_status": {
+ "target": "com.modrinth.api#SendThreadMessageRequestNewStatus",
+ "traits": {
+ "smithy.api#documentation": "The new status of the project. **Only present for `status_change` message type**"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#SendThreadMessage": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#SendThreadMessageRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#Thread"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#BadRequest"
+ },
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "POST",
+ "uri": "/thread/{id}",
+ "code": 200
+ },
+ "smithy.api#documentation": "Send a text message to a thread"
+ }
+ },
+ "com.modrinth.api#GetThreadsRequest": {
+ "type": "structure",
+ "members": {
+ "ids": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpQuery": "ids",
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The IDs of the threads"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#GetThreadsResponseBodyList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#Thread"
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetThreadsResponse": {
+ "type": "structure",
+ "members": {
+ "body": {
+ "target": "com.modrinth.api#GetThreadsResponseBodyList",
+ "traits": {
+ "com.distilled.openapi#rawResponse": {},
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#GetThreads": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#GetThreadsRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#GetThreadsResponse"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/threads",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get multiple threads"
+ }
+ },
+ "com.modrinth.api#DeleteThreadMessageRequest": {
+ "type": "structure",
+ "members": {
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID of the message"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#DeleteThreadMessage": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#DeleteThreadMessageRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "DELETE",
+ "uri": "/message/{id}",
+ "code": 200
+ },
+ "smithy.api#documentation": "Delete a thread message"
+ }
+ },
+ "com.modrinth.api#GetProjectTeamMembersRequest": {
+ "type": "structure",
+ "members": {
+ "id_slug": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID or slug of the project"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#TeamMember": {
+ "type": "structure",
+ "members": {
+ "team_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The ID of the team this team member is a member of",
+ "smithy.api#required": {}
+ }
+ },
+ "user": {
+ "target": "com.modrinth.api#User",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ },
+ "role": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The user's role on the team",
+ "smithy.api#required": {}
+ }
+ },
+ "permissions": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "The user's permissions in bitfield format (requires authorization to view)\n\nIn order from first to tenth bit, the bits are:\n- UPLOAD_VERSION\n- DELETE_VERSION\n- EDIT_DETAILS\n- EDIT_BODY\n- MANAGE_INVITES\n- REMOVE_MEMBER\n- EDIT_MEMBER\n- DELETE_PROJECT\n- VIEW_ANALYTICS\n- VIEW_PAYOUTS\n"
+ }
+ },
+ "accepted": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether or not the user has accepted to be on the team (requires authorization to view)",
+ "smithy.api#required": {}
+ }
+ },
+ "payouts_split": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "The split of payouts going to this user. The proportion of payouts they get is their split divided by the sum of the splits of all members."
+ }
+ },
+ "ordering": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "The order of the team member."
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetProjectTeamMembersResponseBodyList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#TeamMember"
+ },
+ "traits": {
+ "smithy.api#documentation": "An array of team members"
+ }
+ },
+ "com.modrinth.api#GetProjectTeamMembersResponse": {
+ "type": "structure",
+ "members": {
+ "body": {
+ "target": "com.modrinth.api#GetProjectTeamMembersResponseBodyList",
+ "traits": {
+ "com.distilled.openapi#rawResponse": {},
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#GetProjectTeamMembers": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#GetProjectTeamMembersRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#GetProjectTeamMembersResponse"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/project/{id_slug}/members",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get a project's team members"
+ }
+ },
+ "com.modrinth.api#GetTeamMembersRequest": {
+ "type": "structure",
+ "members": {
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID of the team"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#GetTeamMembersResponseBodyList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#TeamMember"
+ },
+ "traits": {
+ "smithy.api#documentation": "An array of team members"
+ }
+ },
+ "com.modrinth.api#GetTeamMembersResponse": {
+ "type": "structure",
+ "members": {
+ "body": {
+ "target": "com.modrinth.api#GetTeamMembersResponseBodyList",
+ "traits": {
+ "com.distilled.openapi#rawResponse": {},
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#GetTeamMembers": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#GetTeamMembersRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#GetTeamMembersResponse"
+ },
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/team/{id}/members",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get a team's members"
+ }
+ },
+ "com.modrinth.api#AddTeamMemberRequest": {
+ "type": "structure",
+ "members": {
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID of the team"
+ }
+ },
+ "user_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#AddTeamMember": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#AddTeamMemberRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "POST",
+ "uri": "/team/{id}/members",
+ "code": 200
+ },
+ "smithy.api#documentation": "Add a user to a team"
+ }
+ },
+ "com.modrinth.api#GetTeamsRequest": {
+ "type": "structure",
+ "members": {
+ "ids": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpQuery": "ids",
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The IDs of the teams"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#GetTeamsResponseBodyItemList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#TeamMember"
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetTeamsResponseBodyList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#GetTeamsResponseBodyItemList"
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GetTeamsResponse": {
+ "type": "structure",
+ "members": {
+ "body": {
+ "target": "com.modrinth.api#GetTeamsResponseBodyList",
+ "traits": {
+ "com.distilled.openapi#rawResponse": {},
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#GetTeams": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#GetTeamsRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#GetTeamsResponse"
+ },
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/teams",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get the members of multiple teams"
+ }
+ },
+ "com.modrinth.api#JoinTeamRequest": {
+ "type": "structure",
+ "members": {
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID of the team"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#JoinTeam": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#JoinTeamRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "POST",
+ "uri": "/team/{id}/join",
+ "code": 200
+ },
+ "smithy.api#documentation": "Join a team"
+ }
+ },
+ "com.modrinth.api#ModifyTeamMemberRequest": {
+ "type": "structure",
+ "members": {
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID of the team"
+ }
+ },
+ "id_username": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID or username of the user"
+ }
+ },
+ "role": {
+ "target": "smithy.api#String"
+ },
+ "permissions": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "The user's permissions in bitfield format\n\nIn order from first to tenth bit, the bits are:\n- UPLOAD_VERSION\n- DELETE_VERSION\n- EDIT_DETAILS\n- EDIT_BODY\n- MANAGE_INVITES\n- REMOVE_MEMBER\n- EDIT_MEMBER\n- DELETE_PROJECT\n- VIEW_ANALYTICS\n- VIEW_PAYOUTS\n"
+ }
+ },
+ "payouts_split": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "The split of payouts going to this user. The proportion of payouts they get is their split divided by the sum of the splits of all members."
+ }
+ },
+ "ordering": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "The order of the team member."
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#ModifyTeamMember": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#ModifyTeamMemberRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "PATCH",
+ "uri": "/team/{id}/members/{id_username}",
+ "code": 200
+ },
+ "smithy.api#documentation": "Modify a team member's information"
+ }
+ },
+ "com.modrinth.api#DeleteTeamMemberRequest": {
+ "type": "structure",
+ "members": {
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID of the team"
+ }
+ },
+ "id_username": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID or username of the user"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#DeleteTeamMember": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#DeleteTeamMemberRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "DELETE",
+ "uri": "/team/{id}/members/{id_username}",
+ "code": 200
+ },
+ "smithy.api#documentation": "Remove a member from a team"
+ }
+ },
+ "com.modrinth.api#TransferTeamOwnershipRequest": {
+ "type": "structure",
+ "members": {
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID of the team"
+ }
+ },
+ "user_id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#TransferTeamOwnership": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#TransferTeamOwnershipRequest"
+ },
+ "output": {
+ "target": "smithy.api#Unit"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#NotFound"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "PATCH",
+ "uri": "/team/{id}/owner",
+ "code": 200
+ },
+ "smithy.api#documentation": "Transfer team's ownership to another user"
+ }
+ },
+ "com.modrinth.api#CategoryTag": {
+ "type": "structure",
+ "members": {
+ "icon": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The SVG icon of a category",
+ "smithy.api#required": {}
+ }
+ },
+ "name": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The name of the category",
+ "smithy.api#required": {}
+ }
+ },
+ "project_type": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The project type this category is applicable to",
+ "smithy.api#required": {}
+ }
+ },
+ "header": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The header under which the category should go",
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#CategoryListResponseBodyList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#CategoryTag"
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#CategoryListResponse": {
+ "type": "structure",
+ "members": {
+ "body": {
+ "target": "com.modrinth.api#CategoryListResponseBodyList",
+ "traits": {
+ "com.distilled.openapi#rawResponse": {},
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#CategoryList": {
+ "type": "operation",
+ "input": {
+ "target": "smithy.api#Unit"
+ },
+ "output": {
+ "target": "com.modrinth.api#CategoryListResponse"
+ },
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/tag/category",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get a list of categories\n\nGets an array of categories, their icons, and applicable project types"
+ }
+ },
+ "com.modrinth.api#LoaderTag": {
+ "type": "structure",
+ "members": {
+ "icon": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The SVG icon of a loader",
+ "smithy.api#required": {}
+ }
+ },
+ "name": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The name of the loader",
+ "smithy.api#required": {}
+ }
+ },
+ "supported_project_types": {
+ "target": "com.modrinth.api#LoaderTagSupportedProjectTypesList",
+ "traits": {
+ "smithy.api#documentation": "The project types that this loader is applicable to",
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#LoaderTagSupportedProjectTypesList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {
+ "smithy.api#documentation": "The project types that this loader is applicable to"
+ }
+ },
+ "com.modrinth.api#LoaderListResponseBodyList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#LoaderTag"
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#LoaderListResponse": {
+ "type": "structure",
+ "members": {
+ "body": {
+ "target": "com.modrinth.api#LoaderListResponseBodyList",
+ "traits": {
+ "com.distilled.openapi#rawResponse": {},
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#LoaderList": {
+ "type": "operation",
+ "input": {
+ "target": "smithy.api#Unit"
+ },
+ "output": {
+ "target": "com.modrinth.api#LoaderListResponse"
+ },
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/tag/loader",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get a list of loaders\n\nGets an array of loaders, their icons, and supported project types"
+ }
+ },
+ "com.modrinth.api#GameVersionTag": {
+ "type": "structure",
+ "members": {
+ "version": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The name/number of the game version",
+ "smithy.api#required": {}
+ }
+ },
+ "version_type": {
+ "target": "com.modrinth.api#GameVersionTagVersionType",
+ "traits": {
+ "smithy.api#documentation": "The type of the game version",
+ "smithy.api#required": {}
+ }
+ },
+ "date": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The date of the game version release",
+ "smithy.api#required": {}
+ }
+ },
+ "major": {
+ "target": "smithy.api#Boolean",
+ "traits": {
+ "smithy.api#documentation": "Whether or not this is a major version, used for Featured Versions",
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#GameVersionTagVersionType": {
+ "type": "enum",
+ "members": {
+ "RELEASE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "release"
+ }
+ },
+ "SNAPSHOT": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "snapshot"
+ }
+ },
+ "ALPHA": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "alpha"
+ }
+ },
+ "BETA": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "beta"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "The type of the game version"
+ }
+ },
+ "com.modrinth.api#VersionListResponseBodyList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#GameVersionTag"
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#VersionListResponse": {
+ "type": "structure",
+ "members": {
+ "body": {
+ "target": "com.modrinth.api#VersionListResponseBodyList",
+ "traits": {
+ "com.distilled.openapi#rawResponse": {},
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#VersionList": {
+ "type": "operation",
+ "input": {
+ "target": "smithy.api#Unit"
+ },
+ "output": {
+ "target": "com.modrinth.api#VersionListResponse"
+ },
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/tag/game_version",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get a list of game versions\n\nGets an array of game versions and information about them"
+ }
+ },
+ "com.modrinth.api#LicenseTextRequest": {
+ "type": "structure",
+ "members": {
+ "id": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The license ID to get the text of"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#License": {
+ "type": "structure",
+ "members": {
+ "title": {
+ "target": "smithy.api#String"
+ },
+ "body": {
+ "target": "smithy.api#String"
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "A full license"
+ }
+ },
+ "com.modrinth.api#LicenseText": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#LicenseTextRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#License"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#BadRequest"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/tag/license/{id}",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get the text and title of a license"
+ }
+ },
+ "com.modrinth.api#DonationPlatformTag": {
+ "type": "structure",
+ "members": {
+ "short": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The short identifier of the donation platform",
+ "smithy.api#required": {}
+ }
+ },
+ "name": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The full name of the donation platform",
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#DonationPlatformListResponseBodyList": {
+ "type": "list",
+ "member": {
+ "target": "com.modrinth.api#DonationPlatformTag"
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#DonationPlatformListResponse": {
+ "type": "structure",
+ "members": {
+ "body": {
+ "target": "com.modrinth.api#DonationPlatformListResponseBodyList",
+ "traits": {
+ "com.distilled.openapi#rawResponse": {},
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#DonationPlatformList": {
+ "type": "operation",
+ "input": {
+ "target": "smithy.api#Unit"
+ },
+ "output": {
+ "target": "com.modrinth.api#DonationPlatformListResponse"
+ },
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/tag/donation_platform",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get a list of donation platforms\n\nGets an array of donation platforms and information about them"
+ }
+ },
+ "com.modrinth.api#ReportTypeListResponseBodyList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#ReportTypeListResponse": {
+ "type": "structure",
+ "members": {
+ "body": {
+ "target": "com.modrinth.api#ReportTypeListResponseBodyList",
+ "traits": {
+ "com.distilled.openapi#rawResponse": {},
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#ReportTypeList": {
+ "type": "operation",
+ "input": {
+ "target": "smithy.api#Unit"
+ },
+ "output": {
+ "target": "com.modrinth.api#ReportTypeListResponse"
+ },
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/tag/report_type",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get a list of report types\n\nGets an array of valid report types"
+ }
+ },
+ "com.modrinth.api#ProjectTypeListResponseBodyList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#ProjectTypeListResponse": {
+ "type": "structure",
+ "members": {
+ "body": {
+ "target": "com.modrinth.api#ProjectTypeListResponseBodyList",
+ "traits": {
+ "com.distilled.openapi#rawResponse": {},
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#ProjectTypeList": {
+ "type": "operation",
+ "input": {
+ "target": "smithy.api#Unit"
+ },
+ "output": {
+ "target": "com.modrinth.api#ProjectTypeListResponse"
+ },
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/tag/project_type",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get a list of project types\n\nGets an array of valid project types"
+ }
+ },
+ "com.modrinth.api#SideTypeListResponseBodyList": {
+ "type": "list",
+ "member": {
+ "target": "smithy.api#String"
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#SideTypeListResponse": {
+ "type": "structure",
+ "members": {
+ "body": {
+ "target": "com.modrinth.api#SideTypeListResponseBodyList",
+ "traits": {
+ "com.distilled.openapi#rawResponse": {},
+ "smithy.api#required": {}
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#output": {}
+ }
+ },
+ "com.modrinth.api#SideTypeList": {
+ "type": "operation",
+ "input": {
+ "target": "smithy.api#Unit"
+ },
+ "output": {
+ "target": "com.modrinth.api#SideTypeListResponse"
+ },
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/tag/side_type",
+ "code": 200
+ },
+ "smithy.api#documentation": "Get a list of side types\n\nGets an array of valid side types"
+ }
+ },
+ "com.modrinth.api#ForgeUpdatesRequestNeoforge": {
+ "type": "enum",
+ "members": {
+ "ONLY": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "only"
+ }
+ },
+ "INCLUDE": {
+ "target": "smithy.api#Unit",
+ "traits": {
+ "smithy.api#enumValue": "include"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#ForgeUpdatesRequest": {
+ "type": "structure",
+ "members": {
+ "id_slug": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#httpLabel": {},
+ "smithy.api#required": {},
+ "smithy.api#documentation": "The ID or slug of the project"
+ }
+ },
+ "neoforge": {
+ "target": "com.modrinth.api#ForgeUpdatesRequestNeoforge",
+ "traits": {
+ "smithy.api#httpQuery": "neoforge",
+ "smithy.api#documentation": "Whether to include NeoForge versions. Can be `only` (NeoForge-only versions), `include` (both Forge and NeoForge versions), or omitted (Forge-only versions)."
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#input": {}
+ }
+ },
+ "com.modrinth.api#ForgeUpdates": {
+ "type": "structure",
+ "members": {
+ "homepage": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "A link to the mod page"
+ }
+ },
+ "promos": {
+ "target": "com.modrinth.api#ForgeUpdateCheckerPromos"
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "Mod version information that can be consumed by Forge's update checker"
+ }
+ },
+ "com.modrinth.api#ForgeUpdateCheckerPromos": {
+ "type": "structure",
+ "members": {
+ "_version__recommended": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The mod version that is recommended for `{version}`. Excludes versions with the `alpha` and `beta` version types.",
+ "smithy.api#jsonName": "{version}-recommended"
+ }
+ },
+ "_version__latest": {
+ "target": "smithy.api#String",
+ "traits": {
+ "smithy.api#documentation": "The latest mod version for `{version}`. Shows versions with the `alpha` and `beta` version types.",
+ "smithy.api#jsonName": "{version}-latest"
+ }
+ }
+ },
+ "traits": {
+ "smithy.api#documentation": "A list of the recommended and latest versions for each Minecraft release"
+ }
+ },
+ "com.modrinth.api#ForgeUpdates2": {
+ "type": "operation",
+ "input": {
+ "target": "com.modrinth.api#ForgeUpdatesRequest"
+ },
+ "output": {
+ "target": "com.modrinth.api#ForgeUpdates"
+ },
+ "errors": [
+ {
+ "target": "com.modrinth.api#BadRequest"
+ }
+ ],
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/updates/{id_slug}/forge_updates.json",
+ "code": 200
+ },
+ "smithy.api#documentation": "Forge Updates JSON file\n\nIf you're a Forge mod developer, your Modrinth mods have an automatically generated `updates.json` using the\n[Forge Update Checker](https://docs.minecraftforge.net/en/latest/misc/updatechecker/).\n\nThe only setup is to insert the URL into the `[[mods]]` section of your `mods.toml` file as such:\n\n```toml\n[[mods]]\n# the other stuff here - ID, version, display name, etc.\nupdateJSONURL = \"https://api.modrinth.com/updates/{slug|ID}/forge_updates.json\"\n```\n\nReplace `{slug|id}` with the slug or ID of your project.\n\nModrinth will handle the rest! When you update your mod, Forge will notify your users that their copy of your mod is out of date.\n\nMake sure that the version format you use for your Modrinth releases is the same as the version format you use in your `mods.toml`.\nIf you use a format such as `1.2.3-forge` or `1.2.3+1.19` with your Modrinth releases but your `mods.toml` only has `1.2.3`,\nthe update checker may not function properly.\n\nIf you're using NeoForge, NeoForge versions will, by default, not appear in the default URL.\nYou will need to add `?neoforge=only` to show your NeoForge-only versions, or `?neoforge=include` for both.\n\n```toml\n[[mods]]\n# the other stuff here - ID, version, display name, etc.\nupdateJSONURL = \"https://api.modrinth.com/updates/{slug|ID}/forge_updates.json?neoforge=only\"\n```"
+ }
+ },
+ "com.modrinth.api#Statistics": {
+ "type": "structure",
+ "members": {
+ "projects": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "Number of projects on Modrinth"
+ }
+ },
+ "versions": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "Number of versions on Modrinth"
+ }
+ },
+ "files": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "Number of version files on Modrinth"
+ }
+ },
+ "authors": {
+ "target": "smithy.api#Integer",
+ "traits": {
+ "smithy.api#documentation": "Number of authors (users with projects) on Modrinth"
+ }
+ }
+ },
+ "traits": {}
+ },
+ "com.modrinth.api#Statistics2": {
+ "type": "operation",
+ "input": {
+ "target": "smithy.api#Unit"
+ },
+ "output": {
+ "target": "com.modrinth.api#Statistics"
+ },
+ "traits": {
+ "smithy.api#http": {
+ "method": "GET",
+ "uri": "/statistics",
+ "code": 200
+ },
+ "smithy.api#documentation": "Various statistics about this Modrinth instance"
+ }
+ },
+ "com.modrinth.api#BadRequest": {
+ "type": "structure",
+ "members": {},
+ "traits": {
+ "smithy.api#error": "client",
+ "smithy.api#httpError": 400,
+ "com.distilled.openapi#errorMatchers": [
+ {
+ "status": 400
+ }
+ ]
+ }
+ },
+ "com.modrinth.api#NotFound": {
+ "type": "structure",
+ "members": {},
+ "traits": {
+ "smithy.api#error": "client",
+ "smithy.api#httpError": 404,
+ "com.distilled.openapi#errorMatchers": [
+ {
+ "status": 404
+ }
+ ]
+ }
+ },
+ "com.modrinth.api#Modrinth": {
+ "type": "service",
+ "version": "v2.7.0/366f528",
+ "operations": [
+ {
+ "target": "com.modrinth.api#SearchProjects"
+ },
+ {
+ "target": "com.modrinth.api#GetProject"
+ },
+ {
+ "target": "com.modrinth.api#ModifyProject"
+ },
+ {
+ "target": "com.modrinth.api#DeleteProject"
+ },
+ {
+ "target": "com.modrinth.api#GetProjects"
+ },
+ {
+ "target": "com.modrinth.api#PatchProjects"
+ },
+ {
+ "target": "com.modrinth.api#RandomProjects"
+ },
+ {
+ "target": "com.modrinth.api#CreateProject"
+ },
+ {
+ "target": "com.modrinth.api#ChangeProjectIcon"
+ },
+ {
+ "target": "com.modrinth.api#DeleteProjectIcon"
+ },
+ {
+ "target": "com.modrinth.api#CheckProjectValidity"
+ },
+ {
+ "target": "com.modrinth.api#AddGalleryImage"
+ },
+ {
+ "target": "com.modrinth.api#ModifyGalleryImage"
+ },
+ {
+ "target": "com.modrinth.api#DeleteGalleryImage"
+ },
+ {
+ "target": "com.modrinth.api#GetDependencies"
+ },
+ {
+ "target": "com.modrinth.api#FollowProject"
+ },
+ {
+ "target": "com.modrinth.api#UnfollowProject"
+ },
+ {
+ "target": "com.modrinth.api#ScheduleProject"
+ },
+ {
+ "target": "com.modrinth.api#GetProjectVersions"
+ },
+ {
+ "target": "com.modrinth.api#GetVersion"
+ },
+ {
+ "target": "com.modrinth.api#ModifyVersion"
+ },
+ {
+ "target": "com.modrinth.api#DeleteVersion"
+ },
+ {
+ "target": "com.modrinth.api#GetVersionFromIdOrNumber"
+ },
+ {
+ "target": "com.modrinth.api#CreateVersion"
+ },
+ {
+ "target": "com.modrinth.api#ScheduleVersion"
+ },
+ {
+ "target": "com.modrinth.api#GetVersions"
+ },
+ {
+ "target": "com.modrinth.api#AddFilesToVersion"
+ },
+ {
+ "target": "com.modrinth.api#VersionFromHash"
+ },
+ {
+ "target": "com.modrinth.api#DeleteFileFromHash"
+ },
+ {
+ "target": "com.modrinth.api#GetLatestVersionFromHash"
+ },
+ {
+ "target": "com.modrinth.api#VersionsFromHashes"
+ },
+ {
+ "target": "com.modrinth.api#GetLatestVersionsFromHashes"
+ },
+ {
+ "target": "com.modrinth.api#GetUser"
+ },
+ {
+ "target": "com.modrinth.api#ModifyUser"
+ },
+ {
+ "target": "com.modrinth.api#GetUserFromAuth"
+ },
+ {
+ "target": "com.modrinth.api#GetUsers"
+ },
+ {
+ "target": "com.modrinth.api#ChangeUserIcon"
+ },
+ {
+ "target": "com.modrinth.api#DeleteUserIcon"
+ },
+ {
+ "target": "com.modrinth.api#GetUserProjects"
+ },
+ {
+ "target": "com.modrinth.api#GetFollowedProjects"
+ },
+ {
+ "target": "com.modrinth.api#GetPayoutHistory"
+ },
+ {
+ "target": "com.modrinth.api#WithdrawPayout"
+ },
+ {
+ "target": "com.modrinth.api#GetUserNotifications"
+ },
+ {
+ "target": "com.modrinth.api#GetNotification"
+ },
+ {
+ "target": "com.modrinth.api#ReadNotification"
+ },
+ {
+ "target": "com.modrinth.api#DeleteNotification"
+ },
+ {
+ "target": "com.modrinth.api#GetNotifications"
+ },
+ {
+ "target": "com.modrinth.api#ReadNotifications"
+ },
+ {
+ "target": "com.modrinth.api#DeleteNotifications"
+ },
+ {
+ "target": "com.modrinth.api#GetOpenReports"
+ },
+ {
+ "target": "com.modrinth.api#SubmitReport"
+ },
+ {
+ "target": "com.modrinth.api#GetReport"
+ },
+ {
+ "target": "com.modrinth.api#ModifyReport"
+ },
+ {
+ "target": "com.modrinth.api#GetReports"
+ },
+ {
+ "target": "com.modrinth.api#GetThread"
+ },
+ {
+ "target": "com.modrinth.api#SendThreadMessage"
+ },
+ {
+ "target": "com.modrinth.api#GetThreads"
+ },
+ {
+ "target": "com.modrinth.api#DeleteThreadMessage"
+ },
+ {
+ "target": "com.modrinth.api#GetProjectTeamMembers"
+ },
+ {
+ "target": "com.modrinth.api#GetTeamMembers"
+ },
+ {
+ "target": "com.modrinth.api#AddTeamMember"
+ },
+ {
+ "target": "com.modrinth.api#GetTeams"
+ },
+ {
+ "target": "com.modrinth.api#JoinTeam"
+ },
+ {
+ "target": "com.modrinth.api#ModifyTeamMember"
+ },
+ {
+ "target": "com.modrinth.api#DeleteTeamMember"
+ },
+ {
+ "target": "com.modrinth.api#TransferTeamOwnership"
+ },
+ {
+ "target": "com.modrinth.api#CategoryList"
+ },
+ {
+ "target": "com.modrinth.api#LoaderList"
+ },
+ {
+ "target": "com.modrinth.api#VersionList"
+ },
+ {
+ "target": "com.modrinth.api#LicenseText"
+ },
+ {
+ "target": "com.modrinth.api#DonationPlatformList"
+ },
+ {
+ "target": "com.modrinth.api#ReportTypeList"
+ },
+ {
+ "target": "com.modrinth.api#ProjectTypeList"
+ },
+ {
+ "target": "com.modrinth.api#SideTypeList"
+ },
+ {
+ "target": "com.modrinth.api#ForgeUpdates2"
+ },
+ {
+ "target": "com.modrinth.api#Statistics2"
+ }
+ ],
+ "traits": {
+ "smithy.api#title": "Labrinth",
+ "smithy.api#documentation": "This documentation doesn't provide a way to test our API. In order to facilitate testing, we recommend the following tools:\n\n- [cURL](https://curl.se/) (recommended, command-line)\n- [ReqBIN](https://reqbin.com/) (recommended, online)\n- [Postman](https://www.postman.com/downloads/)\n- [Insomnia](https://insomnia.rest/)\n- Your web browser, if you don't need to send headers or a request body\n\nOnce you have a working client, you can test that it works by making a `GET` request to `https://staging-api.modrinth.com/`:\n\n```json\n{\n \"about\": \"Welcome traveler!\",\n \"documentation\": \"https://docs.modrinth.com\",\n \"name\": \"modrinth-labrinth\",\n \"version\": \"2.7.0\"\n}\n```\n\nIf you got a response similar to the one above, you can use the Modrinth API!\nWhen you want to go live using the production API, use `api.modrinth.com` instead of `staging-api.modrinth.com`.\n\n## Authentication\nThis API has two options for authentication: personal access tokens and [OAuth2](https://en.wikipedia.org/wiki/OAuth).\nAll tokens are tied to a Modrinth user and use the `Authorization` header of the request.\n\nExample:\n```\nAuthorization: mrp_RNtLRSPmGj2pd1v1ubi52nX7TJJM9sznrmwhAuj511oe4t1jAqAQ3D6Wc8Ic\n```\n\nYou do not need a token for most requests. Generally speaking, only the following types of requests require a token:\n- those which create data (such as version creation)\n- those which modify data (such as editing a project)\n- those which access private data (such as draft projects, notifications, emails, and payout data)\n\nEach request requiring authentication has a certain scope. For example, to view the email of the user being requested, the token must have the `USER_READ_EMAIL` scope.\nYou can find the list of available scopes [on GitHub](https://github.com/modrinth/labrinth/blob/master/src/models/pats.rs#L15). Making a request with an invalid scope will return a 401 error.\n\nPlease note that certain scopes and requests cannot be completed with a personal access token or using OAuth.\nFor example, deleting a user account can only be done through Modrinth's frontend.\n\nA detailed guide on OAuth has been published in [Modrinth's technical documentation](https://docs.modrinth.com/guide/oauth).\n\n### Personal access tokens\nPersonal access tokens (PATs) can be generated in from [the user settings](https://modrinth.com/settings/account).\n\n### GitHub tokens\nFor backwards compatibility purposes, some types of GitHub tokens also work for authenticating a user with Modrinth's API, granting all scopes.\n**We urge any application still using GitHub tokens to start using personal access tokens for security and reliability purposes.**\nGitHub tokens will cease to function to authenticate with Modrinth's API as soon as version 3 of the API is made generally available.\n\n## Cross-Origin Resource Sharing\nThis API features Cross-Origin Resource Sharing (CORS) implemented in compliance with the [W3C spec](https://www.w3.org/TR/cors/).\nThis allows for cross-domain communication from the browser.\nAll responses have a wildcard same-origin which makes them completely public and accessible to everyone, including any code on any site.\n\n## Identifiers\nThe majority of items you can interact with in the API have a unique eight-digit base62 ID.\nProjects, versions, users, threads, teams, and reports all use this same way of identifying themselves.\nVersion files use the sha1 or sha512 file hashes as identifiers.\n\nEach project and user has a friendlier way of identifying them; slugs and usernames, respectively.\nWhile unique IDs are constant, slugs and usernames can change at any moment.\nIf you want to store something in the long term, it is recommended to use the unique ID.\n\n## Ratelimits\nThe API has a ratelimit defined per IP. Limits and remaining amounts are given in the response headers.\n- `X-Ratelimit-Limit`: the maximum number of requests that can be made in a minute\n- `X-Ratelimit-Remaining`: the number of requests remaining in the current ratelimit window\n- `X-Ratelimit-Reset`: the time in seconds until the ratelimit window resets\n\nRatelimits are the same no matter whether you use a token or not.\nThe ratelimit is currently 300 requests per minute. If you have a use case requiring a higher limit, please [contact us](mailto:support@modrinth.com).\n\n## User Agents\nTo access the Modrinth API, you **must** use provide a uniquely-identifying `User-Agent` header.\nProviding a user agent that only identifies your HTTP client library (such as \"okhttp/4.9.3\") increases the likelihood that we will block your traffic.\nIt is recommended, but not required, to include contact information in your user agent.\nThis allows us to contact you if we would like a change in your application's behavior without having to block your traffic.\n- Bad: `User-Agent: okhttp/4.9.3`\n- Good: `User-Agent: project_name`\n- Better: `User-Agent: github_username/project_name/1.56.0`\n- Best: `User-Agent: github_username/project_name/1.56.0 (launcher.com)` or `User-Agent: github_username/project_name/1.56.0 (contact@launcher.com)`\n\n## Versioning\nModrinth follows a simple pattern for its API versioning.\nIn the event of a breaking API change, the API version in the URL path is bumped, and migration steps will be published below.\n\nWhen an API is no longer the current one, it will immediately be considered deprecated.\nNo more support will be provided for API versions older than the current one.\nIt will be kept for some time, but this amount of time is not certain.\n\nWe will exercise various tactics to get people to update their implementation of our API.\nOne example is by adding something like `STOP USING THIS API` to various data returned by the API.\n\nOnce an API version is completely deprecated, it will permanently return a 410 error.\nPlease ensure your application handles these 410 errors.\n\n### Migrations\nInside the following spoiler, you will be able to find all changes between versions of the Modrinth API, accompanied by tips and a guide to migrate applications to newer versions.\n\nHere, you can also find changes for [Minotaur](https://github.com/modrinth/minotaur), Modrinth's official Gradle plugin. Major versions of Minotaur directly correspond to major versions of the Modrinth API.\n\nAPI v1 to API v2
\n\nThese bullet points cover most changes in the v2 API, but please note that fields containing `mod` in most contexts have been shifted to `project`. For example, in the search route, the field `mod_id` was renamed to `project_id`.\n\n- The search route has been moved from `/api/v1/mod` to `/v2/search`\n- New project fields: `project_type` (may be `mod` or `modpack`), `moderation_message` (which has a `message` and `body`), `gallery`\n- New search facet: `project_type`\n- Alphabetical sort removed (it didn't work and is not possible due to limits in MeiliSearch)\n- New search fields: `project_type`, `gallery`\n - The gallery field is an array of URLs to images that are part of the project's gallery\n- The gallery is a new feature which allows the user to upload images showcasing their mod to the CDN which will be displayed on their mod page\n- Internal change: Any project file uploaded to Modrinth is now validated to make sure it's a valid Minecraft mod, Modpack, etc.\n - For example, a Forge 1.17 mod with a JAR not containing a mods.toml will not be allowed to be uploaded to Modrinth\n- In project creation, projects may not upload a mod with no versions to review, however they can be saved as a draft\n - Similarly, for version creation, a version may not be uploaded without any files\n- Donation URLs have been enabled\n- New project status: `archived`. Projects with this status do not appear in search\n- Tags (such as categories, loaders) now have icons (SVGs) and specific project types attached\n- Dependencies have been wiped and replaced with a new system\n- Notifications now have a `type` field, such as `project_update`\n\nAlong with this, project subroutes (such as `/v2/project/{id}/version`) now allow the slug to be used as the ID. This is also the case with user routes.\n\nMinotaur v1 to Minotaur v2
\n\nMinotaur 2.x introduced a few breaking changes to how your buildscript is formatted.\n\nFirst, instead of registering your own `publishModrinth` task, Minotaur now automatically creates a `modrinth` task. As such, you can replace the `task publishModrinth(type: TaskModrinthUpload) {` line with just `modrinth {`.\n\nTo declare supported Minecraft versions and mod loaders, the `gameVersions` and `loaders` arrays must now be used. The syntax for these are pretty self-explanatory.\n\nInstead of using `releaseType`, you must now use `versionType`. This was actually changed in v1.2.0, but very few buildscripts have moved on from v1.1.0.\n\nDependencies have been changed to a special DSL. Create a `dependencies` block within the `modrinth` block, and then use `scope.type(\"project/version\")`. For example, `required.project(\"fabric-api\")` adds a required project dependency on Fabric API.\n\nYou may now use the slug anywhere that a project ID was previously required.\n\n "
+ }
+ }
+ }
+}
diff --git a/packages/modrinth/package.json b/packages/modrinth/package.json
new file mode 100644
index 000000000..84a47aae6
--- /dev/null
+++ b/packages/modrinth/package.json
@@ -0,0 +1,85 @@
+{
+ "name": "@distilled.cloud/modrinth",
+ "version": "1.0.0-rc.8",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/alchemy-run/distilled",
+ "directory": "packages/modrinth"
+ },
+ "license": "Apache-2.0",
+ "type": "module",
+ "sideEffects": false,
+ "files": [
+ "lib",
+ "src"
+ ],
+ "exports": {
+ ".": {
+ "types": "./lib/index.d.ts",
+ "bun": "./src/index.ts",
+ "worker": "./src/index.ts",
+ "default": "./lib/index.js"
+ },
+ "./Credentials": {
+ "types": "./lib/credentials.d.ts",
+ "bun": "./src/credentials.ts",
+ "worker": "./src/credentials.ts",
+ "default": "./lib/credentials.js"
+ },
+ "./Errors": {
+ "types": "./lib/errors.d.ts",
+ "bun": "./src/errors.ts",
+ "worker": "./src/errors.ts",
+ "default": "./lib/errors.js"
+ },
+ "./Traits": {
+ "types": "./lib/traits.d.ts",
+ "bun": "./src/traits.ts",
+ "worker": "./src/traits.ts",
+ "default": "./lib/traits.js"
+ },
+ "./Pagination": {
+ "types": "./lib/pagination.d.ts",
+ "bun": "./src/pagination.ts",
+ "worker": "./src/pagination.ts",
+ "default": "./lib/pagination.js"
+ },
+ "./Protocol": {
+ "types": "./lib/protocol.d.ts",
+ "bun": "./src/protocol.ts",
+ "worker": "./src/protocol.ts",
+ "default": "./lib/protocol.js"
+ },
+ "./Retry": {
+ "types": "./lib/retry.d.ts",
+ "bun": "./src/retry.ts",
+ "worker": "./src/retry.ts",
+ "default": "./lib/retry.js"
+ },
+ "./*": {
+ "types": "./lib/services/*.d.ts",
+ "bun": "./src/services/*.ts",
+ "worker": "./src/services/*.ts",
+ "default": "./lib/services/*.js"
+ }
+ },
+ "scripts": {
+ "build": "tsc -b",
+ "convert": "bun scripts/convert.ts",
+ "generate": "bun scripts/convert.ts && bun scripts/generate.ts",
+ "typecheck": "tsc -p tsconfig.json",
+ "specs:fetch": "git submodule update --force --init --depth=1 specs/spec-mirror-modrinth",
+ "specs:update": "git submodule update --remote --force --depth=1 specs/spec-mirror-modrinth"
+ },
+ "dependencies": {
+ "@distilled.cloud/core": "workspace:*"
+ },
+ "devDependencies": {
+ "@types/bun": "catalog:tooling",
+ "@types/node": "catalog:tooling",
+ "@effect/platform-bun": "catalog:effect"
+ },
+ "peerDependencies": {
+ "effect": "catalog:effect"
+ }
+}
diff --git a/packages/modrinth/scripts/convert.ts b/packages/modrinth/scripts/convert.ts
new file mode 100644
index 000000000..7466834e6
--- /dev/null
+++ b/packages/modrinth/scripts/convert.ts
@@ -0,0 +1,29 @@
+#!/usr/bin/env bun
+/**
+ * convert — turn the Modrinth OpenAPI spec into a Smithy 2.0 JSON model.
+ *
+ * Input: specs/spec-mirror-modrinth/specs/openapi.json (spec submodule)
+ * Output: .generated-specs/modrinth.json
+ *
+ * The OpenAPI→Smithy converter lives in
+ * `@distilled.cloud/core/codegen/openapi`; this script is Modrinth's pipeline
+ * config. `scripts/generate.ts` compiles the model into src/services.
+ */
+import * as path from "node:path";
+import { runOpenApiConvert } from "@distilled.cloud/core/codegen/openapi-cli";
+
+await runOpenApiConvert({
+ root: path.resolve(import.meta.dir, ".."),
+ specs: [
+ {
+ name: "modrinth",
+ specPath: "specs/spec-mirror-modrinth/specs/openapi.json",
+ },
+ ],
+ patchesDir: false,
+ options: {
+ namespace: "com.modrinth.api",
+ serviceName: "Modrinth",
+ skipDeprecated: true,
+ },
+});
diff --git a/packages/modrinth/scripts/generate.ts b/packages/modrinth/scripts/generate.ts
new file mode 100644
index 000000000..9f163be8d
--- /dev/null
+++ b/packages/modrinth/scripts/generate.ts
@@ -0,0 +1,83 @@
+#!/usr/bin/env bun
+/**
+ * generate — turn the Smithy JSON model in .generated-specs into the
+ * Modrinth Effect SDK.
+ *
+ * Input: .generated-specs/modrinth.json (written by scripts/convert.ts)
+ * Output: src/services/modrinth.ts + src/services/index.ts
+ *
+ * The smithy→SDK compiler and CLI pipeline live in
+ * `@distilled.cloud/core/codegen`; this script is Modrinth's provider spec.
+ * Modrinth keeps the wire's snake_case member names on the TS surface, so no
+ * member renaming or wire dictionaries appear here.
+ */
+import type { SdkSpec } from "@distilled.cloud/core/codegen/generator";
+import { runGeneratorCli } from "@distilled.cloud/core/codegen/cli";
+
+const NULLABLE_TRAIT = "com.distilled.openapi#nullable";
+const ERROR_MATCHERS_TRAIT = "com.distilled.openapi#errorMatchers";
+const RAW_RESPONSE_TRAIT = "com.distilled.openapi#rawResponse";
+const SENSITIVE_TRAIT = "smithy.api#sensitive";
+
+/** Modrinth's provider spec for the shared smithy→SDK compiler. */
+const modrinthSpec: SdkSpec = {
+ nullableTrait: NULLABLE_TRAIT,
+ errorMatchersTrait: ERROR_MATCHERS_TRAIT,
+
+ extraBindings: [
+ {
+ // Sole member of a synthesized wrapper for bare array/scalar response
+ // bodies; as the response's only member, the response IS the payload.
+ trait: RAW_RESPONSE_TRAIT,
+ binding: "rawResponse",
+ pipe: "T.RawResponse()",
+ rootPipe: "T.RawResponseRoot()",
+ },
+ ],
+
+ // Sensitive strings (tokens, secrets): the schema member carries
+ // T.SensitiveValue; the REST protocol delivers Redacted values and accepts
+ // string | Redacted on input.
+ memberTraitPipes: {
+ [SENSITIVE_TRAIT]: "T.SensitiveValue",
+ },
+ memberTsType: (m) =>
+ SENSITIVE_TRAIT in m.traits
+ ? `string | Redacted.Redacted${m.nullable ? " | null" : ""}`
+ : undefined,
+
+ // Unions surface as TS type unions over an opaque schema — the REST
+ // protocol passes union content through verbatim (wire names ARE the TS
+ // names for Modrinth), so no runtime case discrimination is needed.
+ union: ({ name, caseTargets, tsRef }) => [
+ `export type ${name} = ${caseTargets.map(tsRef).join(" | ") || "unknown"};`,
+ `export const ${name} = /*@__PURE__*/ S.Unknown as any as S.Schema<${name}>;\n`,
+ ],
+
+ operationDecl: {
+ contextType: "ModrinthOpContext",
+ commonErrorType: "ModrinthOpError",
+ commonErrorClasses: ["UnknownModrinthError"],
+ protocol: "ModrinthProtocol",
+ retry: "Retry.Retry",
+ },
+
+ sourceNote:
+ ".generated-specs (specs/spec-mirror-modrinth/specs/openapi.json)",
+
+ // Sensitive member types reference Redacted; pull the import in when used.
+ postProcess: (code) =>
+ code.includes("Redacted.Redacted<")
+ ? code.replace(
+ `import * as S from "@distilled.cloud/core/schema";\n`,
+ `import * as S from "@distilled.cloud/core/schema";\nimport * as Redacted from "effect/Redacted";\n`,
+ )
+ : code,
+};
+
+runGeneratorCli({
+ description: "Generate the Modrinth Effect SDK from the Smithy model",
+ root: `${import.meta.dir}/..`,
+ patchesDir: false,
+ spec: () => modrinthSpec,
+});
diff --git a/packages/modrinth/src/credentials.ts b/packages/modrinth/src/credentials.ts
new file mode 100644
index 000000000..357dbc9cc
--- /dev/null
+++ b/packages/modrinth/src/credentials.ts
@@ -0,0 +1,66 @@
+/**
+ * Modrinth credentials — hand-written.
+ *
+ * The `Credentials` service holds an *effect* that resolves the current
+ * credentials on every request (the protocol layer resolves it per request
+ * on the calling fiber).
+ *
+ * Most Labrinth endpoints are public. Authenticated calls send the token as
+ * `Authorization: {token}` (no Bearer prefix) — personal access tokens and
+ * OAuth access tokens are both accepted. Requests without a uniquely
+ * identifying User-Agent are rejected.
+ */
+import * as Context from "effect/Context";
+import * as Effect from "effect/Effect";
+import * as Layer from "effect/Layer";
+import * as Redacted from "effect/Redacted";
+
+export const DEFAULT_API_BASE_URL = "https://api.modrinth.com/v2";
+
+/**
+ * Modrinth requires a uniquely-identifying User-Agent and is more likely
+ * to block generic HTTP-client defaults.
+ */
+export const DEFAULT_USER_AGENT = "distilled.cloud-modrinth";
+
+export interface Config {
+ readonly apiKey?: Redacted.Redacted;
+ readonly apiBaseUrl: string;
+ readonly userAgent: string;
+}
+
+export class Credentials extends Context.Service<
+ Credentials,
+ Effect.Effect
+>()("ModrinthCredentials") {}
+
+/** Layer from an optional API token + optional base URL / User-Agent. */
+export const fromApiKey = (config: {
+ readonly apiKey?: string;
+ readonly apiBaseUrl?: string;
+ readonly userAgent?: string;
+}): Layer.Layer =>
+ Layer.succeed(
+ Credentials,
+ Effect.succeed({
+ apiKey:
+ config.apiKey !== undefined ? Redacted.make(config.apiKey) : undefined,
+ apiBaseUrl: config.apiBaseUrl ?? DEFAULT_API_BASE_URL,
+ userAgent: config.userAgent ?? DEFAULT_USER_AGENT,
+ }),
+ );
+
+/**
+ * Reads MODRINTH_API_KEY (optional), MODRINTH_API_BASE_URL (optional),
+ * and MODRINTH_USER_AGENT (optional). Public endpoints work with no key.
+ */
+export const CredentialsFromEnv: Layer.Layer = Layer.succeed(
+ Credentials,
+ Effect.succeed({
+ apiKey: process.env.MODRINTH_API_KEY
+ ? Redacted.make(process.env.MODRINTH_API_KEY)
+ : undefined,
+ apiBaseUrl: process.env.MODRINTH_API_BASE_URL ?? DEFAULT_API_BASE_URL,
+ userAgent: process.env.MODRINTH_USER_AGENT ?? DEFAULT_USER_AGENT,
+ }),
+);
diff --git a/packages/modrinth/src/errors.ts b/packages/modrinth/src/errors.ts
new file mode 100644
index 000000000..726075f43
--- /dev/null
+++ b/packages/modrinth/src/errors.ts
@@ -0,0 +1,50 @@
+/**
+ * Modrinth-specific error types.
+ *
+ * Re-exports the common HTTP errors from core and adds the Modrinth fallback
+ * errors. Note the generated service module additionally defines its own
+ * per-status matcher classes (BadRequest/NotFound/…) for the statuses each
+ * operation declares — those share `_tag`s with the core classes here, so
+ * `catchTag` works against either.
+ */
+export {
+ BadGateway,
+ BadRequest,
+ Conflict,
+ ConfigError,
+ Forbidden,
+ GatewayTimeout,
+ InternalServerError,
+ Locked,
+ NotFound,
+ ServiceUnavailable,
+ TooManyRequests,
+ Unauthorized,
+ UnprocessableEntity,
+ HTTP_STATUS_MAP,
+ DEFAULT_ERRORS,
+ API_ERRORS,
+} from "@distilled.cloud/core/errors";
+export type { DefaultErrors } from "@distilled.cloud/core/errors";
+
+import * as Schema from "effect/Schema";
+import * as Category from "@distilled.cloud/core/category";
+
+/** Unknown Modrinth error — returned when nothing else matches the failure. */
+export class UnknownModrinthError extends Schema.TaggedError()(
+ "UnknownModrinthError",
+ {
+ code: Schema.optional(Schema.String),
+ message: Schema.optional(Schema.String),
+ body: Schema.Unknown,
+ },
+).pipe(Category.withServerError) {}
+
+/** Schema parse error wrapper. */
+export class ModrinthParseError extends Schema.TaggedError()(
+ "ModrinthParseError",
+ {
+ body: Schema.Unknown,
+ cause: Schema.Unknown,
+ },
+).pipe(Category.withParseError) {}
diff --git a/packages/modrinth/src/index.ts b/packages/modrinth/src/index.ts
new file mode 100644
index 000000000..2f9eecf83
--- /dev/null
+++ b/packages/modrinth/src/index.ts
@@ -0,0 +1,33 @@
+/**
+ * @distilled.cloud/modrinth — Modrinth SDK for Effect.
+ *
+ * `./services` is generated by `scripts/generate.ts` from the Smithy model
+ * in `.generated-specs` (written by `scripts/convert.ts` from the OpenAPI
+ * spec). Everything else in this folder is hand-written.
+ *
+ * @example
+ * ```ts
+ * import * as Modrinth from "@distilled.cloud/modrinth";
+ *
+ * const results = yield* Modrinth.Services.modrinth.searchProjects({
+ * query: "sodium",
+ * });
+ * ```
+ */
+export * from "./credentials.ts";
+export * from "./errors.ts";
+export * as T from "./traits.ts";
+export {
+ ModrinthProtocol,
+ type ModrinthOpError,
+ type ModrinthOpContext,
+} from "./protocol.ts";
+export { paginateCursor } from "./pagination.ts";
+export * as Retry from "./retry.ts";
+export * as Services from "./services/index.ts";
+// Operations (and their request/response types) are importable straight off
+// the package root. The service-local typed error classes shadow the
+// same-named shared ones from ./errors.ts — the ops actually raise the
+// service-local classes.
+export * from "./services/modrinth.ts";
+export { BadRequest, NotFound } from "./services/modrinth.ts";
diff --git a/packages/modrinth/src/pagination.ts b/packages/modrinth/src/pagination.ts
new file mode 100644
index 000000000..6c93f95d8
--- /dev/null
+++ b/packages/modrinth/src/pagination.ts
@@ -0,0 +1,7 @@
+/**
+ * Modrinth pagination — hand-written.
+ *
+ * Search uses `offset`/`limit`/`total_hits` on the wire; those stay plain
+ * input fields unless a generated operation is stamped `smithy.api#paginated`.
+ */
+export { paginateCursor } from "@distilled.cloud/core/pagination";
diff --git a/packages/modrinth/src/protocol.ts b/packages/modrinth/src/protocol.ts
new file mode 100644
index 000000000..ae29bb5c4
--- /dev/null
+++ b/packages/modrinth/src/protocol.ts
@@ -0,0 +1,93 @@
+/**
+ * ModrinthProtocol — hand-written.
+ *
+ * Modrinth (Labrinth) speaks plain JSON REST (no response envelope):
+ *
+ * request: credentials → optional `Authorization: ` (no Bearer)
+ * + `User-Agent` + base URL (default
+ * https://api.modrinth.com/v2), resolved from the calling fiber
+ * on every request
+ *
+ * response: 2xx JSON is the payload (sensitive members delivered as
+ * `Redacted`); non-2xx `{ error?, description? }` bodies map to
+ * the operation's typed error classes by status, then the shared
+ * HTTP-status classes, then {@link UnknownModrinthError}.
+ */
+import * as Effect from "effect/Effect";
+import type * as Layer from "effect/Layer";
+import * as Redacted from "effect/Redacted";
+import type * as HttpClient from "effect/unstable/http/HttpClient";
+import type * as HttpClientError from "effect/unstable/http/HttpClientError";
+import type * as API from "@distilled.cloud/core/api";
+import {
+ makeRestProtocol,
+ type RestErrorEnvelope,
+} from "@distilled.cloud/core/protocol-rest";
+import type { API_ERRORS, ConfigError } from "@distilled.cloud/core/errors";
+import { Credentials, type Config } from "./credentials.ts";
+import { UnknownModrinthError } from "./errors.ts";
+
+/**
+ * Error channel shared by every generated Modrinth operation. Generated
+ * service files annotate operations with `API.OperationMethod` explicitly so the compiler never
+ * infers these back out of the schema generics.
+ */
+export type ModrinthOpError =
+ | InstanceType<(typeof API_ERRORS)[number]>
+ | UnknownModrinthError
+ | ConfigError
+ | HttpClientError.HttpClientError;
+
+/** Context (requirements) shared by every generated Modrinth operation. */
+export type ModrinthOpContext = Credentials | HttpClient.HttpClient;
+
+/**
+ * Labrinth error bodies are typically `{ error, description }`. Fall back
+ * to `message` when present.
+ */
+const errorEnvelope = (body: unknown): RestErrorEnvelope | undefined => {
+ if (body === null || typeof body !== "object") return undefined;
+ const b = body as Record;
+ const message =
+ typeof b.description === "string"
+ ? b.description
+ : typeof b.message === "string"
+ ? b.message
+ : undefined;
+ const code =
+ typeof b.error === "string"
+ ? b.error
+ : typeof b.code === "string" || typeof b.code === "number"
+ ? b.code
+ : undefined;
+ if (code === undefined && message === undefined) return undefined;
+ return { code, message };
+};
+
+export const ModrinthProtocol: Layer.Layer =
+ makeRestProtocol({
+ // The Credentials service holds an effect — resolving it here (per
+ // request, on the calling fiber) picks up context-provided credentials.
+ credentials: Effect.gen(function* () {
+ const resolve = yield* Credentials;
+ return yield* resolve;
+ }),
+ baseUrl: (creds) => creds.apiBaseUrl,
+ headers: (creds) => ({
+ "User-Agent": creds.userAgent,
+ ...(creds.apiKey ? { Authorization: Redacted.value(creds.apiKey) } : {}),
+ }),
+ errorEnvelope,
+ unknownError: ({ code, message, body }) =>
+ new UnknownModrinthError({
+ code:
+ typeof code === "string"
+ ? code
+ : code !== undefined
+ ? String(code)
+ : undefined,
+ message,
+ body,
+ }),
+ });
diff --git a/packages/modrinth/src/retry.ts b/packages/modrinth/src/retry.ts
new file mode 100644
index 000000000..7c59e6857
--- /dev/null
+++ b/packages/modrinth/src/retry.ts
@@ -0,0 +1,54 @@
+/**
+ * Modrinth retry configuration.
+ *
+ * Defines the per-SDK `Retry` Context.Service tag that generated operations
+ * wire into `API.make`. Callers can install a blanket retry policy at the
+ * layer level and have every Modrinth API call below it pick it up:
+ *
+ * @example
+ * ```ts
+ * import * as Modrinth from "@distilled.cloud/modrinth";
+ *
+ * myEffect.pipe(Modrinth.Retry.transient);
+ * Effect.provide(myEffect, Layer.succeed(Modrinth.Retry.Retry, customPolicy));
+ * ```
+ */
+import * as Context from "effect/Context";
+import * as Effect from "effect/Effect";
+import * as Layer from "effect/Layer";
+import {
+ type Policy,
+ throttlingFactory,
+ transientFactory,
+} from "@distilled.cloud/core/retry";
+
+export {
+ type Options,
+ type Factory,
+ type Policy,
+ makeDefault,
+ jittered,
+ capped,
+ throttlingOptions,
+ transientOptions,
+ throttlingFactory,
+ transientFactory,
+} from "@distilled.cloud/core/retry";
+
+/** Context tag for configuring retry behavior of Modrinth API calls. */
+export class Retry extends Context.Service()("ModrinthRetry") {}
+
+/** Provides a custom retry policy to every Modrinth API call below it. */
+export const policy = (optionsOrFactory: Policy) =>
+ Effect.provide(Layer.succeed(Retry, optionsOrFactory));
+
+/** Disables all automatic retries. */
+export const none = Effect.provide(
+ Layer.succeed(Retry, { while: () => false }),
+);
+
+/** Apply the throttling retry policy (retries throttling errors indefinitely). */
+export const throttling = policy(throttlingFactory);
+
+/** Apply the transient retry policy (retries all transient errors indefinitely). */
+export const transient = policy(transientFactory);
diff --git a/packages/modrinth/src/services/index.ts b/packages/modrinth/src/services/index.ts
new file mode 100644
index 000000000..4aa664237
--- /dev/null
+++ b/packages/modrinth/src/services/index.ts
@@ -0,0 +1,2 @@
+// AUTO-GENERATED by scripts/generate.ts. Do not edit.
+export * as modrinth from "./modrinth.ts";
diff --git a/packages/modrinth/src/services/modrinth.ts b/packages/modrinth/src/services/modrinth.ts
new file mode 100644
index 000000000..0e8e5018e
--- /dev/null
+++ b/packages/modrinth/src/services/modrinth.ts
@@ -0,0 +1,5706 @@
+// AUTO-GENERATED by scripts/generate.ts from .generated-specs (specs/spec-mirror-modrinth/specs/openapi.json). Do not edit.
+import * as S from "@distilled.cloud/core/schema";
+import * as API from "@distilled.cloud/core/api";
+import * as C from "@distilled.cloud/core/category";
+import * as T from "../traits.ts";
+import {
+ ModrinthProtocol,
+ type ModrinthOpError,
+ type ModrinthOpContext,
+} from "../protocol.ts";
+import { UnknownModrinthError } from "../errors.ts";
+import * as Retry from "../retry.ts";
+
+export type { ModrinthOpError, ModrinthOpContext };
+
+export class BadRequest
+ extends /*@__PURE__*/ T.applyErrorMatchers(
+ /*@__PURE__*/ S.TaggedError()("BadRequest", {
+ code: S.Number,
+ message: S.String,
+ }).pipe(C.withBadRequestError),
+ [{ status: 400 }],
+ ) {}
+
+export class NotFound
+ extends /*@__PURE__*/ T.applyErrorMatchers(
+ /*@__PURE__*/ S.TaggedError()("NotFound", {
+ code: S.Number,
+ message: S.String,
+ }).pipe(C.withBadRequestError),
+ [{ status: 404 }],
+ ) {}
+
+export interface AddFilesToVersionRequest {
+ /** The ID of the version */
+ id: string;
+ data?: unknown;
+}
+export const AddFilesToVersionRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id: S.String.pipe(T.Label()),
+ data: S.optional(S.Unknown),
+ }).pipe(
+ T.Http({
+ method: "POST",
+ uri: "/version/{id}/file",
+ code: 200,
+ contentType: "multipart",
+ }),
+ ),
+).annotate({
+ identifier: "AddFilesToVersionRequest",
+}) as any as S.Schema;
+
+export interface AddFilesToVersionResponse {}
+export const AddFilesToVersionResponse = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({}),
+).annotate({
+ identifier: "AddFilesToVersionResponse",
+}) as any as S.Schema;
+
+export type AddGalleryImageRequestExt =
+ | "png"
+ | "jpg"
+ | "jpeg"
+ | "bmp"
+ | "gif"
+ | "webp"
+ | "svg"
+ | "svgz"
+ | "rgb";
+export const AddGalleryImageRequestExt = /*@__PURE__*/ S.String;
+
+export interface AddGalleryImageRequest {
+ /** The ID or slug of the project */
+ id_slug: string;
+ /** Image extension */
+ ext: AddGalleryImageRequestExt | (string & {});
+ /** Whether an image is featured */
+ featured: boolean;
+ /** Title of the image */
+ title?: string;
+ /** Description of the image */
+ description?: string;
+ /** Ordering of the image */
+ ordering?: number;
+}
+export const AddGalleryImageRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id_slug: S.String.pipe(T.Label()),
+ ext: AddGalleryImageRequestExt.pipe(T.Query()),
+ featured: S.Boolean.pipe(T.Query()),
+ title: S.optional(S.String.pipe(T.Query())),
+ description: S.optional(S.String.pipe(T.Query())),
+ ordering: S.optional(S.Number.pipe(T.Query())),
+ }).pipe(
+ T.Http({ method: "POST", uri: "/project/{id_slug}/gallery", code: 200 }),
+ ),
+).annotate({
+ identifier: "AddGalleryImageRequest",
+}) as any as S.Schema;
+
+export interface AddGalleryImageResponse {}
+export const AddGalleryImageResponse = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({}),
+).annotate({
+ identifier: "AddGalleryImageResponse",
+}) as any as S.Schema;
+
+export interface AddTeamMemberRequest {
+ /** The ID of the team */
+ id: string;
+ user_id: string;
+}
+export const AddTeamMemberRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id: S.String.pipe(T.Label()),
+ user_id: S.String,
+ }).pipe(T.Http({ method: "POST", uri: "/team/{id}/members", code: 200 })),
+).annotate({
+ identifier: "AddTeamMemberRequest",
+}) as any as S.Schema;
+
+export interface AddTeamMemberResponse {}
+export const AddTeamMemberResponse = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({}),
+).annotate({
+ identifier: "AddTeamMemberResponse",
+}) as any as S.Schema;
+
+export interface CategoryListRequest {}
+export const CategoryListRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({}).pipe(T.Http({ method: "GET", uri: "/tag/category", code: 200 })),
+).annotate({
+ identifier: "CategoryListRequest",
+}) as any as S.Schema;
+
+export interface CategoryTag {
+ /** The SVG icon of a category */
+ icon: string;
+ /** The name of the category */
+ name: string;
+ /** The project type this category is applicable to */
+ project_type: string;
+ /** The header under which the category should go */
+ header: string;
+}
+export const CategoryTag = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ icon: S.String,
+ name: S.String,
+ project_type: S.String,
+ header: S.String,
+ }),
+).annotate({ identifier: "CategoryTag" }) as any as S.Schema;
+
+export type CategoryListResponseBodyList = Array;
+export const CategoryListResponseBodyList = /*@__PURE__*/ S.Array(
+ CategoryTag,
+) as any as S.Schema;
+
+export type CategoryListResponse = CategoryListResponseBodyList;
+export const CategoryListResponse = /*@__PURE__*/ S.suspend(() =>
+ CategoryListResponseBodyList.pipe(T.RawResponseRoot()),
+).annotate({
+ identifier: "CategoryListResponse",
+}) as any as S.Schema;
+
+export type ChangeProjectIconRequestExt =
+ | "png"
+ | "jpg"
+ | "jpeg"
+ | "bmp"
+ | "gif"
+ | "webp"
+ | "svg"
+ | "svgz"
+ | "rgb";
+export const ChangeProjectIconRequestExt = /*@__PURE__*/ S.String;
+
+export interface ChangeProjectIconRequest {
+ /** The ID or slug of the project */
+ id_slug: string;
+ /** Image extension */
+ ext: ChangeProjectIconRequestExt | (string & {});
+}
+export const ChangeProjectIconRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id_slug: S.String.pipe(T.Label()),
+ ext: ChangeProjectIconRequestExt.pipe(T.Query()),
+ }).pipe(
+ T.Http({ method: "PATCH", uri: "/project/{id_slug}/icon", code: 200 }),
+ ),
+).annotate({
+ identifier: "ChangeProjectIconRequest",
+}) as any as S.Schema;
+
+export interface ChangeProjectIconResponse {}
+export const ChangeProjectIconResponse = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({}),
+).annotate({
+ identifier: "ChangeProjectIconResponse",
+}) as any as S.Schema;
+
+export interface ChangeUserIconRequest {
+ /** The ID or username of the user */
+ id_username: string;
+}
+export const ChangeUserIconRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id_username: S.String.pipe(T.Label()),
+ }).pipe(
+ T.Http({ method: "PATCH", uri: "/user/{id_username}/icon", code: 200 }),
+ ),
+).annotate({
+ identifier: "ChangeUserIconRequest",
+}) as any as S.Schema;
+
+export interface ChangeUserIconResponse {}
+export const ChangeUserIconResponse = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({}),
+).annotate({
+ identifier: "ChangeUserIconResponse",
+}) as any as S.Schema;
+
+export interface CheckProjectValidityRequest {
+ /** The ID or slug of the project */
+ id_slug: string;
+}
+export const CheckProjectValidityRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id_slug: S.String.pipe(T.Label()),
+ }).pipe(
+ T.Http({ method: "GET", uri: "/project/{id_slug}/check", code: 200 }),
+ ),
+).annotate({
+ identifier: "CheckProjectValidityRequest",
+}) as any as S.Schema;
+
+export interface ProjectIdentifier {
+ id?: string;
+}
+export const ProjectIdentifier = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id: S.optional(S.String),
+ }),
+).annotate({
+ identifier: "ProjectIdentifier",
+}) as any as S.Schema;
+
+/** A list of the featured categories that the project has. */
+export type CreatableProjectCategoriesList = Array;
+export const CreatableProjectCategoriesList = /*@__PURE__*/ S.Array(
+ S.String,
+) as any as S.Schema;
+
+/** A list of additional categories that the project also has. These are supplementary to the featured categories, and does not include them again. */
+export type CreatableProjectAdditionalCategoriesList = Array;
+export const CreatableProjectAdditionalCategoriesList = /*@__PURE__*/ S.Array(
+ S.String,
+) as any as S.Schema;
+
+/** The status of the project */
+export type CreatableProjectStatus =
+ | "approved"
+ | "archived"
+ | "rejected"
+ | "draft"
+ | "unlisted"
+ | "processing"
+ | "withheld"
+ | "scheduled"
+ | "private"
+ | "unknown";
+export const CreatableProjectStatus = /*@__PURE__*/ S.String;
+
+/** The requested status when submitting for review or scheduling the project for release. Approved status refers to "Public" visibility. */
+export type CreatableProjectRequestedStatus =
+ | "approved"
+ | "archived"
+ | "unlisted"
+ | "private"
+ | "draft";
+export const CreatableProjectRequestedStatus = /*@__PURE__*/ S.String;
+
+export interface ProjectDonationURL {
+ /** The ID of the donation platform */
+ id?: string;
+ /** The donation platform this link is to */
+ platform?: string;
+ /** The URL of the donation platform and user */
+ url?: string;
+}
+export const ProjectDonationURL = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id: S.optional(S.String),
+ platform: S.optional(S.String),
+ url: S.optional(S.String),
+ }),
+).annotate({
+ identifier: "ProjectDonationURL",
+}) as any as S.Schema;
+
+/** A list of donation links for the project */
+export type CreatableProjectDonationUrlsList = Array;
+export const CreatableProjectDonationUrlsList = /*@__PURE__*/ S.Array(
+ ProjectDonationURL,
+) as any as S.Schema;
+
+/** Deprecated - use `environment` instead. */
+export type CreatableProjectClientSide =
+ | "required"
+ | "optional"
+ | "unsupported";
+export const CreatableProjectClientSide = /*@__PURE__*/ S.String;
+
+/** Deprecated - use `environment` instead. */
+export type CreatableProjectServerSide =
+ | "required"
+ | "optional"
+ | "unsupported";
+export const CreatableProjectServerSide = /*@__PURE__*/ S.String;
+
+/** The project type of the project */
+export type CreatableProjectProjectType = "mod" | "modpack";
+export const CreatableProjectProjectType = /*@__PURE__*/ S.String;
+
+/** The type of dependency that this version has */
+export type VersionDependencyDependencyType =
+ | "required"
+ | "optional"
+ | "incompatible"
+ | "embedded";
+export const VersionDependencyDependencyType = /*@__PURE__*/ S.String;
+
+export interface VersionDependency {
+ /** The ID of the version that this version depends on */
+ version_id?: string | null;
+ /** The ID of the project that this version depends on */
+ project_id?: string | null;
+ /** The file name of the dependency, mostly used for showing external dependencies on modpacks */
+ file_name?: string | null;
+ /** The type of dependency that this version has */
+ dependency_type: VersionDependencyDependencyType | (string & {});
+}
+export const VersionDependency = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ version_id: S.optional(S.NullOr(S.String)),
+ project_id: S.optional(S.NullOr(S.String)),
+ file_name: S.optional(S.NullOr(S.String)),
+ dependency_type: VersionDependencyDependencyType,
+ }),
+).annotate({
+ identifier: "VersionDependency",
+}) as any as S.Schema;
+
+/** A list of specific versions of projects that this version depends on */
+export type EditableVersionDependenciesList = Array;
+export const EditableVersionDependenciesList = /*@__PURE__*/ S.Array(
+ VersionDependency,
+) as any as S.Schema;
+
+/** A list of versions of Minecraft that this version supports */
+export type EditableVersionGameVersionsList = Array;
+export const EditableVersionGameVersionsList = /*@__PURE__*/ S.Array(
+ S.String,
+) as any as S.Schema;
+
+/** The release channel for this version */
+export type EditableVersionVersionType = "release" | "beta" | "alpha";
+export const EditableVersionVersionType = /*@__PURE__*/ S.String;
+
+/** The mod loaders that this version supports. In case of resource packs, use "minecraft" */
+export type EditableVersionLoadersList = Array;
+export const EditableVersionLoadersList = /*@__PURE__*/ S.Array(
+ S.String,
+) as any as S.Schema;
+
+export type EditableVersionStatus =
+ | "listed"
+ | "archived"
+ | "draft"
+ | "unlisted"
+ | "scheduled"
+ | "unknown";
+export const EditableVersionStatus = /*@__PURE__*/ S.String;
+
+export type EditableVersionRequestedStatus =
+ | "listed"
+ | "archived"
+ | "draft"
+ | "unlisted";
+export const EditableVersionRequestedStatus = /*@__PURE__*/ S.String;
+
+/** The hash format and the hash of the new primary file */
+export type EditableVersionPrimaryFileList = Array;
+export const EditableVersionPrimaryFileList = /*@__PURE__*/ S.Array(
+ S.String,
+) as any as S.Schema;
+
+export interface EditableFileType {
+ /** The hash algorithm of the hash specified in the hash field */
+ algorithm: string;
+ /** The hash of the file you're editing */
+ hash: string;
+ file_type: unknown;
+}
+export const EditableFileType = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ algorithm: S.String,
+ hash: S.String,
+ file_type: S.Unknown,
+ }),
+).annotate({
+ identifier: "EditableFileType",
+}) as any as S.Schema;
+
+/** A list of file_types to edit */
+export type EditableVersionFileTypesList = Array;
+export const EditableVersionFileTypesList = /*@__PURE__*/ S.Array(
+ EditableFileType,
+) as any as S.Schema;
+
+export interface EditableVersion {
+ /** The name of this version */
+ name?: string;
+ /** The version number. Ideally will follow semantic versioning */
+ version_number?: string;
+ /** The changelog for this version */
+ changelog?: string | null;
+ /** A list of specific versions of projects that this version depends on */
+ dependencies?: EditableVersionDependenciesList;
+ /** A list of versions of Minecraft that this version supports */
+ game_versions?: EditableVersionGameVersionsList;
+ /** The release channel for this version */
+ version_type?: EditableVersionVersionType | (string & {});
+ /** The mod loaders that this version supports. In case of resource packs, use "minecraft" */
+ loaders?: EditableVersionLoadersList;
+ /** Whether the version is featured or not */
+ featured?: boolean;
+ status?: EditableVersionStatus | (string & {});
+ requested_status?: EditableVersionRequestedStatus | (string & {}) | null;
+ /** The hash format and the hash of the new primary file */
+ primary_file?: EditableVersionPrimaryFileList;
+ /** A list of file_types to edit */
+ file_types?: EditableVersionFileTypesList;
+}
+export const EditableVersion = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ name: S.optional(S.String),
+ version_number: S.optional(S.String),
+ changelog: S.optional(S.NullOr(S.String)),
+ dependencies: S.optional(EditableVersionDependenciesList),
+ game_versions: S.optional(EditableVersionGameVersionsList),
+ version_type: S.optional(EditableVersionVersionType),
+ loaders: S.optional(EditableVersionLoadersList),
+ featured: S.optional(S.Boolean),
+ status: S.optional(EditableVersionStatus),
+ requested_status: S.optional(S.NullOr(EditableVersionRequestedStatus)),
+ primary_file: S.optional(EditableVersionPrimaryFileList),
+ file_types: S.optional(EditableVersionFileTypesList),
+ }),
+).annotate({
+ identifier: "EditableVersion",
+}) as any as S.Schema;
+
+/** A list of initial versions to upload with the created project. Deprecated - please upload version files after initial upload. */
+export type CreatableProjectInitialVersionsList = Array;
+export const CreatableProjectInitialVersionsList = /*@__PURE__*/ S.Array(
+ EditableVersion,
+) as any as S.Schema;
+
+export interface CreatableProjectGalleryItem {
+ /** The name of the multipart item where the gallery media is located */
+ item?: string;
+ /** Whether the image is featured in the gallery */
+ featured?: boolean;
+ /** The title of the gallery image */
+ title?: string | null;
+ /** The description of the gallery image */
+ description?: string | null;
+ /** The order of the gallery image. Gallery images are sorted by this field and then alphabetically by title. */
+ ordering?: number;
+}
+export const CreatableProjectGalleryItem = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ item: S.optional(S.String),
+ featured: S.optional(S.Boolean),
+ title: S.optional(S.NullOr(S.String)),
+ description: S.optional(S.NullOr(S.String)),
+ ordering: S.optional(S.Number),
+ }),
+).annotate({
+ identifier: "CreatableProjectGalleryItem",
+}) as any as S.Schema;
+
+/** Gallery images to be uploaded with the created project. Deprecated - please upload gallery images after initial upload. */
+export type CreatableProjectGalleryItemsList =
+ Array;
+export const CreatableProjectGalleryItemsList = /*@__PURE__*/ S.Array(
+ CreatableProjectGalleryItem,
+) as any as S.Schema;
+
+export interface CreatableProject {
+ /** The slug of a project, used for vanity URLs. Regex: ```^[\w!@$()`.+,"\-']{3,64}$``` */
+ slug: string;
+ /** The title or name of the project */
+ title: string;
+ /** A short sentence summarizing the project, no more than a sentence or two. */
+ description: string;
+ /** A long form description of the project */
+ body: string;
+ /** A list of the featured categories that the project has. */
+ categories: CreatableProjectCategoriesList;
+ /** A list of additional categories that the project also has. These are supplementary to the featured categories, and does not include them again. */
+ additional_categories?: CreatableProjectAdditionalCategoriesList;
+ /** The status of the project */
+ status?: CreatableProjectStatus | (string & {});
+ /** The requested status when submitting for review or scheduling the project for release. Approved status refers to "Public" visibility. */
+ requested_status?: CreatableProjectRequestedStatus | (string & {}) | null;
+ /** An optional link to where to submit bugs or issues with the project */
+ issues_url?: string | null;
+ /** An optional link to the source code of the project */
+ source_url?: string | null;
+ /** An optional link to the project's wiki page or other relevant information */
+ wiki_url?: string | null;
+ /** An optional invite link to the project's discord. */
+ discord_url?: string | null;
+ /** A list of donation links for the project */
+ donation_urls?: CreatableProjectDonationUrlsList;
+ /** Deprecated - use `environment` instead. */
+ client_side: CreatableProjectClientSide | (string & {});
+ /** Deprecated - use `environment` instead. */
+ server_side: CreatableProjectServerSide | (string & {});
+ /** The SPDX license ID of a project */
+ license_id: string;
+ /** The URL to this license */
+ license_url?: string | null;
+ /** The project type of the project */
+ project_type: CreatableProjectProjectType | (string & {});
+ /** A list of initial versions to upload with the created project. Deprecated - please upload version files after initial upload. */
+ initial_versions?: CreatableProjectInitialVersionsList;
+ /** Whether the project should be saved as a draft instead of being sent to moderation for review. Deprecated - please always mark this as true. */
+ is_draft?: boolean;
+ /** Gallery images to be uploaded with the created project. Deprecated - please upload gallery images after initial upload. */
+ gallery_items?: CreatableProjectGalleryItemsList;
+}
+export const CreatableProject = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ slug: S.String,
+ title: S.String,
+ description: S.String,
+ body: S.String,
+ categories: CreatableProjectCategoriesList,
+ additional_categories: S.optional(CreatableProjectAdditionalCategoriesList),
+ status: S.optional(CreatableProjectStatus),
+ requested_status: S.optional(S.NullOr(CreatableProjectRequestedStatus)),
+ issues_url: S.optional(S.NullOr(S.String)),
+ source_url: S.optional(S.NullOr(S.String)),
+ wiki_url: S.optional(S.NullOr(S.String)),
+ discord_url: S.optional(S.NullOr(S.String)),
+ donation_urls: S.optional(CreatableProjectDonationUrlsList),
+ client_side: CreatableProjectClientSide,
+ server_side: CreatableProjectServerSide,
+ license_id: S.String,
+ license_url: S.optional(S.NullOr(S.String)),
+ project_type: CreatableProjectProjectType,
+ initial_versions: S.optional(CreatableProjectInitialVersionsList),
+ is_draft: S.optional(S.Boolean),
+ gallery_items: S.optional(CreatableProjectGalleryItemsList),
+ }),
+).annotate({
+ identifier: "CreatableProject",
+}) as any as S.Schema;
+
+/** Project icon file */
+export type CreateProjectRequestIcon =
+ | "*.png"
+ | "*.jpg"
+ | "*.jpeg"
+ | "*.bmp"
+ | "*.gif"
+ | "*.webp"
+ | "*.svg"
+ | "*.svgz"
+ | "*.rgb";
+export const CreateProjectRequestIcon = /*@__PURE__*/ S.String;
+
+export interface CreateProjectRequest {
+ data: CreatableProject;
+ /** Project icon file */
+ icon?: CreateProjectRequestIcon | (string & {});
+}
+export const CreateProjectRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ data: CreatableProject,
+ icon: S.optional(CreateProjectRequestIcon),
+ }).pipe(
+ T.Http({
+ method: "POST",
+ uri: "/project",
+ code: 200,
+ contentType: "multipart",
+ }),
+ ),
+).annotate({
+ identifier: "CreateProjectRequest",
+}) as any as S.Schema;
+
+/** The status of the project */
+export type ProjectStatus =
+ | "approved"
+ | "archived"
+ | "rejected"
+ | "draft"
+ | "unlisted"
+ | "processing"
+ | "withheld"
+ | "scheduled"
+ | "private"
+ | "unknown";
+export const ProjectStatus = /*@__PURE__*/ S.String;
+
+/** The project type of the project */
+export type ProjectProjectType = "mod" | "modpack" | "resourcepack" | "shader";
+export const ProjectProjectType = /*@__PURE__*/ S.String;
+
+/** A list of the featured categories that the project has. */
+export type ProjectCategoriesList = Array;
+export const ProjectCategoriesList = /*@__PURE__*/ S.Array(
+ S.String,
+) as any as S.Schema;
+
+/** A list of additional categories that the project also has. These are supplementary to the featured categories, and does not include them again. */
+export type ProjectAdditionalCategoriesList = Array;
+export const ProjectAdditionalCategoriesList = /*@__PURE__*/ S.Array(
+ S.String,
+) as any as S.Schema;
+
+/** The environment a project or version supports. For an explanation of each environment, see the blog post here: https://modrinth.com/news/article/new-environments/#new-system */
+export type EnvironmentEnum =
+ | "client_and_server"
+ | "client_only"
+ | "client_only_server_optional"
+ | "singleplayer_only"
+ | "server_only"
+ | "server_only_client_optional"
+ | "dedicated_server_only"
+ | "client_or_server"
+ | "client_or_server_prefers_both"
+ | "unknown";
+export const EnvironmentEnum = /*@__PURE__*/ S.String;
+
+/** All the environments that versions of this project support. Not in any particular order, we recommend using the environment information on a version instead. For an explanation of each environment, see the blog post here: https://modrinth.com/news/article/new-environments/#new-system */
+export type ProjectEnvironmentList = Array;
+export const ProjectEnvironmentList = /*@__PURE__*/ S.Array(
+ EnvironmentEnum,
+) as any as S.Schema;
+
+/** A list of all of the game versions supported by the project */
+export type ProjectGameVersionsList = Array;
+export const ProjectGameVersionsList = /*@__PURE__*/ S.Array(
+ S.String,
+) as any as S.Schema;
+
+/** A list of all of the loaders supported by the project. These vary based on project type. */
+export type ProjectLoadersList = Array;
+export const ProjectLoadersList = /*@__PURE__*/ S.Array(
+ S.String,
+) as any as S.Schema;
+
+/** A list of the version IDs of the project */
+export type ProjectVersionsList = Array;
+export const ProjectVersionsList = /*@__PURE__*/ S.Array(
+ S.String,
+) as any as S.Schema;
+
+/** The license of the project */
+export interface ProjectLicense {
+ /** The SPDX license ID of a project */
+ id?: string;
+ /** The long name of a license */
+ name?: string;
+ /** The URL to this license */
+ url?: string | null;
+}
+export const ProjectLicense = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id: S.optional(S.String),
+ name: S.optional(S.String),
+ url: S.optional(S.NullOr(S.String)),
+ }),
+).annotate({ identifier: "ProjectLicense" }) as any as S.Schema;
+
+export interface GalleryImage {
+ /** The URL of the gallery image */
+ url: string;
+ /** Whether the image is featured in the gallery */
+ featured: boolean;
+ /** The title of the gallery image */
+ title?: string | null;
+ /** The description of the gallery image */
+ description?: string | null;
+ /** The date and time the gallery image was created */
+ created: string;
+ /** The order of the gallery image. Gallery images are sorted by this field and then alphabetically by title. */
+ ordering?: number;
+}
+export const GalleryImage = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ url: S.String,
+ featured: S.Boolean,
+ title: S.optional(S.NullOr(S.String)),
+ description: S.optional(S.NullOr(S.String)),
+ created: S.String,
+ ordering: S.optional(S.Number),
+ }),
+).annotate({ identifier: "GalleryImage" }) as any as S.Schema;
+
+/** A list of images that have been uploaded to the project's gallery */
+export type ProjectGalleryList = Array;
+export const ProjectGalleryList = /*@__PURE__*/ S.Array(
+ GalleryImage,
+) as any as S.Schema;
+
+export type ProjectMonetizationStatus =
+ | "monetized"
+ | "demonetized"
+ | "force-demonetized";
+export const ProjectMonetizationStatus = /*@__PURE__*/ S.String;
+
+/** The requested status when submitting for review or scheduling the project for release. Approved status refers to "Public" visibility. */
+export type ProjectRequestedStatus =
+ | "approved"
+ | "archived"
+ | "unlisted"
+ | "private"
+ | "draft";
+export const ProjectRequestedStatus = /*@__PURE__*/ S.String;
+
+/** A list of donation links for the project */
+export type ProjectDonationUrlsList = Array;
+export const ProjectDonationUrlsList = /*@__PURE__*/ S.Array(
+ ProjectDonationURL,
+) as any as S.Schema;
+
+/** Deprecated - use `environment` instead. */
+export type ProjectClientSide =
+ | "required"
+ | "optional"
+ | "unsupported"
+ | "unknown";
+export const ProjectClientSide = /*@__PURE__*/ S.String;
+
+/** Deprecated - use `environment` instead. */
+export type ProjectServerSide =
+ | "required"
+ | "optional"
+ | "unsupported"
+ | "unknown";
+export const ProjectServerSide = /*@__PURE__*/ S.String;
+
+/** Deprecated - A message that a moderator sent regarding the project */
+export interface ModeratorMessage {
+ /** The message that a moderator has left for the project */
+ message?: string;
+ /** The longer body of the message that a moderator has left for the project */
+ body?: string | null;
+}
+export const ModeratorMessage = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ message: S.optional(S.String),
+ body: S.optional(S.NullOr(S.String)),
+ }),
+).annotate({
+ identifier: "ModeratorMessage",
+}) as any as S.Schema;
+
+export interface Project {
+ /** The ID of the project, encoded as a base62 string */
+ id: string;
+ /** The ID of the team that has ownership of this project */
+ team: string;
+ /** The title or name of the project */
+ title: string;
+ /** A short sentence summarizing the project, no more than a sentence or two. */
+ description: string;
+ /** A long form description of the project */
+ body: string;
+ /** The status of the project */
+ status: ProjectStatus;
+ /** The project type of the project */
+ project_type: ProjectProjectType;
+ /** A list of the featured categories that the project has. */
+ categories: ProjectCategoriesList;
+ /** A list of additional categories that the project also has. These are supplementary to the featured categories, and does not include them again. */
+ additional_categories: ProjectAdditionalCategoriesList;
+ /** All the environments that versions of this project support. Not in any particular order, we recommend using the environment information on a version instead. For an explanation of each environment, see the blog post here: https://modrinth.com/news/article/new-environments/#new-system */
+ environment: ProjectEnvironmentList;
+ /** A list of all of the game versions supported by the project */
+ game_versions: ProjectGameVersionsList;
+ /** A list of all of the loaders supported by the project. These vary based on project type. */
+ loaders: ProjectLoadersList;
+ /** A list of the version IDs of the project */
+ versions: ProjectVersionsList;
+ license: ProjectLicense;
+ /** The date the project was created */
+ published: string;
+ /** The date the latest version of the project was created */
+ updated: string;
+ /** The total number of downloads of the project */
+ downloads: number;
+ /** The total number of users following the project */
+ followers: number;
+ /** A list of images that have been uploaded to the project's gallery */
+ gallery: ProjectGalleryList;
+ /** The ID of the moderation thread associated with this project */
+ thread_id: string;
+ monetization_status: ProjectMonetizationStatus;
+ /** The slug of a project, used for vanity URLs. Regex: ```^[\w!@$()`.+,"\-']{3,64}$``` */
+ slug?: string | null;
+ /** The ID of the organization that owns this project */
+ organization?: string | null;
+ /** The requested status when submitting for review or scheduling the project for release. Approved status refers to "Public" visibility. */
+ requested_status?: ProjectRequestedStatus | null;
+ /** The date the project was first published */
+ approved?: string | null;
+ /** The date the project's status was submitted to moderators for review */
+ queued?: string | null;
+ /** The URL of the project's icon */
+ icon_url?: string | null;
+ /** The URL of the project's icon without CDN transforms applied */
+ raw_icon_url?: string | null;
+ /** The RGB color of the project, automatically generated from the project icon */
+ color?: number | null;
+ /** An optional link to where to submit bugs or issues with the project */
+ issues_url?: string | null;
+ /** An optional link to the source code of the project */
+ source_url?: string | null;
+ /** An optional link to the project's wiki page or other relevant information */
+ wiki_url?: string | null;
+ /** An optional invite link to the project's discord. */
+ discord_url?: string | null;
+ /** A list of donation links for the project */
+ donation_urls?: ProjectDonationUrlsList | null;
+ /** Deprecated - use `environment` instead. */
+ client_side: ProjectClientSide;
+ /** Deprecated - use `environment` instead. */
+ server_side: ProjectServerSide;
+ /** Deprecated - The link to the long description of the project. Always null, only kept for legacy compatibility. */
+ body_url?: string | null;
+ moderator_message?: ModeratorMessage | null;
+}
+export const Project = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id: S.String,
+ team: S.String,
+ title: S.String,
+ description: S.String,
+ body: S.String,
+ status: ProjectStatus,
+ project_type: ProjectProjectType,
+ categories: ProjectCategoriesList,
+ additional_categories: ProjectAdditionalCategoriesList,
+ environment: ProjectEnvironmentList,
+ game_versions: ProjectGameVersionsList,
+ loaders: ProjectLoadersList,
+ versions: ProjectVersionsList,
+ license: ProjectLicense,
+ published: S.String,
+ updated: S.String,
+ downloads: S.Number,
+ followers: S.Number,
+ gallery: ProjectGalleryList,
+ thread_id: S.String,
+ monetization_status: ProjectMonetizationStatus,
+ slug: S.optional(S.NullOr(S.String)),
+ organization: S.optional(S.NullOr(S.String)),
+ requested_status: S.optional(S.NullOr(ProjectRequestedStatus)),
+ approved: S.optional(S.NullOr(S.String)),
+ queued: S.optional(S.NullOr(S.String)),
+ icon_url: S.optional(S.NullOr(S.String)),
+ raw_icon_url: S.optional(S.NullOr(S.String)),
+ color: S.optional(S.NullOr(S.Number)),
+ issues_url: S.optional(S.NullOr(S.String)),
+ source_url: S.optional(S.NullOr(S.String)),
+ wiki_url: S.optional(S.NullOr(S.String)),
+ discord_url: S.optional(S.NullOr(S.String)),
+ donation_urls: S.optional(S.NullOr(ProjectDonationUrlsList)),
+ client_side: ProjectClientSide,
+ server_side: ProjectServerSide,
+ body_url: S.optional(S.NullOr(S.String)),
+ moderator_message: S.optional(S.NullOr(ModeratorMessage)),
+ }),
+).annotate({ identifier: "Project" }) as any as S.Schema;
+
+/** A list of specific versions of projects that this version depends on */
+export type CreatableVersionDependenciesList = Array;
+export const CreatableVersionDependenciesList = /*@__PURE__*/ S.Array(
+ VersionDependency,
+) as any as S.Schema;
+
+/** A list of versions of Minecraft that this version supports */
+export type CreatableVersionGameVersionsList = Array;
+export const CreatableVersionGameVersionsList = /*@__PURE__*/ S.Array(
+ S.String,
+) as any as S.Schema;
+
+/** The release channel for this version */
+export type CreatableVersionVersionType = "release" | "beta" | "alpha";
+export const CreatableVersionVersionType = /*@__PURE__*/ S.String;
+
+/** The mod loaders that this version supports. In case of resource packs, use "minecraft" */
+export type CreatableVersionLoadersList = Array;
+export const CreatableVersionLoadersList = /*@__PURE__*/ S.Array(
+ S.String,
+) as any as S.Schema;
+
+export type CreatableVersionStatus =
+ | "listed"
+ | "archived"
+ | "draft"
+ | "unlisted"
+ | "scheduled"
+ | "unknown";
+export const CreatableVersionStatus = /*@__PURE__*/ S.String;
+
+export type CreatableVersionRequestedStatus =
+ | "listed"
+ | "archived"
+ | "draft"
+ | "unlisted";
+export const CreatableVersionRequestedStatus = /*@__PURE__*/ S.String;
+
+/** An array of the multipart field names of each file that goes with this version */
+export type CreatableVersionFilePartsList = Array;
+export const CreatableVersionFilePartsList = /*@__PURE__*/ S.Array(
+ S.String,
+) as any as S.Schema;
+
+/** The environment a version supports. For an explanation of each environment, see the blog post here: https://modrinth.com/news/article/new-environments/#new-system */
+export type EnvironmentInputEnum =
+ | "client_and_server"
+ | "client_only"
+ | "client_only_server_optional"
+ | "singleplayer_only"
+ | "server_only"
+ | "server_only_client_optional"
+ | "dedicated_server_only"
+ | "client_or_server"
+ | "client_or_server_prefers_both";
+export const EnvironmentInputEnum = /*@__PURE__*/ S.String;
+
+export type FileTypeEnum =
+ | "required-resource-pack"
+ | "optional-resource-pack"
+ | "sources-jar"
+ | "dev-jar"
+ | "javadoc-jar"
+ | "unknown"
+ | "signature";
+export const FileTypeEnum = /*@__PURE__*/ S.String;
+
+/** A map of file parts to their associated file type, a file type is used for additional files such as sources jars. */
+export type CreatableVersionFileTypesMap = {
+ [key: string]: FileTypeEnum | (string & {}) | undefined;
+};
+export const CreatableVersionFileTypesMap = /*@__PURE__*/ S.Record(
+ S.String,
+ FileTypeEnum,
+) as any as S.Schema;
+
+export interface CreatableVersion {
+ /** The name of this version */
+ name: string;
+ /** The version number. Ideally will follow semantic versioning */
+ version_number: string;
+ /** The changelog for this version */
+ changelog?: string | null;
+ /** A list of specific versions of projects that this version depends on */
+ dependencies: CreatableVersionDependenciesList;
+ /** A list of versions of Minecraft that this version supports */
+ game_versions: CreatableVersionGameVersionsList;
+ /** The release channel for this version */
+ version_type: CreatableVersionVersionType | (string & {});
+ /** The mod loaders that this version supports. In case of resource packs, use "minecraft" */
+ loaders: CreatableVersionLoadersList;
+ /** Whether the version is featured or not */
+ featured: boolean;
+ status?: CreatableVersionStatus | (string & {});
+ requested_status?: CreatableVersionRequestedStatus | (string & {}) | null;
+ /** The ID of the project this version is for */
+ project_id: string;
+ /** An array of the multipart field names of each file that goes with this version */
+ file_parts: CreatableVersionFilePartsList;
+ /** The multipart field name of the primary file */
+ primary_file?: string;
+ environment?: EnvironmentInputEnum | (string & {});
+ /** A map of file parts to their associated file type, a file type is used for additional files such as sources jars. */
+ file_types?: CreatableVersionFileTypesMap;
+}
+export const CreatableVersion = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ name: S.String,
+ version_number: S.String,
+ changelog: S.optional(S.NullOr(S.String)),
+ dependencies: CreatableVersionDependenciesList,
+ game_versions: CreatableVersionGameVersionsList,
+ version_type: CreatableVersionVersionType,
+ loaders: CreatableVersionLoadersList,
+ featured: S.Boolean,
+ status: S.optional(CreatableVersionStatus),
+ requested_status: S.optional(S.NullOr(CreatableVersionRequestedStatus)),
+ project_id: S.String,
+ file_parts: CreatableVersionFilePartsList,
+ primary_file: S.optional(S.String),
+ environment: S.optional(EnvironmentInputEnum),
+ file_types: S.optional(CreatableVersionFileTypesMap),
+ }),
+).annotate({
+ identifier: "CreatableVersion",
+}) as any as S.Schema;
+
+export interface CreateVersionRequest {
+ data: CreatableVersion;
+}
+export const CreateVersionRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ data: CreatableVersion,
+ }).pipe(
+ T.Http({
+ method: "POST",
+ uri: "/version",
+ code: 200,
+ contentType: "multipart",
+ }),
+ ),
+).annotate({
+ identifier: "CreateVersionRequest",
+}) as any as S.Schema;
+
+/** A list of specific versions of projects that this version depends on */
+export type CreateVersionResponseDependenciesList = Array;
+export const CreateVersionResponseDependenciesList = /*@__PURE__*/ S.Array(
+ VersionDependency,
+) as any as S.Schema;
+
+/** A list of versions of Minecraft that this version supports */
+export type CreateVersionResponseGameVersionsList = Array;
+export const CreateVersionResponseGameVersionsList = /*@__PURE__*/ S.Array(
+ S.String,
+) as any as S.Schema;
+
+/** The release channel for this version */
+export type CreateVersionResponseVersionType = "release" | "beta" | "alpha";
+export const CreateVersionResponseVersionType = /*@__PURE__*/ S.String;
+
+/** The mod loaders that this version supports. In case of resource packs, use "minecraft" */
+export type CreateVersionResponseLoadersList = Array;
+export const CreateVersionResponseLoadersList = /*@__PURE__*/ S.Array(
+ S.String,
+) as any as S.Schema;
+
+export type CreateVersionResponseStatus =
+ | "listed"
+ | "archived"
+ | "draft"
+ | "unlisted"
+ | "scheduled"
+ | "unknown";
+export const CreateVersionResponseStatus = /*@__PURE__*/ S.String;
+
+export type CreateVersionResponseRequestedStatus =
+ | "listed"
+ | "archived"
+ | "draft"
+ | "unlisted";
+export const CreateVersionResponseRequestedStatus = /*@__PURE__*/ S.String;
+
+/** A map of hashes of the file. The key is the hashing algorithm and the value is the string version of the hash. */
+export interface VersionFileHashes {
+ sha512?: string;
+ sha1?: string;
+}
+export const VersionFileHashes = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ sha512: S.optional(S.String),
+ sha1: S.optional(S.String),
+ }),
+).annotate({
+ identifier: "VersionFileHashes",
+}) as any as S.Schema;
+
+export interface VersionFile {
+ hashes: VersionFileHashes;
+ /** A direct link to the file */
+ url: string;
+ /** The name of the file */
+ filename: string;
+ /** Whether this file is the primary one for its version. Only a maximum of one file per version will have this set to true. If there are not any primary files, it can be inferred that the first file is the primary one. */
+ primary: boolean;
+ /** The size of the file in bytes */
+ size: number;
+ file_type?: unknown;
+}
+export const VersionFile = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ hashes: VersionFileHashes,
+ url: S.String,
+ filename: S.String,
+ primary: S.Boolean,
+ size: S.Number,
+ file_type: S.optional(S.Unknown),
+ }),
+).annotate({ identifier: "VersionFile" }) as any as S.Schema;
+
+/** A list of files available for download for this version */
+export type CreateVersionResponseFilesList = Array;
+export const CreateVersionResponseFilesList = /*@__PURE__*/ S.Array(
+ VersionFile,
+) as any as S.Schema;
+
+export interface CreateVersionResponse {
+ /** The name of this version */
+ name: string;
+ /** The version number. Ideally will follow semantic versioning */
+ version_number: string;
+ /** The changelog for this version */
+ changelog?: string | null;
+ /** A list of specific versions of projects that this version depends on */
+ dependencies?: CreateVersionResponseDependenciesList;
+ /** A list of versions of Minecraft that this version supports */
+ game_versions: CreateVersionResponseGameVersionsList;
+ /** The release channel for this version */
+ version_type: CreateVersionResponseVersionType;
+ /** The mod loaders that this version supports. In case of resource packs, use "minecraft" */
+ loaders: CreateVersionResponseLoadersList;
+ /** Whether the version is featured or not */
+ featured: boolean;
+ status?: CreateVersionResponseStatus;
+ requested_status?: CreateVersionResponseRequestedStatus | null;
+ /** The ID of the version, encoded as a base62 string */
+ id: string;
+ /** The ID of the project this version is for */
+ project_id: string;
+ /** The ID of the author who published this version */
+ author_id: string;
+ date_published: string;
+ /** The number of times this version has been downloaded */
+ downloads: number;
+ /** A link to the changelog for this version. Always null, only kept for legacy compatibility. */
+ changelog_url?: string | null;
+ environment: EnvironmentEnum;
+ /** A list of files available for download for this version */
+ files: CreateVersionResponseFilesList;
+}
+export const CreateVersionResponse = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ name: S.String,
+ version_number: S.String,
+ changelog: S.optional(S.NullOr(S.String)),
+ dependencies: S.optional(CreateVersionResponseDependenciesList),
+ game_versions: CreateVersionResponseGameVersionsList,
+ version_type: CreateVersionResponseVersionType,
+ loaders: CreateVersionResponseLoadersList,
+ featured: S.Boolean,
+ status: S.optional(CreateVersionResponseStatus),
+ requested_status: S.optional(
+ S.NullOr(CreateVersionResponseRequestedStatus),
+ ),
+ id: S.String,
+ project_id: S.String,
+ author_id: S.String,
+ date_published: S.String,
+ downloads: S.Number,
+ changelog_url: S.optional(S.NullOr(S.String)),
+ environment: EnvironmentEnum,
+ files: CreateVersionResponseFilesList,
+ }),
+).annotate({
+ identifier: "CreateVersionResponse",
+}) as any as S.Schema;
+
+export type DeleteFileFromHashRequestAlgorithm = "sha1" | "sha512";
+export const DeleteFileFromHashRequestAlgorithm = /*@__PURE__*/ S.String;
+
+export interface DeleteFileFromHashRequest {
+ /** The hash of the file, considering its byte content, and encoded in hexadecimal */
+ hash: string;
+ /** The algorithm of the hash */
+ algorithm: DeleteFileFromHashRequestAlgorithm | (string & {});
+ /** Version ID to delete the version from, if multiple files of the same hash exist */
+ version_id?: string;
+}
+export const DeleteFileFromHashRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ hash: S.String.pipe(T.Label()),
+ algorithm: DeleteFileFromHashRequestAlgorithm.pipe(T.Query()),
+ version_id: S.optional(S.String.pipe(T.Query())),
+ }).pipe(T.Http({ method: "DELETE", uri: "/version_file/{hash}", code: 200 })),
+).annotate({
+ identifier: "DeleteFileFromHashRequest",
+}) as any as S.Schema;
+
+export interface DeleteFileFromHashResponse {}
+export const DeleteFileFromHashResponse = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({}),
+).annotate({
+ identifier: "DeleteFileFromHashResponse",
+}) as any as S.Schema;
+
+export interface DeleteGalleryImageRequest {
+ /** The ID or slug of the project */
+ id_slug: string;
+ /** URL link of the image to delete */
+ url: string;
+}
+export const DeleteGalleryImageRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id_slug: S.String.pipe(T.Label()),
+ url: S.String.pipe(T.Query()),
+ }).pipe(
+ T.Http({ method: "DELETE", uri: "/project/{id_slug}/gallery", code: 200 }),
+ ),
+).annotate({
+ identifier: "DeleteGalleryImageRequest",
+}) as any as S.Schema;
+
+export interface DeleteGalleryImageResponse {}
+export const DeleteGalleryImageResponse = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({}),
+).annotate({
+ identifier: "DeleteGalleryImageResponse",
+}) as any as S.Schema;
+
+export interface DeleteNotificationRequest {
+ /** The ID of the notification */
+ id: string;
+}
+export const DeleteNotificationRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id: S.String.pipe(T.Label()),
+ }).pipe(T.Http({ method: "DELETE", uri: "/notification/{id}", code: 200 })),
+).annotate({
+ identifier: "DeleteNotificationRequest",
+}) as any as S.Schema;
+
+export interface DeleteNotificationResponse {}
+export const DeleteNotificationResponse = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({}),
+).annotate({
+ identifier: "DeleteNotificationResponse",
+}) as any as S.Schema;
+
+export interface DeleteNotificationsRequest {
+ /** The IDs of the notifications */
+ ids: string;
+}
+export const DeleteNotificationsRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ ids: S.String.pipe(T.Query()),
+ }).pipe(T.Http({ method: "DELETE", uri: "/notifications", code: 200 })),
+).annotate({
+ identifier: "DeleteNotificationsRequest",
+}) as any as S.Schema;
+
+export interface DeleteNotificationsResponse {}
+export const DeleteNotificationsResponse = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({}),
+).annotate({
+ identifier: "DeleteNotificationsResponse",
+}) as any as S.Schema;
+
+export interface DeleteProjectRequest {
+ /** The ID or slug of the project */
+ id_slug: string;
+}
+export const DeleteProjectRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id_slug: S.String.pipe(T.Label()),
+ }).pipe(T.Http({ method: "DELETE", uri: "/project/{id_slug}", code: 200 })),
+).annotate({
+ identifier: "DeleteProjectRequest",
+}) as any as S.Schema;
+
+export interface DeleteProjectResponse {}
+export const DeleteProjectResponse = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({}),
+).annotate({
+ identifier: "DeleteProjectResponse",
+}) as any as S.Schema;
+
+export interface DeleteProjectIconRequest {
+ /** The ID or slug of the project */
+ id_slug: string;
+}
+export const DeleteProjectIconRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id_slug: S.String.pipe(T.Label()),
+ }).pipe(
+ T.Http({ method: "DELETE", uri: "/project/{id_slug}/icon", code: 200 }),
+ ),
+).annotate({
+ identifier: "DeleteProjectIconRequest",
+}) as any as S.Schema;
+
+export interface DeleteProjectIconResponse {}
+export const DeleteProjectIconResponse = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({}),
+).annotate({
+ identifier: "DeleteProjectIconResponse",
+}) as any as S.Schema;
+
+export interface DeleteTeamMemberRequest {
+ /** The ID of the team */
+ id: string;
+ /** The ID or username of the user */
+ id_username: string;
+}
+export const DeleteTeamMemberRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id: S.String.pipe(T.Label()),
+ id_username: S.String.pipe(T.Label()),
+ }).pipe(
+ T.Http({
+ method: "DELETE",
+ uri: "/team/{id}/members/{id_username}",
+ code: 200,
+ }),
+ ),
+).annotate({
+ identifier: "DeleteTeamMemberRequest",
+}) as any as S.Schema;
+
+export interface DeleteTeamMemberResponse {}
+export const DeleteTeamMemberResponse = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({}),
+).annotate({
+ identifier: "DeleteTeamMemberResponse",
+}) as any as S.Schema;
+
+export interface DeleteThreadMessageRequest {
+ /** The ID of the message */
+ id: string;
+}
+export const DeleteThreadMessageRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id: S.String.pipe(T.Label()),
+ }).pipe(T.Http({ method: "DELETE", uri: "/message/{id}", code: 200 })),
+).annotate({
+ identifier: "DeleteThreadMessageRequest",
+}) as any as S.Schema;
+
+export interface DeleteThreadMessageResponse {}
+export const DeleteThreadMessageResponse = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({}),
+).annotate({
+ identifier: "DeleteThreadMessageResponse",
+}) as any as S.Schema;
+
+export interface DeleteUserIconRequest {
+ /** The ID or username of the user */
+ id_username: string;
+}
+export const DeleteUserIconRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id_username: S.String.pipe(T.Label()),
+ }).pipe(
+ T.Http({ method: "DELETE", uri: "/user/{id_username}/icon", code: 200 }),
+ ),
+).annotate({
+ identifier: "DeleteUserIconRequest",
+}) as any as S.Schema;
+
+export interface DeleteUserIconResponse {}
+export const DeleteUserIconResponse = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({}),
+).annotate({
+ identifier: "DeleteUserIconResponse",
+}) as any as S.Schema;
+
+export interface DeleteVersionRequest {
+ /** The ID of the version */
+ id: string;
+}
+export const DeleteVersionRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id: S.String.pipe(T.Label()),
+ }).pipe(T.Http({ method: "DELETE", uri: "/version/{id}", code: 200 })),
+).annotate({
+ identifier: "DeleteVersionRequest",
+}) as any as S.Schema;
+
+export interface DeleteVersionResponse {}
+export const DeleteVersionResponse = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({}),
+).annotate({
+ identifier: "DeleteVersionResponse",
+}) as any as S.Schema;
+
+export interface DonationPlatformListRequest {}
+export const DonationPlatformListRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({}).pipe(
+ T.Http({ method: "GET", uri: "/tag/donation_platform", code: 200 }),
+ ),
+).annotate({
+ identifier: "DonationPlatformListRequest",
+}) as any as S.Schema;
+
+export interface DonationPlatformTag {
+ /** The short identifier of the donation platform */
+ short: string;
+ /** The full name of the donation platform */
+ name: string;
+}
+export const DonationPlatformTag = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ short: S.String,
+ name: S.String,
+ }),
+).annotate({
+ identifier: "DonationPlatformTag",
+}) as any as S.Schema;
+
+export type DonationPlatformListResponseBodyList = Array;
+export const DonationPlatformListResponseBodyList = /*@__PURE__*/ S.Array(
+ DonationPlatformTag,
+) as any as S.Schema;
+
+export type DonationPlatformListResponse = DonationPlatformListResponseBodyList;
+export const DonationPlatformListResponse = /*@__PURE__*/ S.suspend(() =>
+ DonationPlatformListResponseBodyList.pipe(T.RawResponseRoot()),
+).annotate({
+ identifier: "DonationPlatformListResponse",
+}) as any as S.Schema;
+
+export interface FollowProjectRequest {
+ /** The ID or slug of the project */
+ id_slug: string;
+}
+export const FollowProjectRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id_slug: S.String.pipe(T.Label()),
+ }).pipe(
+ T.Http({ method: "POST", uri: "/project/{id_slug}/follow", code: 200 }),
+ ),
+).annotate({
+ identifier: "FollowProjectRequest",
+}) as any as S.Schema;
+
+export interface FollowProjectResponse {}
+export const FollowProjectResponse = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({}),
+).annotate({
+ identifier: "FollowProjectResponse",
+}) as any as S.Schema;
+
+export type ForgeUpdatesRequestNeoforge = "only" | "include";
+export const ForgeUpdatesRequestNeoforge = /*@__PURE__*/ S.String;
+
+export interface ForgeUpdatesRequest {
+ /** The ID or slug of the project */
+ id_slug: string;
+ /** Whether to include NeoForge versions. Can be `only` (NeoForge-only versions), `include` (both Forge and NeoForge versions), or omitted (Forge-only versions). */
+ neoforge?: ForgeUpdatesRequestNeoforge | (string & {});
+}
+export const ForgeUpdatesRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id_slug: S.String.pipe(T.Label()),
+ neoforge: S.optional(ForgeUpdatesRequestNeoforge.pipe(T.Query())),
+ }).pipe(
+ T.Http({
+ method: "GET",
+ uri: "/updates/{id_slug}/forge_updates.json",
+ code: 200,
+ }),
+ ),
+).annotate({
+ identifier: "ForgeUpdatesRequest",
+}) as any as S.Schema;
+
+/** A list of the recommended and latest versions for each Minecraft release */
+export interface ForgeUpdateCheckerPromos {
+ /** The mod version that is recommended for `{version}`. Excludes versions with the `alpha` and `beta` version types. */
+ _version__recommended?: string;
+ /** The latest mod version for `{version}`. Shows versions with the `alpha` and `beta` version types. */
+ _version__latest?: string;
+}
+export const ForgeUpdateCheckerPromos = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ _version__recommended: S.optional(
+ S.String.pipe(T.Body("{version}-recommended")),
+ ),
+ _version__latest: S.optional(S.String.pipe(T.Body("{version}-latest"))),
+ }),
+).annotate({
+ identifier: "ForgeUpdateCheckerPromos",
+}) as any as S.Schema;
+
+/** Mod version information that can be consumed by Forge's update checker */
+export interface ForgeUpdates {
+ /** A link to the mod page */
+ homepage?: string;
+ promos?: ForgeUpdateCheckerPromos;
+}
+export const ForgeUpdates = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ homepage: S.optional(S.String),
+ promos: S.optional(ForgeUpdateCheckerPromos),
+ }),
+).annotate({ identifier: "ForgeUpdates" }) as any as S.Schema;
+
+export interface GetDependenciesRequest {
+ /** The ID or slug of the project */
+ id_slug: string;
+}
+export const GetDependenciesRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id_slug: S.String.pipe(T.Label()),
+ }).pipe(
+ T.Http({
+ method: "GET",
+ uri: "/project/{id_slug}/dependencies",
+ code: 200,
+ }),
+ ),
+).annotate({
+ identifier: "GetDependenciesRequest",
+}) as any as S.Schema;
+
+/** Projects that the project depends upon */
+export type ProjectDependencyListProjectsList = Array;
+export const ProjectDependencyListProjectsList = /*@__PURE__*/ S.Array(
+ Project,
+) as any as S.Schema;
+
+/** A list of specific versions of projects that this version depends on */
+export type VersionDependenciesList = Array;
+export const VersionDependenciesList = /*@__PURE__*/ S.Array(
+ VersionDependency,
+) as any as S.Schema;
+
+/** A list of versions of Minecraft that this version supports */
+export type VersionGameVersionsList = Array;
+export const VersionGameVersionsList = /*@__PURE__*/ S.Array(
+ S.String,
+) as any as S.Schema;
+
+/** The release channel for this version */
+export type VersionVersionType = "release" | "beta" | "alpha";
+export const VersionVersionType = /*@__PURE__*/ S.String;
+
+/** The mod loaders that this version supports. In case of resource packs, use "minecraft" */
+export type VersionLoadersList = Array;
+export const VersionLoadersList = /*@__PURE__*/ S.Array(
+ S.String,
+) as any as S.Schema;
+
+export type VersionStatus =
+ | "listed"
+ | "archived"
+ | "draft"
+ | "unlisted"
+ | "scheduled"
+ | "unknown";
+export const VersionStatus = /*@__PURE__*/ S.String;
+
+export type VersionRequestedStatus =
+ | "listed"
+ | "archived"
+ | "draft"
+ | "unlisted";
+export const VersionRequestedStatus = /*@__PURE__*/ S.String;
+
+/** A list of files available for download for this version */
+export type VersionFilesList = Array;
+export const VersionFilesList = /*@__PURE__*/ S.Array(
+ VersionFile,
+) as any as S.Schema;
+
+export interface Version {
+ /** The name of this version */
+ name: string;
+ /** The version number. Ideally will follow semantic versioning */
+ version_number: string;
+ /** The changelog for this version */
+ changelog?: string | null;
+ /** A list of specific versions of projects that this version depends on */
+ dependencies?: VersionDependenciesList;
+ /** A list of versions of Minecraft that this version supports */
+ game_versions: VersionGameVersionsList;
+ /** The release channel for this version */
+ version_type: VersionVersionType;
+ /** The mod loaders that this version supports. In case of resource packs, use "minecraft" */
+ loaders: VersionLoadersList;
+ /** Whether the version is featured or not */
+ featured: boolean;
+ status?: VersionStatus;
+ requested_status?: VersionRequestedStatus | null;
+ /** The ID of the version, encoded as a base62 string */
+ id: string;
+ /** The ID of the project this version is for */
+ project_id: string;
+ /** The ID of the author who published this version */
+ author_id: string;
+ date_published: string;
+ /** The number of times this version has been downloaded */
+ downloads: number;
+ /** A link to the changelog for this version. Always null, only kept for legacy compatibility. */
+ changelog_url?: string | null;
+ environment: EnvironmentEnum;
+ /** A list of files available for download for this version */
+ files: VersionFilesList;
+}
+export const Version = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ name: S.String,
+ version_number: S.String,
+ changelog: S.optional(S.NullOr(S.String)),
+ dependencies: S.optional(VersionDependenciesList),
+ game_versions: VersionGameVersionsList,
+ version_type: VersionVersionType,
+ loaders: VersionLoadersList,
+ featured: S.Boolean,
+ status: S.optional(VersionStatus),
+ requested_status: S.optional(S.NullOr(VersionRequestedStatus)),
+ id: S.String,
+ project_id: S.String,
+ author_id: S.String,
+ date_published: S.String,
+ downloads: S.Number,
+ changelog_url: S.optional(S.NullOr(S.String)),
+ environment: EnvironmentEnum,
+ files: VersionFilesList,
+ }),
+).annotate({ identifier: "Version" }) as any as S.Schema;
+
+/** Versions that the project depends upon */
+export type ProjectDependencyListVersionsList = Array;
+export const ProjectDependencyListVersionsList = /*@__PURE__*/ S.Array(
+ Version,
+) as any as S.Schema;
+
+export interface ProjectDependencyList {
+ /** Projects that the project depends upon */
+ projects?: ProjectDependencyListProjectsList;
+ /** Versions that the project depends upon */
+ versions?: ProjectDependencyListVersionsList;
+}
+export const ProjectDependencyList = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ projects: S.optional(ProjectDependencyListProjectsList),
+ versions: S.optional(ProjectDependencyListVersionsList),
+ }),
+).annotate({
+ identifier: "ProjectDependencyList",
+}) as any as S.Schema;
+
+export interface GetFollowedProjectsRequest {
+ /** The ID or username of the user */
+ id_username: string;
+}
+export const GetFollowedProjectsRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id_username: S.String.pipe(T.Label()),
+ }).pipe(
+ T.Http({ method: "GET", uri: "/user/{id_username}/follows", code: 200 }),
+ ),
+).annotate({
+ identifier: "GetFollowedProjectsRequest",
+}) as any as S.Schema;
+
+export type GetFollowedProjectsResponseBodyList = Array;
+export const GetFollowedProjectsResponseBodyList = /*@__PURE__*/ S.Array(
+ Project,
+) as any as S.Schema;
+
+export type GetFollowedProjectsResponse = GetFollowedProjectsResponseBodyList;
+export const GetFollowedProjectsResponse = /*@__PURE__*/ S.suspend(() =>
+ GetFollowedProjectsResponseBodyList.pipe(T.RawResponseRoot()),
+).annotate({
+ identifier: "GetFollowedProjectsResponse",
+}) as any as S.Schema;
+
+export type GetLatestVersionFromHashRequestAlgorithm = "sha1" | "sha512";
+export const GetLatestVersionFromHashRequestAlgorithm = /*@__PURE__*/ S.String;
+
+export type GetLatestVersionFromHashRequestLoadersList = Array;
+export const GetLatestVersionFromHashRequestLoadersList = /*@__PURE__*/ S.Array(
+ S.String,
+) as any as S.Schema;
+
+export type GetLatestVersionFromHashRequestGameVersionsList = Array;
+export const GetLatestVersionFromHashRequestGameVersionsList =
+ /*@__PURE__*/ S.Array(
+ S.String,
+ ) as any as S.Schema;
+
+export type GetLatestVersionFromHashRequestVersionTypes =
+ | "release"
+ | "alpha"
+ | "beta";
+export const GetLatestVersionFromHashRequestVersionTypes =
+ /*@__PURE__*/ S.String;
+
+export interface GetLatestVersionFromHashRequest {
+ /** The hash of the file, considering its byte content, and encoded in hexadecimal */
+ hash: string;
+ /** The algorithm of the hash */
+ algorithm: GetLatestVersionFromHashRequestAlgorithm | (string & {});
+ loaders: GetLatestVersionFromHashRequestLoadersList;
+ game_versions: GetLatestVersionFromHashRequestGameVersionsList;
+ version_types?: GetLatestVersionFromHashRequestVersionTypes | (string & {});
+}
+export const GetLatestVersionFromHashRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ hash: S.String.pipe(T.Label()),
+ algorithm: GetLatestVersionFromHashRequestAlgorithm.pipe(T.Query()),
+ loaders: GetLatestVersionFromHashRequestLoadersList,
+ game_versions: GetLatestVersionFromHashRequestGameVersionsList,
+ version_types: S.optional(GetLatestVersionFromHashRequestVersionTypes),
+ }).pipe(
+ T.Http({ method: "POST", uri: "/version_file/{hash}/update", code: 200 }),
+ ),
+).annotate({
+ identifier: "GetLatestVersionFromHashRequest",
+}) as any as S.Schema;
+
+/** A list of specific versions of projects that this version depends on */
+export type GetLatestVersionFromHashResponseDependenciesList =
+ Array;
+export const GetLatestVersionFromHashResponseDependenciesList =
+ /*@__PURE__*/ S.Array(
+ VersionDependency,
+ ) as any as S.Schema;
+
+/** A list of versions of Minecraft that this version supports */
+export type GetLatestVersionFromHashResponseGameVersionsList = Array;
+export const GetLatestVersionFromHashResponseGameVersionsList =
+ /*@__PURE__*/ S.Array(
+ S.String,
+ ) as any as S.Schema;
+
+/** The release channel for this version */
+export type GetLatestVersionFromHashResponseVersionType =
+ | "release"
+ | "beta"
+ | "alpha";
+export const GetLatestVersionFromHashResponseVersionType =
+ /*@__PURE__*/ S.String;
+
+/** The mod loaders that this version supports. In case of resource packs, use "minecraft" */
+export type GetLatestVersionFromHashResponseLoadersList = Array;
+export const GetLatestVersionFromHashResponseLoadersList =
+ /*@__PURE__*/ S.Array(
+ S.String,
+ ) as any as S.Schema;
+
+export type GetLatestVersionFromHashResponseStatus =
+ | "listed"
+ | "archived"
+ | "draft"
+ | "unlisted"
+ | "scheduled"
+ | "unknown";
+export const GetLatestVersionFromHashResponseStatus = /*@__PURE__*/ S.String;
+
+export type GetLatestVersionFromHashResponseRequestedStatus =
+ | "listed"
+ | "archived"
+ | "draft"
+ | "unlisted";
+export const GetLatestVersionFromHashResponseRequestedStatus =
+ /*@__PURE__*/ S.String;
+
+/** A list of files available for download for this version */
+export type GetLatestVersionFromHashResponseFilesList = Array;
+export const GetLatestVersionFromHashResponseFilesList = /*@__PURE__*/ S.Array(
+ VersionFile,
+) as any as S.Schema;
+
+export interface GetLatestVersionFromHashResponse {
+ /** The name of this version */
+ name: string;
+ /** The version number. Ideally will follow semantic versioning */
+ version_number: string;
+ /** The changelog for this version */
+ changelog?: string | null;
+ /** A list of specific versions of projects that this version depends on */
+ dependencies?: GetLatestVersionFromHashResponseDependenciesList;
+ /** A list of versions of Minecraft that this version supports */
+ game_versions: GetLatestVersionFromHashResponseGameVersionsList;
+ /** The release channel for this version */
+ version_type: GetLatestVersionFromHashResponseVersionType;
+ /** The mod loaders that this version supports. In case of resource packs, use "minecraft" */
+ loaders: GetLatestVersionFromHashResponseLoadersList;
+ /** Whether the version is featured or not */
+ featured: boolean;
+ status?: GetLatestVersionFromHashResponseStatus;
+ requested_status?: GetLatestVersionFromHashResponseRequestedStatus | null;
+ /** The ID of the version, encoded as a base62 string */
+ id: string;
+ /** The ID of the project this version is for */
+ project_id: string;
+ /** The ID of the author who published this version */
+ author_id: string;
+ date_published: string;
+ /** The number of times this version has been downloaded */
+ downloads: number;
+ /** A link to the changelog for this version. Always null, only kept for legacy compatibility. */
+ changelog_url?: string | null;
+ environment: EnvironmentEnum;
+ /** A list of files available for download for this version */
+ files: GetLatestVersionFromHashResponseFilesList;
+}
+export const GetLatestVersionFromHashResponse = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ name: S.String,
+ version_number: S.String,
+ changelog: S.optional(S.NullOr(S.String)),
+ dependencies: S.optional(GetLatestVersionFromHashResponseDependenciesList),
+ game_versions: GetLatestVersionFromHashResponseGameVersionsList,
+ version_type: GetLatestVersionFromHashResponseVersionType,
+ loaders: GetLatestVersionFromHashResponseLoadersList,
+ featured: S.Boolean,
+ status: S.optional(GetLatestVersionFromHashResponseStatus),
+ requested_status: S.optional(
+ S.NullOr(GetLatestVersionFromHashResponseRequestedStatus),
+ ),
+ id: S.String,
+ project_id: S.String,
+ author_id: S.String,
+ date_published: S.String,
+ downloads: S.Number,
+ changelog_url: S.optional(S.NullOr(S.String)),
+ environment: EnvironmentEnum,
+ files: GetLatestVersionFromHashResponseFilesList,
+ }),
+).annotate({
+ identifier: "GetLatestVersionFromHashResponse",
+}) as any as S.Schema;
+
+export type GetLatestVersionsFromHashesRequestHashesList = Array;
+export const GetLatestVersionsFromHashesRequestHashesList =
+ /*@__PURE__*/ S.Array(
+ S.String,
+ ) as any as S.Schema;
+
+export type GetLatestVersionsFromHashesRequestAlgorithm = "sha1" | "sha512";
+export const GetLatestVersionsFromHashesRequestAlgorithm =
+ /*@__PURE__*/ S.String;
+
+export type GetLatestVersionsFromHashesRequestLoadersList = Array;
+export const GetLatestVersionsFromHashesRequestLoadersList =
+ /*@__PURE__*/ S.Array(
+ S.String,
+ ) as any as S.Schema;
+
+export type GetLatestVersionsFromHashesRequestGameVersionsList = Array;
+export const GetLatestVersionsFromHashesRequestGameVersionsList =
+ /*@__PURE__*/ S.Array(
+ S.String,
+ ) as any as S.Schema;
+
+export type GetLatestVersionsFromHashesRequestVersionTypes =
+ | "release"
+ | "alpha"
+ | "beta";
+export const GetLatestVersionsFromHashesRequestVersionTypes =
+ /*@__PURE__*/ S.String;
+
+export interface GetLatestVersionsFromHashesRequest {
+ hashes: GetLatestVersionsFromHashesRequestHashesList;
+ algorithm: GetLatestVersionsFromHashesRequestAlgorithm | (string & {});
+ loaders: GetLatestVersionsFromHashesRequestLoadersList;
+ game_versions: GetLatestVersionsFromHashesRequestGameVersionsList;
+ version_types?:
+ | GetLatestVersionsFromHashesRequestVersionTypes
+ | (string & {});
+}
+export const GetLatestVersionsFromHashesRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ hashes: GetLatestVersionsFromHashesRequestHashesList,
+ algorithm: GetLatestVersionsFromHashesRequestAlgorithm,
+ loaders: GetLatestVersionsFromHashesRequestLoadersList,
+ game_versions: GetLatestVersionsFromHashesRequestGameVersionsList,
+ version_types: S.optional(GetLatestVersionsFromHashesRequestVersionTypes),
+ }).pipe(T.Http({ method: "POST", uri: "/version_files/update", code: 200 })),
+).annotate({
+ identifier: "GetLatestVersionsFromHashesRequest",
+}) as any as S.Schema;
+
+/** A map from hashes to versions */
+export type HashVersionMap = { [key: string]: Version | undefined };
+export const HashVersionMap = /*@__PURE__*/ S.Record(
+ S.String,
+ Version,
+) as any as S.Schema;
+
+export type GetLatestVersionsFromHashesResponse = HashVersionMap;
+export const GetLatestVersionsFromHashesResponse = /*@__PURE__*/ S.suspend(() =>
+ HashVersionMap.pipe(T.RawResponseRoot()),
+).annotate({
+ identifier: "GetLatestVersionsFromHashesResponse",
+}) as any as S.Schema;
+
+export interface GetNotificationRequest {
+ /** The ID of the notification */
+ id: string;
+}
+export const GetNotificationRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id: S.String.pipe(T.Label()),
+ }).pipe(T.Http({ method: "GET", uri: "/notification/{id}", code: 200 })),
+).annotate({
+ identifier: "GetNotificationRequest",
+}) as any as S.Schema;
+
+/** The type of notification */
+export type NotificationType =
+ | "project_update"
+ | "team_invite"
+ | "status_change"
+ | "moderator_message";
+export const NotificationType = /*@__PURE__*/ S.String;
+
+/** The HTTP code and path to request in order to perform this action. */
+export type NotificationActionActionRouteList = Array;
+export const NotificationActionActionRouteList = /*@__PURE__*/ S.Array(
+ S.String,
+) as any as S.Schema;
+
+/** An action that can be performed on a notification */
+export interface NotificationAction {
+ /** The friendly name for this action */
+ title?: string;
+ /** The HTTP code and path to request in order to perform this action. */
+ action_route?: NotificationActionActionRouteList;
+}
+export const NotificationAction = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ title: S.optional(S.String),
+ action_route: S.optional(NotificationActionActionRouteList),
+ }),
+).annotate({
+ identifier: "NotificationAction",
+}) as any as S.Schema;
+
+/** A list of actions that can be performed */
+export type NotificationActionsList = Array;
+export const NotificationActionsList = /*@__PURE__*/ S.Array(
+ NotificationAction,
+) as any as S.Schema;
+
+export interface Notification {
+ /** The id of the notification */
+ id: string;
+ /** The id of the user who received the notification */
+ user_id: string;
+ /** The type of notification */
+ type?: NotificationType | null;
+ /** The title of the notification */
+ title: string;
+ /** The body text of the notification */
+ text: string;
+ /** A link to the related project or version */
+ link: string;
+ /** Whether the notification has been read or not */
+ read: boolean;
+ /** The time at which the notification was created */
+ created: string;
+ /** A list of actions that can be performed */
+ actions: NotificationActionsList;
+}
+export const Notification = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id: S.String,
+ user_id: S.String,
+ type: S.optional(S.NullOr(NotificationType)),
+ title: S.String,
+ text: S.String,
+ link: S.String,
+ read: S.Boolean,
+ created: S.String,
+ actions: NotificationActionsList,
+ }),
+).annotate({ identifier: "Notification" }) as any as S.Schema;
+
+export interface GetNotificationsRequest {
+ /** The IDs of the notifications */
+ ids: string;
+}
+export const GetNotificationsRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ ids: S.String.pipe(T.Query()),
+ }).pipe(T.Http({ method: "GET", uri: "/notifications", code: 200 })),
+).annotate({
+ identifier: "GetNotificationsRequest",
+}) as any as S.Schema;
+
+export type GetNotificationsResponseBodyList = Array;
+export const GetNotificationsResponseBodyList = /*@__PURE__*/ S.Array(
+ Notification,
+) as any as S.Schema;
+
+export type GetNotificationsResponse = GetNotificationsResponseBodyList;
+export const GetNotificationsResponse = /*@__PURE__*/ S.suspend(() =>
+ GetNotificationsResponseBodyList.pipe(T.RawResponseRoot()),
+).annotate({
+ identifier: "GetNotificationsResponse",
+}) as any as S.Schema;
+
+export interface GetOpenReportsRequest {
+ count?: number;
+}
+export const GetOpenReportsRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ count: S.optional(S.Number.pipe(T.Query())),
+ }).pipe(T.Http({ method: "GET", uri: "/report", code: 200 })),
+).annotate({
+ identifier: "GetOpenReportsRequest",
+}) as any as S.Schema;
+
+/** The type of the item being reported */
+export type ReportItemType = "project" | "user" | "version";
+export const ReportItemType = /*@__PURE__*/ S.String;
+
+export interface Report {
+ /** The type of the report being sent */
+ report_type: string;
+ /** The ID of the item (project, version, or user) being reported */
+ item_id: string;
+ /** The type of the item being reported */
+ item_type: ReportItemType;
+ /** The extended explanation of the report */
+ body: string;
+ /** The ID of the report */
+ id?: string;
+ /** The ID of the user who reported the item */
+ reporter: string;
+ /** The time at which the report was created */
+ created: string;
+ /** Whether the report is resolved */
+ closed: boolean;
+ /** The ID of the moderation thread associated with this report */
+ thread_id: string;
+}
+export const Report = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ report_type: S.String,
+ item_id: S.String,
+ item_type: ReportItemType,
+ body: S.String,
+ id: S.optional(S.String),
+ reporter: S.String,
+ created: S.String,
+ closed: S.Boolean,
+ thread_id: S.String,
+ }),
+).annotate({ identifier: "Report" }) as any as S.Schema;
+
+export type GetOpenReportsResponseBodyList = Array;
+export const GetOpenReportsResponseBodyList = /*@__PURE__*/ S.Array(
+ Report,
+) as any as S.Schema;
+
+export type GetOpenReportsResponse = GetOpenReportsResponseBodyList;
+export const GetOpenReportsResponse = /*@__PURE__*/ S.suspend(() =>
+ GetOpenReportsResponseBodyList.pipe(T.RawResponseRoot()),
+).annotate({
+ identifier: "GetOpenReportsResponse",
+}) as any as S.Schema;
+
+export interface GetPayoutHistoryRequest {
+ /** The ID or username of the user */
+ id_username: string;
+}
+export const GetPayoutHistoryRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id_username: S.String.pipe(T.Label()),
+ }).pipe(
+ T.Http({ method: "GET", uri: "/user/{id_username}/payouts", code: 200 }),
+ ),
+).annotate({
+ identifier: "GetPayoutHistoryRequest",
+}) as any as S.Schema;
+
+export interface UserPayoutHistoryEntry {
+ /** The date of this transaction */
+ created?: string;
+ /** The amount of this transaction in USD */
+ amount?: number;
+ /** The status of this transaction */
+ status?: string;
+}
+export const UserPayoutHistoryEntry = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ created: S.optional(S.String),
+ amount: S.optional(S.Number),
+ status: S.optional(S.String),
+ }),
+).annotate({
+ identifier: "UserPayoutHistoryEntry",
+}) as any as S.Schema;
+
+/** A history of all of the user's past transactions */
+export type UserPayoutHistoryPayoutsList = Array;
+export const UserPayoutHistoryPayoutsList = /*@__PURE__*/ S.Array(
+ UserPayoutHistoryEntry,
+) as any as S.Schema;
+
+export interface UserPayoutHistory {
+ /** The all-time balance accrued by this user in USD */
+ all_time?: string;
+ /** The amount in USD made by the user in the previous 30 days */
+ last_month?: string;
+ /** A history of all of the user's past transactions */
+ payouts?: UserPayoutHistoryPayoutsList;
+}
+export const UserPayoutHistory = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ all_time: S.optional(S.String),
+ last_month: S.optional(S.String),
+ payouts: S.optional(UserPayoutHistoryPayoutsList),
+ }),
+).annotate({
+ identifier: "UserPayoutHistory",
+}) as any as S.Schema;
+
+export interface GetProjectRequest {
+ /** The ID or slug of the project */
+ id_slug: string;
+}
+export const GetProjectRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id_slug: S.String.pipe(T.Label()),
+ }).pipe(T.Http({ method: "GET", uri: "/project/{id_slug}", code: 200 })),
+).annotate({
+ identifier: "GetProjectRequest",
+}) as any as S.Schema;
+
+export interface GetProjectsRequest {
+ /** The IDs and/or slugs of the projects */
+ ids: string;
+}
+export const GetProjectsRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ ids: S.String.pipe(T.Query()),
+ }).pipe(T.Http({ method: "GET", uri: "/projects", code: 200 })),
+).annotate({
+ identifier: "GetProjectsRequest",
+}) as any as S.Schema;
+
+export type GetProjectsResponseBodyList = Array;
+export const GetProjectsResponseBodyList = /*@__PURE__*/ S.Array(
+ Project,
+) as any as S.Schema;
+
+export type GetProjectsResponse = GetProjectsResponseBodyList;
+export const GetProjectsResponse = /*@__PURE__*/ S.suspend(() =>
+ GetProjectsResponseBodyList.pipe(T.RawResponseRoot()),
+).annotate({
+ identifier: "GetProjectsResponse",
+}) as any as S.Schema;
+
+export interface GetProjectTeamMembersRequest {
+ /** The ID or slug of the project */
+ id_slug: string;
+}
+export const GetProjectTeamMembersRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id_slug: S.String.pipe(T.Label()),
+ }).pipe(
+ T.Http({ method: "GET", uri: "/project/{id_slug}/members", code: 200 }),
+ ),
+).annotate({
+ identifier: "GetProjectTeamMembersRequest",
+}) as any as S.Schema;
+
+/** The wallet that the user has selected */
+export type UserPayoutDataPayoutWallet = "paypal" | "venmo";
+export const UserPayoutDataPayoutWallet = /*@__PURE__*/ S.String;
+
+/** The type of the user's wallet */
+export type UserPayoutDataPayoutWalletType = "email" | "phone" | "user_handle";
+export const UserPayoutDataPayoutWalletType = /*@__PURE__*/ S.String;
+
+/** Various data relating to the user's payouts status (you can only see your own) */
+export interface UserPayoutData {
+ /** The payout balance available for the user to withdraw (note, you cannot modify this in a PATCH request) */
+ balance?: number;
+ /** The wallet that the user has selected */
+ payout_wallet?: UserPayoutDataPayoutWallet | (string & {});
+ /** The type of the user's wallet */
+ payout_wallet_type?: UserPayoutDataPayoutWalletType | (string & {});
+ /** The user's payout address */
+ payout_address?: string;
+}
+export const UserPayoutData = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ balance: S.optional(S.Number),
+ payout_wallet: S.optional(UserPayoutDataPayoutWallet),
+ payout_wallet_type: S.optional(UserPayoutDataPayoutWalletType),
+ payout_address: S.optional(S.String),
+ }),
+).annotate({ identifier: "UserPayoutData" }) as any as S.Schema;
+
+/** The user's role */
+export type UserRole = "admin" | "moderator" | "developer";
+export const UserRole = /*@__PURE__*/ S.String;
+
+/** A list of authentication providers you have signed up for (only displayed if requesting your own account) */
+export type UserAuthProvidersList = Array;
+export const UserAuthProvidersList = /*@__PURE__*/ S.Array(
+ S.String,
+) as any as S.Schema;
+
+export interface User {
+ /** The user's username */
+ username: string;
+ /** The user's display name */
+ name?: string | null;
+ /** The user's email (only displayed if requesting your own account). Requires `USER_READ_EMAIL` PAT scope. */
+ email?: string | null;
+ /** A description of the user */
+ bio?: string;
+ payout_data?: UserPayoutData | null;
+ /** The user's ID */
+ id: string;
+ /** The user's avatar url */
+ avatar_url: string;
+ /** The time at which the user was created */
+ created: string;
+ /** The user's role */
+ role: UserRole;
+ /** Any badges applicable to this user. These are currently unused and undisplayed, and as such are subject to change In order from first to seventh bit, the current bits are: - (unused) - EARLY_MODPACK_ADOPTER - EARLY_RESPACK_ADOPTER - EARLY_PLUGIN_ADOPTER - ALPHA_TESTER - CONTRIBUTOR - TRANSLATOR */
+ badges?: number;
+ /** A list of authentication providers you have signed up for (only displayed if requesting your own account) */
+ auth_providers?: UserAuthProvidersList | null;
+ /** Whether your email is verified (only displayed if requesting your own account) */
+ email_verified?: boolean | null;
+ /** Whether you have a password associated with your account (only displayed if requesting your own account) */
+ has_password?: boolean | null;
+ /** Whether you have TOTP two-factor authentication connected to your account (only displayed if requesting your own account) */
+ has_totp?: boolean | null;
+ /** Deprecated - this is no longer public for security reasons and is always null */
+ github_id?: number | null;
+}
+export const User = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ username: S.String,
+ name: S.optional(S.NullOr(S.String)),
+ email: S.optional(S.NullOr(S.String)),
+ bio: S.optional(S.String),
+ payout_data: S.optional(S.NullOr(UserPayoutData)),
+ id: S.String,
+ avatar_url: S.String,
+ created: S.String,
+ role: UserRole,
+ badges: S.optional(S.Number),
+ auth_providers: S.optional(S.NullOr(UserAuthProvidersList)),
+ email_verified: S.optional(S.NullOr(S.Boolean)),
+ has_password: S.optional(S.NullOr(S.Boolean)),
+ has_totp: S.optional(S.NullOr(S.Boolean)),
+ github_id: S.optional(S.NullOr(S.Number)),
+ }),
+).annotate({ identifier: "User" }) as any as S.Schema;
+
+export interface TeamMember {
+ /** The ID of the team this team member is a member of */
+ team_id: string;
+ user: User;
+ /** The user's role on the team */
+ role: string;
+ /** The user's permissions in bitfield format (requires authorization to view) In order from first to tenth bit, the bits are: - UPLOAD_VERSION - DELETE_VERSION - EDIT_DETAILS - EDIT_BODY - MANAGE_INVITES - REMOVE_MEMBER - EDIT_MEMBER - DELETE_PROJECT - VIEW_ANALYTICS - VIEW_PAYOUTS */
+ permissions?: number;
+ /** Whether or not the user has accepted to be on the team (requires authorization to view) */
+ accepted: boolean;
+ /** The split of payouts going to this user. The proportion of payouts they get is their split divided by the sum of the splits of all members. */
+ payouts_split?: number;
+ /** The order of the team member. */
+ ordering?: number;
+}
+export const TeamMember = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ team_id: S.String,
+ user: User,
+ role: S.String,
+ permissions: S.optional(S.Number),
+ accepted: S.Boolean,
+ payouts_split: S.optional(S.Number),
+ ordering: S.optional(S.Number),
+ }),
+).annotate({ identifier: "TeamMember" }) as any as S.Schema;
+
+/** An array of team members */
+export type GetProjectTeamMembersResponseBodyList = Array;
+export const GetProjectTeamMembersResponseBodyList = /*@__PURE__*/ S.Array(
+ TeamMember,
+) as any as S.Schema;
+
+export type GetProjectTeamMembersResponse =
+ GetProjectTeamMembersResponseBodyList;
+export const GetProjectTeamMembersResponse = /*@__PURE__*/ S.suspend(() =>
+ GetProjectTeamMembersResponseBodyList.pipe(T.RawResponseRoot()),
+).annotate({
+ identifier: "GetProjectTeamMembersResponse",
+}) as any as S.Schema;
+
+export interface GetProjectVersionsRequest {
+ /** The ID or slug of the project */
+ id_slug: string;
+ /** The types of loaders to filter for */
+ loaders?: string;
+ /** The game versions to filter for */
+ game_versions?: string;
+ /** Allows to filter for featured or non-featured versions only */
+ featured?: boolean;
+ /** Allows you to toggle the inclusion of the changelog field in the response. It is highly recommended to use include_changelog=false in most cases unless you specifically need the changelog for all versions. */
+ include_changelog?: boolean;
+}
+export const GetProjectVersionsRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id_slug: S.String.pipe(T.Label()),
+ loaders: S.optional(S.String.pipe(T.Query())),
+ game_versions: S.optional(S.String.pipe(T.Query())),
+ featured: S.optional(S.Boolean.pipe(T.Query())),
+ include_changelog: S.optional(S.Boolean.pipe(T.Query())),
+ }).pipe(
+ T.Http({ method: "GET", uri: "/project/{id_slug}/version", code: 200 }),
+ ),
+).annotate({
+ identifier: "GetProjectVersionsRequest",
+}) as any as S.Schema;
+
+export type GetProjectVersionsResponseBodyList = Array;
+export const GetProjectVersionsResponseBodyList = /*@__PURE__*/ S.Array(
+ Version,
+) as any as S.Schema;
+
+export type GetProjectVersionsResponse = GetProjectVersionsResponseBodyList;
+export const GetProjectVersionsResponse = /*@__PURE__*/ S.suspend(() =>
+ GetProjectVersionsResponseBodyList.pipe(T.RawResponseRoot()),
+).annotate({
+ identifier: "GetProjectVersionsResponse",
+}) as any as S.Schema;
+
+export interface GetReportRequest {
+ /** The ID of the report */
+ id: string;
+}
+export const GetReportRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id: S.String.pipe(T.Label()),
+ }).pipe(T.Http({ method: "GET", uri: "/report/{id}", code: 200 })),
+).annotate({
+ identifier: "GetReportRequest",
+}) as any as S.Schema;
+
+/** The type of the item being reported */
+export type GetReportResponseItemType = "project" | "user" | "version";
+export const GetReportResponseItemType = /*@__PURE__*/ S.String;
+
+export interface GetReportResponse {
+ /** The type of the report being sent */
+ report_type: string;
+ /** The ID of the item (project, version, or user) being reported */
+ item_id: string;
+ /** The type of the item being reported */
+ item_type: GetReportResponseItemType;
+ /** The extended explanation of the report */
+ body: string;
+ /** The ID of the report */
+ id?: string;
+ /** The ID of the user who reported the item */
+ reporter: string;
+ /** The time at which the report was created */
+ created: string;
+ /** Whether the report is resolved */
+ closed: boolean;
+ /** The ID of the moderation thread associated with this report */
+ thread_id: string;
+}
+export const GetReportResponse = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ report_type: S.String,
+ item_id: S.String,
+ item_type: GetReportResponseItemType,
+ body: S.String,
+ id: S.optional(S.String),
+ reporter: S.String,
+ created: S.String,
+ closed: S.Boolean,
+ thread_id: S.String,
+ }),
+).annotate({
+ identifier: "GetReportResponse",
+}) as any as S.Schema;
+
+export interface GetReportsRequest {
+ /** The IDs of the reports */
+ ids: string;
+}
+export const GetReportsRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ ids: S.String.pipe(T.Query()),
+ }).pipe(T.Http({ method: "GET", uri: "/reports", code: 200 })),
+).annotate({
+ identifier: "GetReportsRequest",
+}) as any as S.Schema;
+
+export type GetReportsResponseBodyList = Array;
+export const GetReportsResponseBodyList = /*@__PURE__*/ S.Array(
+ Report,
+) as any as S.Schema;
+
+export type GetReportsResponse = GetReportsResponseBodyList;
+export const GetReportsResponse = /*@__PURE__*/ S.suspend(() =>
+ GetReportsResponseBodyList.pipe(T.RawResponseRoot()),
+).annotate({
+ identifier: "GetReportsResponse",
+}) as any as S.Schema;
+
+export interface GetTeamMembersRequest {
+ /** The ID of the team */
+ id: string;
+}
+export const GetTeamMembersRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id: S.String.pipe(T.Label()),
+ }).pipe(T.Http({ method: "GET", uri: "/team/{id}/members", code: 200 })),
+).annotate({
+ identifier: "GetTeamMembersRequest",
+}) as any as S.Schema;
+
+/** An array of team members */
+export type GetTeamMembersResponseBodyList = Array;
+export const GetTeamMembersResponseBodyList = /*@__PURE__*/ S.Array(
+ TeamMember,
+) as any as S.Schema;
+
+export type GetTeamMembersResponse = GetTeamMembersResponseBodyList;
+export const GetTeamMembersResponse = /*@__PURE__*/ S.suspend(() =>
+ GetTeamMembersResponseBodyList.pipe(T.RawResponseRoot()),
+).annotate({
+ identifier: "GetTeamMembersResponse",
+}) as any as S.Schema;
+
+export interface GetTeamsRequest {
+ /** The IDs of the teams */
+ ids: string;
+}
+export const GetTeamsRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ ids: S.String.pipe(T.Query()),
+ }).pipe(T.Http({ method: "GET", uri: "/teams", code: 200 })),
+).annotate({
+ identifier: "GetTeamsRequest",
+}) as any as S.Schema;
+
+export type GetTeamsResponseBodyItemList = Array;
+export const GetTeamsResponseBodyItemList = /*@__PURE__*/ S.Array(
+ TeamMember,
+) as any as S.Schema;
+
+export type GetTeamsResponseBodyList = Array;
+export const GetTeamsResponseBodyList = /*@__PURE__*/ S.Array(
+ GetTeamsResponseBodyItemList,
+) as any as S.Schema;
+
+export type GetTeamsResponse = GetTeamsResponseBodyList;
+export const GetTeamsResponse = /*@__PURE__*/ S.suspend(() =>
+ GetTeamsResponseBodyList.pipe(T.RawResponseRoot()),
+).annotate({
+ identifier: "GetTeamsResponse",
+}) as any as S.Schema;
+
+export interface GetThreadRequest {
+ /** The ID of the thread */
+ id: string;
+}
+export const GetThreadRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id: S.String.pipe(T.Label()),
+ }).pipe(T.Http({ method: "GET", uri: "/thread/{id}", code: 200 })),
+).annotate({
+ identifier: "GetThreadRequest",
+}) as any as S.Schema;
+
+export type ThreadType = "project" | "report" | "direct_message";
+export const ThreadType = /*@__PURE__*/ S.String;
+
+/** The type of message */
+export type ThreadMessageBodyType =
+ | "status_change"
+ | "text"
+ | "thread_closure"
+ | "deleted";
+export const ThreadMessageBodyType = /*@__PURE__*/ S.String;
+
+/** The old status of the project. **Only present for `status_change` message type** */
+export type ThreadMessageBodyOldStatus =
+ | "approved"
+ | "archived"
+ | "rejected"
+ | "draft"
+ | "unlisted"
+ | "processing"
+ | "withheld"
+ | "scheduled"
+ | "private"
+ | "unknown";
+export const ThreadMessageBodyOldStatus = /*@__PURE__*/ S.String;
+
+/** The new status of the project. **Only present for `status_change` message type** */
+export type ThreadMessageBodyNewStatus =
+ | "approved"
+ | "archived"
+ | "rejected"
+ | "draft"
+ | "unlisted"
+ | "processing"
+ | "withheld"
+ | "scheduled"
+ | "private"
+ | "unknown";
+export const ThreadMessageBodyNewStatus = /*@__PURE__*/ S.String;
+
+/** The contents of the message. **Fields will vary depending on message type.** */
+export interface ThreadMessageBody {
+ /** The type of message */
+ type: ThreadMessageBodyType;
+ /** The actual message text. **Only present for `text` message type** */
+ body?: string;
+ /** Whether the message is only visible to moderators. **Only present for `text` message type** */
+ private?: boolean;
+ /** The ID of the message being replied to by this message. **Only present for `text` message type** */
+ replying_to?: string | null;
+ /** The old status of the project. **Only present for `status_change` message type** */
+ old_status?: ThreadMessageBodyOldStatus;
+ /** The new status of the project. **Only present for `status_change` message type** */
+ new_status?: ThreadMessageBodyNewStatus;
+}
+export const ThreadMessageBody = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ type: ThreadMessageBodyType,
+ body: S.optional(S.String),
+ private: S.optional(S.Boolean),
+ replying_to: S.optional(S.NullOr(S.String)),
+ old_status: S.optional(ThreadMessageBodyOldStatus),
+ new_status: S.optional(ThreadMessageBodyNewStatus),
+ }),
+).annotate({
+ identifier: "ThreadMessageBody",
+}) as any as S.Schema;
+
+export interface ThreadMessage {
+ /** The ID of the message itself */
+ id: string;
+ /** The ID of the author */
+ author_id?: string | null;
+ body: ThreadMessageBody;
+ /** The time at which the message was created */
+ created: string;
+}
+export const ThreadMessage = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id: S.String,
+ author_id: S.optional(S.NullOr(S.String)),
+ body: ThreadMessageBody,
+ created: S.String,
+ }),
+).annotate({ identifier: "ThreadMessage" }) as any as S.Schema;
+
+export type ThreadMessagesList = Array;
+export const ThreadMessagesList = /*@__PURE__*/ S.Array(
+ ThreadMessage,
+) as any as S.Schema;
+
+export type ThreadMembersList = Array;
+export const ThreadMembersList = /*@__PURE__*/ S.Array(
+ User,
+) as any as S.Schema;
+
+export interface Thread {
+ /** The ID of the thread */
+ id: string;
+ type: ThreadType;
+ /** The ID of the associated project if a project thread */
+ project_id?: string | null;
+ /** The ID of the associated report if a report thread */
+ report_id?: string | null;
+ messages: ThreadMessagesList;
+ members: ThreadMembersList;
+}
+export const Thread = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id: S.String,
+ type: ThreadType,
+ project_id: S.optional(S.NullOr(S.String)),
+ report_id: S.optional(S.NullOr(S.String)),
+ messages: ThreadMessagesList,
+ members: ThreadMembersList,
+ }),
+).annotate({ identifier: "Thread" }) as any as S.Schema;
+
+export interface GetThreadsRequest {
+ /** The IDs of the threads */
+ ids: string;
+}
+export const GetThreadsRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ ids: S.String.pipe(T.Query()),
+ }).pipe(T.Http({ method: "GET", uri: "/threads", code: 200 })),
+).annotate({
+ identifier: "GetThreadsRequest",
+}) as any as S.Schema;
+
+export type GetThreadsResponseBodyList = Array;
+export const GetThreadsResponseBodyList = /*@__PURE__*/ S.Array(
+ Thread,
+) as any as S.Schema;
+
+export type GetThreadsResponse = GetThreadsResponseBodyList;
+export const GetThreadsResponse = /*@__PURE__*/ S.suspend(() =>
+ GetThreadsResponseBodyList.pipe(T.RawResponseRoot()),
+).annotate({
+ identifier: "GetThreadsResponse",
+}) as any as S.Schema;
+
+export interface GetUserRequest {
+ /** The ID or username of the user */
+ id_username: string;
+}
+export const GetUserRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id_username: S.String.pipe(T.Label()),
+ }).pipe(T.Http({ method: "GET", uri: "/user/{id_username}", code: 200 })),
+).annotate({ identifier: "GetUserRequest" }) as any as S.Schema;
+
+/** The user's role */
+export type GetUserResponseRole = "admin" | "moderator" | "developer";
+export const GetUserResponseRole = /*@__PURE__*/ S.String;
+
+/** A list of authentication providers you have signed up for (only displayed if requesting your own account) */
+export type GetUserResponseAuthProvidersList = Array;
+export const GetUserResponseAuthProvidersList = /*@__PURE__*/ S.Array(
+ S.String,
+) as any as S.Schema;
+
+export interface GetUserResponse {
+ /** The user's username */
+ username: string;
+ /** The user's display name */
+ name?: string | null;
+ /** The user's email (only displayed if requesting your own account). Requires `USER_READ_EMAIL` PAT scope. */
+ email?: string | null;
+ /** A description of the user */
+ bio?: string;
+ payout_data?: UserPayoutData | null;
+ /** The user's ID */
+ id: string;
+ /** The user's avatar url */
+ avatar_url: string;
+ /** The time at which the user was created */
+ created: string;
+ /** The user's role */
+ role: GetUserResponseRole;
+ /** Any badges applicable to this user. These are currently unused and undisplayed, and as such are subject to change In order from first to seventh bit, the current bits are: - (unused) - EARLY_MODPACK_ADOPTER - EARLY_RESPACK_ADOPTER - EARLY_PLUGIN_ADOPTER - ALPHA_TESTER - CONTRIBUTOR - TRANSLATOR */
+ badges?: number;
+ /** A list of authentication providers you have signed up for (only displayed if requesting your own account) */
+ auth_providers?: GetUserResponseAuthProvidersList | null;
+ /** Whether your email is verified (only displayed if requesting your own account) */
+ email_verified?: boolean | null;
+ /** Whether you have a password associated with your account (only displayed if requesting your own account) */
+ has_password?: boolean | null;
+ /** Whether you have TOTP two-factor authentication connected to your account (only displayed if requesting your own account) */
+ has_totp?: boolean | null;
+ /** Deprecated - this is no longer public for security reasons and is always null */
+ github_id?: number | null;
+}
+export const GetUserResponse = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ username: S.String,
+ name: S.optional(S.NullOr(S.String)),
+ email: S.optional(S.NullOr(S.String)),
+ bio: S.optional(S.String),
+ payout_data: S.optional(S.NullOr(UserPayoutData)),
+ id: S.String,
+ avatar_url: S.String,
+ created: S.String,
+ role: GetUserResponseRole,
+ badges: S.optional(S.Number),
+ auth_providers: S.optional(S.NullOr(GetUserResponseAuthProvidersList)),
+ email_verified: S.optional(S.NullOr(S.Boolean)),
+ has_password: S.optional(S.NullOr(S.Boolean)),
+ has_totp: S.optional(S.NullOr(S.Boolean)),
+ github_id: S.optional(S.NullOr(S.Number)),
+ }),
+).annotate({
+ identifier: "GetUserResponse",
+}) as any as S.Schema;
+
+export interface GetUserFromAuthRequest {}
+export const GetUserFromAuthRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({}).pipe(T.Http({ method: "GET", uri: "/user", code: 200 })),
+).annotate({
+ identifier: "GetUserFromAuthRequest",
+}) as any as S.Schema;
+
+/** The user's role */
+export type GetUserFromAuthResponseRole = "admin" | "moderator" | "developer";
+export const GetUserFromAuthResponseRole = /*@__PURE__*/ S.String;
+
+/** A list of authentication providers you have signed up for (only displayed if requesting your own account) */
+export type GetUserFromAuthResponseAuthProvidersList = Array;
+export const GetUserFromAuthResponseAuthProvidersList = /*@__PURE__*/ S.Array(
+ S.String,
+) as any as S.Schema;
+
+export interface GetUserFromAuthResponse {
+ /** The user's username */
+ username: string;
+ /** The user's display name */
+ name?: string | null;
+ /** The user's email (only displayed if requesting your own account). Requires `USER_READ_EMAIL` PAT scope. */
+ email?: string | null;
+ /** A description of the user */
+ bio?: string;
+ payout_data?: UserPayoutData | null;
+ /** The user's ID */
+ id: string;
+ /** The user's avatar url */
+ avatar_url: string;
+ /** The time at which the user was created */
+ created: string;
+ /** The user's role */
+ role: GetUserFromAuthResponseRole;
+ /** Any badges applicable to this user. These are currently unused and undisplayed, and as such are subject to change In order from first to seventh bit, the current bits are: - (unused) - EARLY_MODPACK_ADOPTER - EARLY_RESPACK_ADOPTER - EARLY_PLUGIN_ADOPTER - ALPHA_TESTER - CONTRIBUTOR - TRANSLATOR */
+ badges?: number;
+ /** A list of authentication providers you have signed up for (only displayed if requesting your own account) */
+ auth_providers?: GetUserFromAuthResponseAuthProvidersList | null;
+ /** Whether your email is verified (only displayed if requesting your own account) */
+ email_verified?: boolean | null;
+ /** Whether you have a password associated with your account (only displayed if requesting your own account) */
+ has_password?: boolean | null;
+ /** Whether you have TOTP two-factor authentication connected to your account (only displayed if requesting your own account) */
+ has_totp?: boolean | null;
+ /** Deprecated - this is no longer public for security reasons and is always null */
+ github_id?: number | null;
+}
+export const GetUserFromAuthResponse = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ username: S.String,
+ name: S.optional(S.NullOr(S.String)),
+ email: S.optional(S.NullOr(S.String)),
+ bio: S.optional(S.String),
+ payout_data: S.optional(S.NullOr(UserPayoutData)),
+ id: S.String,
+ avatar_url: S.String,
+ created: S.String,
+ role: GetUserFromAuthResponseRole,
+ badges: S.optional(S.Number),
+ auth_providers: S.optional(
+ S.NullOr(GetUserFromAuthResponseAuthProvidersList),
+ ),
+ email_verified: S.optional(S.NullOr(S.Boolean)),
+ has_password: S.optional(S.NullOr(S.Boolean)),
+ has_totp: S.optional(S.NullOr(S.Boolean)),
+ github_id: S.optional(S.NullOr(S.Number)),
+ }),
+).annotate({
+ identifier: "GetUserFromAuthResponse",
+}) as any as S.Schema;
+
+export interface GetUserNotificationsRequest {
+ /** The ID or username of the user */
+ id_username: string;
+}
+export const GetUserNotificationsRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id_username: S.String.pipe(T.Label()),
+ }).pipe(
+ T.Http({
+ method: "GET",
+ uri: "/user/{id_username}/notifications",
+ code: 200,
+ }),
+ ),
+).annotate({
+ identifier: "GetUserNotificationsRequest",
+}) as any as S.Schema;
+
+export type GetUserNotificationsResponseBodyList = Array;
+export const GetUserNotificationsResponseBodyList = /*@__PURE__*/ S.Array(
+ Notification,
+) as any as S.Schema;
+
+export type GetUserNotificationsResponse = GetUserNotificationsResponseBodyList;
+export const GetUserNotificationsResponse = /*@__PURE__*/ S.suspend(() =>
+ GetUserNotificationsResponseBodyList.pipe(T.RawResponseRoot()),
+).annotate({
+ identifier: "GetUserNotificationsResponse",
+}) as any as S.Schema;
+
+export interface GetUserProjectsRequest {
+ /** The ID or username of the user */
+ id_username: string;
+}
+export const GetUserProjectsRequest = /*@__PURE__*/ S.suspend(() =>
+ S.Struct({
+ id_username: S.String.pipe(T.Label()),
+ }).pipe(
+ T.Http({ method: "GET", uri: "/user/{id_username}/projects", code: 200 }),
+ ),
+).annotate({
+ identifier: "GetUserProjectsRequest",
+}) as any as S.Schema;
+
+export type GetUserProjectsResponseBodyList = Array;
+export const GetUserProjectsResponseBodyList = /*@__PURE__*/ S.Array(
+ Project,
+) as any as S.Schema