OpenAPI Specification
openapi: 3.0.3
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
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.
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:
schemas:
Error:
type: object
properties:
message:
type: string
example: error details
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
nullable: false
example: repo1
display_name:
type: string
nullable: false
example: Repository 1
url:
type: string
format: uri
nullable: false
example: http://repourl
verified_publisher:
type: boolean
nullable: false
official:
type: boolean
nullable: false
cncf:
type: boolean
nullable: true
private:
type: boolean
nullable: false
scanner_disabled:
type: boolean
nullable: false
example: false
user_alias:
type: string
nullable: false
example: jdoe
organization_name:
type: string
nullable: false
example: org1
organization_display_name:
type: string
nullable: false
example: Organization 1
nullable: false
Repository:
allOf:
- $ref: '#/components/schemas/RepositorySummary'
- type: object
required:
- digest
- last_tracking_ts
- last_scanning_ts
- disabled
properties:
digest:
type: string
nullable: false
last_tracking_ts:
type: integer
nullable: false
last_tracking_errors:
type: string
nullable: false
example: Error
last_scanning_ts:
type: integer
nullable: false
last_scanning_errors:
type: string
nullable: false
example: Error
disabled:
type: boolean
nullable: false
branch:
type: string
nullable: false
data:
type: object
nullable: false
properties:
tags:
type: array
items:
type: object
required:
- name
properties:
name:
type: string
nullable: false
example: stable
mutable:
type: boolean
nullable: false
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:
BadRequest:
description: The request sent was not valid
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'
NoContent:
description: The request has succeeded, no content returned
Forbidden:
description: The user does not have permission to perform the requested operation
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
UnauthorizedError:
description: Valid authentication credentials not provided
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Created:
description: The request has succeeded and has led to the creation of a resource
TooManyRequests:
description: The user has sent too many requests in a given amount of time
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
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
OrgNameParam:
in: path
name: orgName
schema:
type: string
example: org1
required: true
description: Organization name
RepoNameQueryParam:
in: query
name: name
schema:
type: string
example: repo-name
required: false
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"
OrgNameToParam:
in: query
name: org
required: false
schema:
type: string
example: org1
description: The org to transfer or from claiming the repository
RepoNameParam:
in: path
name: repoName
schema:
type: string
example: repoName
required: true
description: Repository name
UsersListParam:
in: query
name: user
schema:
type: array
items:
type: string
example:
- user1
- user2
required: false
description: List of aliases
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