Apicurio Metadata API

The Metadata API from Apicurio — 2 operation(s) for metadata.

OpenAPI Specification

apicurio-metadata-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Apicurio Registry Admin Metadata API
  version: 3.1.x
  description: Apicurio Registry is a high-performance, runtime registry for schemas and API designs. It stores and manages OpenAPI, AsyncAPI, Avro, JSON Schema, Protobuf, and other artifact types, providing a REST API for schema management with compatibility checking and content versioning.
  contact:
    name: Apicurio
    url: https://www.apicur.io/
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0
servers:
- url: http://localhost:8080/apis/registry/v3
  description: Local Apicurio Registry
tags:
- name: Metadata
paths:
  /groups/{groupId}/artifacts/{artifactId}/versions/{versionExpression}:
    summary: Manage a single version of a single artifact in the registry.
    parameters:
    - name: groupId
      description: The artifact group ID.  Must be a string provided by the client, representing the name of the grouping of artifacts. Must follow the ".{1,512}" pattern.
      schema:
        $ref: '#/components/schemas/GroupId'
      in: path
      required: true
    - name: artifactId
      description: The artifact ID.  Can be a string (client-provided) or UUID (server-generated), representing the unique artifact identifier. Must follow the ".{1,512}" pattern.
      schema:
        $ref: '#/components/schemas/ArtifactId'
      in: path
      required: true
    - name: versionExpression
      description: "An expression resolvable to a specific version ID within the given group and artifact. The following rules apply:\n\n - If the expression is in the form \"branch={branchId}\", and artifact branch {branchId} exists: The expression is resolved to a version that the branch points to.\n - Otherwise: The expression is resolved to a version with the same ID, which must follow the \"[a-zA-Z0-9._\\\\-+]{1,256}\" pattern."
      schema:
        type: string
      in: path
      required: true
    get:
      tags:
      - Metadata
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VersionMetaData'
          description: The artifact version's metadata.
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      operationId: getArtifactVersionMetaData
      summary: Get artifact version metadata
      description: "Retrieves the metadata for a single version of the artifact.  The version metadata is \na subset of the artifact metadata and only includes the metadata that is specific to\nthe version (for example, this doesn't include `modifiedOn`).\n\nThis operation can fail for the following reasons:\n\n* No artifact with this `artifactId` exists (HTTP error `404`)\n* No version with this `version` exists (HTTP error `404`)\n* A server error occurred (HTTP error `500`)\n"
    put:
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EditableVersionMetaData'
        required: true
      tags:
      - Metadata
      responses:
        '204':
          description: The artifact version's metadata was successfully updated.
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      operationId: updateArtifactVersionMetaData
      summary: Update artifact version metadata
      description: "Updates the user-editable portion of the artifact version's metadata.  Only some of \nthe metadata fields are editable by the user.  For example, `description` is editable, \nbut `createdOn` is not.\n\nThis operation can fail for the following reasons:\n\n* No artifact with this `artifactId` exists (HTTP error `404`)\n* No version with this `version` exists (HTTP error `404`)\n* A server error occurred (HTTP error `500`)\n"
  /groups/{groupId}/artifacts/{artifactId}:
    summary: Manage a single artifact.
    parameters:
    - name: groupId
      description: The artifact group ID.  Must be a string provided by the client, representing the name of the grouping of artifacts. Must follow the ".{1,512}" pattern.
      schema:
        $ref: '#/components/schemas/GroupId'
      in: path
      required: true
    - name: artifactId
      description: The artifact ID.  Can be a string (client-provided) or UUID (server-generated), representing the unique artifact identifier. Must follow the ".{1,512}" pattern.
      schema:
        $ref: '#/components/schemas/ArtifactId'
      in: path
      required: true
    get:
      tags:
      - Metadata
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ArtifactMetaData'
          description: The artifact's metadata.
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      operationId: getArtifactMetaData
      summary: Get artifact metadata
      description: 'Gets the metadata for an artifact in the registry, based on the latest version. If the latest version of the artifact is marked as `DISABLED`, the next available non-disabled version will be used. The returned metadata includes

        both generated (read-only) and editable metadata (such as name and description).


        This operation can fail for the following reasons:


        * No artifact with this `artifactId` exists  or all versions are `DISABLED` (HTTP error `404`)

        * A server error occurred (HTTP error `500`)'
    put:
      requestBody:
        description: Updated artifact metadata.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EditableArtifactMetaData'
        required: true
      tags:
      - Metadata
      responses:
        '204':
          description: The artifact's metadata was updated.
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      operationId: updateArtifactMetaData
      summary: Update artifact metadata
      description: 'Updates the editable parts of the artifact''s metadata.  Not all metadata fields can

        be updated.  Note that only the properties included will be updated.  You can update

        only the name by including only the `name` property in the payload of the request.

        Properties that are allowed but not present will result in the artifact''s metadata

        not being changed.


        This operation can fail for the following reasons:


        * No artifact with the `artifactId` exists (HTTP error `404`)

        * A server error occurred (HTTP error `500`)'
components:
  schemas:
    ArtifactId:
      description: The ID of a single artifact.
      pattern: ^.{1,512}$
      type: string
      example: '"example-artifact"'
    EditableVersionMetaData:
      title: Root Type for EditableArtifactMetaData
      description: ''
      type: object
      properties:
        name:
          type: string
        description:
          type: string
        labels:
          $ref: '#/components/schemas/Labels'
          description: ''
      example:
        name: Artifact Name
        description: The description of the artifact.
        labels:
          custom-1: foo
          custom-2: bar
    GroupId:
      description: An ID of a single artifact group.
      pattern: ^.{1,512}$
      type: string
      example: '"my-group"'
    ContractMetadata:
      title: ContractMetadata
      description: Contract metadata for an artifact.
      type: object
      properties:
        status:
          description: The contract lifecycle status.
          type: string
          enum:
          - DRAFT
          - STABLE
          - DEPRECATED
        ownerTeam:
          description: The team that owns the contract.
          type: string
        ownerDomain:
          description: The domain the contract belongs to.
          type: string
        supportContact:
          description: Support contact email.
          type: string
        classification:
          description: Data classification level.
          type: string
          enum:
          - PUBLIC
          - INTERNAL
          - CONFIDENTIAL
          - RESTRICTED
        stage:
          description: Promotion stage.
          type: string
          enum:
          - DEV
          - STAGE
          - PROD
        stableDate:
          description: ISO-8601 date when contract became stable.
          type: string
        deprecatedDate:
          description: ISO-8601 date when contract was deprecated.
          type: string
        deprecationReason:
          description: Reason for deprecation.
          type: string
        compatibilityGroup:
          description: Compatibility group for schema evolution scoping.
          type: string
    ProblemDetails:
      title: Root Type for Error
      description: 'All error responses, whether `4xx` or `5xx` will include one of these as the response

        body.'
      required:
      - title
      - status
      type: object
      properties:
        detail:
          description: A human-readable explanation specific to this occurrence of the problem.
          type: string
        type:
          description: A URI reference [RFC3986] that identifies the problem type.
          type: string
        title:
          description: A short, human-readable summary of the problem type.
          type: string
        status:
          format: int32
          description: The HTTP status code.
          type: integer
        instance:
          description: A URI reference that identifies the specific occurrence of the problem.
          type: string
        name:
          description: The name of the error (typically a server exception class name).
          type: string
      example:
        status: 500
        name: NullPointerException
        title: An error occurred somewhere.
    EditableArtifactMetaData:
      title: Root Type for EditableArtifactMetaData
      description: ''
      type: object
      properties:
        name:
          type: string
        description:
          type: string
        labels:
          $ref: '#/components/schemas/Labels'
          description: ''
        owner:
          description: ''
          type: string
      example:
        name: Artifact Name
        description: The description of the artifact.
        owner: user-1
        labels:
          custom-1: foo
          custom-2: bar
    Version:
      description: 'A single version of an artifact.  Can be provided by the client when creating a new version,

        or it can be server-generated.  The value can be any string unique to the artifact, but it is

        recommended to use a simple integer or a semver value.'
      pattern: ^[a-zA-Z0-9._\-+]{1,256}$
      type: string
      example: '"3.1.6"'
    ArtifactMetaData:
      title: Root Type for ArtifactMetaData
      description: ''
      required:
      - artifactId
      - owner
      - createdOn
      - modifiedBy
      - modifiedOn
      - artifactType
      - groupId
      type: object
      properties:
        name:
          type: string
        description:
          type: string
        owner:
          type: string
        createdOn:
          format: date-time
          type: string
        modifiedBy:
          type: string
        modifiedOn:
          format: date-time
          type: string
        artifactType:
          $ref: '#/components/schemas/ArtifactType'
          description: ''
        labels:
          $ref: '#/components/schemas/Labels'
          description: ''
        groupId:
          $ref: '#/components/schemas/GroupId'
          description: ''
        artifactId:
          $ref: '#/components/schemas/ArtifactId'
          description: ''
        contractMetadata:
          $ref: '#/components/schemas/ContractMetadata'
          description: Contract metadata projected from the artifact labels. Only present when data contracts are enabled and contract labels exist.
      example:
        groupId: My-Group
        artifactId: Procurement-Invoice
        name: Artifact Name
        description: Description of the artifact
        artifactType: AVRO
        owner: user1
        createdOn: '2019-03-22T12:51:19Z'
        modifiedBy: user2
        modifiedOn: '2019-07-19T15:09:00Z'
        labels:
          custom-1: foo
          custom-2: bar
    Labels:
      description: User-defined name-value pairs. Name and value must be strings.
      type: object
      additionalProperties:
        type: string
      x-codegen-inline: true
      x-codegen-type: StringMap
    ArtifactType:
      description: ''
      type: string
      example: AVRO
      x-codegen-package: io.apicurio.registry.types
    VersionMetaData:
      title: Root Type for ArtifactVersionMetaData
      description: ''
      required:
      - createdOn
      - owner
      - version
      - artifactType
      - globalId
      - artifactId
      - contentId
      type: object
      properties:
        version:
          $ref: '#/components/schemas/Version'
        name:
          type: string
        description:
          type: string
        owner:
          type: string
        createdOn:
          format: date-time
          type: string
        artifactType:
          $ref: '#/components/schemas/ArtifactType'
          description: ''
        globalId:
          format: int64
          description: ''
          type: integer
        state:
          $ref: '#/components/schemas/VersionState'
          description: ''
        labels:
          $ref: '#/components/schemas/Labels'
          description: ''
        groupId:
          $ref: '#/components/schemas/GroupId'
          description: ''
        contentId:
          format: int64
          description: ''
          type: integer
        artifactId:
          $ref: '#/components/schemas/ArtifactId'
          description: ''
        modifiedBy:
          description: ''
          type: string
        modifiedOn:
          format: date-time
          description: ''
          type: string
      example:
        groupId: My-Group
        artifactId: my-artifact-id
        version: 1221432
        artifactType: PROTOBUF
        name: Artifact Name
        description: The description of the artifact
        owner: user1
        createdOn: '2019-05-17T12:00:00Z'
        globalId: 183282932983
        contentId: 12347
        labels:
          custom-1: foo
          custom-2: bar
    VersionState:
      description: 'Describes the state of an artifact or artifact version.


        * ENABLED

        * DISABLED

        * DEPRECATED

        * DRAFT

        * SUNSET — Signals that a migration deadline has passed and the version will be removed. Requires transitioning through DEPRECATED first. Added in 3.3.0.

        '
      enum:
      - ENABLED
      - DISABLED
      - DEPRECATED
      - DRAFT
      - SUNSET
      type: string
      x-codegen-package: io.apicurio.registry.types
  responses:
    Unauthorized:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
          examples:
            UnauthorizedExample:
              value:
                detail: 'UnauthorizedException: User is not authenticated.'
                title: User is not authenticated.
                status: 401
                name: UnauthorizedException
      description: Common response for all operations that can return a `401` error indicating authentication is required.
    ServerError:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
          examples:
            ErrorExample:
              value:
                error_code: 500
                message: Lost connection to the database.
      description: Common response for all operations that can fail with an unexpected server error.
    NotFound:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
          examples:
            NotFoundExample:
              value:
                error_code: 404
                message: No artifact with id 'Topic-1/Inbound' could be found.
      description: Common response for all operations that can return a `404` error.
    Forbidden:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
          examples:
            ForbiddenExample:
              value:
                detail: 'ForbiddenException: User is not authorized to perform this operation.'
                title: User is not authorized to perform this operation.
                status: 403
                name: ForbiddenException
      description: Common response for all operations that can return a `403` error indicating the user is authenticated but not authorized.
    BadRequest:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
      description: Common response for all operations that can return a `400` error.
  securitySchemes:
    BasicAuth:
      type: http
      scheme: basic
    OAuth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://example.com/realms/apicurio/protocol/openid-connect/token
          scopes:
            read: Read access
            write: Write access
            admin: Admin access
x-codegen:
  suppress-date-time-formatting: true
  bean-annotations:
  - io.quarkus.runtime.annotations.RegisterForReflection
  - annotation: lombok.experimental.SuperBuilder
    excludeEnums: true
  - annotation: lombok.AllArgsConstructor
    excludeEnums: true
  - annotation: lombok.NoArgsConstructor
    excludeEnums: true
  - annotation: lombok.EqualsAndHashCode
    excludeEnums: true
  - annotation: lombok.ToString(callSuper = true)
    excludeEnums: true