Canonical · AsyncAPI Specification

Canonical Launchpad Webhooks

Version

View Spec View on GitHub CloudLinuxOpen-SourceUbuntuContainersBare MetalCharmsIdentityAsyncAPIEvents

AsyncAPI Specification

Raw ↑
generated: '2026-09-05'
method: searched
source: https://documentation.ubuntu.com/launchpad/user/reference/webhooks/
provider: Canonical
providerId: canonical
api: canonical:launchpad-api
description: >-
  Launchpad is the one Canonical surface that publishes a documented outbound event catalog.
  Webhooks are created on a target object (a Git repository, a snap, a charm recipe, a project, an
  archive) through the Launchpad web UI or the newWebhook API method, and Launchpad POSTs a JSON body
  to the configured delivery URL when a matching event fires. Canonical publishes no AsyncAPI
  document for this surface, so this artifact captures the catalog as documented rather than
  inventing a spec. No AsyncAPI file was written — there is nothing published to harvest.
spec:
  asyncapi_published: false
  note: >-
    NEVER FABRICATED: no AsyncAPI document exists for Launchpad webhooks. The event names, headers,
    signature scheme and delivery semantics below are transcribed from Canonical's own reference page.
transport:
  protocol: https
  method: POST
  content_type: application/json
  proxy_hosts:
    - webhooks-proxy.launchpad.net
    - webhooks-proxy.qastaging.paddev.net
  note: >-
    Consumers must allow inbound HTTP/HTTPS from the IP addresses behind
    webhooks-proxy.launchpad.net. The proxy does not generally reach Canonical's own IP space.
authentication:
  scheme: HMAC-SHA1 body signature
  header: X-Hub-Signature
  secret: >-
    Optional per-webhook secret, following the PubSubHubbub specification. Write-only — Launchpad
    never discloses an existing secret; it can be rotated with the setSecret API method.
headers:
  - name: User-Agent
    value: 'begins with launchpad.net-Webhooks/'
  - name: Content-Type
    value: application/json
  - name: X-Launchpad-Event-Type
    value: 'the versioned event type, e.g. git:push:0.1'
  - name: X-Launchpad-Delivery
    value: unique numeric delivery identifier; sort on this if ordering matters
  - name: X-Hub-Signature
    value: HMAC-SHA1 of the body with the webhook secret
targets:
  - object: Git repository
    events: [ci:build:0.1, git:push:0.1, merge-proposal:0.1]
  - object: Live filesystem
    events: [livefs:build:0.1]
  - object: Snap package
    events: [snap:build:0.1]
  - object: OCI recipe
    events: [ocirecipe:build:0.1]
  - object: Charm recipe
    events: [charm-recipe:build:0.1]
  - object: Craft recipe
    events: [craft-recipe:build:0.1]
  - object: Project
    events: [bug:0.1, bug:comment:0.1]
  - object: Distribution
    events: [bug:0.1, bug:comment:0.1]
  - object: Distribution Source Package
    events: [bug:0.1, bug:comment:0.1]
  - object: Archive
    events: [archive:source-package-upload:0.1, archive:binary-package-upload:0.1, archive:binary-build:0.1]
events:
  - type: ci:build:0.1
    name: CI build
    trigger: When the status of a CI build changes.
    category: code-hosting
  - type: git:push:0.1
    name: Git push
    trigger: When a Git repository is pushed; includes creating or deleting branches.
    category: code-hosting
  - type: merge-proposal:0.1
    name: Merge proposal
    trigger: When a merge proposal targeting this branch or repository is created, modified or deleted.
    category: code-hosting
    sub_events:
      - merge-proposal:0.1::create
      - merge-proposal:0.1::push
      - merge-proposal:0.1::review
      - merge-proposal:0.1::edit
      - merge-proposal:0.1::status-change
      - merge-proposal:0.1::delete
    note: >-
      Subscribe to the parent type OR to specific sub-types, never both. The sub-event payload is
      identical to the parent's.
  - type: livefs:build:0.1
    name: Live filesystem build
    trigger: When the status of a live filesystem build changes.
    category: build-recipes
  - type: snap:build:0.1
    name: Snap build
    trigger: When the status of a snap package build changes.
    category: build-recipes
  - type: ocirecipe:build:0.1
    name: OCI recipe build
    trigger: When the status of an OCI image build changes.
    category: build-recipes
  - type: charm-recipe:build:0.1
    name: Charm recipe build
    trigger: When the status of a charm recipe build changes.
    category: build-recipes
  - type: craft-recipe:build:0.1
    name: Craft recipe build
    trigger: When the status of a craft recipe build changes.
    category: build-recipes
  - type: bug:0.1
    name: Bug
    trigger: When a bug or bug task changes.
    category: bug-tracking
  - type: bug:comment:0.1
    name: Bug Comment
    trigger: When a comment is added to a bug.
    category: bug-tracking
  - type: archive:source-package-upload:0.1
    name: Source package upload
    trigger: When the status of a source package upload changes.
    category: package-publishing
  - type: archive:binary-package-upload:0.1
    name: Binary package upload
    trigger: When the status of a binary package upload changes.
    category: package-publishing
  - type: archive:binary-build:0.1
    name: Binary build
    trigger: When the status of a binary build changes.
    category: package-publishing
  - type: ping
    name: Ping
    trigger: >-
      Manually requested test event. Delivers X-Launchpad-Event-Type: ping with body {"ping": true}
      and records the attempt under the webhook's recent deliveries.
    category: testing
versioning:
  scheme: >-
    Event types carry a version suffix (:0.1). Keys may be added to payload dictionaries without a
    version bump; an incompatible payload change bumps the version so consumers can migrate.
filtering:
  git_ref_pattern:
    applies_to: [ci:build:0.1, 'git:push:0.1', 'merge-proposal:0.1']
    wildcards:
      '*': matches zero or more characters
      '?': matches any single character
      '[...]': matches any character in the set
      '[!...]': matches any character not in the set
    caveat: >-
      Launchpad does not re-run a CI build for a commit it has already built, so a commit first
      pushed to a non-matching ref and later pushed to a matching ref may never fire the webhook.
delivery:
  ordering: >-
    Roughly event order, but not guaranteed. Sort on the numeric X-Launchpad-Delivery header when
    ordering matters.
  observability: >-
    Recent deliveries are shown on the webhook's page in the web UI and are queryable through the
    webhook.deliveries API collection.
counts:
  events: 14
  sub_events: 6
  target_object_types: 10

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/canonical-launchpad-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.