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.
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: 3.2.0
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
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:
EventKindId:
type: integer
enum:
- 0
- 1
- 2
- 4
description: "Event kind:\n * `0` - New package release\n * `1` - Security alerts\n * `2` - Repository tracking errors\n * `4` - Repository scanning errors\n"
WebhookSummary:
type: object
required:
- name
- url
- active
properties:
name:
type: string
example: webhook1
description:
type: string
example: description
url:
type: string
format: uri
example: http://url
secret:
type: string
example: 123abc
content_type:
type: string
example: application/json
template:
type: string
example: '{"text": "Package {{ .Package.Name }} version {{ .Package.Version }} released! {{ .Package.URL }}"}'
active:
type: boolean
event_kinds:
type: array
items:
$ref: '#/components/schemas/EventKindId'
Error:
type: object
properties:
message:
type: string
example: error details
PackageCategoryId:
type: integer
enum:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
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"
PackageBase:
type: object
required:
- package_id
- name
- normalized_name
- stars
- version
- ts
- repository
properties:
package_id:
type: string
format: uuid
name:
type: string
example: pkg1
normalized_name:
type: string
example: pkg1
logo_image_id:
type: string
example: 12345abcde
display_name:
type: string
example: Package 1
description:
type: string
example: This is a package sample
version:
type: string
example: 1.0.0
app_version:
type: string
example: 0.1.0
license:
type: string
example: MIT
deprecated:
type: boolean
example: false
signed:
type: boolean
example: false
signatures:
type: array
items:
type: string
enum:
- prov
- cosign
official:
type: boolean
cncf:
type:
- boolean
- 'null'
ts:
type: integer
repository:
$ref: '#/components/schemas/RepositorySummary'
security_report_summary:
type: object
properties:
critical:
type: number
high:
type: number
medium:
type: number
low:
type: number
unknown:
type: number
all_containers_images_whitelisted:
type: boolean
example: false
production_organizations_count:
type: number
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
WebhookTest:
type: object
required:
- url
- event_kinds
properties:
url:
type: string
format: uri
example: http://url
content_type:
type: string
example: application/json
template:
type: string
example: '{"text": "Package {{ .Package.Name }} version {{ .Package.Version }} released! {{ .Package.URL }}"}'
event_kinds:
type: array
items:
$ref: '#/components/schemas/EventKindId'
example:
- 0
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
WebhookNotification:
type: object
required:
- notification_id
- created_at
- processed
- processed_at
properties:
notification_id:
type: string
format: uuid
created_at:
type: integer
processed:
type: boolean
processed_at:
type: integer
error:
type: string
example: error
PackageSummary:
allOf:
- $ref: '#/components/schemas/PackageBase'
- type: object
properties:
category:
$ref: '#/components/schemas/PackageCategoryId'
stars:
type: integer
example: 3
Webhook:
allOf:
- $ref: '#/components/schemas/WebhookSummary'
- type: object
required:
- webhook_id
- packages
- last_notifications
properties:
webhook_id:
type: string
format: uuid
packages:
type: array
items:
$ref: '#/components/schemas/PackageSummary'
last_notifications:
type: array
items:
$ref: '#/components/schemas/WebhookNotification'
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
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
requestBodies:
WebhookBody:
description: Webhook body
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookSummaryWithPackages'
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.