Portainer Registries API

Manage Docker registries

Operations 7

GET /registries List Registries #
POST /registries Create a new registry #
DELETE /registries/{id} Remove a registry #
GET /registries/{id} Inspect a registry #
PUT /registries/{id} Update a registry #
POST /registries/{id}/configure Configures a registry #
POST /registries/ping Test registry connection #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/portainer-registries-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

portainer-registries-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  contact:
    email: info@portainer.io
  description: Portainer API is an HTTP API served by Portainer.
  license:
    name: zlib
    url: https://github.com/portainer/portainer/blob/develop/LICENSE
  title: PortainerCE Registries API
  version: 2.39.1
servers:
- url: /api
tags:
- description: Manage Docker registries
  name: Registries
paths:
  /registries:
    get:
      description: 'List all registries based on the current user authorizations.

        Will return all registries if using an administrator account otherwise it

        will only return authorized registries.

        **Access policy**: restricted'
      operationId: RegistryList
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/portainer.Registry'
                type: array
        '500':
          description: Server error
      security:
      - ApiKeyAuth: []
      - jwt: []
      summary: List Registries
      tags:
      - Registries
    post:
      description: 'Create a new registry.

        **Access policy**: restricted'
      operationId: RegistryCreate
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/portainer.Registry'
        '400':
          description: Invalid request
        '409':
          description: Another registry with the same name or same URL & credentials already exists
        '500':
          description: Server error
      security:
      - ApiKeyAuth: []
      - jwt: []
      summary: Create a new registry
      tags:
      - Registries
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/registries.registryCreatePayload'
        description: Registry details
        required: true
  /registries/{id}:
    delete:
      description: 'Remove a registry

        **Access policy**: restricted'
      operationId: RegistryDelete
      parameters:
      - description: Registry identifier
        in: path
        name: id
        required: true
        schema:
          type: integer
      responses:
        '204':
          description: Success
        '400':
          description: Invalid request
        '404':
          description: Registry not found
        '500':
          description: Server error
      security:
      - ApiKeyAuth: []
      - jwt: []
      summary: Remove a registry
      tags:
      - Registries
    get:
      description: 'Retrieve details about a registry.

        **Access policy**: restricted'
      operationId: RegistryInspect
      parameters:
      - description: Registry identifier
        in: path
        name: id
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/portainer.Registry'
        '400':
          description: Invalid request
        '403':
          description: Permission denied to access registry
        '404':
          description: Registry not found
        '500':
          description: Server error
      security:
      - ApiKeyAuth: []
      - jwt: []
      summary: Inspect a registry
      tags:
      - Registries
    put:
      description: 'Update a registry

        **Access policy**: restricted'
      operationId: RegistryUpdate
      parameters:
      - description: Registry identifier
        in: path
        name: id
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/portainer.Registry'
        '400':
          description: Invalid request
        '404':
          description: Registry not found
        '409':
          description: Another registry with the same name or same URL & credentials already exists
        '500':
          description: Server error
      security:
      - ApiKeyAuth: []
      - jwt: []
      summary: Update a registry
      tags:
      - Registries
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/registries.registryUpdatePayload'
        description: Registry details
        required: true
  /registries/{id}/configure:
    post:
      description: 'Configures a registry.

        **Access policy**: restricted'
      operationId: RegistryConfigure
      parameters:
      - description: Registry identifier
        in: path
        name: id
        required: true
        schema:
          type: integer
      responses:
        '204':
          description: Success
        '400':
          description: Invalid request
        '403':
          description: Permission denied
        '404':
          description: Registry not found
        '500':
          description: Server error
      security:
      - ApiKeyAuth: []
      - jwt: []
      summary: Configures a registry
      tags:
      - Registries
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/registries.registryConfigurePayload'
        description: Registry configuration
        required: true
  /registries/ping:
    post:
      description: 'Test connection to a registry with provided credentials

        **Access policy**: authenticated'
      operationId: RegistryPing
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/registries.registryPingResponse'
        '400':
          description: Invalid request
        '500':
          description: Server error
      security:
      - ApiKeyAuth: []
      - jwt: []
      summary: Test registry connection
      tags:
      - Registries
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/registries.registryPingPayload'
        description: Registry credentials to test
        required: true
components:
  schemas:
    portainer.RegistryManagementConfiguration:
      properties:
        AccessToken:
          type: string
        AccessTokenExpiry:
          type: integer
        Authentication:
          type: boolean
        Ecr:
          $ref: '#/components/schemas/portainer.EcrData'
        Password:
          type: string
        TLSConfig:
          $ref: '#/components/schemas/portainer.TLSConfiguration'
        Type:
          $ref: '#/components/schemas/portainer.RegistryType'
        Username:
          type: string
      type: object
    portainer.RegistryAccessPolicies:
      properties:
        Namespaces:
          description: Kubernetes specific fields (with kubernetes, namespaces have access to a registry, if users/teams have access to the same namespace, they have access to the registry)
          items:
            type: string
          type: array
        TeamAccessPolicies:
          $ref: '#/components/schemas/portainer.TeamAccessPolicies'
        UserAccessPolicies:
          allOf:
          - $ref: '#/components/schemas/portainer.UserAccessPolicies'
          description: Docker specific fields (with docker, users/teams have access to a registry)
      type: object
    registries.registryConfigurePayload:
      properties:
        Authentication:
          description: Is authentication against this registry enabled
          example: false
          type: boolean
        Password:
          description: Password used to authenticate against this registry. required when Authentication is true
          example: registry_password
          type: string
        Region:
          description: ECR region
          type: string
        TLS:
          description: Use TLS
          example: true
          type: boolean
        TLSCACertFile:
          description: The TLS CA certificate file
          items:
            type: integer
          type: array
        TLSCertFile:
          description: The TLS client certificate file
          items:
            type: integer
          type: array
        TLSKeyFile:
          description: The TLS client key file
          items:
            type: integer
          type: array
        TLSSkipVerify:
          description: Skip the verification of the server TLS certificate
          example: false
          type: boolean
        Username:
          description: Username used to authenticate against this registry. Required when Authentication is true
          example: registry_user
          type: string
      required:
      - Authentication
      type: object
    registries.registryUpdatePayload:
      properties:
        Authentication:
          description: Is authentication against this registry enabled
          example: false
          type: boolean
        BaseURL:
          description: BaseURL is used for quay registry
          example: registry.mydomain.tld:2375
          type: string
        Ecr:
          allOf:
          - $ref: '#/components/schemas/portainer.EcrData'
          description: ECR data
        Name:
          description: Name that will be used to identify this registry
          example: my-registry
          type: string
        Password:
          description: Password used to authenticate against this registry. required when Authentication is true
          example: registry_password
          type: string
        Quay:
          allOf:
          - $ref: '#/components/schemas/portainer.QuayRegistryData'
          description: Quay data
        RegistryAccesses:
          allOf:
          - $ref: '#/components/schemas/portainer.RegistryAccesses'
          description: Registry access control
        URL:
          description: URL or IP address of the Docker registry
          example: registry.mydomain.tld:2375
          type: string
        Username:
          description: Username used to authenticate against this registry. Required when Authentication is true
          example: registry_user
          type: string
      required:
      - Authentication
      - Name
      - URL
      type: object
    portainer.QuayRegistryData:
      properties:
        OrganisationName:
          type: string
        UseOrganisation:
          type: boolean
      type: object
    registries.registryPingPayload:
      properties:
        Password:
          description: Password used to authenticate against this registry
          example: registry_password
          type: string
        TLS:
          description: Use TLS
          example: true
          type: boolean
        Type:
          allOf:
          - $ref: '#/components/schemas/portainer.RegistryType'
          description: "Registry Type. Valid values are:\n\t1 (Quay.io),\n\t2 (Azure container registry),\n\t3 (custom registry),\n\t4 (Gitlab registry),\n\t5 (ProGet registry),\n\t6 (DockerHub)\n\t7 (ECR)\n\t8 (Github registry)"
          enum:
          - 1
          - 2
          - 3
          - 4
          - 5
          - 6
          - 7
          - 8
          example: 6
        URL:
          description: URL or IP address of the Docker registry
          example: registry-1.docker.io
          type: string
        Username:
          description: Username used to authenticate against this registry
          example: registry_user
          type: string
      required:
      - Type
      - URL
      type: object
    portainer.RegistryAccesses:
      additionalProperties:
        $ref: '#/components/schemas/portainer.RegistryAccessPolicies'
      type: object
    registries.registryPingResponse:
      properties:
        message:
          description: Message provides details about the connection test result
          example: Registry connection successful
          type: string
        success:
          description: Success indicates if the registry connection was successful
          example: true
          type: boolean
      type: object
    portainer.EcrData:
      properties:
        Region:
          example: ap-southeast-2
          type: string
      type: object
    portainer.TeamAccessPolicies:
      additionalProperties:
        $ref: '#/components/schemas/portainer.AccessPolicy'
      type: object
    registries.registryCreatePayload:
      properties:
        Authentication:
          description: Is authentication against this registry enabled
          example: false
          type: boolean
        BaseURL:
          description: BaseURL required for ProGet registry
          example: registry.mydomain.tld:2375
          type: string
        Ecr:
          allOf:
          - $ref: '#/components/schemas/portainer.EcrData'
          description: ECR specific details, required when type = 7
        Gitlab:
          allOf:
          - $ref: '#/components/schemas/portainer.GitlabRegistryData'
          description: Gitlab specific details, required when type = 4
        Name:
          description: Name that will be used to identify this registry
          example: my-registry
          type: string
        Password:
          description: Password used to authenticate against this registry. required when Authentication is true
          example: registry_password
          type: string
        Quay:
          allOf:
          - $ref: '#/components/schemas/portainer.QuayRegistryData'
          description: Quay specific details, required when type = 1
        TLS:
          description: Use TLS
          example: true
          type: boolean
        Type:
          allOf:
          - $ref: '#/components/schemas/portainer.RegistryType'
          description: "Registry Type. Valid values are:\n\t1 (Quay.io),\n\t2 (Azure container registry),\n\t3 (custom registry),\n\t4 (Gitlab registry),\n\t5 (ProGet registry),\n\t6 (DockerHub)\n\t7 (ECR)"
          enum:
          - 1
          - 2
          - 3
          - 4
          - 5
          - 6
          - 7
          example: 1
        URL:
          description: URL or IP address of the Docker registry
          example: registry.mydomain.tld:2375/feed
          type: string
        Username:
          description: Username used to authenticate against this registry. Required when Authentication is true
          example: registry_user
          type: string
      required:
      - Authentication
      - Name
      - Type
      - URL
      type: object
    portainer.Registry:
      properties:
        AccessToken:
          description: Stores temporary access token
          type: string
        AccessTokenExpiry:
          type: integer
        Authentication:
          description: Is authentication against this registry enabled
          example: true
          type: boolean
        AuthorizedTeams:
          description: Deprecated in DBVersion == 18
          items:
            type: integer
          type: array
        AuthorizedUsers:
          description: Deprecated in DBVersion == 18
          items:
            type: integer
          type: array
        BaseURL:
          description: Base URL, introduced for ProGet registry
          example: registry.mydomain.tld:2375
          type: string
        Ecr:
          $ref: '#/components/schemas/portainer.EcrData'
        Github:
          $ref: '#/components/schemas/portainer.GithubRegistryData'
        Gitlab:
          $ref: '#/components/schemas/portainer.GitlabRegistryData'
        Id:
          description: Registry Identifier
          example: 1
          type: integer
        ManagementConfiguration:
          $ref: '#/components/schemas/portainer.RegistryManagementConfiguration'
        Name:
          description: Registry Name
          example: my-registry
          type: string
        Password:
          description: Password or SecretAccessKey used to authenticate against this registry
          example: registry_password
          type: string
        Quay:
          $ref: '#/components/schemas/portainer.QuayRegistryData'
        RegistryAccesses:
          $ref: '#/components/schemas/portainer.RegistryAccesses'
        TeamAccessPolicies:
          allOf:
          - $ref: '#/components/schemas/portainer.TeamAccessPolicies'
          description: Deprecated in DBVersion == 31
        Type:
          allOf:
          - $ref: '#/components/schemas/portainer.RegistryType'
          description: Registry Type (1 - Quay, 2 - Azure, 3 - Custom, 4 - Gitlab, 5 - ProGet, 6 - DockerHub, 7 - ECR)
          enum:
          - 1
          - 2
          - 3
          - 4
          - 5
          - 6
          - 7
        URL:
          description: URL or IP address of the Docker registry
          example: registry.mydomain.tld:2375
          type: string
        UserAccessPolicies:
          allOf:
          - $ref: '#/components/schemas/portainer.UserAccessPolicies'
          description: 'Deprecated fields

            Deprecated in DBVersion == 31'
        Username:
          description: Username or AccessKeyID used to authenticate against this registry
          example: registry user
          type: string
      type: object
    portainer.TLSConfiguration:
      properties:
        TLS:
          description: Use TLS
          example: true
          type: boolean
        TLSCACert:
          description: Path to the TLS CA certificate file
          example: /data/tls/ca.pem
          type: string
        TLSCert:
          description: Path to the TLS client certificate file
          example: /data/tls/cert.pem
          type: string
        TLSKey:
          description: Path to the TLS client key file
          example: /data/tls/key.pem
          type: string
        TLSSkipVerify:
          description: Skip the verification of the server TLS certificate
          example: false
          type: boolean
      type: object
    portainer.UserAccessPolicies:
      additionalProperties:
        $ref: '#/components/schemas/portainer.AccessPolicy'
      type: object
    portainer.GithubRegistryData:
      properties:
        OrganisationName:
          type: string
        UseOrganisation:
          type: boolean
      type: object
    portainer.AccessPolicy:
      properties:
        Namespaces:
          description: Namespaces is a list of namespaces that this access policy applies to. Only used for namespaced level roles
          items:
            type: string
          type: array
        RoleId:
          description: Role identifier. Reference the role that will be associated to this access policy
          example: 1
          type: integer
      type: object
    portainer.RegistryType:
      enum:
      - 0
      - 1
      - 2
      - 3
      - 4
      - 5
      - 6
      - 7
      - 8
      type: integer
      x-enum-varnames:
      - _
      - QuayRegistry
      - AzureRegistry
      - CustomRegistry
      - GitlabRegistry
      - ProGetRegistry
      - DockerHubRegistry
      - EcrRegistry
      - GithubRegistry
    portainer.GitlabRegistryData:
      properties:
        InstanceURL:
          type: string
        ProjectId:
          type: integer
        ProjectPath:
          type: string
      type: object
  securitySchemes:
    ApiKeyAuth:
      in: header
      name: X-API-KEY
      type: apiKey
    jwt:
      in: header
      name: Authorization
      type: apiKey