GoHarbor · OpenAPI Overlay 1.0.0

API Evangelist enhancements for the Harbor v2.0 API

8 actions 8 updates update extends ../openapi/_original/goharbor-harbor-api-v2.0-swagger.yml
Generated by API Evangelist Written by API Evangelist tooling for GoHarbor's API. It is a proposal applied on top of the contract, not a document GoHarbor publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

licensecontactx-docsx-api-explorerx-source-of-truthx-delivery-modelx-conventionsx-domain-standard

Targets 3

$.info
$.paths['/projects/{project_name}/repositories/{repository_name}/artifacts/{reference}'].delete
$.paths['/projects/{project_name_or_id}'].delete

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for the Harbor v2.0 API
  version: 1.0.0
x-provenance:
  generated: '2026-09-12'
  method: generated
  source: openapi/_original/goharbor-harbor-api-v2.0-swagger.yml
  note: >-
    Non-destructive enhancement layer over Harbor's own published contract. The original is
    stored verbatim and is never mutated. Everything asserted here is sourced from Harbor's
    own docs, source or live responses — see the repo artifacts each action names.
extends: ../openapi/_original/goharbor-harbor-api-v2.0-swagger.yml
actions:
- target: $.info
  description: Add the license, contact and external documentation Harbor publishes outside the spec.
  update:
    license:
      name: Apache-2.0
      url: https://github.com/goharbor/harbor/blob/main/LICENSE
    contact:
      name: Harbor
      url: https://goharbor.io/
    x-docs: https://goharbor.io/docs/2.15.0/
    x-api-explorer: https://{host}/devcenter-api-2.0
    x-source-of-truth: https://raw.githubusercontent.com/goharbor/harbor/main/api/v2.0/swagger.yaml
- target: $.info
  description: Record the self-hosted delivery model so a consumer does not look for a vendor endpoint.
  update:
    x-delivery-model:
      model: self-hosted
      base_url_template: https://{host}/api/v2.0
      note: Harbor is installed and operated by the consumer. The spec's `host` field is literally "localhost" because the document ships inside the server.
- target: $.info
  description: Attach the runtime conventions confirmed against live responses.
  update:
    x-conventions:
      pagination:
        params: [page, page_size]
        response_headers: [X-Total-Count, Link]
      request_id_header: X-Request-Id
      query_language: 'k=v | k=~v | k=[min~max] | k={v1 v2} | k=(v1 v2)'
      sort_param: sort
      idempotency: none
      error_envelope: '{"errors":[{"code","message"}]}'
      artifact: conventions/goharbor-conventions.yml
- target: $.info
  description: Record the domain standard this contract implements alongside its REST surface.
  update:
    x-domain-standard:
      id: oci-distribution
      name: OCI Distribution Specification
      evidence: 'GET /v2/ on a Harbor instance returns 401 with docker-distribution-api-version: registry/2.0'
      artifact: conformance/goharbor-conformance.yml
- target: $.info
  description: Point at the published permission model, which is the real authorization surface behind Basic auth.
  update:
    x-authorization:
      model: robot-account-permissions
      reference: https://goharbor.io/docs/2.15.0/administration/robot-accounts/#permission-references
      artifact: scopes/goharbor-scopes.yml
      introspection: GET /users/current/permissions
- target: $.info
  description: Record the event surface, which is documented outside the REST contract.
  update:
    x-events:
      style: webhooks
      formats: [Default, CloudEvents 1.0]
      event_count: 10
      docs: https://goharbor.io/docs/2.15.0/working-with-projects/project-configuration/configure-webhooks/
      artifact: asyncapi/goharbor-webhooks.yml
- target: $.paths['/projects/{project_name}/repositories/{repository_name}/artifacts/{reference}'].delete
  description: Flag the irreversibility of artifact deletion for agent consumers.
  update:
    x-reversibility:
      reversal: null
      window: null
      note: No undelete. Blobs persist only until the operator's next garbage collection run.
      docs: https://goharbor.io/docs/2.15.0/administration/garbage-collection/
- target: $.paths['/projects/{project_name_or_id}'].delete
  description: Point at the deletability precheck so an agent can rehearse.
  update:
    x-precheck:
      operationId: getProjectDeletable
      path: GET /projects/{project_name_or_id}/_deletable