NuGet Server API

The NuGet Server API (v3) provides RESTful access to the NuGet package registry. Developers can search packages, download package content, retrieve package metadata and versions, push new packages, and manage package listings. The API uses a service index pattern for resource discovery and supports both nuget.org and private feeds.

OpenAPI Specification

microsoft-nuget-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: NuGet Server API (V3)
  description: >-
    Minimal OpenAPI definition for the NuGet V3 HTTP protocol covering the
    service index, package content (PackageBaseAddress), package metadata
    (RegistrationsBaseUrl), search, autocomplete, and package publish.
  version: '3'
  x-generated-from: https://learn.microsoft.com/en-us/nuget/api/overview
  x-generated-by: claude-crawl-2026-05-08
servers:
  - url: https://api.nuget.org/v3
    description: nuget.org V3 service host
paths:
  /index.json:
    get:
      summary: Service index
      operationId: getServiceIndex
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericObject'
  /flatcontainer/{id}/index.json:
    parameters:
      - $ref: '#/components/parameters/PackageId'
    get:
      summary: Enumerate package versions (PackageBaseAddress)
      operationId: getPackageVersions
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericObject'
  /flatcontainer/{id}/{version}/{id2}.{version2}.nupkg:
    parameters:
      - $ref: '#/components/parameters/PackageId'
      - in: path
        name: version
        required: true
        schema: { type: string }
      - in: path
        name: id2
        required: true
        schema: { type: string }
      - in: path
        name: version2
        required: true
        schema: { type: string }
    get:
      summary: Download package content (.nupkg)
      operationId: downloadPackageContent
      responses:
        '200':
          description: OK
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary
  /flatcontainer/{id}/{version}/{id2}.nuspec:
    parameters:
      - $ref: '#/components/parameters/PackageId'
      - in: path
        name: version
        required: true
        schema: { type: string }
      - in: path
        name: id2
        required: true
        schema: { type: string }
    get:
      summary: Download package manifest (.nuspec)
      operationId: downloadPackageManifest
      responses:
        '200':
          description: OK
          content:
            application/xml:
              schema:
                type: string
  /registration5-gz-semver2/{id}/index.json:
    parameters:
      - $ref: '#/components/parameters/PackageId'
    get:
      summary: Get package registration index (RegistrationsBaseUrl)
      operationId: getRegistrationIndex
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericObject'
  /registration5-gz-semver2/{id}/{version}.json:
    parameters:
      - $ref: '#/components/parameters/PackageId'
      - in: path
        name: version
        required: true
        schema: { type: string }
    get:
      summary: Get package registration leaf
      operationId: getRegistrationLeaf
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericObject'
  /query:
    get:
      summary: Search query service
      operationId: searchPackages
      parameters:
        - in: query
          name: q
          schema: { type: string }
        - in: query
          name: skip
          schema: { type: integer }
        - in: query
          name: take
          schema: { type: integer }
        - in: query
          name: prerelease
          schema: { type: boolean }
        - in: query
          name: semVerLevel
          schema: { type: string }
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericObject'
  /autocomplete:
    get:
      summary: Search autocomplete service
      operationId: searchAutocomplete
      parameters:
        - in: query
          name: q
          schema: { type: string }
        - in: query
          name: id
          schema: { type: string }
        - in: query
          name: skip
          schema: { type: integer }
        - in: query
          name: take
          schema: { type: integer }
        - in: query
          name: prerelease
          schema: { type: boolean }
        - in: query
          name: semVerLevel
          schema: { type: string }
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericObject'
  /package:
    put:
      summary: Push a package (PackagePublish)
      operationId: pushPackage
      security:
        - apiKeyAuth: []
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                package:
                  type: string
                  format: binary
      responses:
        '201':
          description: Created
        '202':
          description: Accepted
  /package/{id}/{version}:
    parameters:
      - $ref: '#/components/parameters/PackageId'
      - in: path
        name: version
        required: true
        schema: { type: string }
    delete:
      summary: Delete or unlist a package (PackagePublish)
      operationId: deletePackage
      security:
        - apiKeyAuth: []
      responses:
        '204':
          description: No Content
components:
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: X-NuGet-ApiKey
  parameters:
    PackageId:
      in: path
      name: id
      required: true
      schema: { type: string }
  schemas:
    GenericObject:
      type: object
      additionalProperties: true