Harbor v2.0 REST API

Harbor's complete, first-party v2.0 REST API as published in the project's own repository (api/v2.0/swagger.yaml) — 135 paths, 203 operations and 153 definitions covering projects, repositories, artifacts, tags, labels, accessories, scanning, SBOMs, robot accounts, users and groups, quotas, registries, replication, retention, immutability, webhooks, preheat, garbage collection, audit logs, the Security Hub and system configuration. Authenticates with HTTP Basic; the base URL is the operator's own Harbor instance.

Operations 203

GET /health Check the status of Harbor components #
GET /statistics Get the statistic information about the projects and repositories #
POST /ldap/ping Ping available ldap service. #
GET /ldap/users/search Search available ldap users. #
POST /ldap/users/import Import selected available ldap users. #
GET /ldap/groups/search Search available ldap groups. #
GET /internalconfig Get internal configurations. #
GET /configurations Get system configurations. #
PUT /configurations Modify system configurations. #
GET /projects List projects #
HEAD /projects Check if the project name user provided already exists. #
POST /projects Create a new project. #
GET /projects/{project_name_or_id} Return specific project detail information #
PUT /projects/{project_name_or_id} Update properties for a selected project. #
DELETE /projects/{project_name_or_id} Delete project by projectID #
GET /projects/{project_name_or_id}/_deletable Get the deletable status of the project #
GET /projects/{project_name_or_id}/summary Get summary of the project. #
GET /projects/{project_name_or_id}/members Get all project member information #
POST /projects/{project_name_or_id}/members Create project member #
GET /projects/{project_name_or_id}/members/{mid} Get the project member information #
PUT /projects/{project_name_or_id}/members/{mid} Update project member #
DELETE /projects/{project_name_or_id}/members/{mid} Delete project member #
GET /projects/{project_name_or_id}/metadatas/ Get the metadata of the specific project #
POST /projects/{project_name_or_id}/metadatas/ Add metadata for the specific project #
GET /projects/{project_name_or_id}/metadatas/{meta_name} Get the specific metadata of the specific project #
PUT /projects/{project_name_or_id}/metadatas/{meta_name} Update the specific metadata for the specific project #
DELETE /projects/{project_name_or_id}/metadatas/{meta_name} Delete the specific metadata for the specific project #
GET /repositories List all authorized repositories #
GET /projects/{project_name}/repositories List repositories #
GET /projects/{project_name}/repositories/{repository_name} Get repository #
PUT /projects/{project_name}/repositories/{repository_name} Update repository #
DELETE /projects/{project_name}/repositories/{repository_name} Delete repository #
GET /projects/{project_name}/repositories/{repository_name}/artifacts List artifacts #
POST /projects/{project_name}/repositories/{repository_name}/artifacts Copy artifact #
GET /projects/{project_name}/repositories/{repository_name}/artifacts/{reference} Get the specific artifact #
DELETE /projects/{project_name}/repositories/{repository_name}/artifacts/{reference} Delete the specific artifact #
POST /projects/{project_name}/repositories/{repository_name}/artifacts/{reference}/scan Scan the artifact #
POST /projects/{project_name}/repositories/{repository_name}/artifacts/{reference}/scan/stop Cancelling a scan job for a particular artifact #
GET /projects/{project_name}/repositories/{repository_name}/artifacts/{reference}/scan/{report_id}/log Get the log of the scan report #
POST /projects/{project_name}/repositories/{repository_name}/artifacts/{reference}/tags Create tag #
GET /projects/{project_name}/repositories/{repository_name}/artifacts/{reference}/tags List tags #
DELETE /projects/{project_name}/repositories/{repository_name}/artifacts/{reference}/tags/{tag_name} Delete tag #
GET /projects/{project_name}/repositories/{repository_name}/artifacts/{reference}/accessories List accessories #
GET /projects/{project_name}/repositories/{repository_name}/artifacts/{reference}/additions/vulnerabilities Get the vulnerabilities addition of the specific artifact #
GET /projects/{project_name}/repositories/{repository_name}/artifacts/{reference}/additions/{addition} Get the addition of the specific artifact #
POST /projects/{project_name}/repositories/{repository_name}/artifacts/{reference}/labels Add label to artifact #
DELETE /projects/{project_name}/repositories/{repository_name}/artifacts/{reference}/labels/{label_id} Remove label from artifact #
GET /projects/{project_name_or_id}/artifacts List artifacts #
GET /projects/{project_name_or_id}/scanner Get project level scanner #
PUT /projects/{project_name_or_id}/scanner Configure scanner for the specified project #
GET /projects/{project_name_or_id}/scanner/candidates Get scanner registration candidates for configurating project level scanner #
GET /audit-logs Get recent logs of projects which the user is a member with project admin role, or return all audit logs for system admin user (deprecated) #
GET /auditlog-exts Get recent logs of the projects which the user is a member with project_admin role, or return all audit logs for system admin user #
GET /auditlog-exts/events Get all event types of audit log #
GET /projects/{project_name}/logs Get recent logs of the projects (deprecated) #
GET /projects/{project_name}/auditlog-exts Get recent logs of the projects #
GET /p2p/preheat/providers List P2P providers #
POST /p2p/preheat/instances/ping Ping status of a instance. #
GET /p2p/preheat/instances List P2P provider instances #
POST /p2p/preheat/instances Create p2p provider instances #
GET /p2p/preheat/instances/{preheat_instance_name} Get a P2P provider instance #
DELETE /p2p/preheat/instances/{preheat_instance_name} Delete the specified P2P provider instance #
PUT /p2p/preheat/instances/{preheat_instance_name} Update the specified P2P provider instance #
POST /projects/{project_name}/preheat/policies Create a preheat policy under a project #
GET /projects/{project_name}/preheat/policies List preheat policies #
GET /projects/{project_name}/preheat/policies/{preheat_policy_name} Get a preheat policy #
PUT /projects/{project_name}/preheat/policies/{preheat_policy_name} Update preheat policy #
POST /projects/{project_name}/preheat/policies/{preheat_policy_name} Manual preheat #
DELETE /projects/{project_name}/preheat/policies/{preheat_policy_name} Delete a preheat policy #
GET /projects/{project_name}/preheat/policies/{preheat_policy_name}/executions List executions for the given policy #
GET /projects/{project_name}/preheat/policies/{preheat_policy_name}/executions/{execution_id} Get a execution detail by id #
PATCH /projects/{project_name}/preheat/policies/{preheat_policy_name}/executions/{execution_id} Stop a execution #
GET /projects/{project_name}/preheat/policies/{preheat_policy_name}/executions/{execution_id}/tasks List all the related tasks for the given execution #
GET /projects/{project_name}/preheat/policies/{preheat_policy_name}/executions/{execution_id}/tasks/{task_id}/logs Get the log text stream of the specified task for the given execution #
GET /projects/{project_name}/preheat/providers Get all providers at project level #
GET /projects/{project_name_or_id}/immutabletagrules List all immutable tag rules of current project #
POST /projects/{project_name_or_id}/immutabletagrules Add an immutable tag rule to current project #
PUT /projects/{project_name_or_id}/immutabletagrules/{immutable_rule_id} Update the immutable tag rule or enable or disable the rule #
DELETE /projects/{project_name_or_id}/immutabletagrules/{immutable_rule_id} Delete the immutable tag rule. #
GET /projects/{project_name_or_id}/webhook/policies List project webhook policies. #
POST /projects/{project_name_or_id}/webhook/policies Create project webhook policy. #
GET /projects/{project_name_or_id}/webhook/policies/{webhook_policy_id} Get project webhook policy #
PUT /projects/{project_name_or_id}/webhook/policies/{webhook_policy_id} Update webhook policy of a project. #
DELETE /projects/{project_name_or_id}/webhook/policies/{webhook_policy_id} Delete webhook policy of a project #
GET /projects/{project_name_or_id}/webhook/policies/{webhook_policy_id}/executions List executions for a specific webhook policy #
GET /projects/{project_name_or_id}/webhook/policies/{webhook_policy_id}/executions/{execution_id}/tasks List tasks for a specific webhook execution #
GET /projects/{project_name_or_id}/webhook/policies/{webhook_policy_id}/executions/{execution_id}/tasks/{task_id}/log Get logs for a specific webhook task #
GET /projects/{project_name_or_id}/webhook/lasttrigger Get project webhook policy last trigger info #
GET /projects/{project_name_or_id}/webhook/jobs List project webhook jobs #
GET /projects/{project_name_or_id}/webhook/events Get supported event types and notify types. #
GET /usergroups Get all user groups information #
POST /usergroups Create user group #
GET /usergroups/search Search groups by groupname #
GET /usergroups/{group_id} Get user group information #
PUT /usergroups/{group_id} Update group information #
DELETE /usergroups/{group_id} Delete user group #
GET /icons/{digest} Get artifact icon #
GET /robots Get robot account #
POST /robots Create a robot account #
GET /quotas List quotas #
GET /quotas/{id} Get the specified quota #
PUT /quotas/{id} Update the specified quota #
GET /robots/{robot_id} Get a robot account #
PUT /robots/{robot_id} Update a robot account #
PATCH /robots/{robot_id} Refresh the robot secret #
DELETE /robots/{robot_id} Delete a robot account #
GET /replication/policies List replication policies #
POST /replication/policies Create a replication policy #
GET /replication/policies/{id} Get the specific replication policy #
DELETE /replication/policies/{id} Delete the specific replication policy #
PUT /replication/policies/{id} Update the replication policy #
GET /replication/executions List replication executions #
POST /replication/executions Start one replication execution #
GET /replication/executions/{id} Get the specific replication execution #
PUT /replication/executions/{id} Stop the specific replication execution #
GET /replication/executions/{id}/tasks List replication tasks for a specific execution #
GET /replication/executions/{id}/tasks/{task_id}/log Get the log of the specific replication task #
GET /replication/adapters List registry adapters #
GET /replication/adapterinfos List all registered registry provider information #
POST /registries Create a registry #
GET /registries List the registries #
POST /registries/ping Check status of a registry #
GET /registries/{id} Get the specific registry #
DELETE /registries/{id} Delete the specific registry #
PUT /registries/{id} Update the registry #
GET /registries/{id}/info Get the registry info #
GET /scans/all/metrics Get the metrics of the latest scan all process #
GET /scans/schedule/metrics Get the metrics of the latest scheduled scan all process #
GET /systeminfo Get general system info #
GET /systeminfo/volumes Get system volume info (total/free size). #
GET /systeminfo/getcert Get default root certificate. #
POST /system/oidc/ping Test the OIDC endpoint. #
GET /system/gc Get gc results. #
GET /system/gc/{gc_id} Get gc status. #
PUT /system/gc/{gc_id} Stop the specific GC execution #
GET /system/gc/{gc_id}/log Get gc job log. #
GET /system/gc/schedule Get gc's schedule. #
POST /system/gc/schedule Create a gc schedule. #
PUT /system/gc/schedule Update gc's schedule. #
GET /system/purgeaudit Get purge job results. #
GET /system/purgeaudit/{purge_id} Get purge job status. #
PUT /system/purgeaudit/{purge_id} Stop the specific purge audit log execution #
GET /system/purgeaudit/{purge_id}/log Get purge job log. #
GET /system/purgeaudit/schedule Get purge's schedule. #
POST /system/purgeaudit/schedule Create a purge job schedule. #
PUT /system/purgeaudit/schedule Update purge job's schedule. #
GET /system/CVEAllowlist Get the system level allowlist of CVE. #
PUT /system/CVEAllowlist Update the system level allowlist of CVE. #
GET /system/scanAll/schedule Get scan all's schedule. #
PUT /system/scanAll/schedule Update scan all's schedule. #
POST /system/scanAll/schedule Create a schedule or a manual trigger for the scan all job. #
POST /system/scanAll/stop Stop scanAll job execution #
GET /jobservice/pools Get worker pools #
GET /jobservice/pools/{pool_id}/workers Get workers #
PUT /jobservice/jobs/{job_id} Stop running job #
GET /jobservice/jobs/{job_id}/log Get job log by job id #
GET /jobservice/queues list job queues #
PUT /jobservice/queues/{job_type} stop and clean, pause, resume pending jobs in the queue #
GET /schedules List schedules #
GET /schedules/{job_type}/paused Get scheduler paused status #
GET /ping Ping Harbor to check if the API server is alive. #
GET /retentions/metadatas Get Retention Metadatas #
POST /retentions Create Retention Policy #
GET /retentions/{id} Get Retention Policy #
PUT /retentions/{id} Update Retention Policy #
DELETE /retentions/{id} Delete Retention Policy #
POST /retentions/{id}/executions Trigger a Retention Execution #
GET /retentions/{id}/executions Get Retention executions #
PATCH /retentions/{id}/executions/{eid} Stop a Retention execution #
GET /retentions/{id}/executions/{eid}/tasks Get Retention tasks #
GET /retentions/{id}/executions/{eid}/tasks/{tid} Get Retention job task log #
GET /scanners List scanner registrations #
POST /scanners Create a scanner registration #
POST /scanners/ping Tests scanner registration settings #
GET /scanners/{registration_id} Get a scanner registration details #
PUT /scanners/{registration_id} Update a scanner registration #
DELETE /scanners/{registration_id} Delete a scanner registration #
PATCH /scanners/{registration_id} Set system default scanner registration #
GET /scanners/{registration_id}/metadata Get the metadata of the specified scanner registration #
GET /users List users #
POST /users Create a local user. #
GET /users/current Get current user info. #
GET /users/search Search users by username #
GET /users/{user_id} Get a user's profile. #
PUT /users/{user_id} Update user's profile. #
DELETE /users/{user_id} Mark a registered user as be removed. #
PUT /users/{user_id}/sysadmin Update a registered user to change to be an administrator of Harbor. #
PUT /users/{user_id}/password Change the password on a user that already exists. #
GET /users/current/permissions Get current user permissions. #
PUT /users/{user_id}/cli_secret Set CLI secret for a user. #
GET /labels List labels according to the query strings. #
POST /labels Post creates a label #
GET /labels/{label_id} Get the label specified by ID. #
PUT /labels/{label_id} Update the label properties. #
DELETE /labels/{label_id} Delete the label specified by ID. #
POST /export/cve Export scan data for selected projects #
GET /export/cve/execution/{execution_id} Get the specific scan data export execution #
GET /export/cve/executions Get a list of specific scan data export execution jobs for a specified user #
GET /export/cve/download/{execution_id} Download the scan data export file #
GET /security/summary Get vulnerability system summary #
GET /security/vul Get the vulnerability list. #
GET /permissions Get system or project level permissions info. #

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/goharbor-harbor-v2-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

goharbor-harbor-api-v2.0-swagger.yml Raw ↑
swagger: '2.0'
info:
  title: Harbor API
  description: These APIs provide services for manipulating Harbor project.
  version: '2.0'
host: localhost
schemes:
  - http
  - https
basePath: /api/v2.0
produces:
  - application/json
consumes:
  - application/json
securityDefinitions:
  basic:
    type: basic
security:
  - basic: []
  - {}
paths:
  /health:
    get:
      summary: Check the status of Harbor components
      description: Check the status of Harbor components. This path does not require authentication.
      tags:
        - health
      operationId: getHealth
      parameters:
        - $ref: '#/parameters/requestId'
      responses:
        '200':
          description: The health status of Harbor components
          schema:
            $ref: '#/definitions/OverallHealthStatus'
        '500':
          $ref: '#/responses/500'
  /search:
    get:
      summary: 'Search for projects and repositories'
      description: |-
        The Search endpoint returns information about the projects and repositories offered at public status or related to the current logged in user. The response includes the project and repository list in a proper display order.
      parameters:
        - $ref: '#/parameters/requestId'
        - name: q
          in: query
          description: Search parameter for project and repository name.
          required: true
          type: string
      tags:
        - search
      operationId: search
      responses:
        '200':
          description: An array of search results
          schema:
            $ref: '#/definitions/Search'
        '500':
          $ref: '#/responses/500'
  /statistics:
    get:
      summary: Get the statistic information about the projects and repositories
      description: Get the statistic information about the projects and repositories
      tags:
        - statistic
      operationId: getStatistic
      parameters:
        - $ref: '#/parameters/requestId'
      responses:
        '200':
          description: The statistic information
          schema:
            $ref: '#/definitions/Statistic'
        '401':
          $ref: '#/responses/401'
        '500':
          $ref: '#/responses/500'
  /ldap/ping:
    post:
      operationId: pingLdap
      summary: Ping available ldap service.
      description: |
        This endpoint ping the available ldap service for test related configuration parameters.
      parameters:
        - $ref: '#/parameters/requestId'
        - name: ldapconf
          in: body
          description: 'ldap configuration. support input ldap service configuration. If it is a empty request, will load current configuration from the system.'
          required: false
          schema:
            $ref: '#/definitions/LdapConf'
      tags:
        - Ldap
      responses:
        '200':
          description: Ping ldap service successfully.
          schema:
            $ref: '#/definitions/LdapPingResult'
        '400':
          $ref: '#/responses/400'
        '401':
          $ref: '#/responses/401'
        '403':
          $ref: '#/responses/403'
        '500':
          $ref: '#/responses/500'
  /ldap/users/search:
    get:
      operationId: searchLdapUser
      summary: Search available ldap users.
      description: |
        This endpoint searches the available ldap users based on related configuration parameters. Support searched by input ldap configuration, load configuration from the system and specific filter.
      parameters:
        - $ref: '#/parameters/requestId'
        - name: username
          in: query
          type: string
          required: false
          description: Registered user ID
      tags:
        - Ldap
      responses:
        '200':
          description: Search ldap users successfully.
          schema:
            type: array
            items:
              $ref: '#/definitions/LdapUser'
        '400':
          $ref: '#/responses/400'
        '401':
          $ref: '#/responses/401'
        '403':
          $ref: '#/responses/403'
        '500':
          $ref: '#/responses/500'
  /ldap/users/import:
    post:
      operationId: importLdapUser
      summary: Import selected available ldap users.
      description: |
        This endpoint adds the selected available ldap users to harbor based on related configuration parameters from the system. System will try to guess the user email address and realname, add to harbor user information. If have errors when import user, will return the list of importing failed uid and the failed reason.
      parameters:
        - $ref: '#/parameters/requestId'
        - name: uid_list
          in: body
          description: The uid listed for importing. This list will check users validity of ldap service based on configuration from the system.
          required: true
          schema:
            $ref: '#/definitions/LdapImportUsers'
      tags:
        - Ldap
      responses:
        '200':
          description: Add ldap users successfully.
        '400':
          $ref: '#/responses/400'
        '401':
          $ref: '#/responses/401'
        '403':
          $ref: '#/responses/403'
        '404':
          description: Failed import some users.
          schema:
            type: array
            items:
              $ref: '#/definitions/LdapFailedImportUser'
        '500':
          $ref: '#/responses/500'
  /ldap/groups/search:
    get:
      summary: Search available ldap groups.
      operationId: searchLdapGroup
      description: |
        This endpoint searches the available ldap groups based on related configuration parameters. support to search by groupname or groupdn.
      parameters:
        - $ref: '#/parameters/requestId'
        - name: groupname
          in: query
          type: string
          required: false
          description: Ldap group name
        - name: groupdn
          in: query
          type: string
          required: false
          description: The LDAP group DN
      tags:
        - Ldap
      responses:
        '200':
          description: Search ldap group successfully.
          schema:
            type: array
            items:
              $ref: '#/definitions/UserGroup'
        '400':
          $ref: '#/responses/400'
        '401':
          $ref: '#/responses/401'
        '403':
          $ref: '#/responses/403'
        '500':
          $ref: '#/responses/500'
  /internalconfig:
    get:
      summary: Get internal configurations.
      operationId: getInternalconfig
      description: |
        This endpoint is for retrieving system configurations that only provides for internal api call.
      tags:
        - configure
      parameters:
        - $ref: '#/parameters/requestId'
      responses:
        '200':
          description: Get system configurations successfully. The response body is a map.
          schema:
            $ref: '#/definitions/InternalConfigurationsResponse'
        '401':
          description: User need to log in first.
        '403':
          description: User does not have permission of admin role.
        '500':
          $ref: '#/responses/500'
  /configurations:
    get:
      summary: Get system configurations.
      operationId: getConfigurations
      description: |
        This endpoint is for retrieving system configurations that only provides for admin user.
      tags:
        - configure
      parameters:
        - $ref: '#/parameters/requestId'
      responses:
        '200':
          description: Get system configurations successfully. The response body is a map.
          schema:
            $ref: '#/definitions/ConfigurationsResponse'
        '401':
          description: User need to log in first.
        '403':
          description: User does not have permission of admin role.
        '500':
          description: Unexpected internal errors.
    put:
      summary: Modify system configurations.
      operationId: updateConfigurations
      description: |
        This endpoint is for modifying system configurations that only provides for admin user.
      tags:
        - configure
      parameters:
        - $ref: '#/parameters/requestId'
        - name: configurations
          in: body
          required: true
          schema:
            $ref: '#/definitions/Configurations'
          description: 'The configuration map can contain a subset of the attributes of the schema, which are to be updated.'
      responses:
        '200':
          description: Modify system configurations successfully.
        '400':
          $ref: '#/responses/400'
        '401':
          $ref: '#/responses/401'
        '403':
          $ref: '#/responses/403'
        '422':
          $ref: '#/responses/422'
        '500':
          $ref: '#/responses/500'
  /projects:
    get:
      summary: List projects
      description: This endpoint returns projects created by Harbor.
      tags:
        - project
      operationId: listProjects
      parameters:
        - $ref: '#/parameters/requestId'
        - $ref: '#/parameters/query'
        - $ref: '#/parameters/page'
        - $ref: '#/parameters/pageSize'
        - $ref: '#/parameters/sort'
        - name: name
          in: query
          description: The name of project.
          required: false
          type: string
        - name: public
          in: query
          description: The project is public or private.
          required: false
          type: boolean
        - name: owner
          in: query
          description: The name of project owner.
          required: false
          type: string
        - name: with_detail
          in: query
          description: Bool value indicating whether return detailed information of the project
          type: boolean
          required: false
          default: true
      responses:
        '200':
          description: Return all matched projects.
          schema:
            type: array
            items:
              $ref: '#/definitions/Project'
          headers:
            X-Total-Count:
              description: The total count of projects
              type: integer
            Link:
              description: Link refers to the previous page and next page
              type: string
        '400':
          $ref: '#/responses/400'
        '401':
          $ref: '#/responses/401'
        '422':
          $ref: '#/responses/422'
        '500':
          $ref: '#/responses/500'
    head:
      summary: Check if the project name user provided already exists.
      description: This endpoint is used to check if the project name provided already exist.
      tags:
        - project
      operationId: headProject
      parameters:
        - $ref: '#/parameters/requestId'
        - name: project_name
          in: query
          description: Project name for checking exists.
          required: true
          type: string
      responses:
        '200':
          $ref: '#/responses/200'
        '400':
          $ref: '#/responses/400'
        '404':
          $ref: '#/responses/404'
        '500':
          $ref: '#/responses/500'
    post:
      summary: Create a new project.
      description: This endpoint is for user to create a new project.
      tags:
        - project
      operationId: createProject
      parameters:
        - $ref: '#/parameters/requestId'
        - $ref: '#/parameters/resourceNameInLocation'
        - name: project
          in: body
          description: New created project.
          required: true
          schema:
            $ref: '#/definitions/ProjectReq'
      responses:
        '201':
          $ref: '#/responses/201'
        '400':
          $ref: '#/responses/400'
        '401':
          $ref: '#/responses/401'
        '409':
          description: Project name already exists.
          headers:
            X-Request-Id:
              description: The ID of the corresponding request for the response
              type: string
          schema:
            $ref: '#/definitions/Errors'
        '500':
          $ref: '#/responses/500'
  '/projects/{project_name_or_id}':
    get:
      summary: Return specific project detail information
      description: This endpoint returns specific project information by project ID.
      tags:
        - project
      operationId: getProject
      parameters:
        - $ref: '#/parameters/requestId'
        - $ref: '#/parameters/isResourceName'
        - $ref: '#/parameters/projectNameOrId'
      responses:
        '200':
          description: Return matched project information.
          schema:
            $ref: '#/definitions/Project'
        '401':
          $ref: '#/responses/401'
        '403':
          $ref: '#/responses/403'
        '404':
          description: Project not found. No project exists with the specified name or ID.
          headers:
            X-Request-Id:
              description: The ID of the corresponding request for the response
              type: string
          schema:
            $ref: '#/definitions/Errors'
        '500':
          $ref: '#/responses/500'
    put:
      summary: Update properties for a selected project.
      description: This endpoint is aimed to update the properties of a project.
      tags:
        - project
      operationId: updateProject
      parameters:
        - $ref: '#/parameters/requestId'
        - $ref: '#/parameters/isResourceName'
        - $ref: '#/parameters/projectNameOrId'
        - name: project
          in: body
          required: true
          schema:
            $ref: '#/definitions/ProjectReq'
          description: Updates of project.
      responses:
        '200':
          $ref: '#/responses/200'
        '400':
          $ref: '#/responses/400'
        '401':
          $ref: '#/responses/401'
        '403':
          $ref: '#/responses/403'
        '404':
          $ref: '#/responses/404'
        '500':
          $ref: '#/responses/500'
    delete:
      summary: Delete project by projectID
      description: This endpoint is aimed to delete project by project ID.
      tags:
        - project
      operationId: deleteProject
      parameters:
        - $ref: '#/parameters/requestId'
        - $ref: '#/parameters/isResourceName'
        - $ref: '#/parameters/projectNameOrId'
      responses:
        '200':
          $ref: '#/responses/200'
        '400':
          $ref: '#/responses/400'
        '403':
          $ref: '#/responses/403'
        '404':
          description: Project not found. No project exists with the specified name or ID.
          headers:
            X-Request-Id:
              description: The ID of the corresponding request for the response
              type: string
          schema:
            $ref: '#/definitions/Errors'
        '412':
          description: Project cannot be deleted. The project still contains repositories or has pending tasks.
          headers:
            X-Request-Id:
              description: The ID of the corresponding request for the response
              type: string
          schema:
            $ref: '#/definitions/Errors'
        '500':
          $ref: '#/responses/500'
  /projects/{project_name_or_id}/_deletable:
    get:
      summary: Get the deletable status of the project
      description: Get the deletable status of the project
      tags:
        - project
      operationId: getProjectDeletable
      parameters:
        - $ref: '#/parameters/requestId'
        - $ref: '#/parameters/isResourceName'
        - $ref: '#/parameters/projectNameOrId'
      responses:
        '200':
          description: Return deletable status of the project.
          schema:
            $ref: '#/definitions/ProjectDeletable'
        '401':
          $ref: '#/responses/401'
        '403':
          $ref: '#/responses/403'
        '404':
          $ref: '#/responses/404'
        '500':
          $ref: '#/responses/500'
  '/projects/{project_name_or_id}/summary':
    get:
      summary: Get summary of the project.
      description: Get summary of the project.
      tags:
        - project
      operationId: getProjectSummary
      parameters:
        - $ref: '#/parameters/requestId'
        - $ref: '#/parameters/isResourceName'
        - $ref: '#/parameters/projectNameOrId'
      responses:
        '200':
          description: Get summary of the project successfully.
          schema:
            $ref: '#/definitions/ProjectSummary'
        '400':
          $ref: '#/responses/400'
        '401':
          $ref: '#/responses/401'
        '403':
          $ref: '#/responses/403'
        '404':
          $ref: '#/responses/404'
        '500':
          $ref: '#/responses/500'
  '/projects/{project_name_or_id}/members':
    get:
      summary: Get all project member information
      description: Get all project member information
      operationId: listProjectMembers
      parameters:
        - $ref: '#/parameters/requestId'
        - $ref: '#/parameters/isResourceName'
        - $ref: '#/parameters/projectNameOrId'
        - $ref: '#/parameters/page'
        - $ref: '#/parameters/pageSize'
        - name: entityname
          in: query
          type: string
          description: The entity name to search.
      tags:
        - member
      responses:
        '200':
          description: Get project members successfully.
          headers:
            X-Total-Count:
              description: The total count of members
              type: integer
            Link:
              description: Link refers to the previous page and next page
              type: string
          schema:
            type: array
            items:
              $ref: '#/definitions/ProjectMemberEntity'

        '400':
          $ref: '#/responses/400'
        '401':
          $ref: '#/responses/401'
        '403':
          $ref: '#/responses/403'
        '404':
          $ref: '#/responses/404'
        '500':
          $ref: '#/responses/500'
    post:
      summary: Create project member
      operationId: createProjectMember
      description: 'Create project member relationship, the member can be one of the user_member and group_member,  The user_member need to specify user_id or username. If the user already exist in harbor DB, specify the user_id,  If does not exist in harbor DB, it will SearchAndOnBoard the user. The group_member need to specify id or ldap_group_dn. If the group already exist in harbor DB. specify the user group''s id,  If does not exist, it will SearchAndOnBoard the group. '
      tags:
        - member
      parameters:
        - $ref: '#/parameters/requestId'
        - $ref: '#/parameters/isResourceName'
        - $ref: '#/parameters/projectNameOrId'
        - name: project_member
          in: body
          schema:
            $ref: '#/definitions/ProjectMember'
      responses:
        '201':
          description: Project member created successfully.
          headers:
            Location:
              type: string
              description: The URL of the created resource
        '400':
          $ref: '#/responses/400'
        '401':
          $ref: '#/responses/401'
        '403':
          $ref: '#/responses/403'
        '409':
          $ref: '#/responses/409'
        '500':
          $ref: '#/responses/500'
  '/projects/{project_name_or_id}/members/{mid}':
    get:
      summary: Get the project member information
      description: Get the project member information
      operationId: getProjectMember
      tags:
        - member
      parameters:
        - $ref: '#/parameters/requestId'
        - $ref: '#/parameters/isResourceName'
        - $ref: '#/parameters/projectNameOrId'
        - name: mid
          in: path
          type: integer
          format: int64
          required: true
          description: The member ID
      responses:
        '200':
          description: Project member retrieved successfully.
          schema:
            $ref: '#/definitions/ProjectMemberEntity'
        '400':
          $ref: '#/responses/400'
        '401':
          $ref: '#/responses/401'
        '403':
          $ref: '#/responses/403'
        '404':
          $ref: '#/responses/404'
        '500':
          $ref: '#/responses/500'
    put:
      summary: Update project member
      description: Update project member relationship
      operationId: updateProjectMember
      tags:
        - member
      parameters:
        - $ref: '#/parameters/requestId'
        - $ref: '#/parameters/isResourceName'
        - $ref: '#/parameters/projectNameOrId'
        - name: mid
          in: path
          type: integer
          format: int64
          required: true
          description: Member ID.
        - name: role
          in: body
          schema:
            $ref: '#/definitions/RoleRequest'
      responses:
        '200':
          $ref: '#/responses/200'
        '400':
          $ref: '#/responses/400'
        '401':
          $ref: '#/responses/401'
        '403':
          $ref: '#/responses/403'
        '404':
          $ref: '#/responses/404'
        '500':
          $ref: '#/responses/500'
    delete:
      summary: Delete project member
      description: Remove the specified project member from the project.
      operationId: deleteProjectMember
      tags:
        - member
      parameters:
        - $ref: '#/parameters/requestId'
        - $ref: '#/parameters/isResourceName'
        - $ref: '#/parameters/projectNameOrId'
        - name: mid
          in: path
          type: integer
          format: int64
          required: true
          description: Member ID.
      responses:
        '200':
          $ref: '#/responses/200'
        '400':
          $ref: '#/responses/400'
        '401':
          $ref: '#/responses/401'
        '403':
          $ref: '#/responses/403'
        '404':
          $ref: '#/responses/404'
        '500':
          $ref: '#/responses/500'
  '/projects/{project_name_or_id}/metadatas/':
    get:
      summary: Get the metadata of the specific project
      description: Get the metadata of the specific project
      operationId: listProjectMetadatas
      parameters:
        - $ref: '#/parameters/requestId'
        - $ref: '#/parameters/isResourceName'
        - $ref: '#/parameters/projectNameOrId'
      tags:
        - projectMetadata
      responses:
        '200':
          description: Success
          schema:
            type: object
            additionalProperties:
              type: string
        '400':
          $ref: '#/responses/400'
        '401':
          $ref: '#/responses/401'
        '403':
          $ref: '#/responses/403'
        '404':
          $ref: '#/responses/404'
        '500':
          $ref: '#/responses/500'
    post:
      summary: Add metadata for the specific project
      operationId: addProjectMetadatas
      description: Add metadata for the specific project
      tags:
        - projectMetadata
      parameters:
        - $ref: '#/parameters/requestId'
        - $ref: '#/parameters/isResourceName'
        - $ref: '#/parameters/projectNameOrId'
        - name: metadata
          in: body
          schema:
            type: object
            additionalProperties:
              type: string
      responses:
        '200':
          $ref: '#/responses/200'
        '400':
          $ref: '#/responses/400'
        '401':
          $ref: '#/responses/401'
        '403':
          $ref: '#/responses/403'
        '404':
          $ref: '#/responses/404'
        '409':
          $ref: '#/responses/409'
        '500':
          $ref: '#/responses/500'
  '/projects/{project_name_or_id}/metadatas/{meta_name}':
    get:
      summary: Get the specific metadata of the specific project
      description: Get the specific metadata of the specific project
      operationId: getProjectMetadata
      parameters:
        - $ref: '#/parameters/requestId'
        - $ref: '#/parameters/isResourceName'
        - $ref: '#/parameters/projectNameOrId'
        - name: meta_name
          in: path
          description: The name of metadata.
          required: true
          type: string
      tags:
        - projectMetadata
      responses:
        '200':
          description: Success
          schema:
            type: object
            additionalProperties:
              type: string
        '400':
          $ref: '#/responses/400'
        '401':
          $ref: '#/responses/401'
        '403':
          $ref: '#/responses/403'
        '404':
          $ref: '#/responses/404'
        '500':
          $ref: '#/responses/500'
    put:
      summary: Update the specific metadata for the specific project
      description: Update the specific metadata for the specific project
      operationId: updateProjectMetadata
      tags:
        - projectMetadata
      parameters:
        - $ref: '#/parameters/requestId'
        - $ref: '#/parameters/isResourceName'
        - $ref: '#/parameters/projectNameOrId'
        - name: meta_name
          in: path
          description: The name of metadata.
          required: true
          type: string
        - name: metadata
          in: body
          schema:
            type: object
            additionalProperties:
              type: string
      responses:
        '200':
          $ref: '#/responses/200'
        '400':
          $ref: '#/responses/400'
        '401':
          $ref: '#/responses/401'
        '403':
          $ref: '#/responses/403'
        '404':
          $ref: '#/responses/404'
        '409':
          $ref: '#/responses/409'
        '500':
          $ref: '#/responses/500'
    delete:
      summary: Delete the specific metadata for the specific project
      description: Delete the specific metadata for the specific project
      operationId: deleteProjectMetadata
      tags:
        - projectMetadata
      parameters:
        - $ref: '#/parameters/requestId'
        - $ref: '#/parameters/isResourceName'
        - $ref: '#/parameters/projectNameOrId'
        - name: meta_name
          in: path
          description: The name of metadata.
          required: true
          type: string
      responses:
        '200':
          $ref: '#/responses/200'
        '400':
          $ref: '#/responses/400'
        '401':
          $ref: '#/responses/401'
        '403':
          $ref: '#/responses/403'
        '404':
          $ref: '#/responses/404'
        '409':
          $ref: '#/responses/409'
        '500':
          $ref: '#/responses/500'
  /repositories:
    get:
      summary: List all authorized repositories
      description: List all authorized repositories
      tags:
        - repository
      operationId: listAllRepositories
      parameters:
        - $ref: '#/parameters/requestId'
        - $ref: '#/parameters/query'
        - $ref: '#/parameters/sort'
        - $ref: '#/parameters/page'
        - $ref: '#/parameters/pageSize'
      responses:
        '200':
          description: Success
          headers:
            X-Total-Count:
              description: The total count of repositories
              type: integer
            Link:
              description: Link refers to the previous page and next page
              type: string
          schema:
            type: array
            items:
              $ref: '#/definitions/Repository'
        '400':
          $ref: '#/responses/400'
        '500':
          $ref: '#/responses/500'
  /projects/{project_name}/repositories:
    get:
      summary: List repositories
      description: List repositories of the specified project
      tags:
        - repository
      operationId: listRepositories
      parameters:
        - $ref: '#/parameters/requestId'
        - $ref: '#/parameters/projectName'
        - $ref: '#/parameters/query'
        - $ref: '#/parameters/sort'
        - $ref: '#/parameters/page'
        - $ref: '#/parameters/pageSize'
      responses:
        '200':
          description: Success
          headers:
            X-Total-Count:
              description: The total count of repositories
              type: integer
            Link:
              description: Link refers to the previous page and next page
              type: string
          schema:
            type: array
            items:
              $ref: '#/definitions/Repository'
        '400':
          $ref: '#/responses/400'
        '401':
          $ref: '#/responses/401'
        '403':
          $ref: '#/responses/403'
        '404':
          $ref: '#/responses/404'
        '422':
          $ref: '#/responses/422'
        '500':
          $ref: '#/responses/500'
  /projects/{project_name}/repositories/{repository_name}:
    get:
      summary: Get repository
      description: Get the repository specified by name
      tags:
        - repository
      operationId: getRepository
      parameters:
        - $ref: '#/parameters/requestId'
        - $ref: '#/parameters/projectName'
        - $ref: '#/parameters/repositoryName'
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/Repository'
        '400':
          $ref: '#/responses/400'
        '401':
          $ref: '#/responses/401'
        '403':
          $ref: '#/responses/403'
        '404':
          description: Repository not found. No repository with the specified name exists in this project.
          headers:
            X-Request-Id:
              description: The ID of the corresponding request for the response
              type: string
          schema:
            $ref: '#/definitions/Errors'
        '500':
          $ref: '#/responses/500'
    put:
      summary: Update repository
      description: Update the repository specified by name
      tags:
        - repository
      operationId: updateRepository
      parameters:
        - $ref: '#/parameters/requestId'
        - $ref: '#/parameters/projectName'
        - $ref: '#/parameters/repositoryName'
        - name: repository
          in: body
          description: The JSON object of repository.
          required: true
          schema:
            $ref: '#/definitions/Repository'
      responses:
        '200':
          $ref: '#/responses/200'
        '400':
          $ref: '#/responses/400'
        '401':
          $ref: '#/responses/401'
        '403':
          $ref: '#/responses/403'
        '404':
          $ref: '#/responses/404'
        '500':
          $ref: '#/responses/500'
    delete:
      summary: Delete repository
      description: Delete the repository specified by name
      tags:
        - repository
      operationId: deleteRepository
      parameters:
        - $ref: '#/parameters/requestId'
        - $ref: '#/parameters/projectName'
        - $ref: '#/parameters/repositoryName'
      responses:
        '200':
          $ref: '#/responses/200'
        '400':
          $ref: '#/responses/400'
        '401':
          $ref: '#/responses/401'
        '403':
          $ref: '#/responses/403'
        '404':
          description: Repository not found. No repository with the specified name exists in this project.
          headers:
            X-Request-Id:
              description: The ID of the corresponding request for the response
              type: string
          schema:
            $ref: '#/definitions/Errors'
        '412':
          description: Precondition failed. The repository contains images protected by an immutable tag rule and cannot be deleted.
          headers:
            X-Request-Id:
              description: The ID of the corresponding request for the response
              type: string
          schema:
            $ref: '#/definitions/Errors'
        '500':
          $ref: '#/responses/500'
  /projects/{project_name}/repositories/{repository_name}/artifacts:
    get:
      summary: List artifacts
      description: List artifacts under the specific project and repository. Except the basic properties, the other supported queries in "q" includes "tags=*" to list only tagged artifacts, "tags=nil" to list only untagged artifacts, "tags=~v" to list artifacts whose tag fuzzy matches "v", "tags=v" to list artifact whose tag exactly matches "v", "labels=(id1, id2)" to list artifacts that both labels with id1 and id2 are added to
      tags:
        - artifact
      operationId: listArtifacts
      parameters:
        - $ref: '#/parameters/requestId'
        - $ref: '#/parameters/projectName'
        - $ref: '#/parameters/repositoryName'
        - $ref: '#/parameters/query'
        - $ref: '#/parameters/sort'
        - $ref: '#/parameters/page'
        - $ref: '#/parameters/pageSize'
        - $ref: '#/parameters/acceptVulnerabilities'
        - name: with_tag
          in: query
          description: Specify whether the tags are included inside the returning artifacts
          type: boolean
   

# --- truncated at 32 KB (312 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/goharbor/refs/heads/main/openapi/_original/goharbor-harbor-api-v2.0-swagger.yml