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