---
title: "Create a version"
method: POST
path: "/version"
tags: ["versions"]
---

# Create a version

`POST /version`

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`.

## Response `200`

Expected response to a valid request

- Version
  - `name` string, required — The name of this version
  - `version_number` string, required — The version number. Ideally will follow semantic versioning
  - `changelog` string, nullable — The changelog for this version
  - `dependencies` VersionDependency[] — A list of specific versions of projects that this version depends on
    - `version_id` string, nullable — The ID of the version that this version depends on
    - `project_id` string, nullable — The ID of the project that this version depends on
    - `file_name` string, nullable — The file name of the dependency, mostly used for showing external dependencies on modpacks
    - `dependency_type` 'required' | 'optional' | 'incompatible' | 'embedded', required — The type of dependency that this version has
  - `game_versions` string[], required — A list of versions of Minecraft that this version supports
  - `version_type` 'release' | 'beta' | 'alpha', required — The release channel for this version
  - `loaders` string[], required — The mod loaders that this version supports. In case of resource packs, use "minecraft"
  - `featured` boolean, required — Whether the version is featured or not
  - `status` 'listed' | 'archived' | 'draft' | 'unlisted' | 'scheduled' | 'unknown'
  - `requested_status` 'listed' | 'archived' | 'draft' | 'unlisted', nullable
  - `id` string, required — The ID of the version, encoded as a base62 string
  - `project_id` string, required — The ID of the project this version is for
  - `author_id` string, required — The ID of the author who published this version
  - `date_published` string, ISO-8601, required
  - `downloads` integer, required — The number of times this version has been downloaded
  - `changelog_url` string, nullable — A link to the changelog for this version. Always null, only kept for legacy compatibility.
  - `environment` 'client_and_server' | 'client_only' | 'client_only_server_optional' | 'singleplayer_only' | 'server_only' | 'server_only_client_optional' | 'dedicated_server_only' | 'client_or_server' | 'client_or_server_prefers_both' | 'unknown', required — The environment a project or version supports. For an explanation of each environment, see the blog post here: https://modrinth.com/news/article/new-environments/#new-system
  - `files` VersionFile[], required — A list of files available for download for this version
    - `hashes` VersionFileHashes, required — A map of hashes of the file. The key is the hashing algorithm and the value is the string version of the hash.
      - `sha512` string
      - `sha1` string
    - `url` string, required — A direct link to the file
    - `filename` string, required — The name of the file
    - `primary` boolean, required — 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` integer, required — The size of the file in bytes
    - `file_type` 'required-resource-pack' | 'optional-resource-pack' | 'sources-jar' | 'dev-jar' | 'javadoc-jar' | 'unknown' | 'signature', nullable — The type of the additional file, used mainly for adding resource packs to datapacks

## Other responses

- `400` — Request was invalid, see given error
- `401` — Incorrect token scopes or no authorization to access the requested item(s)

---

[API](https://skmtc.net/modrinth/apis/labrinth.md) · [All operations](https://skmtc.net/modrinth/apis/labrinth/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/modrinth/labrinth/revisions/16bb5dbc54f4/schema)
