Iterable · AsyncAPI Specification
Iterable System Webhooks
Version 1.0.0
Iterable system webhooks send real-time event data from an Iterable project to external systems via HTTP POST requests whenever specified events occur. System webhooks can be configured to fire on email sends, opens, clicks, bounces, unsubscribes, complaints, push notifications, SMS messages, in-app messages, and other engagement events. Webhook payloads are sent as JSON to a user-configured HTTPS endpoint and support no authentication, HTTP Basic authentication, or OAuth 2.0.
View Spec
View on GitHub
Cross-Channel MessagingCustomer EngagementEmailMarketing AutomationPush NotificationsSMSAsyncAPIWebhooksEvents
Channels
/webhook
publish
receiveSystemWebhookReceive system webhook events from Iterable
The webhook endpoint that receives all system webhook events from Iterable. Events are sent as HTTP POST requests with JSON payloads.
Messages
✉
EmailSend
Email Send
Fired when an email is sent to a user
✉
EmailOpen
Email Open
Fired when a user opens an email
✉
EmailClick
Email Click
Fired when a user clicks a link in an email
✉
EmailBounce
Email Bounce
Fired when an email bounces
✉
EmailUnSubscribe
Email Unsubscribe
Fired when a user unsubscribes from email
✉
EmailComplaint
Email Complaint
Fired when a user marks an email as spam
✉
PushSend
Push Send
Fired when a push notification is sent to a user
✉
PushOpen
Push Open
Fired when a user opens a push notification
✉
PushBounce
Push Bounce
Fired when a push notification bounces due to invalid token
✉
SmsSend
SMS Send
Fired when an SMS message is sent to a user
✉
SmsBounce
SMS Bounce
Fired when an SMS message bounces
✉
SmsReceived
SMS Received
Fired when an inbound SMS message is received from a user
✉
InAppSend
In-App Send
Fired when an in-app message is sent to a user
✉
InAppOpen
In-App Open
Fired when a user views an in-app message
✉
InAppClick
In-App Click
Fired when a user clicks a button or link in an in-app message
✉
WebPushSend
Web Push Send
Fired when a web push notification is sent to a user
✉
ListSubscribe
List Subscribe
Fired when a user subscribes to a list
✉
ListUnsubscribe
List Unsubscribe
Fired when a user unsubscribes from a list
✉
Purchase
Purchase
Fired when a purchase event is tracked for a user
✉
CustomEvent
Custom Event
Fired when a custom event is tracked for a user
Servers
https
iterableWebhookServer
{webhookUrl}
The HTTPS endpoint configured in Iterable project settings to receive system webhook payloads. The URL must begin with https://.
AsyncAPI Specification
asyncapi: 2.6.0
info:
title: Iterable System Webhooks
description: >-
Iterable system webhooks send real-time event data from an Iterable project
to external systems via HTTP POST requests whenever specified events occur.
System webhooks can be configured to fire on email sends, opens, clicks,
bounces, unsubscribes, complaints, push notifications, SMS messages, in-app
messages, and other engagement events. Webhook payloads are sent as JSON
to a user-configured HTTPS endpoint and support no authentication, HTTP
Basic authentication, or OAuth 2.0.
version: '1.0.0'
contact:
name: Iterable Support
url: https://support.iterable.com
externalDocs:
description: Iterable System Webhooks Documentation
url: https://support.iterable.com/hc/en-us/articles/208013936-System-Webhooks
servers:
iterableWebhookServer:
url: '{webhookUrl}'
protocol: https
description: >-
The HTTPS endpoint configured in Iterable project settings to receive
system webhook payloads. The URL must begin with https://.
variables:
webhookUrl:
description: >-
The webhook receiver URL configured in Iterable project settings
security:
- httpBasic: []
- oauth2: []
- noAuth: []
channels:
/webhook:
description: >-
The webhook endpoint that receives all system webhook events from
Iterable. Events are sent as HTTP POST requests with JSON payloads.
publish:
operationId: receiveSystemWebhook
summary: Receive system webhook events from Iterable
description: >-
Receives real-time event notifications from Iterable whenever
configured system events occur. Each event includes the user email,
event name, and event-specific data fields.
message:
oneOf:
- $ref: '#/components/messages/EmailSend'
- $ref: '#/components/messages/EmailOpen'
- $ref: '#/components/messages/EmailClick'
- $ref: '#/components/messages/EmailBounce'
- $ref: '#/components/messages/EmailUnSubscribe'
- $ref: '#/components/messages/EmailComplaint'
- $ref: '#/components/messages/PushSend'
- $ref: '#/components/messages/PushOpen'
- $ref: '#/components/messages/PushBounce'
- $ref: '#/components/messages/SmsSend'
- $ref: '#/components/messages/SmsBounce'
- $ref: '#/components/messages/SmsReceived'
- $ref: '#/components/messages/InAppSend'
- $ref: '#/components/messages/InAppOpen'
- $ref: '#/components/messages/InAppClick'
- $ref: '#/components/messages/WebPushSend'
- $ref: '#/components/messages/ListSubscribe'
- $ref: '#/components/messages/ListUnsubscribe'
- $ref: '#/components/messages/Purchase'
- $ref: '#/components/messages/CustomEvent'
components:
securitySchemes:
httpBasic:
type: http
scheme: basic
description: >-
HTTP Basic authentication for webhook delivery
oauth2:
type: oauth2
flows:
clientCredentials:
tokenUrl: '{oauthTokenUrl}'
scopes: {}
description: >-
OAuth 2.0 client credentials authentication for webhook delivery
noAuth:
type: http
scheme: bearer
description: >-
No authentication required for webhook delivery
messages:
EmailSend:
name: emailSend
title: Email Send
summary: >-
Fired when an email is sent to a user
contentType: application/json
payload:
$ref: '#/components/schemas/EmailSendPayload'
EmailOpen:
name: emailOpen
title: Email Open
summary: >-
Fired when a user opens an email
contentType: application/json
payload:
$ref: '#/components/schemas/EmailOpenPayload'
EmailClick:
name: emailClick
title: Email Click
summary: >-
Fired when a user clicks a link in an email
contentType: application/json
payload:
$ref: '#/components/schemas/EmailClickPayload'
EmailBounce:
name: emailBounce
title: Email Bounce
summary: >-
Fired when an email bounces
contentType: application/json
payload:
$ref: '#/components/schemas/EmailBouncePayload'
EmailUnSubscribe:
name: emailUnSubscribe
title: Email Unsubscribe
summary: >-
Fired when a user unsubscribes from email
contentType: application/json
payload:
$ref: '#/components/schemas/EmailUnSubscribePayload'
EmailComplaint:
name: emailComplaint
title: Email Complaint
summary: >-
Fired when a user marks an email as spam
contentType: application/json
payload:
$ref: '#/components/schemas/EmailComplaintPayload'
PushSend:
name: pushSend
title: Push Send
summary: >-
Fired when a push notification is sent to a user
contentType: application/json
payload:
$ref: '#/components/schemas/PushSendPayload'
PushOpen:
name: pushOpen
title: Push Open
summary: >-
Fired when a user opens a push notification
contentType: application/json
payload:
$ref: '#/components/schemas/PushOpenPayload'
PushBounce:
name: pushBounce
title: Push Bounce
summary: >-
Fired when a push notification bounces due to invalid token
contentType: application/json
payload:
$ref: '#/components/schemas/PushBouncePayload'
SmsSend:
name: smsSend
title: SMS Send
summary: >-
Fired when an SMS message is sent to a user
contentType: application/json
payload:
$ref: '#/components/schemas/SmsSendPayload'
SmsBounce:
name: smsBounce
title: SMS Bounce
summary: >-
Fired when an SMS message bounces
contentType: application/json
payload:
$ref: '#/components/schemas/SmsBouncePayload'
SmsReceived:
name: smsReceived
title: SMS Received
summary: >-
Fired when an inbound SMS message is received from a user
contentType: application/json
payload:
$ref: '#/components/schemas/SmsReceivedPayload'
InAppSend:
name: inAppSend
title: In-App Send
summary: >-
Fired when an in-app message is sent to a user
contentType: application/json
payload:
$ref: '#/components/schemas/InAppSendPayload'
InAppOpen:
name: inAppOpen
title: In-App Open
summary: >-
Fired when a user views an in-app message
contentType: application/json
payload:
$ref: '#/components/schemas/InAppOpenPayload'
InAppClick:
name: inAppClick
title: In-App Click
summary: >-
Fired when a user clicks a button or link in an in-app message
contentType: application/json
payload:
$ref: '#/components/schemas/InAppClickPayload'
WebPushSend:
name: webPushSend
title: Web Push Send
summary: >-
Fired when a web push notification is sent to a user
contentType: application/json
payload:
$ref: '#/components/schemas/WebPushSendPayload'
ListSubscribe:
name: listSubscribe
title: List Subscribe
summary: >-
Fired when a user subscribes to a list
contentType: application/json
payload:
$ref: '#/components/schemas/ListSubscribePayload'
ListUnsubscribe:
name: listUnsubscribe
title: List Unsubscribe
summary: >-
Fired when a user unsubscribes from a list
contentType: application/json
payload:
$ref: '#/components/schemas/ListUnsubscribePayload'
Purchase:
name: purchase
title: Purchase
summary: >-
Fired when a purchase event is tracked for a user
contentType: application/json
payload:
$ref: '#/components/schemas/PurchasePayload'
CustomEvent:
name: customEvent
title: Custom Event
summary: >-
Fired when a custom event is tracked for a user
contentType: application/json
payload:
$ref: '#/components/schemas/CustomEventPayload'
schemas:
BaseWebhookFields:
type: object
description: >-
Common fields present in all system webhook payloads
properties:
email:
type: string
format: email
description: >-
Email address of the user associated with the event
eventName:
type: string
description: >-
The name of the system event that triggered the webhook
dataFields:
type: object
description: >-
Event-specific data fields
additionalProperties: true
CampaignFields:
type: object
description: >-
Common campaign-related fields in webhook payloads
properties:
campaignId:
type: integer
description: >-
ID of the associated campaign
campaignName:
type: string
description: >-
Name of the associated campaign
templateId:
type: integer
description: >-
ID of the associated template
templateName:
type: string
description: >-
Name of the associated template
workflowId:
type: integer
description: >-
ID of the associated workflow if applicable
workflowName:
type: string
description: >-
Name of the associated workflow if applicable
channelId:
type: integer
description: >-
ID of the messaging channel
messageTypeId:
type: integer
description: >-
ID of the message type
experimentId:
type: integer
description: >-
ID of the experiment if part of an A/B test
labels:
type: array
description: >-
Labels associated with the campaign
items:
type: string
EmailSendPayload:
type: object
description: >-
Payload sent when an email is delivered to a user
allOf:
- $ref: '#/components/schemas/BaseWebhookFields'
- $ref: '#/components/schemas/CampaignFields'
- type: object
properties:
contentId:
type: integer
description: >-
Content variant ID for experiments
createdAt:
type: string
format: date-time
description: >-
Timestamp of the email send
messageId:
type: string
description: >-
Unique message identifier
emailSubject:
type: string
description: >-
Subject line of the sent email
EmailOpenPayload:
type: object
description: >-
Payload sent when a user opens an email
allOf:
- $ref: '#/components/schemas/BaseWebhookFields'
- $ref: '#/components/schemas/CampaignFields'
- type: object
properties:
contentId:
type: integer
description: >-
Content variant ID for experiments
createdAt:
type: string
format: date-time
description: >-
Timestamp of the email open
messageId:
type: string
description: >-
Unique message identifier
emailSubject:
type: string
description: >-
Subject line of the opened email
userAgent:
type: string
description: >-
User agent string of the email client
userAgentDevice:
type: string
description: >-
Device type parsed from the user agent
ip:
type: string
description: >-
IP address where the email was opened
city:
type: string
description: >-
City based on IP geolocation
region:
type: string
description: >-
Region or state based on IP geolocation
country:
type: string
description: >-
Country based on IP geolocation
timeZone:
type: string
description: >-
Timezone based on IP geolocation
proxySource:
type: string
description: >-
Proxy source if the open was via a proxy
isBot:
type: boolean
description: >-
Whether the open was detected as a bot
locale:
type: string
description: >-
Locale of the user
EmailClickPayload:
type: object
description: >-
Payload sent when a user clicks a link in an email
allOf:
- $ref: '#/components/schemas/BaseWebhookFields'
- $ref: '#/components/schemas/CampaignFields'
- type: object
properties:
contentId:
type: integer
description: >-
Content variant ID for experiments
createdAt:
type: string
format: date-time
description: >-
Timestamp of the click
messageId:
type: string
description: >-
Unique message identifier
emailSubject:
type: string
description: >-
Subject line of the email
url:
type: string
format: uri
description: >-
The URL that was clicked
userAgent:
type: string
description: >-
User agent string
ip:
type: string
description: >-
IP address of the user
city:
type: string
description: >-
City based on geolocation
region:
type: string
description: >-
Region based on geolocation
country:
type: string
description: >-
Country based on geolocation
EmailBouncePayload:
type: object
description: >-
Payload sent when an email bounces
allOf:
- $ref: '#/components/schemas/BaseWebhookFields'
- $ref: '#/components/schemas/CampaignFields'
- type: object
properties:
createdAt:
type: string
format: date-time
description: >-
Timestamp of the bounce
emailSubject:
type: string
description: >-
Subject line of the bounced email
recipientState:
type: string
description: >-
State of the recipient after the bounce
EmailUnSubscribePayload:
type: object
description: >-
Payload sent when a user unsubscribes from email
allOf:
- $ref: '#/components/schemas/BaseWebhookFields'
- $ref: '#/components/schemas/CampaignFields'
- type: object
properties:
createdAt:
type: string
format: date-time
description: >-
Timestamp of the unsubscribe
emailSubject:
type: string
description: >-
Subject line of the email that led to unsubscribe
EmailComplaintPayload:
type: object
description: >-
Payload sent when a user marks an email as spam
allOf:
- $ref: '#/components/schemas/BaseWebhookFields'
- $ref: '#/components/schemas/CampaignFields'
- type: object
properties:
createdAt:
type: string
format: date-time
description: >-
Timestamp of the complaint
emailSubject:
type: string
description: >-
Subject line of the email
PushSendPayload:
type: object
description: >-
Payload sent when a push notification is delivered
allOf:
- $ref: '#/components/schemas/BaseWebhookFields'
- $ref: '#/components/schemas/CampaignFields'
- type: object
properties:
createdAt:
type: string
format: date-time
description: >-
Timestamp of the push send
pushMessage:
type: string
description: >-
The push notification message text
payload:
type: object
description: >-
Custom payload data sent with the push
additionalProperties: true
sound:
type: string
description: >-
Sound to play on the device
badge:
type: integer
description: >-
Badge count to display
contentAvailable:
type: boolean
description: >-
Whether this is a content-available push
deeplink:
type: string
description: >-
Deep link URL for the push notification
attachmentUrlAndroid:
type: string
description: >-
Attachment URL for Android rich push
PushOpenPayload:
type: object
description: >-
Payload sent when a user opens a push notification
allOf:
- $ref: '#/components/schemas/BaseWebhookFields'
- $ref: '#/components/schemas/CampaignFields'
- type: object
properties:
createdAt:
type: string
format: date-time
description: >-
Timestamp of the push open
pushMessage:
type: string
description: >-
The push notification message text
appAlreadyRunning:
type: boolean
description: >-
Whether the app was already in the foreground
payload:
type: object
description: >-
Custom payload data
additionalProperties: true
sound:
type: string
description: >-
Sound associated with the push
badge:
type: integer
description: >-
Badge count
contentAvailable:
type: boolean
description: >-
Whether this was a content-available push
deeplink:
type: string
description: >-
Deep link URL
locale:
type: string
description: >-
User locale
PushBouncePayload:
type: object
description: >-
Payload sent when a push notification bounces due to an invalid token
allOf:
- $ref: '#/components/schemas/BaseWebhookFields'
- $ref: '#/components/schemas/CampaignFields'
- type: object
properties:
createdAt:
type: string
format: date-time
description: >-
Timestamp of the bounce
SmsSendPayload:
type: object
description: >-
Payload sent when an SMS message is delivered
allOf:
- $ref: '#/components/schemas/BaseWebhookFields'
- $ref: '#/components/schemas/CampaignFields'
- type: object
properties:
createdAt:
type: string
format: date-time
description: >-
Timestamp of the SMS send
smsMessage:
type: string
description: >-
The SMS message text
renderedSmsMessage:
type: string
description: >-
The rendered SMS message text after personalization
fromPhoneNumberId:
type: integer
description: >-
ID of the sending phone number
fromSMSSenderId:
type: string
description: >-
Sender ID for the SMS
toPhoneNumber:
type: string
description: >-
Recipient phone number
imageUrl:
type: string
format: uri
description: >-
Image URL for MMS messages
smsSendCount:
type: integer
description: >-
Number of SMS segments sent
mmsSendCount:
type: integer
description: >-
Number of MMS messages sent
isSMSEstimation:
type: boolean
description: >-
Whether the send count is an estimation
espName:
type: string
description: >-
Name of the ESP used for delivery
billingParty:
type: string
description: >-
Billing party for the SMS
espAccountId:
type: string
description: >-
ESP account identifier
locale:
type: string
description: >-
User locale
timeZone:
type: string
description: >-
User timezone
catalogLookupCount:
type: integer
description: >-
Number of catalog lookups performed
catalogCollectionCount:
type: integer
description: >-
Number of catalog collections queried
SmsBouncePayload:
type: object
description: >-
Payload sent when an SMS message bounces
allOf:
- $ref: '#/components/schemas/BaseWebhookFields'
- $ref: '#/components/schemas/CampaignFields'
- type: object
properties:
createdAt:
type: string
format: date-time
description: >-
Timestamp of the bounce
toPhoneNumber:
type: string
description: >-
Phone number that bounced
SmsReceivedPayload:
type: object
description: >-
Payload sent when an inbound SMS is received from a user
allOf:
- $ref: '#/components/schemas/BaseWebhookFields'
- type: object
properties:
createdAt:
type: string
format: date-time
description: >-
Timestamp when the SMS was received
fromPhoneNumber:
type: string
description: >-
Phone number the SMS was sent from
smsMessage:
type: string
description: >-
Content of the received SMS
InAppSendPayload:
type: object
description: >-
Payload sent when an in-app message is sent to a user
allOf:
- $ref: '#/components/schemas/BaseWebhookFields'
- $ref: '#/components/schemas/CampaignFields'
- type: object
properties:
createdAt:
type: string
format: date-time
description: >-
Timestamp of the in-app send
messageId:
type: string
description: >-
Unique message identifier
InAppOpenPayload:
type: object
description: >-
Payload sent when a user views an in-app message
allOf:
- $ref: '#/components/schemas/BaseWebhookFields'
- $ref: '#/components/schemas/CampaignFields'
- type: object
properties:
createdAt:
type: string
format: date-time
description: >-
Timestamp of the in-app view
messageId:
type: string
description: >-
Unique message identifier
InAppClickPayload:
type: object
description: >-
Payload sent when a user clicks a link or button in an in-app message
allOf:
- $ref: '#/components/schemas/BaseWebhookFields'
- $ref: '#/components/schemas/CampaignFields'
- type: object
properties:
createdAt:
type: string
format: date-time
description: >-
Timestamp of the click
messageId:
type: string
description: >-
Unique message identifier
clickedUrl:
type: string
format: uri
description: >-
URL that was clicked
WebPushSendPayload:
type: object
description: >-
Payload sent when a web push notification is delivered
allOf:
- $ref: '#/components/schemas/BaseWebhookFields'
- $ref: '#/components/schemas/CampaignFields'
- type: object
properties:
createdAt:
type: string
format: date-time
description: >-
Timestamp of the web push send
messageId:
type: string
description: >-
Unique message identifier
ListSubscribePayload:
type: object
description: >-
Payload sent when a user subscribes to a list
allOf:
- $ref: '#/components/schemas/BaseWebhookFields'
- type: object
properties:
createdAt:
type: string
format: date-time
description: >-
Timestamp of the subscription
listId:
type: integer
description: >-
ID of the list subscribed to
listName:
type: string
description: >-
Name of the list subscribed to
ListUnsubscribePayload:
type: object
description: >-
Payload sent when a user unsubscribes from a list
allOf:
- $ref: '#/components/schemas/BaseWebhookFields'
- type: object
properties:
createdAt:
type: string
format: date-time
description: >-
Timestamp of the unsubscription
listId:
type: integer
description: >-
ID of the list unsubscribed from
listName:
type: string
description: >-
Name of the list unsubscribed from
PurchasePayload:
type: object
description: >-
Payload sent when a purchase event is tracked
allOf:
- $ref: '#/components/schemas/BaseWebhookFields'
- type: object
properties:
createdAt:
type: string
format: date-time
description: >-
Timestamp of the purchase
total:
type: number
description: >-
Total purchase amount
items:
type: array
description: >-
Items purchased
items:
type: object
properties:
id:
type: string
description: >-
Item ID
name:
type: string
description: >-
Item name
price:
type: number
description: >-
Item price
quantity:
type: integer
description: >-
Quantity purchased
CustomEventPayload:
type: object
description: >-
Payload sent when a custom event is tracked for a user
allOf:
- $ref: '#/components/schemas/BaseWebhookFields'
- type: object
properties:
createdAt:
type: string
format: date-time
description: >-
Timestamp of the custom event