Campaign Monitor · AsyncAPI Specification

Campaignmonitor Webhooks

Version

View Spec View on GitHub Email MarketingCampaignsSubscribersTransactional EmailSegmentsNewslettersAutomationMarketing AutomationWebhookEmail DeliverabilityMarketingAsyncAPIEvents

AsyncAPI Specification

campaignmonitor-webhooks.yml Raw ↑
generated: '2026-08-13'
method: searched
source: https://www.campaignmonitor.com/api/v3-3/webhooks/
description: >-
  Campaign Monitor publishes no AsyncAPI document and no event-streaming surface.
  It does publish a real, dated webhook contract for subscriber-list events,
  managed through the Lists API. This artifact captures that catalog verbatim
  from the provider's webhooks reference. Searched for an AsyncAPI at
  /asyncapi.yaml, /asyncapi.json on both api.createsend.com and
  www.campaignmonitor.com and across the github.com/campaignmonitor
  organization — no result, so no AsyncAPI pointer is claimed.
asyncapi_published: false
event_surface: webhooks
transport: HTTP POST to a subscriber-supplied URL
payload_formats: [json, xml]
payload_format_note: >-
  The format is fixed at webhook-creation time (PayloadFormat property) and
  applies to every delivery for that webhook.
management_api:
  create: POST https://api.createsend.com/api/v3.3/lists/{listid}/webhooks.{xml|json}
  list: GET https://api.createsend.com/api/v3.3/lists/{listid}/webhooks.{xml|json}
  test: GET https://api.createsend.com/api/v3.3/lists/{listid}/webhooks/{webhookid}/test.{xml|json}
  activate: PUT https://api.createsend.com/api/v3.3/lists/{listid}/webhooks/{webhookid}/activate.{xml|json}
  deactivate: PUT https://api.createsend.com/api/v3.3/lists/{listid}/webhooks/{webhookid}/deactivate.{xml|json}
  delete: DELETE https://api.createsend.com/api/v3.3/lists/{listid}/webhooks/{webhookid}.{xml|json}
  docs: https://www.campaignmonitor.com/api/v3-3/lists/
scope: per subscriber list
event_count: 3
events:
  - name: Subscribe
    description: >-
      Someone subscribes to one of your lists. Triggered when subscribers are
      manually entered on the Add Subscribers page, imported from file, moved
      from an inactive state to Active, subscribe via a signup form, or are added
      through the API. For confirmed opt-in lists the event fires when the
      verification link in the confirmation email is clicked.
    payload_fields: [Type, Date, EmailAddress, Name, SignupIPAddress, "CustomFields[]", ListID]
  - name: Update
    description: >-
      A subscriber's details are updated — on the Edit Subscriber page, by
      re-importing an existing subscriber from file, by the subscriber via the
      Preference Center, or by re-adding/updating through the API.
    payload_fields: [Type, Date, OldEmailAddress, EmailAddress, Name, State, "CustomFields[]", ListID]
  - name: Deactivate
    description: A subscriber in your list is de-activated.
    payload_fields: [Type, Date, EmailAddress, Name, State, "CustomFields[]", ListID]
envelope:
  shape: '{"Events": [ {...}, ... ], "ListID": "<list id>"}'
  note: The payload is always an envelope carrying a batch of events plus the ListID, never a single bare event.
delivery:
  batching: true
  max_events_per_request: 1000
  batching_note: >-
    Events are batched into one POST wherever possible. An import of 6,500
    subscribers arrives as a series of POSTs of up to 1,000 subscribe events each.
  retry_policy: >-
    Campaign Monitor does not publish a retry schedule. It does publish the
    failure outcome: sustained errors on a URL for more than a week cause the
    webhook to be automatically deactivated.
  auto_deactivation_after: 7 days of sustained errors
  expected_response: HTTP 2xx
signing:
  supported: false
  header: null
  note: >-
    No signature or shared-secret header is documented. A receiver cannot verify
    that a delivery originated from Campaign Monitor other than by network
    controls or by treating the payload as untrusted and re-reading state from
    the API. This is the single largest gap in the webhook contract.
testing:
  endpoint: GET /lists/{listid}/webhooks/{webhookid}/test.{xml|json}
  note: >-
    Campaign Monitor's own docs point at third-party tools (RequestBin, ngrok)
    for local webhook development; there is no first-party event simulator.
errors:
  - code: 601
    message: Invalid Webhook URL
  - code: 602
    message: Invalid Webhook Format — supported formats are json and xml
  - code: 603
    message: Invalid Webhook Event — at least one supplied event is not valid
  - code: 610
    message: The webhook request has failed (test delivery could not reach the URL)

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/campaignmonitor-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.