Artifact Hub Repositories API

Repository management

Operations 11

GET /repositories/search Search repositories that meet the provided criteria #
POST /repositories/user Add user's repository #
PUT /repositories/user/{repoName} Update user's repository #
DELETE /repositories/user/{repoName} Delete user's repository #
PUT /repositories/user/{repoName}/transfer Transfer user's repository ownership to an organization #
PUT /repositories/user/{repoName}/claim-ownership Claim the ownership of a given repository #
POST /repositories/org/{orgName} Add organization's repository #
PUT /repositories/org/{orgName}/{repoName} Update organization's repository #
DELETE /repositories/org/{orgName}/{repoName} Delete organization's repository #
PUT /repositories/org/{orgName}/{repoName}/transfer Transfer organization's repository to a different owner #
PUT /repositories/org/{orgName}/{repoName}/claim-ownership Claim the ownership of a given repository #

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/artifact-hub-repositories-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

artifact-hub-repositories-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Artifact Hub Repositories API
  description: Find, install and publish Cloud Native packages
  version: 1.22.0
  contact:
    name: Artifact Hub support
    url: https://cloud-native.slack.com/channels/artifact-hub
servers:
- url: https://artifacthub.io/api/v1
  description: Artifact Hub production API
tags:
- name: Repositories
  description: ''
paths:
  /repositories/search:
    get:
      tags:
      - Repositories
      summary: Search repositories that meet the provided criteria
      description: Search repositories that meet the provided criteria
      operationId: searchRepositories
      parameters:
      - $ref: '#/components/parameters/OffsetParam'
      - $ref: '#/components/parameters/LimitParam'
      - $ref: '#/components/parameters/RepositoryKindsListParam'
      - $ref: '#/components/parameters/UsersListParam'
      - $ref: '#/components/parameters/OrgsListParam'
      - $ref: '#/components/parameters/RepoNameQueryParam'
      - $ref: '#/components/parameters/UrlQueryParam'
      responses:
        '200':
          description: ''
          headers:
            Pagination-Total-Count:
              schema:
                type: string
              description: Total number of repositories
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Repository'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /repositories/user:
    post:
      tags:
      - Repositories
      security:
      - ApiKeyId: []
        ApiKeySecret: []
      summary: Add user's repository
      description: Add user's repository
      operationId: addUserRepository
      requestBody:
        $ref: '#/components/requestBodies/RepositoryBody'
      responses:
        '201':
          $ref: '#/components/responses/Created'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /repositories/user/{repoName}:
    put:
      tags:
      - Repositories
      security:
      - ApiKeyId: []
        ApiKeySecret: []
      summary: Update user's repository
      description: Update user's repository
      operationId: updateUserRepository
      parameters:
      - $ref: '#/components/parameters/RepoNameParam'
      requestBody:
        $ref: '#/components/requestBodies/RepositoryBody'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
    delete:
      tags:
      - Repositories
      security:
      - ApiKeyId: []
        ApiKeySecret: []
      summary: Delete user's repository
      description: Delete user's repository
      operationId: deleteUserRepository
      parameters:
      - $ref: '#/components/parameters/RepoNameParam'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /repositories/user/{repoName}/transfer:
    put:
      tags:
      - Repositories
      security:
      - ApiKeyId: []
        ApiKeySecret: []
      summary: Transfer user's repository ownership to an organization
      description: Transfer user's repository ownership to an organization
      operationId: transferRepositoryOwnershipToOrganization
      parameters:
      - $ref: '#/components/parameters/RepoNameParam'
      - $ref: '#/components/parameters/OrgNameToParam'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /repositories/user/{repoName}/claim-ownership:
    put:
      tags:
      - Repositories
      security:
      - ApiKeyId: []
        ApiKeySecret: []
      summary: Claim the ownership of a given repository
      description: Claim the ownership of a given repository
      operationId: claimRepositoryOwnership
      parameters:
      - $ref: '#/components/parameters/RepoNameParam'
      - $ref: '#/components/parameters/OrgNameToParam'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /repositories/org/{orgName}:
    post:
      tags:
      - Repositories
      security:
      - ApiKeyId: []
        ApiKeySecret: []
      summary: Add organization's repository
      description: Add organization's repository
      operationId: addOrganizationRepository
      parameters:
      - $ref: '#/components/parameters/OrgNameParam'
      requestBody:
        $ref: '#/components/requestBodies/RepositoryBody'
      responses:
        '201':
          $ref: '#/components/responses/Created'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /repositories/org/{orgName}/{repoName}:
    put:
      tags:
      - Repositories
      security:
      - ApiKeyId: []
        ApiKeySecret: []
      summary: Update organization's repository
      description: Update organization's repository
      operationId: updateOrganizationRepository
      parameters:
      - $ref: '#/components/parameters/OrgNameParam'
      - $ref: '#/components/parameters/RepoNameParam'
      requestBody:
        $ref: '#/components/requestBodies/RepositoryBody'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
    delete:
      tags:
      - Repositories
      security:
      - ApiKeyId: []
        ApiKeySecret: []
      summary: Delete organization's repository
      description: Delete organization's repository
      operationId: deleteOrganizationRepository
      parameters:
      - $ref: '#/components/parameters/OrgNameParam'
      - $ref: '#/components/parameters/RepoNameParam'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /repositories/org/{orgName}/{repoName}/transfer:
    put:
      tags:
      - Repositories
      security:
      - ApiKeyId: []
        ApiKeySecret: []
      summary: Transfer organization's repository to a different owner
      description: Transfer organization's repository to a different owner
      operationId: transferRepositoryOwnership
      parameters:
      - $ref: '#/components/parameters/OrgNameParam'
      - $ref: '#/components/parameters/RepoNameParam'
      - $ref: '#/components/parameters/OrgNameToParam'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /repositories/org/{orgName}/{repoName}/claim-ownership:
    put:
      tags:
      - Repositories
      security:
      - ApiKeyId: []
        ApiKeySecret: []
      summary: Claim the ownership of a given repository
      description: Claim the ownership of a given repository
      operationId: claimRepositoryOwnershipFromOrganization
      parameters:
      - $ref: '#/components/parameters/OrgNameParam'
      - $ref: '#/components/parameters/RepoNameParam'
      - $ref: '#/components/parameters/OrgNameToParam'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
components:
  parameters:
    LimitParam:
      in: query
      name: limit
      schema:
        type: integer
        default: 20
        maximum: 60
      required: false
      description: The number of items to return
    OrgsListParam:
      in: query
      name: org
      schema:
        type: array
        items:
          type: string
        example:
        - org1
        - org2
      required: false
      description: List of organization names
    OrgNameToParam:
      in: query
      name: org
      required: false
      schema:
        type: string
        example: org1
      description: The org to transfer or from claiming the repository
    OrgNameParam:
      in: path
      name: orgName
      schema:
        type: string
        example: org1
      required: true
      description: Organization name
    OffsetParam:
      in: query
      name: offset
      schema:
        type: integer
        minimum: 0
        default: 0
      required: false
      description: The number of items to skip before starting to collect the result set
    RepoNameQueryParam:
      in: query
      name: name
      schema:
        type: string
        example: repo-name
      required: false
      description: Repository name
    RepoNameParam:
      in: path
      name: repoName
      schema:
        type: string
        example: repoName
      required: true
      description: Repository name
    UrlQueryParam:
      in: query
      name: url
      schema:
        type: string
        example: https://repo2.com
      required: false
      description: Repository url
    RepositoryKindsListParam:
      in: query
      name: kind
      schema:
        type: array
        items:
          $ref: '#/components/schemas/RepositoryKind'
      required: false
      description: "Repository kind:\n  * `0` - Helm charts\n  * `1` - Falco rules\n  * `2` - OPA policies\n  * `3` - OLM operators\n  * `4` - Tinkerbell actions\n  * `5` - Krew kubectl plugins\n  * `6` - Helm plugins\n  * `7` - Tekton tasks\n  * `8` - KEDA scalers\n  * `9` - Core DNS plugins\n  * `10` - Keptn integrations\n  * `11` - Tekton pipelines\n  * `12` - Container images\n  * `13` - Kubewarden policies\n  * `14` - Gatekeeper policies\n  * `15` - Kyverno policies\n  * `16` - Knative client plugins\n  * `17` - Backstage plugins\n  * `18` - Argo templates\n  * `19` - KubeArmor templates\n  * `20` - KCL packages\n  * `21` - Headlamp plugins\n  * `22` - Inspektor gadgets\n  * `23` - Tekton stepactions\n  * `24` - Meshery designs\n  * `25` - Opencost plugins\n  * `26` - Radius recipes\n  * `27` - Bootable containers\n  * `28` - Kagent agents\n"
    UsersListParam:
      in: query
      name: user
      schema:
        type: array
        items:
          type: string
        example:
        - user1
        - user2
      required: false
      description: List of aliases
  schemas:
    Error:
      type: object
      properties:
        message:
          type: string
          example: error details
    Repository:
      allOf:
      - $ref: '#/components/schemas/RepositorySummary'
      - type: object
        required:
        - digest
        - last_tracking_ts
        - last_scanning_ts
        - disabled
        properties:
          digest:
            type: string
          last_tracking_ts:
            type: integer
          last_tracking_errors:
            type: string
            example: Error
          last_scanning_ts:
            type: integer
          last_scanning_errors:
            type: string
            example: Error
          disabled:
            type: boolean
          branch:
            type: string
          data:
            type: object
            properties:
              tags:
                type: array
                items:
                  type: object
                  required:
                  - name
                  properties:
                    name:
                      type: string
                      example: stable
                    mutable:
                      type: boolean
    RepositorySummary:
      type: object
      required:
      - repository_id
      - kind
      - name
      - url
      - verified_publisher
      - official
      - scanner_disabled
      properties:
        repository_id:
          type: string
          format: uuid
        kind:
          $ref: '#/components/schemas/RepositoryKind'
        name:
          type: string
          example: repo1
        display_name:
          type: string
          example: Repository 1
        url:
          type: string
          format: uri
          example: http://repourl
        verified_publisher:
          type: boolean
        official:
          type: boolean
        cncf:
          type:
          - boolean
          - 'null'
        private:
          type: boolean
        scanner_disabled:
          type: boolean
          example: false
        user_alias:
          type: string
          example: jdoe
        organization_name:
          type: string
          example: org1
        organization_display_name:
          type: string
          example: Organization 1
    RepositoryKind:
      type: integer
      enum:
      - 0
      - 1
      - 2
      - 3
      - 4
      - 5
      - 6
      - 7
      - 8
      - 9
      - 10
      - 11
      - 12
      - 13
      - 14
      - 15
      - 16
      - 17
      - 18
      - 19
      - 20
      - 21
      - 22
      - 23
      - 24
      - 25
      - 26
      - 27
      description: "Repository kind:\n  * `0` - Helm charts\n  * `1` - Falco rules\n  * `2` - OPA policies\n  * `3` - OLM operators\n  * `4` - Tinkerbell actions\n  * `5` - Krew kubectl plugins\n  * `6` - Helm plugins\n  * `7` - Tekton tasks\n  * `8` - KEDA scalers\n  * `9` - Core DNS plugins\n  * `10` - Keptn integrations\n  * `11` - Tekton pipelines\n  * `12` - Container images\n  * `13` - Kubewarden policies\n  * `14` - Gatekeeper policies\n  * `15` - Kyverno policies\n  * `16` - Knative client plugins\n  * `17` - Backstage plugins\n  * `18` - Argo templates\n  * `19` - KubeArmor templates\n  * `20` - KCL packages\n  * `21` - Headlamp plugins\n  * `22` - Inspektor gadgets\n  * `23` - Tekton stepactions\n  * `24` - Meshery designs\n  * `25` - Opencost plugins\n  * `26` - Radius recipes\n  * `27` - Bootable containers\n  * `28` - Kagent agents\n"
  responses:
    TooManyRequests:
      description: The user has sent too many requests in a given amount of time
    NoContent:
      description: The request has succeeded, no content returned
    BadRequest:
      description: The request sent was not valid
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    UnauthorizedError:
      description: Valid authentication credentials not provided
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: The user does not have permission to perform the requested operation
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    InternalServerError:
      description: The server encountered an unexpected condition that prevented it from fulfilling the request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Created:
      description: The request has succeeded and has led to the creation of a resource
  requestBodies:
    RepositoryBody:
      description: Repository request body
      required: true
      content:
        application/json:
          schema:
            type: object
            properties:
              kind:
                $ref: '#/components/schemas/RepositoryKind'
              name:
                type: string
                example: repo1
              display_name:
                type: string
                example: Repo 1
              url:
                type: string
                example: http://repo-url.com
  securitySchemes:
    ApiKeyId:
      type: apiKey
      in: header
      name: X-API-KEY-ID
    ApiKeySecret:
      type: apiKey
      in: header
      name: X-API-KEY-SECRET
x-evidence:
  source: https://artifacthub.io/docs/api/openapi.yaml
  source_title: Artifact Hub
  source_version: 1.22.0
  harvested: '2026-08-01'
  harvest_status: HTTP 200
  server_verified: https://artifacthub.io/api/v1/stats -> HTTP 200 (2026-08-01)
  note: Harvested from the provider. Replaces a reconstructed spec that shared no paths with this document and carried no schemas.