Artifact Hub Subscriptions API
Package event subscriptions
Package event subscriptions
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/artifact-hub-subscriptions-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
openapi: 3.0.3
info:
title: Artifact Hub Subscriptions 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: Subscriptions
description: ''
paths:
/subscriptions:
get:
tags:
- Subscriptions
security:
- ApiKeyId: []
ApiKeySecret: []
summary: Get user's subscriptions
description: Get user's subscriptions
operationId: getUserSubscriptions
parameters:
- $ref: '#/components/parameters/OffsetParam'
- $ref: '#/components/parameters/LimitParam'
responses:
'200':
description: ''
headers:
Pagination-Total-Count:
schema:
type: string
description: Total number of subscriptions
content:
application/json:
schema:
type: array
items:
type: object
required:
- package_id
- name
- normalized_name
- repository
- event_kinds
properties:
package_id:
type: string
format: uuid
nullable: false
name:
type: string
nullable: false
example: pkg1
normalized_name:
type: string
nullable: false
example: pkg1
logo_image_id:
type: string
nullable: false
example: 12345abcde
repository:
$ref: '#/components/schemas/RepositorySummary'
event_kinds:
type: array
items:
$ref: '#/components/schemas/EventKindId'
nullable: false
'401':
$ref: '#/components/responses/UnauthorizedError'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
post:
tags:
- Subscriptions
security:
- ApiKeyId: []
ApiKeySecret: []
summary: Add subscription
description: Add subscription
operationId: addPackageSubscription
requestBody:
$ref: '#/components/requestBodies/SubscriptionBody'
responses:
'201':
$ref: '#/components/responses/Created'
'400':
$ref: '#/components/responses/BadRequest'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
delete:
tags:
- Subscriptions
security:
- ApiKeyId: []
ApiKeySecret: []
summary: Delete subscription
description: Delete subscription
operationId: deletePackageSubscription
parameters:
- $ref: '#/components/parameters/PackageIDQueryParam'
- $ref: '#/components/parameters/EventKindParam'
responses:
'204':
$ref: '#/components/responses/NoContent'
'400':
$ref: '#/components/responses/BadRequest'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
/subscriptions/{packageID}:
get:
tags:
- Subscriptions
security:
- ApiKeyId: []
ApiKeySecret: []
summary: Get user's subscriptions for the given package
description: Get user's subscriptions for the given package
operationId: getPackageUserSubscriptions
parameters:
- $ref: '#/components/parameters/PackageIDParam'
responses:
'200':
description: ''
content:
application/json:
schema:
type: array
items:
type: object
required:
- event_kind
properties:
event_kind:
$ref: '#/components/schemas/EventKindId'
'401':
$ref: '#/components/responses/UnauthorizedError'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
/subscriptions/opt-out:
get:
tags:
- Subscriptions
security:
- ApiKeyId: []
ApiKeySecret: []
summary: Get user's opt-out entries
description: Get user's opt-out entries
operationId: getUserOptOutEntries
parameters:
- $ref: '#/components/parameters/OffsetParam'
- $ref: '#/components/parameters/LimitParam'
responses:
'200':
description: ''
headers:
Pagination-Total-Count:
schema:
type: string
description: Total number of user's opt-out entries
content:
application/json:
schema:
type: array
items:
type: object
required:
- opt_out_id
- repository
- event_kind
properties:
opt_out_id:
type: string
format: uuid
nullable: false
repository:
$ref: '#/components/schemas/RepositorySummary'
event_kind:
$ref: '#/components/schemas/EventKindId'
'401':
$ref: '#/components/responses/UnauthorizedError'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
post:
tags:
- Subscriptions
security:
- ApiKeyId: []
ApiKeySecret: []
summary: Add opt-out entry
description: Add opt-out entry
operationId: addOptOutEntry
requestBody:
$ref: '#/components/requestBodies/OptOutBody'
responses:
'201':
$ref: '#/components/responses/Created'
'400':
$ref: '#/components/responses/BadRequest'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
/subscriptions/opt-out/{optOutID}:
delete:
tags:
- Subscriptions
security:
- ApiKeyId: []
ApiKeySecret: []
summary: Delete opt-out entry
description: Delete opt-out entry
operationId: deleteOptOutEntry
parameters:
- $ref: '#/components/parameters/OptOutIDParam'
responses:
'204':
$ref: '#/components/responses/NoContent'
'400':
$ref: '#/components/responses/BadRequest'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
components:
schemas:
Error:
type: object
properties:
message:
type: string
example: error details
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"
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
EventKindId:
type: integer
enum:
- 0
- 1
- 2
- 4
nullable: false
description: "Event kind:\n * `0` - New package release\n * `1` - Security alerts\n * `2` - Repository\
\ tracking errors\n * `4` - Repository scanning errors\n"
parameters:
PackageIDParam:
in: path
name: packageID
schema:
type: string
format: uuid
required: true
description: Package ID
PackageIDQueryParam:
in: query
name: packageID
schema:
type: string
format: uuid
required: true
description: Package ID
EventKindParam:
in: query
name: event_kind
required: true
schema:
$ref: '#/components/schemas/EventKindId'
description: Event kind
LimitParam:
in: query
name: limit
schema:
type: integer
default: 20
maximum: 60
required: false
description: The number of items to return
OptOutIDParam:
in: path
name: optOutID
schema:
type: string
format: uuid
required: true
description: Opt-out entry ID
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
responses:
Created:
description: The request has succeeded and has led to the creation of a resource
BadRequest:
description: The request sent was not valid
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
TooManyRequests:
description: The user has sent too many requests in a given amount of time
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
UnauthorizedError:
description: Valid authentication credentials not provided
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
requestBodies:
SubscriptionBody:
description: Subscription request body
required: true
content:
application/json:
schema:
type: object
properties:
package_id:
type: string
format: uuid
event_kind:
$ref: '#/components/schemas/EventKindId'
required:
- package_id
- event_kind
OptOutBody:
description: Opt-out entry request body
required: true
content:
application/json:
schema:
type: object
properties:
repository_id:
type: string
format: uuid
event_kind:
$ref: '#/components/schemas/EventKindId'
required:
- repository_id
- event_kind
securitySchemes:
ApiKeyId:
type: apiKey
in: header
name: X-API-KEY-ID
ApiKeySecret:
type: apiKey
in: header
name: X-API-KEY-SECRET