Apicurio Admin API

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

Operations 28

GET /admin/rules List global rules #
POST /admin/rules Create global rule #
DELETE /admin/rules Delete all global rules #
GET /admin/rules/{ruleType} Get global rule configuration #
PUT /admin/rules/{ruleType} Update global rule configuration #
DELETE /admin/rules/{ruleType} Delete global rule #
GET /admin/export Export registry data #
POST /admin/import Import registry data #
GET /admin/roleMappings/{principalId} Return a single role mapping #
PUT /admin/roleMappings/{principalId} Update a role mapping #
DELETE /admin/roleMappings/{principalId} Delete a role mapping #
GET /admin/config/properties List all configuration properties #
GET /admin/config/properties/{propertyName} Get configuration property value #
PUT /admin/config/properties/{propertyName} Update a configuration property #
DELETE /admin/config/properties/{propertyName} Reset a configuration property #
GET /admin/roleMappings List all role mappings #
POST /admin/roleMappings Create a new role mapping #
GET /admin/config/artifactTypes List artifact types #
GET /admin/contracts/ruleset Get global contract ruleset #
PUT /admin/contracts/ruleset Set global contract ruleset #
DELETE /admin/contracts/ruleset Delete global contract ruleset #
POST /admin/snapshots Trigger storage snapshot #
GET /admin/gitops/status Get GitOps synchronization status #
POST /admin/gitops/sync Trigger GitOps synchronization #
GET /admin/usage/summary Get usage summary #
GET /admin/usage/artifacts/{groupId}/{artifactId} Get artifact usage metrics #
GET /admin/usage/artifacts/{groupId}/{artifactId}/heatmap Get consumer version heatmap #
GET /admin/usage/artifacts/{groupId}/{artifactId}/versions/{version}/deprecation-readiness Get deprecation readiness report #

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/apicurio-admin-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

apicurio-admin-api-openapi.yml Raw ↑
openapi: 3.2.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:
    VersionUsageMetrics:
      title: VersionUsageMetrics
      description: Usage metrics for a specific artifact version.
      required:
      - version
      - globalId
      - totalFetches
      - uniqueClients
      - firstFetchedOn
      - lastFetchedOn
      - classification
      type: object
      properties:
        version:
          type: string
        globalId:
          type: integer
          format: int64
        totalFetches:
          type: integer
          format: int64
        uniqueClients:
          type: integer
          format: int32
        firstFetchedOn:
          type: integer
          format: int64
        lastFetchedOn:
          type: integer
          format: int64
        clients:
          type: array
          items:
            type: string
        classification:
          $ref: '#/components/schemas/UsageClassification'
    RoleMappingSearchResults:
      description: Describes the response received when searching for artifacts.
      required:
      - count
      - roleMappings
      type: object
      properties:
        roleMappings:
          description: The role mappings returned in the result set.
          type: array
          items:
            $ref: '#/components/schemas/RoleMapping'
        count:
          description: "The total number of role mappings that matched the query that produced the result set (may be \nmore than the number of role mappings in the result set)."
          type: integer
      example:
      - principalId: user-1
        principalName: user-1
        role: ADMIN
      - principalId: svc_account_84874587_123484
        principalName: user-svc-account
        role: READ_ONLY
    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.
    UpdateRole:
      title: Root Type for UpdateRole
      description: ''
      required:
      - role
      type: object
      properties:
        role:
          $ref: '#/components/schemas/RoleType'
      example:
        role: READ_ONLY
    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 cu

# --- 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