Zoho Campaigns · AsyncAPI Specification

Zoho Campaigns Email Api Webhooks

Version

View Spec View on GitHub Email MarketingCampaignsMailing ListsSubscribersEmail TemplatesA/B TestingCampaign AnalyticsMarketing AutomationTransactional EmailWebhookAsyncAPIEvents

AsyncAPI Specification

Raw ↑
generated: '2026-08-13'
method: searched
source: https://www.zoho.com/campaigns/help/emailapi/webhook-events.html
spec_type: null
spec_note: >-
  Zoho publishes NO AsyncAPI document for Zoho Campaigns. Probed the docs host,
  the API host and the GitHub org; nothing served. What the provider does
  publish is a complete, documented webhook event catalog with per-event payload
  attribute tables and sample payloads, plus a CRUD management API for the
  webhook subscriptions themselves. That catalog is captured below verbatim from
  the published pages — it is a real event surface, not a fabricated AsyncAPI.
name: Zoho Campaigns Email API webhooks
description: >-
  Event webhooks for the Zoho Campaigns Email API. Delivery-lifecycle events for
  a transmission (Zoho's term for a campaign send) are POSTed to a subscriber URL
  configured through the Webhook Settings API.
transport: HTTP POST
docs:
  events: https://www.zoho.com/campaigns/help/emailapi/webhook-events.html
  management: https://www.zoho.com/campaigns/help/emailapi/webhooks.html
  user_guide: https://help.zoho.com/portal/en/kb/campaigns/user-guide/settings/developer-space/articles/how-to-configure-webhooks
management_api:
  base: https://campaigns.zoho.com/emailapi/v2/settings/webhook
  auth: 'Authorization: Zoho-zapikey <api_key>'
  operations:
    - name: Create a webhook
      method: POST
      path: /emailapi/v2/settings/webhook
      docs: https://www.zoho.com/campaigns/help/emailapi/webhooks/create-webhook.html
    - name: Modify a webhook
      method: PUT
      path: /emailapi/v2/settings/webhook/{webhook_id}
      docs: https://www.zoho.com/campaigns/help/emailapi/webhooks/modify-webhook.html
    - name: Get webhook details
      method: GET
      path: /emailapi/v2/settings/webhook/{webhook_id}
      docs: https://www.zoho.com/campaigns/help/emailapi/webhooks/get-webhook.html
    - name: Get all webhooks
      method: GET
      path: /emailapi/v2/settings/webhook
      docs: https://www.zoho.com/campaigns/help/emailapi/webhooks/get-all-webhooks.html
    - name: Delete a webhook
      method: DELETE
      path: /emailapi/v2/settings/webhook/{webhook_id}
      docs: https://www.zoho.com/campaigns/help/emailapi/webhooks/delete-webhook.html
  subscriber_auth_modes:
    - none
    - auth-token
    - custom-header
  note: >-
    The provider's own Postman collection ships three Create-a-webhook variants
    ("no auth", "auth token", and the default), which is how the three
    subscriber authentication modes above are evidenced.
envelope:
  fields:
    - {name: webhook_name, type: String, description: Name of the webhook you configured}
    - {name: webhook_id, type: String, description: ID of the configured webhook}
    - {name: action, type: String, description: Name of the event}
    - {name: actionType, type: String, description: Type of action}
    - {name: action_by, type: String, description: Indicates by whom the action was made}
    - {name: data, type: JSON Array, description: An array of data about the events}
  note: >-
    Every event shares this outer envelope; the per-event attributes below appear
    inside each element of `data[]`.
events:
  - name: Delivered
    action: email_delivered
    actionType: email_delivered
    action_by: user
    description: >-
      A delivered event occurs when a mail successfully reaches the recipient's
      mail server. This does not mean the email landed in the inbox or was read.
    docs: https://www.zoho.com/campaigns/help/emailapi/events/delivered.html
    data_fields:
      - {name: action_time, type: Long, description: Time in UTC milliseconds at which the delivered event happened}
      - {name: contact_id, type: Long, description: ID of the contact}
      - {name: contact_email, type: String, description: Email address of the contact}
      - {name: rcpt_additional_data, type: JSON Object, description: Additional recipient data supplied in the Transmission or Recipient List API}
      - {name: transmission_name, type: String, description: The name you provided for the transmission}
      - {name: injected_time, type: Long, description: Time in UTC milliseconds at which the transmission was created}
      - {name: transmission_id, type: String, description: Unique system-generated transmission ID}
      - {name: zuid, type: Long, description: ID of the user that sent the transmission API request}
  - name: Bounce
    action: bounce
    description: >-
      Called whenever one of your emails bounces. On a hard bounce the contact is
      automatically added to the suppression list.
    docs: https://www.zoho.com/campaigns/help/emailapi/events/bounce.html
    data_fields:
      - {name: bounce_code, type: String, description: Bounce code provided by the recipient email service provider}
      - {name: bounce_type, type: String, description: hard bounce or soft bounce}
      - {name: bounce_extended_code, type: String, description: Additional code indicating a specific bounce case}
      - {name: bounce_reason, type: String, description: Reason for the bounce}
      - {name: action_time, type: Long, description: Time in UTC milliseconds at which the bounce happened}
      - {name: sending_ip, type: String, description: IP through which the mail was attempted}
      - {name: contact_id, type: Long, description: ID of the contact}
      - {name: contact_email, type: String, description: Email address of the contact}
      - {name: rcpt_domain, type: String, description: Domain of the recipient}
      - {name: rcpt_additional_data, type: JSON Object, description: Additional recipient data}
      - {name: from, type: String, description: Sender address}
      - {name: subject, type: String, description: Subject of the transmission}
      - {name: message_id, type: String, description: Message ID of the bounced email}
      - {name: transmission_name, type: String, description: Transmission name}
      - {name: injected_time, type: Long, description: Transmission creation time}
      - {name: transmission_id, type: String, description: Transmission ID}
      - {name: zuid, type: Long, description: Sending user ID}
    side_effect: Hard bounce adds the contact to the suppression list automatically
  - name: Spam
    action: spam
    description: >-
      Occurs when one or more recipients mark your email as spam. Some providers
      only trigger it after a threshold is crossed.
    docs: https://www.zoho.com/campaigns/help/emailapi/events/spam.html
    data_fields:
      - {name: action_time, type: Long, description: Time in UTC milliseconds at which the spam event happened}
      - {name: sending_ip, type: String, description: IP through which the email was sent}
      - {name: contact_id, type: Long, description: ID of the contact who marked the email as spam}
      - {name: contact_email, type: String, description: Email address of that contact}
      - {name: rcpt_domain, type: String, description: Domain of the recipient}
      - {name: rcpt_additional_data, type: JSON Object, description: Additional recipient data}
      - {name: from, type: String, description: Sender address}
      - {name: subject, type: String, description: Subject of the transmission}
      - {name: message_id, type: String, description: Message ID}
      - {name: transmission_name, type: String, description: Transmission name}
      - {name: injected_time, type: Long, description: Transmission creation time}
      - {name: transmission_id, type: Long, description: Transmission ID}
      - {name: zuid, type: Long, description: Sending user ID}
  - name: Opens
    action: email_open
    actionType: email_open
    action_by: contact
    description: An open event occurs when a recipient opens your email.
    docs: https://www.zoho.com/campaigns/help/emailapi/events/opens.html
    data_fields:
      - {name: action_time, type: Long, description: Time in UTC milliseconds at which the open happened}
      - {name: contact_id, type: Long, description: ID of the contact who opened the email}
      - {name: contact_email, type: String, description: Email address of that contact}
      - {name: rcpt_additional_data, type: JSON Object, description: Additional recipient data}
      - {name: transmission_name, type: String, description: Transmission name}
      - {name: injected_time, type: Long, description: Transmission creation time}
      - {name: transmission_id, type: String, description: Transmission ID}
      - {name: zuid, type: Long, description: Sending user ID}
  - name: Clicks
    action: email_click
    actionType: email_click
    action_by: contact
    description: A click event occurs when a recipient clicks any URL in your content.
    docs: https://www.zoho.com/campaigns/help/emailapi/events/clicks.html
    data_fields:
      - {name: action_time, type: Long, description: Time in UTC milliseconds at which the click happened}
      - {name: contact_id, type: Long, description: ID of the contact who clicked}
      - {name: contact_email, type: String, description: Email address of that contact}
      - {name: click_url, type: String, description: The link which was clicked by the contact}
      - {name: rcpt_additional_data, type: JSON Object, description: Additional recipient data}
      - {name: transmission_name, type: String, description: Transmission name}
      - {name: injected_time, type: Long, description: Transmission creation time}
      - {name: transmission_id, type: String, description: Transmission ID}
      - {name: zuid, type: Long, description: Sending user ID}
  - name: Unsubscribes
    action: unsubscribed
    actionType: doNotMail
    action_by: contact
    description: >-
      Occurs when a recipient clicks the unsubscribe link in your content or the
      unsubscribe button offered by their email service provider.
    docs: https://www.zoho.com/campaigns/help/emailapi/events/unsubscribes.html
    data_fields:
      - {name: action_time, type: Long, description: Time in UTC milliseconds at which the unsubscribe happened}
      - {name: contact_id, type: Long, description: ID of the contact who unsubscribed}
      - {name: contact_email, type: String, description: Email address of that contact}
      - {name: rcpt_additional_data, type: JSON Object, description: Additional recipient data}
      - {name: transmission_name, type: String, description: Transmission name}
      - {name: injected_time, type: Long, description: Transmission creation time}
      - {name: transmission_id, type: String, description: Transmission ID}
      - {name: zuid, type: Long, description: Sending user ID}
summary:
  event_count: 6
  asyncapi_published: false
  webhook_management_api: true
  signature_verification: >-
    Not documented. Zoho documents an optional auth token / custom header on the
    subscription, but no HMAC request signature over the payload.

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/zoho-campaigns-email-api-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.