Artifact Hub · AsyncAPI Specification

Artifact Hub Webhooks

Version

View Spec View on GitHub Cloud-NativeCNCFHelm ChartsPackage RegistryDiscoveryOpen-SourceAsyncAPIEvents

AsyncAPI Specification

Raw ↑
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.
All 92 tools →

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.