---
title: "Create a new package version"
method: POST
path: "/scopes/{scope}/packages/{package}/versions/{version}"
---

# Create a new package version

`POST /scopes/{scope}/packages/{package}/versions/{version}`

Creates a new version of a package

## Path parameters

- `scope` string, required — The name of a scope. This must not be @ prefixed.
- `package` string, required — The name of a package.
- `version` string, required — A semantic version.

## Query parameters

- `config` string, required

## Response `200`

OK

- PublishingTask
  - `id` string, uuid, required — The ID of the publishing task.
  - `status` 'pending' | 'processing' | 'processed' | 'success' | 'failure', required — The status of the publishing task.
  - `error` object, nullable
    - `code` string — The error code.
    - `message` string — The error message.
  - `user` User — Public user information.
    - `id` string, uuid, required — The ID of a user.
    - `name` string, required — The user's display name.
    - `avatarUrl` string, required — The URL to the user's avatar.
    - `githubId` integer, nullable — The user's GitHub ID.
    - `createdAt` string, date-time, required — The date and time when the user profile was created.
    - `updatedAt` string, date-time, required — The date and time when the user profile was last updated.
  - `packageScope` string, required — The name of a scope. This must not be @ prefixed.
  - `packageName` string, required — The name of a package.
  - `packageVersion` string, required — A semantic version.
  - `createdAt` string, date-time, required — The date and time when the publishing task was created.
  - `updatedAt` string, date-time, required — The date and time when the publishing task was last updated.

## Other responses

- `400` — Invalid request / Package version already exists
- `401` — Unauthorized / User is not a scope member
- `403` — User is not a scope member
- `404` — Package not found

## Changes

- **2026-02-06** `0c4e8d8a5c2a` — 2 breaking, 2 warning, 3 info
  - the response property `error` became optional for the status `200`
  - removed the required property `userId` from the response with the `200` status
  - changed the pattern of the `path` request parameter `package` from `/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/` to `^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$`
  - changed the pattern of the `path` request parameter `scope` from `/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/` to `^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$`
  - …3 more
- **2024-02-28** `f8d3b912d946` — 3 warning, 4 info
  - changed the pattern of the `path` request parameter `package` from `^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$` to `/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/`
  - changed the pattern of the `path` request parameter `scope` from `^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$` to `/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/`
  - removed the optional property `user` from the response with the `200` status
  - the response property `error` became required for the status `200`
  - …3 more

[Change history](https://skmtc.dev/jsr-io/apis/jsr-api/changes/scopes/:scope/packages/:package/versions/:version/post.md)

---

[API](https://skmtc.dev/jsr-io/apis/jsr-api.md) · [All operations](https://skmtc.dev/jsr-io/apis/jsr-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/jsr-io/jsr-api/revisions/abb153728b13/schema)
