Verdaccio publish API
Publish, update, and unpublish packages
Publish, update, and unpublish packages
openapi: 3.0.3
info:
title: Verdaccio npm Registry dist-tags publish API
description: 'The Verdaccio npm Registry REST API implements the CommonJS Compliant Package Registry specification, providing endpoints to publish, retrieve, search, and delete npm packages. It supports JWT tokens and Basic Auth for authentication and mirrors the standard npm registry protocol so any npm, yarn, or pnpm client can interact with it without modification.
'
version: 6.0.0
contact:
name: Verdaccio Community
url: https://discord.gg/7qWJxBf
license:
name: MIT
url: https://github.com/verdaccio/verdaccio/blob/master/LICENSE
x-api-id: verdaccio:verdaccio-npm-registry-api
servers:
- url: http://localhost:4873
description: Default local Verdaccio instance
security:
- bearerAuth: []
- basicAuth: []
tags:
- name: publish
description: Publish, update, and unpublish packages
paths:
/{package}:
put:
operationId: publishPackage
summary: Publish a new package
description: 'Publishes a new package or a new version of an existing package. The request body must include the package metadata and an `_attachments` property containing the base64-encoded tarball.
'
tags:
- publish
parameters:
- $ref: '#/components/parameters/PackageName'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PublishRequest'
responses:
'201':
description: Package published successfully
content:
application/json:
schema:
$ref: '#/components/schemas/OkResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'409':
description: Package version already exists
/{package}/-rev/{revision}:
put:
operationId: updatePackageRevision
summary: Update package at a specific revision
description: 'Used during unpublish to update the package manifest to a new revision, removing the specified version from metadata.
'
tags:
- publish
parameters:
- $ref: '#/components/parameters/PackageName'
- name: revision
in: path
required: true
schema:
type: string
description: CouchDB-style revision identifier (e.g. `14-abc123`)
example: 14-5d500cfce92f90fd
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PublishRequest'
responses:
'201':
description: Package revision updated
content:
application/json:
schema:
$ref: '#/components/schemas/OkResponse'
'404':
$ref: '#/components/responses/NotFound'
/{package}/-/{filename}/-rev/{revision}:
delete:
operationId: deleteTarball
summary: Delete a package tarball
description: 'Deletes a specific tarball file. Called as the final step of the npm unpublish flow after the package manifest has been updated.
'
tags:
- publish
parameters:
- $ref: '#/components/parameters/PackageName'
- name: filename
in: path
required: true
schema:
type: string
description: Tarball filename (e.g. `package-1.0.0.tgz`)
example: my-package-1.0.0.tgz
- name: revision
in: path
required: true
schema:
type: string
description: CouchDB-style revision identifier
example: 16-e11c8db282b2d992
responses:
'201':
description: Tarball deleted successfully
content:
application/json:
schema:
$ref: '#/components/schemas/OkResponse'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
components:
responses:
NotFound:
description: Package or resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
Forbidden:
description: Authenticated user lacks permission for this operation
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
Unauthorized:
description: Authentication required or credentials are invalid
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
BadRequest:
description: Bad request — missing or invalid parameters
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
schemas:
PackageAttachment:
type: object
properties:
content_type:
type: string
example: application/octet-stream
data:
type: string
format: byte
description: Base64-encoded tarball content
length:
type: integer
description: Byte length of the unencoded tarball
DistTagsMap:
type: object
additionalProperties:
type: string
description: Map of dist-tag names to version strings
example:
latest: 1.2.3
next: 2.0.0-beta.1
beta: 2.0.0-beta.1
OkResponse:
type: object
properties:
ok:
type: string
description: Human-readable success message
example: package published
required:
- ok
ErrorResponse:
type: object
properties:
error:
type: string
description: Human-readable error message
example: package not found
required:
- error
PublishRequest:
type: object
description: Package manifest payload used for publish and revision update operations
properties:
_id:
type: string
description: Package name used as document ID
example: my-package
name:
type: string
description: Package name
example: my-package
description:
type: string
description: Package description
dist-tags:
$ref: '#/components/schemas/DistTagsMap'
versions:
type: object
additionalProperties:
$ref: '#/components/schemas/VersionManifest'
_attachments:
type: object
additionalProperties:
$ref: '#/components/schemas/PackageAttachment'
description: Tarball attachments keyed by filename
required:
- name
- versions
VersionManifest:
type: object
description: Metadata for a single package version
properties:
name:
type: string
example: my-package
version:
type: string
example: 1.0.0
description:
type: string
main:
type: string
example: index.js
scripts:
type: object
additionalProperties:
type: string
keywords:
type: array
items:
type: string
author:
oneOf:
- type: string
- type: object
properties:
name:
type: string
email:
type: string
url:
type: string
license:
type: string
example: MIT
dependencies:
type: object
additionalProperties:
type: string
devDependencies:
type: object
additionalProperties:
type: string
peerDependencies:
type: object
additionalProperties:
type: string
dist:
type: object
properties:
tarball:
type: string
format: uri
description: URL to download this version's tarball
example: http://localhost:4873/my-package/-/my-package-1.0.0.tgz
shasum:
type: string
description: SHA-1 checksum of the tarball
example: da39a3ee5e6b4b0d3255bfef95601890afd80709
integrity:
type: string
description: Subresource Integrity hash
example: sha512-abc123==
_id:
type: string
example: my-package@1.0.0
_nodeVersion:
type: string
example: 20.11.0
_npmVersion:
type: string
example: 10.2.4
parameters:
PackageName:
name: package
in: path
required: true
schema:
type: string
description: Package name (may be scoped, e.g. `@scope%2Fpackage`)
example: lodash
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
description: JWT token issued by Verdaccio on login
basicAuth:
type: http
scheme: basic
description: HTTP Basic Auth with registry username and password