Apicurio Admin API

The Admin API from Apicurio — 17 operation(s) for admin.

OpenAPI Specification

apicurio-admin-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Apicurio Registry Admin 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: Admin
paths:
  /admin/rules:
    summary: Manage the global rules that apply to all artifacts if not otherwise configured.
    get:
      tags:
      - Admin
      responses:
        '200':
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RuleType'
          description: The list of names of the globally configured rules.
        '500':
          $ref: '#/components/responses/ServerError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      operationId: listGlobalRules
      summary: List global rules
      description: 'Gets a list of all the currently configured global rules (if any).


        This operation can fail for the following reasons:


        * A server error occurred (HTTP error `500`)

        '
    post:
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateRule'
        required: true
      tags:
      - Admin
      responses:
        '204':
          description: The global rule was added.
        '400':
          $ref: '#/components/responses/BadRequest'
        '409':
          $ref: '#/components/responses/Conflict'
        '500':
          $ref: '#/components/responses/ServerError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      operationId: createGlobalRule
      summary: Create global rule
      description: 'Adds a rule to the list of globally configured rules.


        This operation can fail for the following reasons:


        * The rule type is unknown (HTTP error `400`)

        * The rule already exists (HTTP error `409`)

        * A server error occurred (HTTP error `500`)

        '
    delete:
      tags:
      - Admin
      responses:
        '204':
          description: All global rules have been removed successfully.
        '500':
          $ref: '#/components/responses/ServerError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      operationId: deleteAllGlobalRules
      summary: Delete all global rules
      description: 'Deletes all globally configured rules.


        This operation can fail for the following reasons:


        * A server error occurred (HTTP error `500`)

        '
  /admin/rules/{ruleType}:
    summary: Manage the configuration of a single global artifact rule.
    parameters:
    - name: ruleType
      description: The unique name/type of a rule.
      schema:
        $ref: '#/components/schemas/RuleType'
      in: path
      required: true
    get:
      tags:
      - Admin
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Rule'
          description: The global rule's configuration.
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      operationId: getGlobalRuleConfig
      summary: Get global rule configuration
      description: 'Returns information about the named globally configured rule.


        This operation can fail for the following reasons:


        * Invalid rule name/type (HTTP error `400`)

        * No rule with name/type `rule` exists (HTTP error `404`)

        * A server error occurred (HTTP error `500`)

        '
    put:
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Rule'
        required: true
      tags:
      - Admin
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Rule'
          description: The global rule's configuration was successfully updated.
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      operationId: updateGlobalRuleConfig
      summary: Update global rule configuration
      description: 'Updates the configuration for a globally configured rule.


        This operation can fail for the following reasons:


        * Invalid rule name/type (HTTP error `400`)

        * No rule with name/type `rule` exists (HTTP error `404`)

        * A server error occurred (HTTP error `500`)

        '
    delete:
      tags:
      - Admin
      responses:
        '204':
          description: The global rule was successfully deleted.
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      operationId: deleteGlobalRule
      summary: Delete global rule
      description: 'Deletes a single global rule.  If this is the only rule configured, this is the same

        as deleting **all** rules.


        This operation can fail for the following reasons:


        * Invalid rule name/type (HTTP error `400`)

        * No rule with name/type `rule` exists (HTTP error `404`)

        * Rule cannot be deleted (HTTP error `409`)

        * A server error occurred (HTTP error `500`)

        '
  /admin/export:
    summary: Provides a way to export registry data.
    get:
      tags:
      - Admin
      parameters:
      - name: forBrowser
        description: Indicates if the operation is done for a browser.  If true, the response will be a JSON payload with a property called `href`.  This `href` will be a single-use, naked download link suitable for use by a web browser to download the content.
        schema:
          type: boolean
        in: query
      - name: groupId
        description: If specified, only data belonging to this group will be exported. Global rules will be excluded.
        schema:
          type: string
        in: query
      responses:
        '200':
          content:
            application/zip:
              schema:
                $ref: '#/components/schemas/FileContent'
            application/json:
              schema:
                $ref: '#/components/schemas/DownloadRef'
          description: Response when the export is successful.
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      operationId: exportData
      summary: Export registry data
      description: Exports registry data as a ZIP archive.  If a `groupId` query parameter is provided, only data belonging to the specified group will be exported and global rules will be excluded.
  /admin/import:
    summary: Provides a way to import data into the registry.
    post:
      requestBody:
        description: The ZIP file representing the previously exported registry data.
        content:
          application/zip:
            schema:
              $ref: '#/components/schemas/FileContent'
        required: true
      tags:
      - Admin
      parameters:
      - name: X-Registry-Preserve-GlobalId
        description: If this header is set to false, global ids of imported data will be ignored and replaced by next id in global id sequence. This allows to import any data even thought the global ids would cause a conflict.
        schema:
          type: boolean
        in: header
      - name: X-Registry-Preserve-ContentId
        description: If this header is set to false, content ids of imported data will be ignored and replaced by next id in content id sequence. The mapping between content and artifacts will be preserved. This allows to import any data even thought the content ids would cause a conflict.
        schema:
          type: boolean
        in: header
        required: false
      - name: requireEmptyRegistry
        description: 'Query parameter indicating whether the registry must be empty before allowing

          data to be imported.  Defaults to `true` if omitted.'
        schema:
          type: boolean
        in: query
        required: false
      responses:
        '201':
          description: Indicates that the import was successful.
        '409':
          $ref: '#/components/responses/Conflict'
        '500':
          $ref: '#/components/responses/ServerError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      operationId: importData
      summary: Import registry data
      description: Imports registry data that was previously exported using the `/admin/export` operation.
  /admin/roleMappings/{principalId}:
    summary: Manage the configuration of a single role mapping.
    parameters:
    - name: principalId
      description: Unique id of a principal (typically either a user or service account).
      schema:
        type: string
      in: path
      required: true
    get:
      tags:
      - Admin
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RoleMapping'
          description: When successful, returns the details of a role mapping.
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      operationId: getRoleMapping
      summary: Return a single role mapping
      description: 'Gets the details of a single role mapping (by `principalId`).


        This operation can fail for the following reasons:


        * No role mapping for the `principalId` exists (HTTP error `404`)

        * A server error occurred (HTTP error `500`)

        '
    put:
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateRole'
        required: true
      tags:
      - Admin
      responses:
        '204':
          description: Response when the update is successful.
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      operationId: updateRoleMapping
      summary: Update a role mapping
      description: 'Updates a single role mapping for one user/principal.


        This operation can fail for the following reasons:


        * No role mapping for the principalId exists (HTTP error `404`)

        * A server error occurred (HTTP error `500`)

        '
    delete:
      tags:
      - Admin
      responses:
        '204':
          description: Response returned when the delete was successful.
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      operationId: deleteRoleMapping
      summary: Delete a role mapping
      description: 'Deletes a single role mapping, effectively denying access to a user/principal.


        This operation can fail for the following reasons:


        * No role mapping for the principalId exists (HTTP error `404`)

        * A server error occurred (HTTP error `500`)

        '
  /admin/config/properties:
    summary: Manage configuration properties.
    get:
      tags:
      - Admin
      responses:
        '200':
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ConfigurationProperty'
          description: On a successful response, returns a list of configuration properties.
        '500':
          $ref: '#/components/responses/ServerError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      operationId: listConfigProperties
      summary: List all configuration properties
      description: 'Returns a list of all configuration properties that have been set.  The list is not paged.


        This operation may fail for one of the following reasons:


        * A server error occurred (HTTP error `500`)

        '
  /admin/config/properties/{propertyName}:
    summary: Manage a single configuration property (by name).
    parameters:
    - name: propertyName
      description: The name of a configuration property.
      schema:
        type: string
      in: path
      required: true
    get:
      tags:
      - Admin
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConfigurationProperty'
          description: The configuration property value.
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      operationId: getConfigProperty
      summary: Get configuration property value
      description: 'Returns the value of a single configuration property.


        This operation may fail for one of the following reasons:


        * Property not found or not configured (HTTP error `404`)

        * A server error occurred (HTTP error `500`)

        '
    put:
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateConfigurationProperty'
        required: true
      tags:
      - Admin
      responses:
        '204':
          description: The configuration property was updated.
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      operationId: updateConfigProperty
      summary: Update a configuration property
      description: 'Updates the value of a single configuration property.


        This operation may fail for one of the following reasons:


        * Property not found or not configured (HTTP error `404`)

        * A server error occurred (HTTP error `500`)

        '
    delete:
      tags:
      - Admin
      responses:
        '204':
          description: The configuration property was deleted.
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      operationId: resetConfigProperty
      summary: Reset a configuration property
      description: 'Resets the value of a single configuration property.  This will return the property to

        its default value (see external documentation for supported properties and their default

        values).


        This operation may fail for one of the following reasons:


        * Property not found or not configured (HTTP error `404`)

        * A server error occurred (HTTP error `500`)

        '
  /admin/roleMappings:
    summary: Collection to manage role mappings for authenticated principals
    get:
      tags:
      - Admin
      parameters:
      - name: limit
        description: The number of role mappings to return.  Defaults to 20.
        schema:
          type: integer
        in: query
      - name: offset
        description: The number of role mappings to skip before starting the result set.  Defaults to 0.
        schema:
          type: integer
        in: query
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RoleMappingSearchResults'
          description: A successful response will return the list of role mappings.
        '500':
          $ref: '#/components/responses/ServerError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      operationId: listRoleMappings
      summary: List all role mappings
      description: 'Gets a list of all role mappings configured in the registry (if any).


        This operation can fail for the following reasons:


        * A server error occurred (HTTP error `500`)

        '
    post:
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RoleMapping'
        required: true
      tags:
      - Admin
      responses:
        '204':
          description: Returned when the role mapping was successfully created.
        '500':
          $ref: '#/components/responses/ServerError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      operationId: createRoleMapping
      summary: Create a new role mapping
      description: 'Creates a new mapping between a user/principal and a role.


        This operation can fail for the following reasons:


        * A server error occurred (HTTP error `500`)


        '
  /admin/config/artifactTypes:
    summary: The list of artifact types supported by this instance of Registry.
    get:
      tags:
      - Admin
      responses:
        '200':
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ArtifactTypeInfo'
          description: The list of available artifact types.
        '500':
          $ref: '#/components/responses/ServerError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      operationId: listArtifactTypes
      summary: List artifact types
      description: 'Gets a list of all the configured artifact types.


        This operation can fail for the following reasons:


        * A server error occurred (HTTP error `500`)

        '
  /admin/contracts/ruleset:
    summary: Manage the global contract ruleset.
    get:
      tags:
      - Admin
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContractRuleSet'
          description: The global contract ruleset.
        '500':
          $ref: '#/components/responses/ServerError'
      operationId: getGlobalContractRuleset
      summary: Get global contract ruleset
      description: Returns the global contract ruleset that applies to all artifacts.
    put:
      tags:
      - Admin
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContractRuleSet'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContractRuleSet'
          description: The global contract ruleset was set.
        '500':
          $ref: '#/components/responses/ServerError'
      operationId: setGlobalContractRuleset
      summary: Set global contract ruleset
      description: Sets the global contract ruleset that applies to all artifacts.
    delete:
      tags:
      - Admin
      responses:
        '204':
          description: The global contract ruleset was deleted.
        '500':
          $ref: '#/components/responses/ServerError'
      operationId: deleteGlobalContractRuleset
      summary: Delete global contract ruleset
      description: Deletes the global contract ruleset.
  /admin/snapshots:
    summary: Triggers a snapshot of the Registry storage. Only supported in KafkaSQL storage
    post:
      tags:
      - Admin
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SnapshotMetaData'
          description: The snapshot has been successfully triggered.
        '500':
          $ref: '#/components/responses/ServerError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      operationId: triggerSnapshot
      summary: Trigger storage snapshot
      description: 'Triggers the creation of a snapshot of the internal database for compatible storages.


        This operation can fail for the following reasons:


        * A server error occurred (HTTP error `500`)

        '
  /admin/gitops/status:
    summary: Get the current GitOps synchronization status.
    get:
      tags:
      - Admin
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GitOpsStatus'
          description: The current GitOps synchronization status.
        '409':
          $ref: '#/components/responses/Conflict'
        '500':
          $ref: '#/components/responses/ServerError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      operationId: getGitOpsStatus
      summary: Get GitOps synchronization status
      description: '**Experimental.** Returns the current synchronization status of the GitOps storage, including the current commit SHA, sync state, load statistics, and any errors from the last sync attempt.


        This endpoint is only available when GitOps storage is enabled (`apicurio.storage.kind=gitops`). Returns HTTP 409 (Conflict) if a different storage backend is active.


        This operation can fail for the following reasons:


        * GitOps storage is not enabled (HTTP error `409`)

        * A server error occurred (HTTP error `500`)

        '
  /admin/gitops/sync:
    summary: Trigger an immediate GitOps synchronization.
    post:
      tags:
      - Admin
      responses:
        '204':
          description: Synchronization has been requested. The sync will happen asynchronously on the next scheduler cycle.
        '409':
          $ref: '#/components/responses/Conflict'
        '500':
          $ref: '#/components/responses/ServerError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      operationId: triggerGitOpsSync
      summary: Trigger GitOps synchronization
      description: '**Experimental.** Requests an immediate synchronization of the GitOps storage. This resets the poll timer so the next scheduler cycle will poll the Git repository without waiting for the configured poll period.


        The synchronization happens asynchronously — this endpoint returns immediately and the actual sync occurs on the next scheduler cycle.


        This endpoint is only available when GitOps storage is enabled (`apicurio.storage.kind=gitops`). Returns HTTP 409 (Conflict) if a different storage backend is active.


        This operation can fail for the following reasons:


        * GitOps storage is not enabled (HTTP error `409`)

        * A server error occurred (HTTP error `500`)

        '
  /admin/usage/summary:
    summary: Get global usage summary counts.
    get:
      tags:
      - Admin
      operationId: getUsageSummary
      summary: Get usage summary
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UsageSummary'
          description: The global usage summary.
        '409':
          $ref: '#/components/responses/Conflict'
        '500':
          $ref: '#/components/responses/ServerError'
  /admin/usage/artifacts/{groupId}/{artifactId}:
    summary: Get usage metrics for an artifact.
    get:
      tags:
      - Admin
      operationId: getArtifactUsageMetrics
      summary: Get artifact usage metrics
      parameters:
      - name: groupId
        in: path
        required: true
        schema:
          type: string
      - name: artifactId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ArtifactUsageMetrics'
          description: The artifact usage metrics.
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '500':
          $ref: '#/components/responses/ServerError'
  /admin/usage/artifacts/{groupId}/{artifactId}/heatmap:
    summary: Get consumer version heatmap.
    get:
      tags:
      - Admin
      operationId: getConsumerVersionHeatmap
      summary: Get consumer version heatmap
      parameters:
      - name: groupId
        in: path
        required: true
        schema:
          type: string
      - name: artifactId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConsumerVersionHeatmap'
          description: The consumer version heatmap.
        '409':
          $ref: '#/components/responses/Conflict'
        '500':
          $ref: '#/components/responses/ServerError'
  /admin/usage/artifacts/{groupId}/{artifactId}/versions/{version}/deprecation-readiness:
    summary: Get deprecation readiness.
    get:
      tags:
      - Admin
      operationId: getDeprecationReadiness
      summary: Get deprecation readiness report
      parameters:
      - name: groupId
        in: path
        required: true
        schema:
          type: string
      - name: artifactId
        in: path
        required: true
        schema:
          type: string
      - name: version
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeprecationReadiness'
          description: The deprecation readiness report.
        '409':
          $ref: '#/components/responses/Conflict'
        '500':
          $ref: '#/components/responses/ServerError'
components:
  schemas:
    GitOpsError:
      title: Root Type for GitOpsError
      description: Describes an error that occurred during a GitOps sync attempt.
      type: object
      properties:
        detail:
          description: A human-readable description of the error.
          type: string
        source:
          description: The source ID (e.g., repository ID) where the error occurred. Absent for global errors not tied to a specific source.
          type: string
        context:
          description: The file path or location where the error occurred. Absent if the error is not file-specific.
          type: string
      required:
      - detail
    ConsumerVersionHeatmap:
      title: ConsumerVersionHeatmap
      required:
      - groupId
      - artifactId
      - versions
      - consumers
      type: object
      properties:
        groupId:
          type: string
        artifactId:
          type: string
        versions:
          type: array
          items:
            type: string
        consumers:
          type: array
          items:
            $ref: '#/components/schemas/ConsumerVersionEntry'
    ContractRuleSet:
      title: ContractRuleSet
      description: A set of contract rules, divided into domain and migration categories.
      type: object
      properties:
        domainRules:
          description: Rules for domain validation.
          type: array
          items:
            $ref: '#/components/schemas/ContractRule'
        migrationRules:
          description: Rules for version migration.
          type: array
          items:
            $ref: '#/components/schemas/ContractRule'
    FileContent:
      format: binary
      type: string
      x-codegen-inline: true
    DownloadRef:
      title: Root Type for Download
      description: Models a download "link".  Useful for browser use-cases.
      required:
      - downloadId
      type: object
      properties:
        downloadId:
          type: string
        href:
          type: string
      example:
        downloadId: 247-4987490-297845
        href: https://54321.registry.examples.org/apis/registry/v3/downloads/247-4987490-297845
    GitOpsStatus:
      title: Root Type for GitOpsStatus
      description: Describes the current synchronization status of the GitOps storage backend. This includes the current sync state, the Git commit marker, load statistics, and any errors from the last sync attempt.
      type: object
      properties:
        syncState:
          description: 'The current synchronization state of the GitOps storage. Possible values: INITIALIZING (first load not yet completed), IDLE (serving latest data), LOADING (sync in progress), SWITCHING (data loaded, waiting for write lock to publish), ERROR (last sync or switch failed, serving previous data).'
          type: string
        lastSuccessfulSync:
          description: ISO 8601 timestamp of the last successful synchronization.
          format: date-time
          type: string
        lastSyncAttempt:
          description: ISO 8601 timestamp of the last synchronization attempt (successful or not).
          format: date-time
          type: string
        groupCount:
          description: Number of groups loaded in the last successful sync.
          format: int32
          type: integer
        artifactCount:
          description: Number of artifacts loaded in the last successful sync.
          format: int32
          type: integer
        versionCount:
          description: Number of artifact versions loaded in the last successful sync.
          format: int32
          type: integer
        errors:
          description: Errors from the last failed load attempt. Empty if the last load was successful.
          type: array
          items:
            $ref: '#/components/schemas/GitOpsError'
        sources:
          description: Per-source identifiers. Maps source ID (e.g., repository ID, Kubernetes server/namespace) to its current marker (e.g., abbreviated commit SHA, resource version).
          type: object
          additionalProperties:
            type: string
    RoleMapping:
      description: The mapping between a user/principal and their role.
      required:
      - principalId
      - role
      type: object
      properties:
        principalId:
          description: ''
          type: string
        role:
          $ref: '#/components/schemas/RoleType'
          description: ''
        principalName:
          description: A friendly name for the principal.
          type: string
      example:
        principalId: svc_account_84874587_123484
        principalName: famartin-svc-account
        role: READ_ONLY
    DeprecationReadiness:
      title: DeprecationReadiness
      required:
      - groupId
      - artifactId
      - version
      - safeToDeprecate
      type: object
   

# --- truncated at 32 KB (43 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/apicurio/refs/heads/main/openapi/apicurio-admin-api-openapi.yml