array ProjectsGetRandomListResponse
{
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/Project"
  }
}
array ProjectsListProjectsResponse
{
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/Project"
  }
}
object Report
{
  "type": "object",
  "allOf": [
    {
      "$ref": "#/components/schemas/CreatableReport"
    },
    {
      "type": "object",
      "required": [
        "reporter",
        "created",
        "closed",
        "thread_id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "example": "VVWWXXYY",
          "description": "The ID of the report"
        },
        "closed": {
          "type": "boolean",
          "description": "Whether the report is resolved"
        },
        "created": {
          "type": "string",
          "format": "ISO-8601",
          "description": "The time at which the report was created"
        },
        "reporter": {
          "type": "string",
          "example": "UUVVWWXX",
          "description": "The ID of the user who reported the item"
        },
        "thread_id": {
          "type": "string",
          "example": "TTUUVVWW",
          "description": "The ID of the moderation thread associated with this report"
        }
      }
    }
  ]
}
object Schedule
{
  "type": "object",
  "required": [
    "time",
    "requested_status"
  ],
  "properties": {
    "time": {
      "type": "string",
      "format": "ISO-8601",
      "example": "2023-02-05T19:39:55.551839Z"
    },
    "requested_status": {
      "enum": [
        "approved",
        "archived",
        "unlisted",
        "private",
        "draft"
      ],
      "type": "string",
      "description": "The requested status when scheduling the project for release"
    }
  }
}
object SearchResults
{
  "type": "object",
  "required": [
    "hits",
    "offset",
    "limit",
    "total_hits"
  ],
  "properties": {
    "hits": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/ProjectResult"
      },
      "description": "The list of results"
    },
    "limit": {
      "type": "integer",
      "example": 10,
      "description": "The number of results that were returned by the query"
    },
    "offset": {
      "type": "integer",
      "example": 0,
      "description": "The number of results that were skipped by the query"
    },
    "total_hits": {
      "type": "integer",
      "example": 10,
      "description": "The total number of results that match the query"
    }
  }
}
object ServerRenderedProject
{
  "allOf": [
    {
      "$ref": "#/components/schemas/BaseProject"
    },
    {
      "type": "object",
      "required": [
        "project_type",
        "downloads"
      ],
      "properties": {
        "color": {
          "type": "integer",
          "example": 8703084,
          "nullable": true,
          "description": "The RGB color of the project, automatically generated from the project icon"
        },
        "icon_url": {
          "type": "string",
          "example": "https://cdn.modrinth.com/data/AABBCCDD/b46513nd83hb4792a9a0e1fn28fgi6090c1842639.png",
          "nullable": true,
          "description": "The URL of the project's icon"
        },
        "downloads": {
          "type": "integer",
          "description": "The total number of downloads of the project"
        },
        "thread_id": {
          "type": "string",
          "example": "TTUUVVWW",
          "description": "The ID of the moderation thread associated with this project"
        },
        "project_type": {
          "enum": [
            "mod",
            "modpack",
            "resourcepack",
            "shader"
          ],
          "type": "string",
          "example": "mod",
          "description": "The project type of the project"
        },
        "monetization_status": {
          "enum": [
            "monetized",
            "demonetized",
            "force-demonetized"
          ],
          "type": "string"
        }
      }
    }
  ]
}
object Statistics
{
  "type": "object",
  "properties": {
    "files": {
      "type": "integer",
      "description": "Number of version files on Modrinth"
    },
    "authors": {
      "type": "integer",
      "description": "Number of authors (users with projects) on Modrinth"
    },
    "projects": {
      "type": "integer",
      "description": "Number of projects on Modrinth"
    },
    "versions": {
      "type": "integer",
      "description": "Number of projects on Modrinth"
    }
  }
}
array TagsGetLoaderListResponse
{
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/LoaderTag"
  }
}
array TagsListCategoriesWithIconsResponse
{
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/CategoryTag"
  }
}
array TagsListDonationPlatformsResponse
{
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/DonationPlatformTag"
  }
}
array TagsListGameVersionsResponse
{
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/GameVersionTag"
  }
}
array TagsListLicensesResponse
{
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/LicenseTag"
  }
}
array TagsListProjectTypesResponse
{
  "type": "array",
  "items": {
    "type": "string"
  },
  "example": [
    "mod",
    "modpack",
    "resourcepack",
    "shader"
  ]
}
array TagsListReportTypesResponse
{
  "type": "array",
  "items": {
    "type": "string"
  },
  "example": [
    "spam",
    "copyright",
    "inappropriate",
    "malicious",
    "name-squatting",
    "other"
  ]
}
array TagsListSideTypesResponse
{
  "type": "array",
  "items": {
    "type": "string"
  },
  "example": [
    "required",
    "optional",
    "unsupported",
    "unknown"
  ]
}
object TeamMember
{
  "type": "object",
  "required": [
    "team_id",
    "user",
    "role",
    "accepted"
  ],
  "properties": {
    "role": {
      "type": "string",
      "example": "Member",
      "description": "The user's role on the team"
    },
    "user": {
      "$ref": "#/components/schemas/User"
    },
    "team_id": {
      "type": "string",
      "example": "MMNNOOPP",
      "description": "The ID of the team this team member is a member of"
    },
    "accepted": {
      "type": "boolean",
      "example": true,
      "description": "Whether or not the user has accepted to be on the team (requires authorization to view)"
    },
    "ordering": {
      "type": "integer",
      "example": 0,
      "description": "The order of the team member."
    },
    "permissions": {
      "type": "integer",
      "format": "bitfield",
      "example": 127,
      "description": "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"
    },
    "payouts_split": {
      "type": "integer",
      "example": 100,
      "description": "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."
    }
  }
}
array TeamsGetMembersResponse
{
  "type": "array",
  "items": {
    "type": "array",
    "items": {
      "$ref": "#/components/schemas/TeamMember"
    }
  }
}
array TeamsGetProjectMembersResponse
{
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/TeamMember"
  },
  "description": "An array of team members"
}
array TeamsGetTeamMembersResponse
{
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/TeamMember"
  },
  "description": "An array of team members"
}
object Thread
{
  "type": "object",
  "required": [
    "id",
    "type",
    "messages",
    "members"
  ],
  "properties": {
    "id": {
      "type": "string",
      "example": "WWXXYYZZ",
      "description": "The ID of the thread"
    },
    "type": {
      "enum": [
        "project",
        "report",
        "direct_message"
      ],
      "type": "string"
    },
    "members": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/User"
      }
    },
    "messages": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/ThreadMessage"
      }
    },
    "report_id": {
      "type": "string",
      "nullable": true,
      "description": "The ID of the associated report if a report thread"
    },
    "project_id": {
      "type": "string",
      "nullable": true,
      "description": "The ID of the associated project if a project thread"
    }
  }
}
object ThreadMessage
{
  "type": "object",
  "required": [
    "id",
    "body",
    "created"
  ],
  "properties": {
    "id": {
      "type": "string",
      "example": "MMNNOOPP",
      "description": "The ID of the message itself"
    },
    "body": {
      "$ref": "#/components/schemas/ThreadMessageBody"
    },
    "created": {
      "type": "string",
      "format": "ISO-8601",
      "description": "The time at which the message was created"
    },
    "author_id": {
      "type": "string",
      "example": "QQRRSSTT",
      "nullable": true,
      "description": "The ID of the author"
    }
  }
}
object ThreadMessageBody
{
  "type": "object",
  "required": [
    "type"
  ],
  "properties": {
    "body": {
      "type": "string",
      "example": "This is the text of the message.",
      "description": "The actual message text. **Only present for `text` message type**"
    },
    "type": {
      "enum": [
        "status_change",
        "text",
        "thread_closure",
        "deleted"
      ],
      "type": "string",
      "example": "status_change",
      "description": "The type of message"
    },
    "private": {
      "type": "boolean",
      "example": false,
      "description": "Whether the message is only visible to moderators. **Only present for `text` message type**"
    },
    "new_status": {
      "enum": [
        "approved",
        "archived",
        "rejected",
        "draft",
        "unlisted",
        "processing",
        "withheld",
        "scheduled",
        "private",
        "unknown"
      ],
      "type": "string",
      "example": "approved",
      "description": "The new status of the project. **Only present for `status_change` message type**"
    },
    "old_status": {
      "enum": [
        "approved",
        "archived",
        "rejected",
        "draft",
        "unlisted",
        "processing",
        "withheld",
        "scheduled",
        "private",
        "unknown"
      ],
      "type": "string",
      "example": "processing",
      "description": "The old status of the project. **Only present for `status_change` message type**"
    },
    "replying_to": {
      "type": "string",
      "example": "SSTTUUVV",
      "nullable": true,
      "description": "The ID of the message being replied to by this message. **Only present for `text` message type**"
    }
  },
  "description": "The contents of the message. **Fields will vary depending on message type.**"
}
array ThreadsGetMultipleReportsResponse
{
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/Report"
  }
}
array ThreadsGetOpenReportsResponse
{
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/Report"
  }
}
array ThreadsListThreadsResponse
{
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/Thread"
  }
}
object ThreadsModifyReportRequest
{
  "type": "object",
  "properties": {
    "body": {
      "type": "string",
      "example": "This is the meat and potatoes of the report!",
      "description": "The contents of the report"
    },
    "closed": {
      "type": "boolean",
      "description": "Whether the thread should be closed"
    }
  }
}
object User
{
  "allOf": [
    {
      "$ref": "#/components/schemas/EditableUser"
    },
    {
      "type": "object",
      "required": [
        "id",
        "avatar_url",
        "created",
        "role"
      ],
      "properties": {
        "id": {
          "type": "string",
          "example": "EEFFGGHH",
          "description": "The user's ID"
        },
        "role": {
          "enum": [
            "admin",
            "moderator",
            "developer"
          ],
          "type": "string",
          "example": "developer",
          "description": "The user's role"
        },
        "badges": {
          "type": "integer",
          "format": "bitfield",
          "example": 63,
          "description": "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"
        },
        "created": {
          "type": "string",
          "format": "ISO-8601",
          "description": "The time at which the user was created"
        },
        "has_totp": {
          "type": "boolean",
          "nullable": true,
          "description": "Whether you have TOTP two-factor authentication connected to your account (only displayed if requesting your own account)"
        },
        "github_id": {
          "type": "integer",
          "example": null,
          "nullable": true,
          "deprecated": true,
          "description": "Deprecated - this is no longer public for security reasons and is always null"
        },
        "avatar_url": {
          "type": "string",
          "example": "https://avatars.githubusercontent.com/u/11223344?v=1",
          "description": "The user's avatar url"
        },
        "has_password": {
          "type": "boolean",
          "nullable": true,
          "description": "Whether you have a password associated with your account (only displayed if requesting your own account)"
        },
        "auth_providers": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "github",
            "gitlab",
            "steam",
            "microsoft",
            "google",
            "discord"
          ],
          "nullable": true,
          "description": "A list of authentication providers you have signed up for (only displayed if requesting your own account)"
        },
        "email_verified": {
          "type": "boolean",
          "nullable": true,
          "description": "Whether your email is verified (only displayed if requesting your own account)"
        }
      }
    }
  ]
}
object UserIdentifier
{
  "required": [
    "user_id"
  ],
  "properties": {
    "user_id": {
      "type": "string",
      "example": "EEFFGGHH"
    }
  }
}
object UserPayoutData
{
  "type": "object",
  "nullable": true,
  "properties": {
    "balance": {
      "type": "integer",
      "example": 10.11223344556678,
      "description": "The payout balance available for the user to withdraw (note, you cannot modify this in a PATCH request)"
    },
    "payout_wallet": {
      "enum": [
        "paypal",
        "venmo"
      ],
      "type": "string",
      "example": "paypal",
      "description": "The wallet that the user has selected"
    },
    "payout_address": {
      "type": "string",
      "example": "support@modrinth.com",
      "description": "The user's payout address"
    },
    "payout_wallet_type": {
      "enum": [
        "email",
        "phone",
        "user_handle"
      ],
      "type": "string",
      "example": "email",
      "description": "The type of the user's wallet"
    }
  },
  "description": "Various data relating to the user's payouts status (you can only see your own)"
}
object UserPayoutHistory
{
  "type": "object",
  "properties": {
    "payouts": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/UserPayoutHistoryEntry"
      },
      "description": "A history of all of the user's past transactions"
    },
    "all_time": {
      "type": "string",
      "example": 10.11223344556678,
      "description": "The all-time balance accrued by this user in USD"
    },
    "last_month": {
      "type": "string",
      "example": 2.2244668800224465,
      "description": "The amount in USD made by the user in the previous 30 days"
    }
  }
}
object UserPayoutHistoryEntry
{
  "type": "object",
  "properties": {
    "amount": {
      "type": "integer",
      "example": 10,
      "description": "The amount of this transaction in USD"
    },
    "status": {
      "type": "string",
      "example": "success",
      "description": "The status of this transaction"
    },
    "created": {
      "type": "string",
      "format": "ISO-8601",
      "description": "The date of this transaction"
    }
  }
}
array UsersGetFollowedProjectsResponse
{
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/Project"
  }
}
array UsersGetMultipleUsersResponse
{
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/User"
  }
}
array UsersGetUserProjectsResponse
{
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/Project"
  }
}
object Version
{
  "allOf": [
    {
      "$ref": "#/components/schemas/BaseVersion"
    },
    {
      "type": "object",
      "required": [
        "id",
        "project_id",
        "author_id",
        "date_published",
        "downloads",
        "files",
        "name",
        "version_number",
        "game_versions",
        "version_type",
        "loaders",
        "featured"
      ],
      "properties": {
        "id": {
          "type": "string",
          "example": "IIJJKKLL",
          "description": "The ID of the version, encoded as a base62 string"
        },
        "files": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/VersionFile"
          },
          "description": "A list of files available for download for this version"
        },
        "author_id": {
          "type": "string",
          "example": "EEFFGGHH",
          "description": "The ID of the author who published this version"
        },
        "downloads": {
          "type": "integer",
          "description": "The number of times this version has been downloaded"
        },
        "project_id": {
          "type": "string",
          "example": "AABBCCDD",
          "description": "The ID of the project this version is for"
        },
        "changelog_url": {
          "type": "string",
          "example": null,
          "nullable": true,
          "deprecated": true,
          "description": "A link to the changelog for this version. Always null, only kept for legacy compatibility."
        },
        "date_published": {
          "type": "string",
          "format": "ISO-8601"
        }
      }
    }
  ]
}
object VersionDependency
{
  "type": "object",
  "required": [
    "dependency_type"
  ],
  "properties": {
    "file_name": {
      "type": "string",
      "example": "sodium-fabric-mc1.19-0.4.2+build.16.jar",
      "nullable": true,
      "description": "The file name of the dependency, mostly used for showing external dependencies on modpacks"
    },
    "project_id": {
      "type": "string",
      "example": "QQRRSSTT",
      "nullable": true,
      "description": "The ID of the project that this version depends on"
    },
    "version_id": {
      "type": "string",
      "example": "IIJJKKLL",
      "nullable": true,
      "description": "The ID of the version that this version depends on"
    },
    "dependency_type": {
      "enum": [
        "required",
        "optional",
        "incompatible",
        "embedded"
      ],
      "type": "string",
      "example": "required",
      "description": "The type of dependency that this version has"
    }
  }
}
object VersionFile
{
  "type": "object",
  "required": [
    "hashes",
    "url",
    "filename",
    "primary",
    "size"
  ],
  "properties": {
    "url": {
      "type": "string",
      "example": "https://cdn.modrinth.com/data/AABBCCDD/versions/1.0.0/my_file.jar",
      "description": "A direct link to the file"
    },
    "size": {
      "type": "integer",
      "example": 1097270,
      "description": "The size of the file in bytes"
    },
    "hashes": {
      "$ref": "#/components/schemas/VersionFileHashes"
    },
    "primary": {
      "type": "boolean",
      "example": false,
      "description": "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."
    },
    "filename": {
      "type": "string",
      "example": "my_file.jar",
      "description": "The name of the file"
    },
    "file_type": {
      "enum": [
        "required-resource-pack",
        "optional-resource-pack"
      ],
      "type": "string",
      "example": "required-resource-pack",
      "nullable": true,
      "description": "The type of the additional file, used mainly for adding resource packs to datapacks"
    }
  }
}
object VersionFileHashes
{
  "type": "object",
  "properties": {
    "sha1": {
      "type": "string",
      "example": "c84dd4b3580c02b79958a0590afd5783d80ef504"
    },
    "sha512": {
      "type": "string",
      "example": "93ecf5fe02914fb53d94aa3d28c1fb562e23985f8e4d48b9038422798618761fe208a31ca9b723667a4e05de0d91a3f86bcd8d018f6a686c39550e21b198d96f"
    }
  },
  "description": "A map of hashes of the file. The key is the hashing algorithm and the value is the string version of the hash."
}
object VersionsAddFilesToVersionRequest
{
  "type": "object",
  "properties": {
    "data": {
      "enum": [
        {}
      ],
      "type": "object"
    }
  }
}
array VersionsListProjectVersionsResponse
{
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/Version"
  }
}
array VersionsListResponse
{
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/Version"
  }
}