4488 lines
131 KiB
YAML
4488 lines
131 KiB
YAML
openapi: 3.0.0
|
|
info:
|
|
version: v2.7.0/ec80c2b
|
|
title: Labrinth
|
|
termsOfService: https://modrinth.com/legal/terms
|
|
contact:
|
|
name: Modrinth Support
|
|
url: https://discord.modrinth.com
|
|
email: support@modrinth.com
|
|
description: >
|
|
## Authentication
|
|
|
|
This API uses personal access tokens tied to a user account for
|
|
authentication. The token is in the `Authorization` header of the request.
|
|
|
|
|
|
Example:
|
|
|
|
```
|
|
|
|
Authorization:
|
|
mrp_RNtLRSPmGj2pd1v1ubi52nX7TJJM9sznrmwhAuj511oe4t1jAqAQ3D6Wc8Ic
|
|
|
|
```
|
|
|
|
|
|
You do not need a token for most requests. Generally speaking, only the
|
|
following types of requests require a token:
|
|
|
|
- those which create data (such as version creation)
|
|
|
|
- those which modify data (such as editing a project)
|
|
|
|
- those which access private data (such as draft projects, notifications,
|
|
emails, and payout data)
|
|
|
|
|
|
Applications interacting with the authenticated API should have the user
|
|
generate a personal access token from [their user
|
|
settings](https://modrinth.com/settings/account).
|
|
|
|
Each 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.
|
|
|
|
You 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.
|
|
|
|
|
|
Please note that certain scopes and requests cannot be completed with a
|
|
personal access token. For example, deleting a user account can only be done
|
|
through Modrinth's frontend.
|
|
|
|
|
|
For backwards compatibility purposes, some types of GitHub tokens also work
|
|
for authenticating a user with Modrinth's API, granting all scopes.
|
|
|
|
**We urge any application still using GitHub tokens to start using personal
|
|
access tokens for security and reliability purposes.**
|
|
|
|
GitHub tokens will cease to function to authenticate with Modrinth's API as
|
|
soon as version 3 of the API is made generally available.
|
|
|
|
|
|
## Cross-Origin Resource Sharing
|
|
|
|
This API features Cross-Origin Resource Sharing (CORS) implemented in
|
|
compliance with the [W3C spec](https://www.w3.org/TR/cors/).
|
|
|
|
This allows for cross-domain communication from the browser.
|
|
|
|
All responses have a wildcard same-origin which makes them completely public
|
|
and accessible to everyone, including any code on any site.
|
|
|
|
|
|
## Identifiers
|
|
|
|
The majority of items you can interact with in the API have a unique
|
|
eight-digit base62 ID.
|
|
|
|
Projects, versions, users, threads, teams, and reports all use this same way
|
|
of identifying themselves.
|
|
|
|
Version files use the sha1 or sha512 file hashes as identifiers.
|
|
|
|
|
|
Each project and user has a friendlier way of identifying them; slugs and
|
|
usernames, respectively.
|
|
|
|
While unique IDs are constant, slugs and usernames can change at any moment.
|
|
|
|
If you want to store something in the long term, it is recommended to use
|
|
the unique ID.
|
|
|
|
|
|
## Ratelimits
|
|
|
|
The API has a ratelimit defined per IP. Limits and remaining amounts are
|
|
given in the response headers.
|
|
|
|
- `X-Ratelimit-Limit`: the maximum number of requests that can be made in a
|
|
minute
|
|
|
|
- `X-Ratelimit-Remaining`: the number of requests remaining in the current
|
|
ratelimit window
|
|
|
|
- `X-Ratelimit-Reset`: the time in seconds until the ratelimit window resets
|
|
|
|
|
|
Ratelimits are the same no matter whether you use a token or not.
|
|
|
|
The ratelimit is currently 300 requests per minute. If you have a use case
|
|
requiring a higher limit, please [contact us](mailto:admin@modrinth.com).
|
|
|
|
|
|
## User Agents
|
|
|
|
To access the Modrinth API, you **must** use provide a uniquely-identifying
|
|
`User-Agent` header.
|
|
|
|
Providing 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.
|
|
|
|
It is recommended, but not required, to include contact information in your
|
|
user agent.
|
|
|
|
This allows us to contact you if we would like a change in your
|
|
application's behavior without having to block your traffic.
|
|
|
|
- Bad: `User-Agent: okhttp/4.9.3`
|
|
|
|
- Good: `User-Agent: project_name`
|
|
|
|
- Better: `User-Agent: github_username/project_name/1.56.0`
|
|
|
|
- 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)`
|
|
|
|
|
|
## Versioning
|
|
|
|
Modrinth follows a simple pattern for its API versioning.
|
|
|
|
In the event of a breaking API change, the API version in the URL path is
|
|
bumped, and migration steps will be published [on the migrations
|
|
page](/docs/migrations/information).
|
|
|
|
|
|
When an API is no longer the current one, it will immediately be considered
|
|
deprecated.
|
|
|
|
No more support will be provided for API versions older than the current
|
|
one.
|
|
|
|
It will be kept for some time, but this amount of time is not certain.
|
|
|
|
|
|
We will exercise various tactics to get people to update their
|
|
implementation of our API.
|
|
|
|
One example is by adding something like `STOP USING THIS API` to various
|
|
data returned by the API.
|
|
|
|
|
|
Once an API version is completely deprecated, it will permanently return a
|
|
410 error.
|
|
|
|
Please ensure your application handles these 410 errors.
|
|
servers:
|
|
- url: https://api.modrinth.com/v2
|
|
description: Production server
|
|
- url: https://staging-api.modrinth.com/v2
|
|
description: Staging server
|
|
components:
|
|
parameters:
|
|
ProjectIdentifier:
|
|
name: id|slug
|
|
in: path
|
|
required: true
|
|
description: The ID or slug of the project
|
|
schema:
|
|
type: string
|
|
example:
|
|
- AABBCCDD
|
|
- my_project
|
|
MultipleProjectIdentifier:
|
|
in: query
|
|
name: ids
|
|
description: The IDs of the projects
|
|
schema:
|
|
type: array
|
|
items:
|
|
type: string
|
|
example: '["AABBCCDD", "EEFFGGHH"]'
|
|
required: true
|
|
UserIdentifier:
|
|
name: id|username
|
|
in: path
|
|
required: true
|
|
description: The ID or username of the user
|
|
schema:
|
|
type: string
|
|
example:
|
|
- EEFFGGHH
|
|
- my_user
|
|
VersionIdentifier:
|
|
name: id
|
|
in: path
|
|
required: true
|
|
description: The ID of the version
|
|
schema:
|
|
type: string
|
|
example:
|
|
- IIJJKKLL
|
|
TeamIdentifier:
|
|
name: id
|
|
in: path
|
|
required: true
|
|
description: The ID of the team
|
|
schema:
|
|
type: string
|
|
example:
|
|
- MMNNOOPP
|
|
ReportIdentifier:
|
|
name: id
|
|
in: path
|
|
required: true
|
|
description: The ID of the report
|
|
schema:
|
|
type: string
|
|
example:
|
|
- RRSSTTUU
|
|
ThreadIdentifier:
|
|
name: id
|
|
in: path
|
|
required: true
|
|
description: The ID of the thread
|
|
schema:
|
|
type: string
|
|
example:
|
|
- QQRRSSTT
|
|
NotificationIdentifier:
|
|
name: id
|
|
in: path
|
|
required: true
|
|
description: The ID of the notification
|
|
schema:
|
|
type: string
|
|
example:
|
|
- NNOOPPQQ
|
|
AlgorithmIdentifier:
|
|
name: algorithm
|
|
in: query
|
|
required: true
|
|
description: The algorithm of the hash
|
|
schema:
|
|
type: string
|
|
enum:
|
|
- sha1
|
|
- sha512
|
|
example: sha512
|
|
default: sha1
|
|
MultipleHashQueryIdentifier:
|
|
name: multiple
|
|
in: query
|
|
required: false
|
|
description: Whether to return multiple results when looking for this hash
|
|
schema:
|
|
type: boolean
|
|
default: false
|
|
FileHashIdentifier:
|
|
name: hash
|
|
in: path
|
|
required: true
|
|
description: >-
|
|
The hash of the file, considering its byte content, and encoded in
|
|
hexadecimal
|
|
schema:
|
|
type: string
|
|
example: 619e250c133106bacc3e3b560839bd4b324dfda8
|
|
requestBodies:
|
|
Image:
|
|
content:
|
|
image/png:
|
|
schema:
|
|
type: string
|
|
format: binary
|
|
image/jpeg:
|
|
schema:
|
|
type: string
|
|
format: binary
|
|
image/bmp:
|
|
schema:
|
|
type: string
|
|
format: binary
|
|
image/gif:
|
|
schema:
|
|
type: string
|
|
format: binary
|
|
image/webp:
|
|
schema:
|
|
type: string
|
|
format: binary
|
|
image/svg:
|
|
schema:
|
|
type: string
|
|
format: binary
|
|
image/svgz:
|
|
schema:
|
|
type: string
|
|
format: binary
|
|
image/rgb:
|
|
schema:
|
|
type: string
|
|
format: binary
|
|
schemas:
|
|
BaseVersion:
|
|
type: object
|
|
properties:
|
|
name:
|
|
type: string
|
|
description: The name of this version
|
|
example: Version 1.0.0
|
|
version_number:
|
|
type: string
|
|
description: The version number. Ideally will follow semantic versioning
|
|
example: 1.0.0
|
|
changelog:
|
|
type: string
|
|
description: The changelog for this version
|
|
example: 'List of changes in this version: ...'
|
|
nullable: true
|
|
dependencies:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/VersionDependency'
|
|
description: A list of specific versions of projects that this version depends on
|
|
game_versions:
|
|
type: array
|
|
items:
|
|
type: string
|
|
description: A list of versions of Minecraft that this version supports
|
|
example:
|
|
- 1.16.5
|
|
- 1.17.1
|
|
version_type:
|
|
type: string
|
|
description: The release channel for this version
|
|
enum:
|
|
- release
|
|
- beta
|
|
- alpha
|
|
example: release
|
|
loaders:
|
|
type: array
|
|
items:
|
|
type: string
|
|
description: The mod loaders that this version supports
|
|
example:
|
|
- fabric
|
|
- forge
|
|
featured:
|
|
type: boolean
|
|
description: Whether the version is featured or not
|
|
example: true
|
|
status:
|
|
type: string
|
|
enum:
|
|
- listed
|
|
- archived
|
|
- draft
|
|
- unlisted
|
|
- scheduled
|
|
- unknown
|
|
example: listed
|
|
requested_status:
|
|
type: string
|
|
enum:
|
|
- listed
|
|
- archived
|
|
- draft
|
|
- unlisted
|
|
nullable: true
|
|
VersionDependency:
|
|
type: object
|
|
properties:
|
|
version_id:
|
|
type: string
|
|
description: The ID of the version that this version depends on
|
|
example: IIJJKKLL
|
|
nullable: true
|
|
project_id:
|
|
type: string
|
|
description: The ID of the project that this version depends on
|
|
example: QQRRSSTT
|
|
nullable: true
|
|
file_name:
|
|
type: string
|
|
description: >-
|
|
The file name of the dependency, mostly used for showing external
|
|
dependencies on modpacks
|
|
example: sodium-fabric-mc1.19-0.4.2+build.16.jar
|
|
nullable: true
|
|
dependency_type:
|
|
type: string
|
|
enum:
|
|
- required
|
|
- optional
|
|
- incompatible
|
|
- embedded
|
|
description: The type of dependency that this version has
|
|
example: required
|
|
required:
|
|
- dependency_type
|
|
EditableVersion:
|
|
allOf:
|
|
- $ref: '#/components/schemas/BaseVersion'
|
|
- type: object
|
|
properties:
|
|
primary_file:
|
|
type: array
|
|
items:
|
|
type: string
|
|
example:
|
|
- sha1
|
|
- aaaabbbbccccddddeeeeffffgggghhhhiiiijjjj
|
|
description: The hash format and the hash of the new primary file
|
|
file_types:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/EditableFileType'
|
|
description: A list of file_types to edit
|
|
EditableFileType:
|
|
type: object
|
|
properties:
|
|
algorithm:
|
|
type: string
|
|
description: The hash algorithm of the hash specified in the hash field
|
|
example: sha1
|
|
hash:
|
|
type: string
|
|
description: The hash of the file you're editing
|
|
example: aaaabbbbccccddddeeeeffffgggghhhhiiiijjjj
|
|
file_type:
|
|
type: string
|
|
enum:
|
|
- required-resource-pack
|
|
- optional-resource-pack
|
|
description: The hash algorithm of the file you're editing
|
|
example: required-resource-pack
|
|
nullable: true
|
|
required:
|
|
- algorithm
|
|
- hash
|
|
- file_type
|
|
CreatableVersion:
|
|
allOf:
|
|
- $ref: '#/components/schemas/BaseVersion'
|
|
- type: object
|
|
properties:
|
|
project_id:
|
|
type: string
|
|
description: The ID of the project this version is for
|
|
example: AABBCCDD
|
|
file_parts:
|
|
type: array
|
|
items:
|
|
type: string
|
|
description: >-
|
|
An array of the multipart field names of each file that goes
|
|
with this version
|
|
primary_file:
|
|
type: string
|
|
description: The multipart field name of the primary file
|
|
required:
|
|
- file_parts
|
|
- project_id
|
|
- name
|
|
- version_number
|
|
- game_versions
|
|
- version_type
|
|
- loaders
|
|
- featured
|
|
- dependencies
|
|
CreateVersionBody:
|
|
type: object
|
|
properties:
|
|
data:
|
|
$ref: '#/components/schemas/CreatableVersion'
|
|
required:
|
|
- data
|
|
Version:
|
|
allOf:
|
|
- $ref: '#/components/schemas/BaseVersion'
|
|
- type: object
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: The ID of the version, encoded as a base62 string
|
|
example: IIJJKKLL
|
|
project_id:
|
|
type: string
|
|
description: The ID of the project this version is for
|
|
example: AABBCCDD
|
|
author_id:
|
|
type: string
|
|
description: The ID of the author who published this version
|
|
example: EEFFGGHH
|
|
date_published:
|
|
type: string
|
|
format: ISO-8601
|
|
downloads:
|
|
type: integer
|
|
description: The number of times this version has been downloaded
|
|
changelog_url:
|
|
type: string
|
|
description: >-
|
|
A link to the changelog for this version. Always null, only kept
|
|
for legacy compatibility.
|
|
deprecated: true
|
|
example: null
|
|
nullable: true
|
|
files:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/VersionFile'
|
|
description: A list of files available for download for this version
|
|
required:
|
|
- id
|
|
- project_id
|
|
- author_id
|
|
- date_published
|
|
- downloads
|
|
- files
|
|
- name
|
|
- version_number
|
|
- game_versions
|
|
- version_type
|
|
- loaders
|
|
- featured
|
|
VersionFile:
|
|
type: object
|
|
properties:
|
|
hashes:
|
|
$ref: '#/components/schemas/VersionFileHashes'
|
|
url:
|
|
type: string
|
|
example: https://cdn.modrinth.com/data/AABBCCDD/versions/1.0.0/my_file.jar
|
|
description: A direct link to the file
|
|
filename:
|
|
type: string
|
|
example: my_file.jar
|
|
description: The name of the file
|
|
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.
|
|
size:
|
|
type: integer
|
|
example: 1097270
|
|
description: The size of the file in bytes
|
|
file_type:
|
|
type: string
|
|
enum:
|
|
- required-resource-pack
|
|
- optional-resource-pack
|
|
description: >-
|
|
The type of the additional file, used mainly for adding resource
|
|
packs to datapacks
|
|
example: required-resource-pack
|
|
nullable: true
|
|
required:
|
|
- hashes
|
|
- url
|
|
- filename
|
|
- primary
|
|
- size
|
|
VersionFileHashes:
|
|
type: object
|
|
properties:
|
|
sha512:
|
|
type: string
|
|
example: >-
|
|
93ecf5fe02914fb53d94aa3d28c1fb562e23985f8e4d48b9038422798618761fe208a31ca9b723667a4e05de0d91a3f86bcd8d018f6a686c39550e21b198d96f
|
|
sha1:
|
|
type: string
|
|
example: c84dd4b3580c02b79958a0590afd5783d80ef504
|
|
description: >-
|
|
A map of hashes of the file. The key is the hashing algorithm and the
|
|
value is the string version of the hash.
|
|
GetLatestVersionFromHashBody:
|
|
type: object
|
|
properties:
|
|
loaders:
|
|
type: array
|
|
items:
|
|
type: string
|
|
example:
|
|
- fabric
|
|
game_versions:
|
|
type: array
|
|
items:
|
|
type: string
|
|
example:
|
|
- '1.18'
|
|
- 1.18.1
|
|
required:
|
|
- loaders
|
|
- game_versions
|
|
HashVersionMap:
|
|
description: A map from hashes to versions
|
|
type: object
|
|
additionalProperties:
|
|
$ref: '#/components/schemas/Version'
|
|
HashList:
|
|
description: A list of hashes and the algorithm used to create them
|
|
type: object
|
|
properties:
|
|
hashes:
|
|
type: array
|
|
items:
|
|
type: string
|
|
example:
|
|
- >-
|
|
ea0f38408102e4d2efd53c2cc11b88b711996b48d8922f76ea6abf731219c5bd1efe39ddf9cce77c54d49a62ff10fb685c00d2e4c524ab99d20f6296677ab2c4
|
|
- >-
|
|
925a5c4899affa4098d997dfa4a4cb52c636d539e94bc489d1fa034218cb96819a70eb8b01647a39316a59fcfe223c1a8c05ed2e2ae5f4c1e75fa48f6af1c960
|
|
algorithm:
|
|
type: string
|
|
enum:
|
|
- sha1
|
|
- sha512
|
|
example: sha512
|
|
required:
|
|
- hashes
|
|
- algorithm
|
|
GetLatestVersionsFromHashesBody:
|
|
allOf:
|
|
- $ref: '#/components/schemas/HashList'
|
|
- type: object
|
|
properties:
|
|
loaders:
|
|
type: array
|
|
items:
|
|
type: string
|
|
example:
|
|
- fabric
|
|
game_versions:
|
|
type: array
|
|
items:
|
|
type: string
|
|
example:
|
|
- '1.18'
|
|
- 1.18.1
|
|
required:
|
|
- loaders
|
|
- game_versions
|
|
BaseProject:
|
|
type: object
|
|
properties:
|
|
slug:
|
|
type: string
|
|
description: >-
|
|
The slug of a project, used for vanity URLs. Regex:
|
|
```^[\w!@$()`.+,"\-']{3,64}$```
|
|
example: my_project
|
|
title:
|
|
type: string
|
|
description: The title or name of the project
|
|
example: My Project
|
|
description:
|
|
type: string
|
|
description: A short description of the project
|
|
example: A short description
|
|
categories:
|
|
type: array
|
|
items:
|
|
type: string
|
|
example:
|
|
- technology
|
|
- adventure
|
|
- fabric
|
|
description: A list of the categories that the project has
|
|
client_side:
|
|
type: string
|
|
enum:
|
|
- required
|
|
- optional
|
|
- unsupported
|
|
description: The client side support of the project
|
|
example: required
|
|
server_side:
|
|
type: string
|
|
enum:
|
|
- required
|
|
- optional
|
|
- unsupported
|
|
description: The server side support of the project
|
|
example: optional
|
|
ServerRenderedProject:
|
|
allOf:
|
|
- $ref: '#/components/schemas/BaseProject'
|
|
- type: object
|
|
properties:
|
|
project_type:
|
|
type: string
|
|
enum:
|
|
- mod
|
|
- modpack
|
|
- resourcepack
|
|
- shader
|
|
description: The project type of the project
|
|
example: mod
|
|
downloads:
|
|
type: integer
|
|
description: The total number of downloads of the project
|
|
icon_url:
|
|
type: string
|
|
example: >-
|
|
https://cdn.modrinth.com/data/AABBCCDD/b46513nd83hb4792a9a0e1fn28fgi6090c1842639.png
|
|
description: The URL of the project's icon
|
|
nullable: true
|
|
color:
|
|
type: integer
|
|
example: 8703084
|
|
description: >-
|
|
The RGB color of the project, automatically generated from the
|
|
project icon
|
|
nullable: true
|
|
thread_id:
|
|
type: string
|
|
example: TTUUVVWW
|
|
description: The ID of the moderation thread associated with this project
|
|
monetization_status:
|
|
type: string
|
|
enum:
|
|
- monetized
|
|
- demonetized
|
|
- force-demonetized
|
|
required:
|
|
- project_type
|
|
- downloads
|
|
ProjectResult:
|
|
allOf:
|
|
- $ref: '#/components/schemas/ServerRenderedProject'
|
|
- type: object
|
|
properties:
|
|
project_id:
|
|
type: string
|
|
description: The ID of the project
|
|
example: AABBCCDD
|
|
author:
|
|
type: string
|
|
description: The username of the project's author
|
|
example: my_user
|
|
display_categories:
|
|
type: array
|
|
items:
|
|
type: string
|
|
description: >-
|
|
A list of the categories that the project has which are not
|
|
secondary
|
|
example:
|
|
- technology
|
|
- fabric
|
|
versions:
|
|
type: array
|
|
items:
|
|
type: string
|
|
description: A list of the minecraft versions supported by the project
|
|
example:
|
|
- '1.8'
|
|
- 1.8.9
|
|
follows:
|
|
type: integer
|
|
description: The total number of users following the project
|
|
date_created:
|
|
type: string
|
|
format: ISO-8601
|
|
description: The date the project was added to search
|
|
date_modified:
|
|
type: string
|
|
format: ISO-8601
|
|
description: The date the project was last modified
|
|
latest_version:
|
|
type: string
|
|
description: The latest version of minecraft that this project supports
|
|
example: 1.8.9
|
|
license:
|
|
type: string
|
|
description: The SPDX license ID of a project
|
|
example: MIT
|
|
gallery:
|
|
type: array
|
|
description: All gallery images attached to the project
|
|
example:
|
|
- >-
|
|
https://cdn.modrinth.com/data/AABBCCDD/images/009b7d8d6e8bf04968a29421117c59b3efe2351a.png
|
|
- >-
|
|
https://cdn.modrinth.com/data/AABBCCDD/images/c21776867afb6046fdc3c21dbcf5cc50ae27a236.png
|
|
items:
|
|
type: string
|
|
featured_gallery:
|
|
type: string
|
|
description: The featured gallery image of the project
|
|
nullable: true
|
|
dependencies:
|
|
type: array
|
|
description: >-
|
|
A list of this project's dependencies, in the format of
|
|
`{project_id}-{dep_type}`
|
|
example:
|
|
- AABBCCDD-required
|
|
- EEFFGGHH-optional
|
|
- IIJJKKLL-incompatible
|
|
- MMNNOOPP-embedded
|
|
items:
|
|
type: string
|
|
required:
|
|
- slug
|
|
- title
|
|
- description
|
|
- client_side
|
|
- server_side
|
|
- project_id
|
|
- author
|
|
- versions
|
|
- follows
|
|
- date_created
|
|
- date_modified
|
|
- license
|
|
NonSearchProject:
|
|
allOf:
|
|
- $ref: '#/components/schemas/BaseProject'
|
|
- type: object
|
|
properties:
|
|
body:
|
|
type: string
|
|
description: A long form description of the project
|
|
example: A long body describing my project in detail
|
|
status:
|
|
type: string
|
|
enum:
|
|
- approved
|
|
- archived
|
|
- rejected
|
|
- draft
|
|
- unlisted
|
|
- processing
|
|
- withheld
|
|
- scheduled
|
|
- private
|
|
- unknown
|
|
description: The status of the project
|
|
example: approved
|
|
requested_status:
|
|
type: string
|
|
enum:
|
|
- approved
|
|
- archived
|
|
- unlisted
|
|
- private
|
|
- draft
|
|
description: >-
|
|
The requested status when submitting for review or scheduling
|
|
the project for release
|
|
nullable: true
|
|
additional_categories:
|
|
type: array
|
|
items:
|
|
type: string
|
|
description: A list of categories which are searchable but non-primary
|
|
example:
|
|
- technology
|
|
- adventure
|
|
- fabric
|
|
issues_url:
|
|
type: string
|
|
description: >-
|
|
An optional link to where to submit bugs or issues with the
|
|
project
|
|
example: https://github.com/my_user/my_project/issues
|
|
nullable: true
|
|
source_url:
|
|
type: string
|
|
description: An optional link to the source code of the project
|
|
example: https://github.com/my_user/my_project
|
|
nullable: true
|
|
wiki_url:
|
|
type: string
|
|
description: >-
|
|
An optional link to the project's wiki page or other relevant
|
|
information
|
|
example: https://github.com/my_user/my_project/wiki
|
|
nullable: true
|
|
discord_url:
|
|
type: string
|
|
description: An optional invite link to the project's discord
|
|
example: https://discord.gg/AaBbCcDd
|
|
nullable: true
|
|
donation_urls:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/ProjectDonationURL'
|
|
description: A list of donation links for the project
|
|
ProjectDonationURL:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: The ID of the donation platform
|
|
example: patreon
|
|
platform:
|
|
type: string
|
|
description: The donation platform this link is to
|
|
example: Patreon
|
|
url:
|
|
type: string
|
|
description: The URL of the donation platform and user
|
|
example: https://www.patreon.com/my_user
|
|
ModifiableProject:
|
|
allOf:
|
|
- $ref: '#/components/schemas/NonSearchProject'
|
|
- type: object
|
|
properties:
|
|
license_id:
|
|
type: string
|
|
description: The SPDX license ID of a project
|
|
example: LGPL-3.0-or-later
|
|
license_url:
|
|
type: string
|
|
description: The URL to this license
|
|
nullable: true
|
|
EditableProject:
|
|
allOf:
|
|
- $ref: '#/components/schemas/ModifiableProject'
|
|
- type: object
|
|
properties:
|
|
moderation_message:
|
|
type: string
|
|
description: The title of the moderators' message for the project
|
|
nullable: true
|
|
moderation_message_body:
|
|
type: string
|
|
description: The body of the moderators' message for the project
|
|
nullable: true
|
|
CreatableProject:
|
|
allOf:
|
|
- $ref: '#/components/schemas/ModifiableProject'
|
|
- type: object
|
|
properties:
|
|
project_type:
|
|
type: string
|
|
enum:
|
|
- mod
|
|
- modpack
|
|
example: modpack
|
|
initial_versions:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/EditableVersion'
|
|
description: >-
|
|
A list of initial versions to upload with the created project.
|
|
Deprecated - please upload version files after initial upload.
|
|
deprecated: true
|
|
is_draft:
|
|
type: boolean
|
|
description: >-
|
|
Whether the project should be saved as a draft instead of being
|
|
sent to moderation for review. Deprecated - please always mark
|
|
this as true.
|
|
example: true
|
|
deprecated: true
|
|
gallery_items:
|
|
type: array
|
|
description: >-
|
|
Gallery images to be uploaded with the created project.
|
|
Deprecated - please upload gallery images after initial upload.
|
|
deprecated: true
|
|
items:
|
|
$ref: '#/components/schemas/CreatableProjectGalleryItem'
|
|
required:
|
|
- project_type
|
|
- slug
|
|
- title
|
|
- description
|
|
- body
|
|
- categories
|
|
- client_side
|
|
- server_side
|
|
- license_id
|
|
CreatableProjectGalleryItem:
|
|
type: object
|
|
nullable: true
|
|
properties:
|
|
item:
|
|
type: string
|
|
description: The name of the multipart item where the gallery media is located
|
|
featured:
|
|
type: boolean
|
|
description: Whether the image is featured in the gallery
|
|
example: true
|
|
title:
|
|
type: string
|
|
description: The title of the gallery image
|
|
example: My awesome screenshot!
|
|
nullable: true
|
|
description:
|
|
type: string
|
|
description: The description of the gallery image
|
|
example: This awesome screenshot shows all of the blocks in my mod!
|
|
nullable: true
|
|
ordering:
|
|
type: integer
|
|
description: >-
|
|
The order of the gallery image. Gallery images are sorted by this
|
|
field and then alphabetically by title.
|
|
example: 0
|
|
Project:
|
|
allOf:
|
|
- $ref: '#/components/schemas/NonSearchProject'
|
|
- $ref: '#/components/schemas/ServerRenderedProject'
|
|
- type: object
|
|
properties:
|
|
id:
|
|
type: string
|
|
example: AABBCCDD
|
|
description: The ID of the project, encoded as a base62 string
|
|
team:
|
|
type: string
|
|
example: MMNNOOPP
|
|
description: The ID of the team that has ownership of this project
|
|
body_url:
|
|
type: string
|
|
deprecated: true
|
|
default: null
|
|
description: >-
|
|
The link to the long description of the project. Always null,
|
|
only kept for legacy compatibility.
|
|
example: null
|
|
nullable: true
|
|
moderator_message:
|
|
$ref: '#/components/schemas/ModeratorMessage'
|
|
published:
|
|
type: string
|
|
format: ISO-8601
|
|
description: The date the project was published
|
|
updated:
|
|
type: string
|
|
format: ISO-8601
|
|
description: The date the project was last updated
|
|
approved:
|
|
type: string
|
|
format: ISO-8601
|
|
description: The date the project's status was set to an approved status
|
|
nullable: true
|
|
queued:
|
|
type: string
|
|
format: ISO-8601
|
|
description: >-
|
|
The date the project's status was submitted to moderators for
|
|
review
|
|
nullable: true
|
|
followers:
|
|
type: integer
|
|
description: The total number of users following the project
|
|
license:
|
|
$ref: '#/components/schemas/ProjectLicense'
|
|
versions:
|
|
type: array
|
|
items:
|
|
type: string
|
|
example:
|
|
- IIJJKKLL
|
|
- QQRRSSTT
|
|
description: >-
|
|
A list of the version IDs of the project (will never be empty
|
|
unless `draft` status)
|
|
game_versions:
|
|
type: array
|
|
items:
|
|
type: string
|
|
example:
|
|
- '1.19'
|
|
- 1.19.1
|
|
- 1.19.2
|
|
- 1.19.3
|
|
description: A list of all of the game versions supported by the project
|
|
loaders:
|
|
type: array
|
|
items:
|
|
type: string
|
|
example:
|
|
- forge
|
|
- fabric
|
|
- quilt
|
|
description: A list of all of the loaders supported by the project
|
|
gallery:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/GalleryImage'
|
|
description: >-
|
|
A list of images that have been uploaded to the project's
|
|
gallery
|
|
required:
|
|
- id
|
|
- team
|
|
- published
|
|
- updated
|
|
- followers
|
|
- title
|
|
- description
|
|
- categories
|
|
- client_side
|
|
- server_side
|
|
- slug
|
|
- body
|
|
- status
|
|
ModeratorMessage:
|
|
deprecated: true
|
|
type: object
|
|
properties:
|
|
message:
|
|
type: string
|
|
description: The message that a moderator has left for the project
|
|
body:
|
|
type: string
|
|
description: >-
|
|
The longer body of the message that a moderator has left for the
|
|
project
|
|
nullable: true
|
|
nullable: true
|
|
example: null
|
|
description: A message that a moderator sent regarding the project
|
|
ProjectLicense:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: The SPDX license ID of a project
|
|
example: LGPL-3.0-or-later
|
|
name:
|
|
type: string
|
|
description: The long name of a license
|
|
example: GNU Lesser General Public License v3 or later
|
|
url:
|
|
type: string
|
|
description: The URL to this license
|
|
nullable: true
|
|
description: The license of the project
|
|
GalleryImage:
|
|
type: object
|
|
nullable: true
|
|
properties:
|
|
url:
|
|
type: string
|
|
description: The URL of the gallery image
|
|
example: >-
|
|
https://cdn.modrinth.com/data/AABBCCDD/images/009b7d8d6e8bf04968a29421117c59b3efe2351a.png
|
|
featured:
|
|
type: boolean
|
|
description: Whether the image is featured in the gallery
|
|
example: true
|
|
title:
|
|
type: string
|
|
description: The title of the gallery image
|
|
example: My awesome screenshot!
|
|
nullable: true
|
|
description:
|
|
type: string
|
|
description: The description of the gallery image
|
|
example: This awesome screenshot shows all of the blocks in my mod!
|
|
nullable: true
|
|
created:
|
|
type: string
|
|
format: ISO-8601
|
|
description: The date and time the gallery image was created
|
|
ordering:
|
|
type: integer
|
|
description: >-
|
|
The order of the gallery image. Gallery images are sorted by this
|
|
field and then alphabetically by title.
|
|
example: 0
|
|
required:
|
|
- url
|
|
- featured
|
|
- created
|
|
ProjectDependencyList:
|
|
type: object
|
|
properties:
|
|
projects:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Project'
|
|
description: Projects that the project depends upon
|
|
versions:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Version'
|
|
description: Versions that the project depends upon
|
|
PatchProjectsBody:
|
|
type: object
|
|
properties:
|
|
categories:
|
|
description: Set all of the categories to the categories specified here
|
|
type: array
|
|
items:
|
|
type: string
|
|
add_categories:
|
|
description: Add all of the categories specified here
|
|
type: array
|
|
items:
|
|
type: string
|
|
remove_categories:
|
|
description: Remove all of the categories specified here
|
|
type: array
|
|
items:
|
|
type: string
|
|
additional_categories:
|
|
description: >-
|
|
Set all of the additional categories to the categories specified
|
|
here
|
|
type: array
|
|
items:
|
|
type: string
|
|
add_additional_categories:
|
|
description: Add all of the additional categories specified here
|
|
type: array
|
|
items:
|
|
type: string
|
|
remove_additional_categories:
|
|
description: Remove all of the additional categories specified here
|
|
type: array
|
|
items:
|
|
type: string
|
|
donation_urls:
|
|
description: Set all of the donation links to the donation links specified here
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/ProjectDonationURL'
|
|
add_donation_urls:
|
|
description: Add all of the donation links specified here
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/ProjectDonationURL'
|
|
remove_donation_urls:
|
|
description: Remove all of the donation links specified here
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/ProjectDonationURL'
|
|
issues_url:
|
|
type: string
|
|
description: An optional link to where to submit bugs or issues with the projects
|
|
example: https://github.com/my_user/my_project/issues
|
|
nullable: true
|
|
source_url:
|
|
type: string
|
|
description: An optional link to the source code of the projects
|
|
example: https://github.com/my_user/my_project
|
|
nullable: true
|
|
wiki_url:
|
|
type: string
|
|
description: >-
|
|
An optional link to the projects' wiki page or other relevant
|
|
information
|
|
example: https://github.com/my_user/my_project/wiki
|
|
nullable: true
|
|
discord_url:
|
|
type: string
|
|
description: An optional invite link to the projects' discord
|
|
example: https://discord.gg/AaBbCcDd
|
|
nullable: true
|
|
CreateProjectBody:
|
|
type: object
|
|
properties:
|
|
data:
|
|
$ref: '#/components/schemas/CreatableProject'
|
|
icon:
|
|
type: string
|
|
format: binary
|
|
enum:
|
|
- '*.png'
|
|
- '*.jpg'
|
|
- '*.jpeg'
|
|
- '*.bmp'
|
|
- '*.gif'
|
|
- '*.webp'
|
|
- '*.svg'
|
|
- '*.svgz'
|
|
- '*.rgb'
|
|
description: Project icon file
|
|
required:
|
|
- data
|
|
ProjectIdentifier:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: string
|
|
example: AABBCCDD
|
|
Schedule:
|
|
type: object
|
|
properties:
|
|
time:
|
|
type: string
|
|
format: ISO-8601
|
|
example: '2023-02-05T19:39:55.551839Z'
|
|
requested_status:
|
|
type: string
|
|
enum:
|
|
- approved
|
|
- archived
|
|
- unlisted
|
|
- private
|
|
- draft
|
|
description: The requested status when scheduling the project for release
|
|
required:
|
|
- time
|
|
- requested_status
|
|
SearchResults:
|
|
type: object
|
|
properties:
|
|
hits:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/ProjectResult'
|
|
description: The list of results
|
|
offset:
|
|
type: integer
|
|
description: The number of results that were skipped by the query
|
|
example: 0
|
|
limit:
|
|
type: integer
|
|
description: The number of results that were returned by the query
|
|
example: 10
|
|
total_hits:
|
|
type: integer
|
|
description: The total number of results that match the query
|
|
example: 10
|
|
required:
|
|
- hits
|
|
- offset
|
|
- limit
|
|
- total_hits
|
|
UserIdentifier:
|
|
properties:
|
|
user_id:
|
|
type: string
|
|
example: EEFFGGHH
|
|
required:
|
|
- user_id
|
|
EditableUser:
|
|
type: object
|
|
properties:
|
|
username:
|
|
type: string
|
|
description: The user's username
|
|
example: my_user
|
|
name:
|
|
type: string
|
|
example: My User
|
|
description: The user's display name
|
|
nullable: true
|
|
email:
|
|
type: string
|
|
format: email
|
|
description: >-
|
|
The user's email (only displayed if requesting your own account).
|
|
Requires `USER_READ_EMAIL` PAT scope.
|
|
nullable: true
|
|
bio:
|
|
type: string
|
|
example: My short biography
|
|
description: A description of the user
|
|
payout_data:
|
|
$ref: '#/components/schemas/UserPayoutData'
|
|
required:
|
|
- username
|
|
UserPayoutData:
|
|
type: object
|
|
description: >-
|
|
Various data relating to the user's payouts status (you can only see
|
|
your own)
|
|
nullable: true
|
|
properties:
|
|
balance:
|
|
type: integer
|
|
description: >-
|
|
The payout balance available for the user to withdraw (note, you
|
|
cannot modify this in a PATCH request)
|
|
example: 10.11223344556678
|
|
payout_wallet:
|
|
type: string
|
|
enum:
|
|
- paypal
|
|
- venmo
|
|
description: The wallet that the user has selected
|
|
example: paypal
|
|
payout_wallet_type:
|
|
type: string
|
|
enum:
|
|
- email
|
|
- phone
|
|
- user_handle
|
|
description: The type of the user's wallet
|
|
example: email
|
|
payout_address:
|
|
type: string
|
|
description: The user's payout address
|
|
example: support@modrinth.com
|
|
User:
|
|
allOf:
|
|
- $ref: '#/components/schemas/EditableUser'
|
|
- type: object
|
|
properties:
|
|
id:
|
|
type: string
|
|
example: EEFFGGHH
|
|
description: The user's ID
|
|
avatar_url:
|
|
type: string
|
|
example: https://avatars.githubusercontent.com/u/11223344?v=1
|
|
description: The user's avatar url
|
|
created:
|
|
type: string
|
|
format: ISO-8601
|
|
description: The time at which the user was created
|
|
role:
|
|
type: string
|
|
enum:
|
|
- admin
|
|
- moderator
|
|
- developer
|
|
description: The user's role
|
|
example: developer
|
|
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
|
|
|
|
|
|
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
|
|
auth_providers:
|
|
type: array
|
|
items:
|
|
type: string
|
|
example:
|
|
- github
|
|
- gitlab
|
|
- steam
|
|
- microsoft
|
|
- google
|
|
- discord
|
|
description: >-
|
|
A list of authentication providers you have signed up for (only
|
|
displayed if requesting your own account)
|
|
nullable: true
|
|
email_verified:
|
|
type: boolean
|
|
description: >-
|
|
Whether your email is verified (only displayed if requesting
|
|
your own account)
|
|
nullable: true
|
|
has_password:
|
|
type: boolean
|
|
description: >-
|
|
Whether you have a password associated with your account (only
|
|
displayed if requesting your own account)
|
|
nullable: true
|
|
has_totp:
|
|
type: boolean
|
|
description: >-
|
|
Whether you have TOTP two-factor authentication connected to
|
|
your account (only displayed if requesting your own account)
|
|
nullable: true
|
|
github_id:
|
|
deprecated: true
|
|
type: integer
|
|
description: >-
|
|
Deprecated - this is no longer public for security reasons and
|
|
is always null
|
|
example: null
|
|
nullable: true
|
|
required:
|
|
- id
|
|
- avatar_url
|
|
- created
|
|
- role
|
|
UserPayoutHistory:
|
|
type: object
|
|
properties:
|
|
all_time:
|
|
type: string
|
|
description: The all-time balance accrued by this user in USD
|
|
example: 10.11223344556678
|
|
last_month:
|
|
type: string
|
|
description: The amount in USD made by the user in the previous 30 days
|
|
example: 2.2244668800224465
|
|
payouts:
|
|
type: array
|
|
description: A history of all of the user's past transactions
|
|
items:
|
|
$ref: '#/components/schemas/UserPayoutHistoryEntry'
|
|
UserPayoutHistoryEntry:
|
|
type: object
|
|
properties:
|
|
created:
|
|
type: string
|
|
format: ISO-8601
|
|
description: The date of this transaction
|
|
amount:
|
|
type: integer
|
|
description: The amount of this transaction in USD
|
|
example: 10
|
|
status:
|
|
type: string
|
|
description: The status of this transaction
|
|
example: success
|
|
Notification:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: The id of the notification
|
|
example: UUVVWWXX
|
|
user_id:
|
|
type: string
|
|
description: The id of the user who received the notification
|
|
example: EEFFGGHH
|
|
type:
|
|
type: string
|
|
enum:
|
|
- project_update
|
|
- team_invite
|
|
- status_change
|
|
- moderator_message
|
|
description: The type of notification
|
|
example: project_update
|
|
nullable: true
|
|
title:
|
|
type: string
|
|
description: The title of the notification
|
|
example: '**My Project** has been updated!'
|
|
text:
|
|
type: string
|
|
description: The body text of the notification
|
|
example: 'The project, My Project, has released a new version: 1.0.0'
|
|
link:
|
|
type: string
|
|
description: A link to the related project or version
|
|
example: mod/AABBCCDD/version/IIJJKKLL
|
|
read:
|
|
type: boolean
|
|
example: false
|
|
description: Whether the notification has been read or not
|
|
created:
|
|
type: string
|
|
format: ISO-8601
|
|
description: The time at which the notification was created
|
|
actions:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/NotificationAction'
|
|
description: A list of actions that can be performed
|
|
required:
|
|
- id
|
|
- user_id
|
|
- title
|
|
- text
|
|
- link
|
|
- read
|
|
- created
|
|
- actions
|
|
NotificationAction:
|
|
type: object
|
|
description: An action that can be performed on a notification
|
|
properties:
|
|
title:
|
|
type: string
|
|
description: The friendly name for this action
|
|
example: Accept
|
|
action_route:
|
|
type: array
|
|
description: The HTTP code and path to request in order to perform this action.
|
|
example:
|
|
- POST
|
|
- team/{id}/join
|
|
CreatableReport:
|
|
type: object
|
|
properties:
|
|
report_type:
|
|
type: string
|
|
description: The type of the report being sent
|
|
example: copyright
|
|
item_id:
|
|
type: string
|
|
description: The ID of the item (project, version, or user) being reported
|
|
example: EEFFGGHH
|
|
item_type:
|
|
type: string
|
|
enum:
|
|
- project
|
|
- user
|
|
- version
|
|
description: The type of the item being reported
|
|
example: project
|
|
body:
|
|
type: string
|
|
description: The extended explanation of the report
|
|
example: This is a reupload of my mod, AABBCCDD!
|
|
required:
|
|
- report_type
|
|
- item_id
|
|
- item_type
|
|
- body
|
|
Report:
|
|
type: object
|
|
allOf:
|
|
- $ref: '#/components/schemas/CreatableReport'
|
|
- type: object
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: The ID of the report
|
|
example: VVWWXXYY
|
|
reporter:
|
|
type: string
|
|
description: The ID of the user who reported the item
|
|
example: UUVVWWXX
|
|
created:
|
|
type: string
|
|
format: ISO-8601
|
|
description: The time at which the report was created
|
|
closed:
|
|
type: boolean
|
|
description: Whether the report is resolved
|
|
thread_id:
|
|
type: string
|
|
example: TTUUVVWW
|
|
description: The ID of the moderation thread associated with this report
|
|
required:
|
|
- reporter
|
|
- created
|
|
- closed
|
|
- thread_id
|
|
Thread:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: string
|
|
example: WWXXYYZZ
|
|
description: The ID of the thread
|
|
type:
|
|
type: string
|
|
enum:
|
|
- project
|
|
- report
|
|
- direct_message
|
|
project_id:
|
|
type: string
|
|
nullable: true
|
|
description: The ID of the associated project if a project thread
|
|
report_id:
|
|
type: string
|
|
nullable: true
|
|
description: The ID of the associated report if a report thread
|
|
messages:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/ThreadMessage'
|
|
members:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/User'
|
|
required:
|
|
- id
|
|
- type
|
|
- messages
|
|
- members
|
|
ThreadMessage:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: The ID of the message itself
|
|
example: MMNNOOPP
|
|
author_id:
|
|
type: string
|
|
description: The ID of the author
|
|
example: QQRRSSTT
|
|
nullable: true
|
|
body:
|
|
$ref: '#/components/schemas/ThreadMessageBody'
|
|
created:
|
|
type: string
|
|
format: ISO-8601
|
|
description: The time at which the message was created
|
|
required:
|
|
- id
|
|
- body
|
|
- created
|
|
ThreadMessageBody:
|
|
type: object
|
|
description: >-
|
|
The contents of the message. **Fields will vary depending on message
|
|
type.**
|
|
properties:
|
|
type:
|
|
type: string
|
|
enum:
|
|
- status_change
|
|
- text
|
|
- thread_closure
|
|
- deleted
|
|
description: The type of message
|
|
example: status_change
|
|
body:
|
|
type: string
|
|
description: The actual message text. **Only present for `text` message type**
|
|
example: This is the text of the message.
|
|
private:
|
|
type: boolean
|
|
description: >-
|
|
Whether the message is only visible to moderators. **Only present
|
|
for `text` message type**
|
|
example: false
|
|
replying_to:
|
|
type: string
|
|
description: >-
|
|
The ID of the message being replied to by this message. **Only
|
|
present for `text` message type**
|
|
nullable: true
|
|
example: SSTTUUVV
|
|
old_status:
|
|
type: string
|
|
enum:
|
|
- approved
|
|
- archived
|
|
- rejected
|
|
- draft
|
|
- unlisted
|
|
- processing
|
|
- withheld
|
|
- scheduled
|
|
- private
|
|
- unknown
|
|
description: >-
|
|
The old status of the project. **Only present for `status_change`
|
|
message type**
|
|
example: processing
|
|
new_status:
|
|
type: string
|
|
enum:
|
|
- approved
|
|
- archived
|
|
- rejected
|
|
- draft
|
|
- unlisted
|
|
- processing
|
|
- withheld
|
|
- scheduled
|
|
- private
|
|
- unknown
|
|
description: >-
|
|
The new status of the project. **Only present for `status_change`
|
|
message type**
|
|
example: approved
|
|
required:
|
|
- type
|
|
TeamMember:
|
|
type: object
|
|
properties:
|
|
team_id:
|
|
type: string
|
|
example: MMNNOOPP
|
|
description: The ID of the team this team member is a member of
|
|
user:
|
|
$ref: '#/components/schemas/User'
|
|
role:
|
|
type: string
|
|
example: Member
|
|
description: The user's role on the team
|
|
permissions:
|
|
type: integer
|
|
format: bitfield
|
|
example: 127
|
|
description: >
|
|
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
|
|
accepted:
|
|
type: boolean
|
|
example: true
|
|
description: >-
|
|
Whether or not the user has accepted to be on the team (requires
|
|
authorization to view)
|
|
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.
|
|
ordering:
|
|
type: integer
|
|
example: 0
|
|
description: The order of the team member.
|
|
required:
|
|
- team_id
|
|
- user
|
|
- role
|
|
- accepted
|
|
CategoryTag:
|
|
type: object
|
|
properties:
|
|
icon:
|
|
type: string
|
|
description: The SVG icon of a category
|
|
example: <svg></svg>
|
|
name:
|
|
type: string
|
|
description: The name of the category
|
|
example: adventure
|
|
project_type:
|
|
type: string
|
|
description: The project type this category is applicable to
|
|
example: mod
|
|
header:
|
|
type: string
|
|
description: The header under which the category should go
|
|
example: resolutions
|
|
required:
|
|
- icon
|
|
- name
|
|
- project_type
|
|
- header
|
|
LoaderTag:
|
|
type: object
|
|
properties:
|
|
icon:
|
|
type: string
|
|
description: The SVG icon of a loader
|
|
example: <svg></svg>
|
|
name:
|
|
type: string
|
|
description: The name of the loader
|
|
example: fabric
|
|
supported_project_types:
|
|
type: array
|
|
items:
|
|
type: string
|
|
description: The project type
|
|
description: The project types that this loader is applicable to
|
|
example:
|
|
- mod
|
|
- modpack
|
|
required:
|
|
- icon
|
|
- name
|
|
- supported_project_types
|
|
GameVersionTag:
|
|
type: object
|
|
properties:
|
|
version:
|
|
type: string
|
|
description: The name/number of the game version
|
|
example: 1.18.1
|
|
version_type:
|
|
type: string
|
|
enum:
|
|
- release
|
|
- snapshot
|
|
- alpha
|
|
- beta
|
|
description: The type of the game version
|
|
example: release
|
|
date:
|
|
type: string
|
|
format: ISO-8601
|
|
description: The date of the game version release
|
|
major:
|
|
type: boolean
|
|
description: Whether or not this is a major version, used for Featured Versions
|
|
example: true
|
|
required:
|
|
- version
|
|
- version_type
|
|
- date
|
|
- major
|
|
DonationPlatformTag:
|
|
type: object
|
|
properties:
|
|
short:
|
|
type: string
|
|
description: The short identifier of the donation platform
|
|
example: bmac
|
|
name:
|
|
type: string
|
|
description: The full name of the donation platform
|
|
example: Buy Me a Coffee
|
|
required:
|
|
- short
|
|
- name
|
|
ModifyTeamMemberBody:
|
|
properties:
|
|
role:
|
|
type: string
|
|
example: Contributor
|
|
permissions:
|
|
type: integer
|
|
format: bitfield
|
|
example: 127
|
|
description: |
|
|
The user's permissions in bitfield format
|
|
|
|
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
|
|
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.
|
|
ordering:
|
|
type: integer
|
|
example: 0
|
|
description: The order of the team member.
|
|
LicenseTag:
|
|
type: object
|
|
description: A short overview of a license
|
|
properties:
|
|
short:
|
|
type: string
|
|
description: The short identifier of the license
|
|
example: lgpl-3
|
|
name:
|
|
type: string
|
|
description: The full name of the license
|
|
example: GNU Lesser General Public License v3
|
|
required:
|
|
- short
|
|
- name
|
|
License:
|
|
type: object
|
|
description: A full license
|
|
properties:
|
|
title:
|
|
type: string
|
|
example: GNU Lesser General Public License v3.0 or later
|
|
body:
|
|
type: string
|
|
example: Insert the entire text of the LGPL-3.0 here...
|
|
InvalidInputError:
|
|
type: object
|
|
properties:
|
|
error:
|
|
type: string
|
|
description: The name of the error
|
|
example: invalid_input
|
|
description:
|
|
type: string
|
|
description: The contents of the error
|
|
example: Error while parsing multipart payload
|
|
required:
|
|
- error
|
|
- description
|
|
AuthError:
|
|
type: object
|
|
properties:
|
|
error:
|
|
type: string
|
|
description: The name of the error
|
|
example: unauthorized
|
|
description:
|
|
type: string
|
|
description: The contents of the error
|
|
example: 'Authentication Error: Invalid Authentication Credentials'
|
|
required:
|
|
- error
|
|
- description
|
|
Statistics:
|
|
type: object
|
|
properties:
|
|
projects:
|
|
type: integer
|
|
description: Number of projects on Modrinth
|
|
versions:
|
|
type: integer
|
|
description: Number of projects on Modrinth
|
|
files:
|
|
type: integer
|
|
description: Number of version files on Modrinth
|
|
authors:
|
|
type: integer
|
|
description: Number of authors (users with projects) on Modrinth
|
|
ForgeUpdates:
|
|
type: object
|
|
description: Mod version information that can be consumed by Forge's update checker
|
|
properties:
|
|
homepage:
|
|
type: string
|
|
description: A link to the mod page
|
|
example: https://modrinth.com
|
|
promos:
|
|
$ref: '#/components/schemas/ForgeUpdateCheckerPromos'
|
|
ForgeUpdateCheckerPromos:
|
|
type: object
|
|
description: A list of the recommended and latest versions for each Minecraft release
|
|
properties:
|
|
'{version}-recommended':
|
|
type: string
|
|
description: >-
|
|
The mod version that is recommended for `{version}`. Excludes
|
|
versions with the `alpha` and `beta` version types.
|
|
'{version}-latest':
|
|
type: string
|
|
description: >-
|
|
The latest mod version for `{version}`. Shows versions with the
|
|
`alpha` and `beta` version types.
|
|
securitySchemes:
|
|
TokenAuth:
|
|
type: apiKey
|
|
in: header
|
|
name: Authorization
|
|
tags:
|
|
- name: projects
|
|
x-displayName: Projects
|
|
description: >-
|
|
Projects are what Modrinth is centered around, be it mods, modpacks,
|
|
resource packs, etc.
|
|
- name: versions
|
|
x-displayName: Versions
|
|
description: Versions contain download links to files with additional metadata.
|
|
- name: version-files
|
|
x-displayName: Version Files
|
|
description: >-
|
|
Versions can contain multiple files, and these routes help manage those
|
|
files.
|
|
- name: users
|
|
x-displayName: Users
|
|
description: >-
|
|
Users can create projects, join teams, access notifications, manage
|
|
settings, and follow projects. Admins and moderators have more advanced
|
|
permissions such as reviewing new projects.
|
|
- name: notifications
|
|
x-displayName: Notifications
|
|
description: >-
|
|
Notifications are sent to users for various reasons, including for project
|
|
updates, team invites, and moderation purposes.
|
|
- name: threads
|
|
x-displayName: Threads
|
|
description: >-
|
|
Threads are a way of communicating between users and moderators, for the
|
|
purposes of project reviews and reports.
|
|
- name: teams
|
|
x-displayName: Teams
|
|
description: >-
|
|
Through teams, user permissions limit how team members can modify
|
|
projects.
|
|
- name: tags
|
|
x-displayName: Tags
|
|
description: >-
|
|
Tags are common and reusable lists of metadata types such as categories or
|
|
versions. Some can be applied to projects and/or versions.
|
|
- name: misc
|
|
x-displayName: Miscellaneous
|
|
- name: project_model
|
|
x-displayName: Project Model
|
|
description: |
|
|
<SchemaDefinition schemaRef="#/components/schemas/Project" />
|
|
- name: project_result_model
|
|
x-displayName: Search Result Model
|
|
description: |
|
|
<SchemaDefinition schemaRef="#/components/schemas/ProjectResult" />
|
|
- name: version_model
|
|
x-displayName: Version Model
|
|
description: |
|
|
<SchemaDefinition schemaRef="#/components/schemas/Version" />
|
|
- name: user_model
|
|
x-displayName: User Model
|
|
description: |
|
|
<SchemaDefinition schemaRef="#/components/schemas/User" />
|
|
- name: team_member_model
|
|
x-displayName: Team Member Model
|
|
description: |
|
|
<SchemaDefinition schemaRef="#/components/schemas/TeamMember" />
|
|
x-tagGroups:
|
|
- name: Routes
|
|
tags:
|
|
- projects
|
|
- versions
|
|
- version-files
|
|
- users
|
|
- notifications
|
|
- threads
|
|
- teams
|
|
- tags
|
|
- misc
|
|
- name: Models
|
|
tags:
|
|
- project_model
|
|
- project_result_model
|
|
- version_model
|
|
- user_model
|
|
- team_member_model
|
|
paths:
|
|
/search:
|
|
get:
|
|
summary: Search projects
|
|
operationId: searchProjects
|
|
parameters:
|
|
- in: query
|
|
name: query
|
|
schema:
|
|
type: string
|
|
example: gravestones
|
|
description: The query to search for
|
|
- in: query
|
|
name: facets
|
|
schema:
|
|
type: string
|
|
example: >-
|
|
[["categories:forge"],["versions:1.17.1"],["project_type:mod"],["license:mit"]]
|
|
description: >
|
|
Facets are an essential concept for understanding how to filter out
|
|
results.
|
|
|
|
|
|
These are the most commonly used facet types:
|
|
|
|
- `project_type`
|
|
|
|
- `categories` (loaders are lumped in with categories in search)
|
|
|
|
- `versions`
|
|
|
|
- `client_side`
|
|
|
|
- `server_side`
|
|
|
|
- `open_source`
|
|
|
|
|
|
Several others are also available for use, though these should not
|
|
be used outside very specific use cases.
|
|
|
|
- `title`
|
|
|
|
- `author`
|
|
|
|
- `follows`
|
|
|
|
- `project_id`
|
|
|
|
- `license`
|
|
|
|
- `downloads`
|
|
|
|
- `color`
|
|
|
|
- `created_timestamp`
|
|
|
|
- `modified_timestamp`
|
|
|
|
|
|
In order to then use these facets, you need a value to filter by, as
|
|
well as an operation to perform on this value.
|
|
|
|
The most common operation is `:` (same as `=`), though you can also
|
|
use `!=`, `>=`, `>`, `<=`, and `<`.
|
|
|
|
Join together the type, operation, and value, and you've got your
|
|
string.
|
|
|
|
```
|
|
|
|
{type} {operation} {value}
|
|
|
|
```
|
|
|
|
|
|
Examples:
|
|
|
|
```
|
|
|
|
categories = adventure
|
|
|
|
versions != 1.20.1
|
|
|
|
downloads <= 100
|
|
|
|
```
|
|
|
|
|
|
You then join these strings together in arrays to signal `AND` and
|
|
`OR` operators.
|
|
|
|
|
|
##### OR
|
|
|
|
All elements in a single array are considered to be joined by OR
|
|
statements.
|
|
|
|
For example, the search `[["versions:1.16.5", "versions:1.17.1"]]`
|
|
translates to `Projects that support 1.16.5 OR 1.17.1`.
|
|
|
|
|
|
##### AND
|
|
|
|
Separate arrays are considered to be joined by AND statements.
|
|
|
|
For example, the search `[["versions:1.16.5"],
|
|
["project_type:modpack"]]` translates to `Projects that support
|
|
1.16.5 AND are modpacks`.
|
|
- in: query
|
|
name: index
|
|
schema:
|
|
type: string
|
|
enum:
|
|
- relevance
|
|
- downloads
|
|
- follows
|
|
- newest
|
|
- updated
|
|
default: relevance
|
|
example: downloads
|
|
description: The sorting method used for sorting search results
|
|
- in: query
|
|
name: offset
|
|
schema:
|
|
type: integer
|
|
default: 0
|
|
example: 20
|
|
description: The offset into the search. Skips this number of results
|
|
- in: query
|
|
name: limit
|
|
schema:
|
|
type: integer
|
|
default: 10
|
|
example: 20
|
|
minimum: 0
|
|
maximum: 100
|
|
description: The number of results returned by the search
|
|
tags:
|
|
- projects
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/SearchResults'
|
|
'400':
|
|
description: Request was invalid, see given error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/InvalidInputError'
|
|
/project/{id|slug}:
|
|
parameters:
|
|
- $ref: '#/components/parameters/ProjectIdentifier'
|
|
get:
|
|
summary: Get a project
|
|
operationId: getProject
|
|
tags:
|
|
- projects
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Project'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
patch:
|
|
summary: Modify a project
|
|
operationId: modifyProject
|
|
tags:
|
|
- projects
|
|
security:
|
|
- TokenAuth:
|
|
- PROJECT_WRITE
|
|
requestBody:
|
|
description: Modified project fields
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/EditableProject'
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
delete:
|
|
summary: Delete a project
|
|
operationId: deleteProject
|
|
tags:
|
|
- projects
|
|
security:
|
|
- TokenAuth:
|
|
- PROJECT_DELETE
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'400':
|
|
description: Request was invalid, see given error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/InvalidInputError'
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
/projects:
|
|
parameters:
|
|
- $ref: '#/components/parameters/MultipleProjectIdentifier'
|
|
get:
|
|
summary: Get multiple projects
|
|
operationId: getProjects
|
|
tags:
|
|
- projects
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Project'
|
|
patch:
|
|
summary: Bulk-edit multiple projects
|
|
operationId: patchProjects
|
|
tags:
|
|
- projects
|
|
security:
|
|
- TokenAuth:
|
|
- PROJECT_WRITE
|
|
requestBody:
|
|
description: Fields to edit on all projects specified
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/PatchProjectsBody'
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'400':
|
|
description: Request was invalid, see given error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/InvalidInputError'
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
/projects_random:
|
|
get:
|
|
summary: Get a list of random projects
|
|
operationId: randomProjects
|
|
parameters:
|
|
- in: query
|
|
name: count
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
example: 70
|
|
minimum: 0
|
|
maximum: 100
|
|
description: The number of random projects to return
|
|
tags:
|
|
- projects
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Project'
|
|
'400':
|
|
description: Request was invalid, see given error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/InvalidInputError'
|
|
/project:
|
|
post:
|
|
summary: Create a project
|
|
operationId: createProject
|
|
tags:
|
|
- projects
|
|
security:
|
|
- TokenAuth:
|
|
- PROJECT_CREATE
|
|
requestBody:
|
|
description: New project
|
|
content:
|
|
multipart/form-data:
|
|
schema:
|
|
$ref: '#/components/schemas/CreateProjectBody'
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Project'
|
|
'400':
|
|
description: Request was invalid, see given error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/InvalidInputError'
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
/project/{id|slug}/icon:
|
|
parameters:
|
|
- $ref: '#/components/parameters/ProjectIdentifier'
|
|
patch:
|
|
summary: Change project's icon
|
|
description: The new icon may be up to 256KiB in size.
|
|
operationId: changeProjectIcon
|
|
tags:
|
|
- projects
|
|
parameters:
|
|
- description: Image extension
|
|
in: query
|
|
name: ext
|
|
required: true
|
|
schema:
|
|
type: string
|
|
enum:
|
|
- png
|
|
- jpg
|
|
- jpeg
|
|
- bmp
|
|
- gif
|
|
- webp
|
|
- svg
|
|
- svgz
|
|
- rgb
|
|
requestBody:
|
|
$ref: '#/components/requestBodies/Image'
|
|
security:
|
|
- TokenAuth:
|
|
- PROJECT_WRITE
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'400':
|
|
description: Request was invalid, see given error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/InvalidInputError'
|
|
delete:
|
|
summary: Delete project's icon
|
|
operationId: deleteProjectIcon
|
|
tags:
|
|
- projects
|
|
security:
|
|
- TokenAuth:
|
|
- PROJECT_WRITE
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'400':
|
|
description: Request was invalid, see given error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/InvalidInputError'
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
/project/{id|slug}/check:
|
|
parameters:
|
|
- $ref: '#/components/parameters/ProjectIdentifier'
|
|
get:
|
|
summary: Check project slug/ID validity
|
|
operationId: checkProjectValidity
|
|
tags:
|
|
- projects
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ProjectIdentifier'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
/project/{id|slug}/gallery:
|
|
parameters:
|
|
- $ref: '#/components/parameters/ProjectIdentifier'
|
|
post:
|
|
summary: Add a gallery image
|
|
description: >-
|
|
Modrinth allows you to upload files of up to 5MiB to a project's
|
|
gallery.
|
|
operationId: addGalleryImage
|
|
tags:
|
|
- projects
|
|
security:
|
|
- TokenAuth:
|
|
- PROJECT_WRITE
|
|
parameters:
|
|
- description: Image extension
|
|
in: query
|
|
name: ext
|
|
required: true
|
|
schema:
|
|
type: string
|
|
enum:
|
|
- png
|
|
- jpg
|
|
- jpeg
|
|
- bmp
|
|
- gif
|
|
- webp
|
|
- svg
|
|
- svgz
|
|
- rgb
|
|
- description: Whether an image is featured
|
|
in: query
|
|
name: featured
|
|
required: true
|
|
schema:
|
|
type: boolean
|
|
- description: Title of the image
|
|
in: query
|
|
name: title
|
|
schema:
|
|
type: string
|
|
- description: Description of the image
|
|
in: query
|
|
name: description
|
|
schema:
|
|
type: string
|
|
- description: Ordering of the image
|
|
in: query
|
|
name: ordering
|
|
schema:
|
|
type: integer
|
|
requestBody:
|
|
$ref: '#/components/requestBodies/Image'
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'400':
|
|
description: Request was invalid, see given error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/InvalidInputError'
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
patch:
|
|
summary: Modify a gallery image
|
|
operationId: modifyGalleryImage
|
|
tags:
|
|
- projects
|
|
security:
|
|
- TokenAuth:
|
|
- PROJECT_WRITE
|
|
parameters:
|
|
- description: URL link of the image to modify
|
|
in: query
|
|
name: url
|
|
required: true
|
|
schema:
|
|
type: string
|
|
format: uri
|
|
- description: Whether the image is featured
|
|
in: query
|
|
name: featured
|
|
schema:
|
|
type: boolean
|
|
- description: New title of the image
|
|
in: query
|
|
name: title
|
|
schema:
|
|
type: string
|
|
- description: New description of the image
|
|
in: query
|
|
name: description
|
|
schema:
|
|
type: string
|
|
- description: New ordering of the image
|
|
in: query
|
|
name: ordering
|
|
schema:
|
|
type: integer
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
delete:
|
|
summary: Delete a gallery image
|
|
operationId: deleteGalleryImage
|
|
tags:
|
|
- projects
|
|
security:
|
|
- TokenAuth:
|
|
- PROJECT_WRITE
|
|
parameters:
|
|
- description: URL link of the image to delete
|
|
in: query
|
|
name: url
|
|
required: true
|
|
schema:
|
|
type: string
|
|
format: uri
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'400':
|
|
description: Request was invalid, see given error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/InvalidInputError'
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
/project/{id|slug}/dependencies:
|
|
parameters:
|
|
- $ref: '#/components/parameters/ProjectIdentifier'
|
|
get:
|
|
summary: Get all of a project's dependencies
|
|
operationId: getDependencies
|
|
tags:
|
|
- projects
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ProjectDependencyList'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
/project/{id|slug}/follow:
|
|
parameters:
|
|
- $ref: '#/components/parameters/ProjectIdentifier'
|
|
post:
|
|
summary: Follow a project
|
|
operationId: followProject
|
|
tags:
|
|
- projects
|
|
security:
|
|
- TokenAuth:
|
|
- USER_WRITE
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'400':
|
|
description: Request was invalid, see given error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/InvalidInputError'
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
delete:
|
|
summary: Unfollow a project
|
|
operationId: unfollowProject
|
|
tags:
|
|
- projects
|
|
security:
|
|
- TokenAuth:
|
|
- USER_WRITE
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'400':
|
|
description: Request was invalid, see given error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/InvalidInputError'
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
/project/{id|slug}/schedule:
|
|
parameters:
|
|
- $ref: '#/components/parameters/ProjectIdentifier'
|
|
post:
|
|
summary: Schedule a project
|
|
operationId: scheduleProject
|
|
tags:
|
|
- projects
|
|
security:
|
|
- TokenAuth:
|
|
- PROJECT_WRITE
|
|
requestBody:
|
|
description: Information about date and requested status
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Schedule'
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'400':
|
|
description: Request was invalid, see given error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/InvalidInputError'
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
/project/{id|slug}/version:
|
|
parameters:
|
|
- $ref: '#/components/parameters/ProjectIdentifier'
|
|
get:
|
|
summary: List project's versions
|
|
operationId: getProjectVersions
|
|
tags:
|
|
- versions
|
|
parameters:
|
|
- in: query
|
|
name: loaders
|
|
required: false
|
|
description: The types of loaders to filter for
|
|
schema:
|
|
type: array
|
|
items:
|
|
type: string
|
|
example: '["fabric"]'
|
|
- in: query
|
|
name: game_versions
|
|
required: false
|
|
description: The game versions to filter for
|
|
schema:
|
|
type: array
|
|
items:
|
|
type: string
|
|
example: '["1.18.1"]'
|
|
- in: query
|
|
name: featured
|
|
required: false
|
|
description: Allows to filter for featured or non-featured versions only
|
|
schema:
|
|
type: boolean
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Version'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
/version/{id}:
|
|
parameters:
|
|
- $ref: '#/components/parameters/VersionIdentifier'
|
|
get:
|
|
summary: Get a version
|
|
operationId: getVersion
|
|
tags:
|
|
- versions
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Version'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
patch:
|
|
summary: Modify a version
|
|
operationId: modifyVersion
|
|
tags:
|
|
- versions
|
|
security:
|
|
- TokenAuth:
|
|
- VERSION_WRITE
|
|
requestBody:
|
|
description: Modified version fields
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/EditableVersion'
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
delete:
|
|
summary: Delete a version
|
|
operationId: deleteVersion
|
|
tags:
|
|
- versions
|
|
security:
|
|
- TokenAuth:
|
|
- VERSION_DELETE
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
/project/{id|slug}/version/{id|number}:
|
|
parameters:
|
|
- $ref: '#/components/parameters/ProjectIdentifier'
|
|
- name: id|number
|
|
in: path
|
|
required: true
|
|
description: The version ID or version number
|
|
schema:
|
|
type: string
|
|
example:
|
|
- IIJJKKLL
|
|
get:
|
|
summary: Get a version given a version number or ID
|
|
description: >-
|
|
Please note that, if the version number provided matches multiple
|
|
versions, only the **oldest matching version** will be returned.
|
|
operationId: getVersionFromIdOrNumber
|
|
tags:
|
|
- versions
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Version'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
/version:
|
|
post:
|
|
summary: Create a version
|
|
description: >
|
|
This 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.
|
|
|
|
|
|
The 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.
|
|
|
|
|
|
You 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`.
|
|
operationId: createVersion
|
|
tags:
|
|
- versions
|
|
security:
|
|
- TokenAuth:
|
|
- VERSION_CREATE
|
|
requestBody:
|
|
description: New version
|
|
content:
|
|
multipart/form-data:
|
|
schema:
|
|
$ref: '#/components/schemas/CreateVersionBody'
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Version'
|
|
'400':
|
|
description: Request was invalid, see given error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/InvalidInputError'
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
/version/{id}/schedule:
|
|
parameters:
|
|
- $ref: '#/components/parameters/VersionIdentifier'
|
|
post:
|
|
summary: Schedule a version
|
|
operationId: scheduleVersion
|
|
tags:
|
|
- versions
|
|
security:
|
|
- TokenAuth:
|
|
- VERSION_WRITE
|
|
requestBody:
|
|
description: Information about date and requested status
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Schedule'
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'400':
|
|
description: Request was invalid, see given error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/InvalidInputError'
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
/versions:
|
|
parameters:
|
|
- in: query
|
|
name: ids
|
|
description: The IDs of the versions
|
|
schema:
|
|
type: array
|
|
items:
|
|
type: string
|
|
example: '["AABBCCDD", "EEFFGGHH"]'
|
|
required: true
|
|
get:
|
|
summary: Get multiple versions
|
|
operationId: getVersions
|
|
tags:
|
|
- versions
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Version'
|
|
/version/{id}/file:
|
|
parameters:
|
|
- $ref: '#/components/parameters/VersionIdentifier'
|
|
post:
|
|
summary: Add files to version
|
|
description: Project files are attached. `.mrpack` and `.jar` files are accepted.
|
|
operationId: addFilesToVersion
|
|
tags:
|
|
- versions
|
|
security:
|
|
- TokenAuth:
|
|
- VERSION_WRITE
|
|
requestBody:
|
|
description: New version files
|
|
content:
|
|
multipart/form-data:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
data:
|
|
type: object
|
|
enum:
|
|
- {}
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
/version_file/{hash}:
|
|
parameters:
|
|
- $ref: '#/components/parameters/FileHashIdentifier'
|
|
- $ref: '#/components/parameters/AlgorithmIdentifier'
|
|
get:
|
|
summary: Get version from hash
|
|
operationId: versionFromHash
|
|
tags:
|
|
- version-files
|
|
parameters:
|
|
- $ref: '#/components/parameters/MultipleHashQueryIdentifier'
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Version'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
delete:
|
|
summary: Delete a file from its hash
|
|
operationId: deleteFileFromHash
|
|
tags:
|
|
- version-files
|
|
security:
|
|
- TokenAuth:
|
|
- VERSION_WRITE
|
|
parameters:
|
|
- description: >-
|
|
Version ID to delete the version from, if multiple files of the same
|
|
hash exist
|
|
required: false
|
|
in: query
|
|
name: version_id
|
|
schema:
|
|
type: string
|
|
example:
|
|
- IIJJKKLL
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
/version_file/{hash}/update:
|
|
parameters:
|
|
- $ref: '#/components/parameters/FileHashIdentifier'
|
|
- $ref: '#/components/parameters/AlgorithmIdentifier'
|
|
post:
|
|
summary: Latest version of a project from a hash, loader(s), and game version(s)
|
|
operationId: getLatestVersionFromHash
|
|
tags:
|
|
- version-files
|
|
requestBody:
|
|
description: Parameters of the updated version requested
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/GetLatestVersionFromHashBody'
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Version'
|
|
'400':
|
|
description: Request was invalid, see given error
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
/version_files:
|
|
post:
|
|
summary: Get versions from hashes
|
|
description: >-
|
|
This is the same as [`/version_file/{hash}`](#operation/versionFromHash)
|
|
except it accepts multiple hashes.
|
|
operationId: versionsFromHashes
|
|
tags:
|
|
- version-files
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/HashVersionMap'
|
|
'400':
|
|
description: Request was invalid, see given error
|
|
requestBody:
|
|
description: Hashes and algorithm of the versions requested
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/HashList'
|
|
/version_files/update:
|
|
post:
|
|
summary: >-
|
|
Latest versions of multiple project from hashes, loader(s), and game
|
|
version(s)
|
|
description: >-
|
|
This is the same as
|
|
[`/version_file/{hash}/update`](#operation/getLatestVersionFromHash)
|
|
except it accepts multiple hashes.
|
|
operationId: getLatestVersionsFromHashes
|
|
tags:
|
|
- version-files
|
|
requestBody:
|
|
description: Parameters of the updated version requested
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/GetLatestVersionsFromHashesBody'
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/HashVersionMap'
|
|
'400':
|
|
description: Request was invalid, see given error
|
|
/user/{id|username}:
|
|
parameters:
|
|
- $ref: '#/components/parameters/UserIdentifier'
|
|
get:
|
|
summary: Get a user
|
|
operationId: getUser
|
|
tags:
|
|
- users
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/User'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
patch:
|
|
summary: Modify a user
|
|
operationId: modifyUser
|
|
tags:
|
|
- users
|
|
security:
|
|
- TokenAuth:
|
|
- USER_WRITE
|
|
requestBody:
|
|
description: Modified user fields
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/EditableUser'
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
/user:
|
|
get:
|
|
summary: Get user from authorization header
|
|
operationId: getUserFromAuth
|
|
tags:
|
|
- users
|
|
security:
|
|
- TokenAuth:
|
|
- USER_READ
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/User'
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
/users:
|
|
parameters:
|
|
- in: query
|
|
name: ids
|
|
description: The IDs of the users
|
|
schema:
|
|
type: array
|
|
items:
|
|
type: string
|
|
example: '["AABBCCDD", "EEFFGGHH"]'
|
|
required: true
|
|
get:
|
|
summary: Get multiple users
|
|
operationId: getUsers
|
|
tags:
|
|
- users
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/User'
|
|
/user/{id|username}/icon:
|
|
parameters:
|
|
- $ref: '#/components/parameters/UserIdentifier'
|
|
patch:
|
|
summary: Change user's avatar
|
|
description: The new avatar may be up to 2MiB in size.
|
|
operationId: changeUserIcon
|
|
tags:
|
|
- users
|
|
requestBody:
|
|
$ref: '#/components/requestBodies/Image'
|
|
security:
|
|
- TokenAuth:
|
|
- USER_WRITE
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'400':
|
|
description: Request was invalid, see given error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/InvalidInputError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
/user/{id|username}/projects:
|
|
parameters:
|
|
- $ref: '#/components/parameters/UserIdentifier'
|
|
get:
|
|
summary: Get user's projects
|
|
operationId: getUserProjects
|
|
tags:
|
|
- users
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Project'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
/user/{id|username}/follows:
|
|
parameters:
|
|
- $ref: '#/components/parameters/UserIdentifier'
|
|
get:
|
|
summary: Get user's followed projects
|
|
operationId: getFollowedProjects
|
|
tags:
|
|
- users
|
|
security:
|
|
- TokenAuth:
|
|
- USER_READ
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Project'
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
/user/{id|username}/payouts:
|
|
parameters:
|
|
- $ref: '#/components/parameters/UserIdentifier'
|
|
get:
|
|
summary: Get user's payout history
|
|
operationId: getPayoutHistory
|
|
tags:
|
|
- users
|
|
security:
|
|
- TokenAuth:
|
|
- PAYOUTS_READ
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/UserPayoutHistory'
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
post:
|
|
summary: Withdraw payout balance to PayPal or Venmo
|
|
operationId: withdrawPayout
|
|
description: >-
|
|
Warning: certain amounts get withheld for fees. Please do not call this
|
|
API endpoint without first acknowledging the warnings on the
|
|
corresponding frontend page.
|
|
tags:
|
|
- users
|
|
security:
|
|
- TokenAuth:
|
|
- PAYOUTS_WRITE
|
|
parameters:
|
|
- name: amount
|
|
in: query
|
|
description: Amount to withdraw
|
|
schema:
|
|
type: integer
|
|
required: true
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
/user/{id|username}/notifications:
|
|
parameters:
|
|
- $ref: '#/components/parameters/UserIdentifier'
|
|
get:
|
|
summary: Get user's notifications
|
|
operationId: getUserNotifications
|
|
tags:
|
|
- notifications
|
|
security:
|
|
- TokenAuth:
|
|
- NOTIFICATION_READ
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Notification'
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
/notification/{id}:
|
|
parameters:
|
|
- $ref: '#/components/parameters/NotificationIdentifier'
|
|
get:
|
|
summary: Get notification from ID
|
|
operationId: getNotification
|
|
tags:
|
|
- notifications
|
|
security:
|
|
- TokenAuth:
|
|
- NOTIFICATION_READ
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Notification'
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
patch:
|
|
summary: Mark notification as read
|
|
operationId: readNotification
|
|
tags:
|
|
- notifications
|
|
security:
|
|
- TokenAuth:
|
|
- NOTIFICATION_WRITE
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
delete:
|
|
summary: Delete notification
|
|
operationId: deleteNotification
|
|
tags:
|
|
- notifications
|
|
security:
|
|
- TokenAuth:
|
|
- NOTIFICATION_WRITE
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
/notifications:
|
|
parameters:
|
|
- in: query
|
|
name: ids
|
|
description: The IDs of the notifications
|
|
schema:
|
|
type: array
|
|
items:
|
|
type: string
|
|
example: '["AABBCCDD", "EEFFGGHH"]'
|
|
required: true
|
|
get:
|
|
summary: Get multiple notifications
|
|
operationId: getNotifications
|
|
tags:
|
|
- notifications
|
|
security:
|
|
- TokenAuth:
|
|
- NOTIFICATION_READ
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Notification'
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
patch:
|
|
summary: Mark multiple notifications as read
|
|
operationId: readNotifications
|
|
tags:
|
|
- notifications
|
|
security:
|
|
- TokenAuth:
|
|
- NOTIFICATION_WRITE
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
delete:
|
|
summary: Delete multiple notifications
|
|
operationId: deleteNotifications
|
|
tags:
|
|
- notifications
|
|
security:
|
|
- TokenAuth:
|
|
- NOTIFICATION_WRITE
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
/report:
|
|
post:
|
|
summary: Report a project, user, or version
|
|
description: >-
|
|
Bring a project, user, or version to the attention of the moderators by
|
|
reporting it.
|
|
operationId: submitReport
|
|
tags:
|
|
- threads
|
|
security:
|
|
- TokenAuth:
|
|
- REPORT_CREATE
|
|
requestBody:
|
|
description: The report to be sent
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/CreatableReport'
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Report'
|
|
'400':
|
|
description: Request was invalid, see given error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/InvalidInputError'
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
get:
|
|
summary: Get your open reports
|
|
operationId: getOpenReports
|
|
tags:
|
|
- threads
|
|
security:
|
|
- TokenAuth:
|
|
- REPORT_READ
|
|
parameters:
|
|
- in: query
|
|
name: count
|
|
schema:
|
|
type: integer
|
|
example: 100
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Report'
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
/report/{id}:
|
|
parameters:
|
|
- $ref: '#/components/parameters/ReportIdentifier'
|
|
get:
|
|
summary: Get report from ID
|
|
operationId: getReport
|
|
tags:
|
|
- threads
|
|
security:
|
|
- TokenAuth:
|
|
- REPORT_READ
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Report'
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
patch:
|
|
summary: Modify a report
|
|
operationId: modifyReport
|
|
tags:
|
|
- threads
|
|
security:
|
|
- TokenAuth:
|
|
- REPORT_WRITE
|
|
requestBody:
|
|
description: What to modify about the report
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
body:
|
|
type: string
|
|
description: The contents of the report
|
|
example: This is the meat and potatoes of the report!
|
|
closed:
|
|
type: boolean
|
|
description: Whether the thread should be closed
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'400':
|
|
description: Request was invalid, see given error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/InvalidInputError'
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
/reports:
|
|
parameters:
|
|
- in: query
|
|
name: ids
|
|
description: The IDs of the reports
|
|
schema:
|
|
type: array
|
|
items:
|
|
type: string
|
|
example: '["AABBCCDD", "EEFFGGHH"]'
|
|
required: true
|
|
get:
|
|
summary: Get multiple reports
|
|
operationId: getReports
|
|
tags:
|
|
- threads
|
|
security:
|
|
- TokenAuth:
|
|
- REPORT_READ
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Report'
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
/thread/{id}:
|
|
parameters:
|
|
- $ref: '#/components/parameters/ThreadIdentifier'
|
|
get:
|
|
summary: Get a thread
|
|
operationId: getThread
|
|
tags:
|
|
- threads
|
|
security:
|
|
- TokenAuth:
|
|
- THREAD_READ
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Thread'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
post:
|
|
summary: Send a text message to a thread
|
|
operationId: sendThreadMessage
|
|
tags:
|
|
- threads
|
|
security:
|
|
- TokenAuth:
|
|
- THREAD_WRITE
|
|
requestBody:
|
|
description: >-
|
|
The message to be sent. Note that you only need the fields applicable
|
|
for the `text` type.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ThreadMessageBody'
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Thread'
|
|
'400':
|
|
description: Request was invalid, see given error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/InvalidInputError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
/threads:
|
|
parameters:
|
|
- in: query
|
|
name: ids
|
|
description: The IDs of the threads
|
|
schema:
|
|
type: array
|
|
items:
|
|
type: string
|
|
example: '["AABBCCDD", "EEFFGGHH"]'
|
|
required: true
|
|
get:
|
|
summary: Get multiple threads
|
|
operationId: getThreads
|
|
tags:
|
|
- threads
|
|
security:
|
|
- TokenAuth:
|
|
- THREAD_READ
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Thread'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
/message/{id}:
|
|
parameters:
|
|
- name: id
|
|
in: path
|
|
required: true
|
|
description: The ID of the message
|
|
schema:
|
|
type: string
|
|
example:
|
|
- IIJJKKLL
|
|
delete:
|
|
summary: Delete a thread message
|
|
operationId: deleteThreadMessage
|
|
tags:
|
|
- threads
|
|
security:
|
|
- TokenAuth:
|
|
- THREAD_WRITE
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
/project/{id|slug}/members:
|
|
parameters:
|
|
- $ref: '#/components/parameters/ProjectIdentifier'
|
|
get:
|
|
summary: Get a project's team members
|
|
operationId: getProjectTeamMembers
|
|
tags:
|
|
- teams
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/TeamMember'
|
|
description: An array of team members
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
/team/{id}/members:
|
|
parameters:
|
|
- $ref: '#/components/parameters/TeamIdentifier'
|
|
get:
|
|
summary: Get a team's members
|
|
operationId: getTeamMembers
|
|
tags:
|
|
- teams
|
|
security:
|
|
- TokenAuth:
|
|
- PROJECT_READ
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/TeamMember'
|
|
description: An array of team members
|
|
post:
|
|
summary: Add a user to a team
|
|
operationId: addTeamMember
|
|
tags:
|
|
- teams
|
|
security:
|
|
- TokenAuth:
|
|
- PROJECT_WRITE
|
|
requestBody:
|
|
description: User to be added (must be the ID, usernames cannot be used here)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/UserIdentifier'
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
/teams:
|
|
parameters:
|
|
- in: query
|
|
name: ids
|
|
description: The IDs of the teams
|
|
schema:
|
|
type: array
|
|
items:
|
|
type: string
|
|
example: '["AABBCCDD", "EEFFGGHH"]'
|
|
required: true
|
|
get:
|
|
summary: Get the members of multiple teams
|
|
operationId: getTeams
|
|
tags:
|
|
- teams
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/TeamMember'
|
|
/team/{id}/join:
|
|
parameters:
|
|
- $ref: '#/components/parameters/TeamIdentifier'
|
|
post:
|
|
summary: Join a team
|
|
operationId: joinTeam
|
|
tags:
|
|
- teams
|
|
security:
|
|
- TokenAuth:
|
|
- PROJECT_WRITE
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
/team/{id}/members/{id|username}:
|
|
parameters:
|
|
- $ref: '#/components/parameters/TeamIdentifier'
|
|
- $ref: '#/components/parameters/UserIdentifier'
|
|
patch:
|
|
summary: Modify a team member's information
|
|
operationId: modifyTeamMember
|
|
tags:
|
|
- teams
|
|
security:
|
|
- TokenAuth:
|
|
- PROJECT_WRITE
|
|
requestBody:
|
|
description: Contents to be modified
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ModifyTeamMemberBody'
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
delete:
|
|
summary: Remove a member from a team
|
|
operationId: deleteTeamMember
|
|
tags:
|
|
- teams
|
|
security:
|
|
- TokenAuth:
|
|
- PROJECT_WRITE
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
/team/{id}/owner:
|
|
parameters:
|
|
- $ref: '#/components/parameters/TeamIdentifier'
|
|
patch:
|
|
summary: Transfer team's ownership to another user
|
|
operationId: transferTeamOwnership
|
|
tags:
|
|
- teams
|
|
security:
|
|
- TokenAuth:
|
|
- PROJECT_WRITE
|
|
requestBody:
|
|
description: New owner's ID
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/UserIdentifier'
|
|
responses:
|
|
'204':
|
|
description: Expected response to a valid request
|
|
'401':
|
|
description: >-
|
|
Incorrect token scopes or no authorization to access the requested
|
|
item(s)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthError'
|
|
'404':
|
|
description: >-
|
|
The requested item(s) were not found or no authorization to access
|
|
the requested item(s)
|
|
/tag/category:
|
|
get:
|
|
summary: Get a list of categories
|
|
description: Gets an array of categories, their icons, and applicable project types
|
|
operationId: categoryList
|
|
tags:
|
|
- tags
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/CategoryTag'
|
|
/tag/loader:
|
|
get:
|
|
summary: Get a list of loaders
|
|
description: Gets an array of loaders, their icons, and supported project types
|
|
operationId: loaderList
|
|
tags:
|
|
- tags
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/LoaderTag'
|
|
/tag/game_version:
|
|
get:
|
|
summary: Get a list of game versions
|
|
description: Gets an array of game versions and information about them
|
|
operationId: versionList
|
|
tags:
|
|
- tags
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/GameVersionTag'
|
|
/tag/license:
|
|
get:
|
|
deprecated: true
|
|
summary: Get a list of licenses
|
|
description: Deprecated - simply use SPDX IDs.
|
|
operationId: licenseList
|
|
tags:
|
|
- tags
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/LicenseTag'
|
|
/tag/license/{id}:
|
|
parameters:
|
|
- name: id
|
|
in: path
|
|
required: true
|
|
description: The license ID to get the text of
|
|
schema:
|
|
type: string
|
|
example:
|
|
- LGPL-3.0-or-later
|
|
get:
|
|
summary: Get the text and title of a license
|
|
operationId: licenseText
|
|
tags:
|
|
- tags
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/License'
|
|
'400':
|
|
description: Request was invalid, see given error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/InvalidInputError'
|
|
/tag/donation_platform:
|
|
get:
|
|
summary: Get a list of donation platforms
|
|
description: Gets an array of donation platforms and information about them
|
|
operationId: donationPlatformList
|
|
tags:
|
|
- tags
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/DonationPlatformTag'
|
|
/tag/report_type:
|
|
get:
|
|
summary: Get a list of report types
|
|
description: Gets an array of valid report types
|
|
operationId: reportTypeList
|
|
tags:
|
|
- tags
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
type: string
|
|
example:
|
|
- spam
|
|
- copyright
|
|
- inappropriate
|
|
- malicious
|
|
- name-squatting
|
|
- other
|
|
/tag/project_type:
|
|
get:
|
|
summary: Get a list of project types
|
|
description: Gets an array of valid project types
|
|
operationId: projectTypeList
|
|
tags:
|
|
- tags
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
type: string
|
|
example:
|
|
- mod
|
|
- modpack
|
|
- resourcepack
|
|
- shader
|
|
/tag/side_type:
|
|
get:
|
|
summary: Get a list of side types
|
|
description: Gets an array of valid side types
|
|
operationId: sideTypeList
|
|
tags:
|
|
- tags
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
type: string
|
|
example:
|
|
- required
|
|
- optional
|
|
- unsupported
|
|
- unknown
|
|
/updates/{id|slug}/forge_updates.json:
|
|
parameters:
|
|
- $ref: '#/components/parameters/ProjectIdentifier'
|
|
servers:
|
|
- url: https://api.modrinth.com
|
|
description: Production server
|
|
- url: https://staging-api.modrinth.com
|
|
description: Staging server
|
|
get:
|
|
summary: Forge Updates JSON file
|
|
operationId: forgeUpdates
|
|
description: >
|
|
If you're a Forge mod developer, your Modrinth mods have an
|
|
automatically generated `updates.json` using the
|
|
|
|
[Forge Update
|
|
Checker](https://docs.minecraftforge.net/en/latest/misc/updatechecker/).
|
|
|
|
|
|
The only setup is to insert the URL into the `[[mods]]` section of your
|
|
`mods.toml` file as such:
|
|
|
|
|
|
```toml
|
|
|
|
[[mods]]
|
|
|
|
# the other stuff here - ID, version, display name, etc.
|
|
|
|
updateJSONURL =
|
|
"https://api.modrinth.com/updates/{slug|ID}/forge_updates.json"
|
|
|
|
```
|
|
|
|
|
|
Replace `{slug|id}` with the slug or ID of your project.
|
|
|
|
|
|
Modrinth will handle the rest! When you update your mod, Forge will
|
|
notify your users that their copy of your mod is out of date.
|
|
|
|
|
|
Make sure that the version format you use for your Modrinth releases is
|
|
the same as the version format you use in your `mods.toml`.
|
|
|
|
If 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`,
|
|
|
|
the update checker may not function properly.
|
|
tags:
|
|
- misc
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ForgeUpdates'
|
|
'400':
|
|
description: Invalid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/InvalidInputError'
|
|
/statistics:
|
|
get:
|
|
summary: Various statistics about this Modrinth instance
|
|
operationId: statistics
|
|
tags:
|
|
- misc
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Statistics'
|