Artifact Hub Webhooks API
Webhook configuration and delivery
Webhook configuration and delivery
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-webhooks-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 Webhooks 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: Webhooks
description: ''
paths:
/webhooks/user:
get:
tags:
- Webhooks
security:
- ApiKeyId: []
ApiKeySecret: []
summary: Get user's webhooks
description: Get user's webhooks
operationId: getUserWebhooks
responses:
'200':
description: ''
headers:
Pagination-Total-Count:
schema:
type: string
description: Total number of user's webhooks
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Webhook'
'401':
$ref: '#/components/responses/UnauthorizedError'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
post:
tags:
- Webhooks
security:
- ApiKeyId: []
ApiKeySecret: []
summary: Add user's webhook
description: Add user's webhook
operationId: addUserWebhook
requestBody:
$ref: '#/components/requestBodies/WebhookBody'
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'
/webhooks/user/{webhookID}:
get:
tags:
- Webhooks
security:
- ApiKeyId: []
ApiKeySecret: []
summary: Get user's webhook
description: Get user's webhook
operationId: getUserWebhookDetail
parameters:
- $ref: '#/components/parameters/WebhookIDParam'
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/Webhook'
'401':
$ref: '#/components/responses/UnauthorizedError'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
put:
tags:
- Webhooks
security:
- ApiKeyId: []
ApiKeySecret: []
summary: Update user's webhook
description: Update user's webhook
operationId: updateUserWebhook
parameters:
- $ref: '#/components/parameters/WebhookIDParam'
requestBody:
$ref: '#/components/requestBodies/WebhookBody'
responses:
'204':
$ref: '#/components/responses/NoContent'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/UnauthorizedError'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
delete:
tags:
- Webhooks
security:
- ApiKeyId: []
ApiKeySecret: []
summary: Delete user's webhook
description: Delete user's webhook
operationId: deleteUserWebhook
parameters:
- $ref: '#/components/parameters/WebhookIDParam'
responses:
'204':
$ref: '#/components/responses/NoContent'
'401':
$ref: '#/components/responses/UnauthorizedError'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
/webhooks/org/{orgName}:
get:
tags:
- Webhooks
security:
- ApiKeyId: []
ApiKeySecret: []
summary: Get organization's webhooks
description: Get organization's webhooks
operationId: getOrganizationWebhooks
parameters:
- $ref: '#/components/parameters/OrgNameParam'
responses:
'200':
description: ''
headers:
Pagination-Total-Count:
schema:
type: string
description: Total number of organization's webhooks
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Webhook'
'401':
$ref: '#/components/responses/UnauthorizedError'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
post:
tags:
- Webhooks
security:
- ApiKeyId: []
ApiKeySecret: []
summary: Add organization's webhook
description: Add organization's webhook
operationId: addOrganizationWebhook
parameters:
- $ref: '#/components/parameters/OrgNameParam'
requestBody:
$ref: '#/components/requestBodies/WebhookBody'
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'
/webhooks/org/{orgName}/{webhookID}:
get:
tags:
- Webhooks
security:
- ApiKeyId: []
ApiKeySecret: []
summary: Get organization's webhook
description: Get organization's webhook
operationId: getOrganizationWebhookDetails
parameters:
- $ref: '#/components/parameters/OrgNameParam'
- $ref: '#/components/parameters/WebhookIDParam'
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/Webhook'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
put:
tags:
- Webhooks
security:
- ApiKeyId: []
ApiKeySecret: []
summary: Update organization's webhook
description: Update organization's webhook
operationId: updateOrganizationWebhook
parameters:
- $ref: '#/components/parameters/OrgNameParam'
- $ref: '#/components/parameters/WebhookIDParam'
requestBody:
$ref: '#/components/requestBodies/WebhookBody'
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:
- Webhooks
security:
- ApiKeyId: []
ApiKeySecret: []
summary: Delete organization's webhook
description: Delete organization's webhook
operationId: deleteOrganizationWebhook
parameters:
- $ref: '#/components/parameters/OrgNameParam'
- $ref: '#/components/parameters/WebhookIDParam'
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'
/webhooks/test:
post:
tags:
- Webhooks
security:
- ApiKeyId: []
ApiKeySecret: []
summary: Trigger webhook test
description: Trigger webhook test
operationId: triggerWebhookTest
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookTest'
responses:
'204':
$ref: '#/components/responses/NoContent'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/UnauthorizedError'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
components:
schemas:
Error:
type: object
properties:
message:
type: string
example: error details
Webhook:
allOf:
- $ref: '#/components/schemas/WebhookSummary'
- type: object
required:
- webhook_id
- packages
- last_notifications
properties:
webhook_id:
type: string
format: uuid
nullable: false
packages:
type: array
items:
$ref: '#/components/schemas/PackageSummary'
nullable: false
last_notifications:
type: array
items:
$ref: '#/components/schemas/WebhookNotification'
nullable: false
WebhookTest:
type: object
required:
- url
- event_kinds
properties:
url:
type: string
format: uri
nullable: false
example: http://url
content_type:
type: string
nullable: false
example: application/json
template:
type: string
nullable: false
example: '{"text": "Package {{ .Package.Name }} version {{ .Package.Version }} released! {{
.Package.URL }}"}'
event_kinds:
type: array
items:
$ref: '#/components/schemas/EventKindId'
nullable: false
example:
- 0
PackageCategoryId:
type: integer
enum:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
nullable: false
description: "Package category:\n * `1` - AI / Machine learning\n * `2` - Database\n * `3` -\
\ Integration and delivery\n * `4` - Monitoring and logging\n * `5` - Networking\n * `6` -\
\ Security\n * `7` - Storage\n * `8` - Streaming and messaging\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
PackageSummary:
allOf:
- $ref: '#/components/schemas/PackageBase'
- type: object
properties:
category:
$ref: '#/components/schemas/PackageCategoryId'
stars:
type: integer
nullable: false
example: 3
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"
WebhookNotification:
type: object
required:
- notification_id
- created_at
- processed
- processed_at
properties:
notification_id:
type: string
format: uuid
nullable: false
created_at:
type: integer
nullable: false
processed:
type: boolean
nullable: false
processed_at:
type: integer
nullable: false
error:
type: string
nullable: false
example: error
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"
WebhookSummary:
type: object
required:
- name
- url
- active
properties:
name:
type: string
nullable: false
example: webhook1
description:
type: string
nullable: false
example: description
url:
type: string
format: uri
nullable: false
example: http://url
secret:
type: string
nullable: false
example: 123abc
content_type:
type: string
nullable: false
example: application/json
template:
type: string
nullable: false
example: '{"text": "Package {{ .Package.Name }} version {{ .Package.Version }} released! {{
.Package.URL }}"}'
active:
type: boolean
nullable: false
event_kinds:
type: array
items:
$ref: '#/components/schemas/EventKindId'
nullable: false
WebhookSummaryWithPackages:
allOf:
- $ref: '#/components/schemas/WebhookSummary'
- type: object
required:
- name
- url
- active
- event_kinds
- packages
properties:
packages:
type: array
items:
type: object
required:
- package_id
properties:
package_id:
type: string
format: uuid
nullable: false
nullable: false
PackageBase:
type: object
required:
- package_id
- name
- normalized_name
- stars
- version
- ts
- repository
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
display_name:
type: string
nullable: false
example: Package 1
description:
type: string
nullable: false
example: This is a package sample
version:
type: string
nullable: false
example: 1.0.0
app_version:
type: string
nullable: false
example: 0.1.0
license:
type: string
nullable: false
example: MIT
deprecated:
type: boolean
nullable: false
example: false
signed:
type: boolean
nullable: false
example: false
signatures:
type: array
items:
type: string
enum:
- prov
- cosign
nullable: false
official:
type: boolean
nullable: false
cncf:
type: boolean
nullable: true
ts:
type: integer
nullable: false
repository:
$ref: '#/components/schemas/RepositorySummary'
security_report_summary:
type: object
nullable: false
properties:
critical:
type: number
nullable: false
high:
type: number
nullable: false
medium:
type: number
nullable: false
low:
type: number
nullable: false
unknown:
type: number
nullable: false
all_containers_images_whitelisted:
type: boolean
nullable: false
example: false
production_organizations_count:
type: number
nullable: false
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
requestBodies:
WebhookBody:
description: Webhook body
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookSummaryWithPackages'
parameters:
OrgNameParam:
in: path
name: orgName
schema:
type: string
example: org1
required: true
description: Organization name
WebhookIDParam:
in: path
name: webhookID
schema:
type: string
format: uuid
required: true
description: Webhook ID
securitySchemes:
ApiKeyId:
type: apiKey
in: header
name: X-API-KEY-ID
ApiKeySecret:
type: apiKey
in: header
name: X-API-KEY-SECRET