Artifact Hub · AsyncAPI Specification
Artifact Hub Webhooks
Version
View Spec
View on GitHub
Cloud-NativeCNCFHelm ChartsPackage RegistryDiscoveryOpen-SourceAsyncAPIEvents
AsyncAPI Specification
generated: '2026-09-04'
method: derived
source: >-
openapi/_original/artifact-hub-openapi.yml (v1.23.0) — components.schemas.EventKindId,
WebhookSummary, WebhookTest, WebhookNotification and the eleven Webhooks operations.
Searched for an AsyncAPI document on 2026-09-04: none exists in the artifacthub GitHub
org, none is served at https://artifacthub.io/asyncapi.yaml (SPA shell, 200 text/html),
and the docs site has no events or streaming topic.
provider: Artifact Hub
providerId: artifact-hub
asyncapi_published: false
description: >-
Artifact Hub ships a real outbound webhook surface — four event kinds, per-webhook
subscriber-authored payload TEMPLATES, an optional shared secret, delivery history and a
test trigger — but publishes no AsyncAPI document describing it. The catalog below is
derived from the REST contract, which is where the whole event model is actually declared.
It is unusual in one respect worth flagging for an agent: the PAYLOAD IS NOT FIXED BY THE
PROVIDER. Each webhook carries a Go-template string supplied by the subscriber, so the
body a receiver gets is whatever that subscriber wrote — there is no canonical event
schema to code against, which is exactly the gap an AsyncAPI document would close.
transport: HTTPS POST to a subscriber-supplied URL
subscription_model:
scopes:
- user webhooks (POST /webhooks/user)
- organization webhooks (POST /webhooks/org/{orgName})
package_binding: >-
A webhook is attached to a set of packages (Webhook.packages[]), so a subscriber is
notified only about the artifacts they selected — not the whole catalog.
also_available:
subscriptions: >-
A separate email/notification subscription surface exists for the same event kinds
(POST /subscriptions, event_kind query parameter) with per-repository opt-out entries
(POST /subscriptions/opt-out).
events:
- id: 0
name: New package release
description: A new version of a subscribed package has been published.
source: components.schemas.EventKindId enum value 0
- id: 1
name: Security alerts
description: >-
A security issue was found in a subscribed package. Backed by the Trivy scanning
pipeline documented at https://artifacthub.io/docs/topics/security_report/ ; the 1.23.0
release notes record "Improve security alerts notifications".
source: components.schemas.EventKindId enum value 1
- id: 2
name: Repository tracking errors
description: >-
Artifact Hub failed while tracking a repository the subscriber owns. Repositories are
processed every 30 minutes (FAQ), so this is the signal that a publisher's listing has
stopped updating.
source: components.schemas.EventKindId enum value 2
- id: 4
name: Repository scanning errors
description: Artifact Hub failed while security-scanning a repository the subscriber owns.
source: components.schemas.EventKindId enum value 4
note: >-
Note the gap — the enum is 0, 1, 2, 4 with no 3. Value 3 is not exposed in the public
contract, so a client MUST treat the enum as sparse rather than as a range.
delivery:
content_type:
field: content_type
default_example: application/json
note: Subscriber-chosen, so a receiver cannot assume JSON.
payload:
field: template
kind: Go template rendered per delivery
example: '{"text": "Package {{ .Package.Name }} version {{ .Package.Version }} released! {{ .Package.URL }}"}'
variables_observed:
- .Package.Name
- .Package.Version
- .Package.URL
note: >-
Only the variables appearing in the provider's own published example are listed. The
full template variable set is not enumerated in the OpenAPI or the docs, so nothing
further is asserted.
authentication:
field: secret
mechanism: >-
An optional shared secret stored on the webhook (WebhookSummary.secret). The contract
does not document how the secret reaches the receiver — no signature header, digest
algorithm or verification procedure is specified anywhere in the OpenAPI or the docs.
A receiver should not assume an HMAC signature scheme.
enable_disable:
field: active
type: boolean
history:
schema: WebhookNotification
fields: [notification_id, created_at, processed, processed_at, error]
access: >-
GET /webhooks/user/{webhookID} and GET /webhooks/org/{orgName}/{webhookID} return
last_notifications[], including the error string for failed deliveries. Retry policy
and retention are not documented.
test:
operation: triggerWebhookTest
method: POST
path: /webhooks/test
description: >-
Delivers a sample notification to a candidate URL with the caller's content type and
template, without creating a webhook. Requires url and event_kinds.
operations:
webhooks:
- getUserWebhooks
- addUserWebhook
- getUserWebhookDetail
- updateUserWebhook
- deleteUserWebhook
- getOrganizationWebhooks
- addOrganizationWebhook
- getOrganizationWebhookDetails
- updateOrganizationWebhook
- deleteOrganizationWebhook
- triggerWebhookTest
subscriptions:
- getUserSubscriptions
- addPackageSubscription
- deletePackageSubscription
- getPackageUserSubscriptions
- getUserOptOutEntries
- addOptOutEntry
- deleteOptOutEntry
other_push_surfaces:
- name: Integration dumps
kind: pull, not push
operations: [getHarborReplicationDump, getHelmExporterDump, getNovaDump]
note: >-
Bulk catalogue dumps for Harbor replication, Helm exporter and Nova. Recorded here
because they are how the provider tells integrators to stay in sync without polling
search, but they are polled, not pushed.
Work with this as data
Every AsyncAPI spec 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 asyncapi
4 MCP tools reach this
find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.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 AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/artifact-hub-webhooks"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?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.