On this page: Learn how to create and configure feedback webhooks that deliver real-time message status updates to your systems for transactional API-triggered campaigns in Adobe Journey Optimizer.
Feedback webhooks allow you to receive real-time status updates for messages sent through transactional API triggered campaigns. By configuring a webhook, you can automatically receive delivery outcomes directly to your systems, enabling monitoring, logging, and automated processing.
You can manage webhook configurations from the Administration / Channels / Feedback webhook settings menu.
Create a feedback webhook feedback-webhook
To create a webhook, follow these steps:
-
Navigate to Administration / Channels / Feedback webhook settings.
-
Click Create Feedback Webhook.
-
In the Basic Configuration section, provide the following details:
- Webhook Name - Enter a descriptive name to identify the webhook.
- Channels - Select the channel(s) for which this webhook should receive feedback (Email and/or Mobile).
- Webhook URL - Provide the HTTPS endpoint where feedback events must be delivered.
-
In the Authentication section, select the authentication method:
- No Authentication – No authentication headers are added.
- JWT Authentication – Provide the required details if your endpoint requires JWT authentication.
-
In the Header Parameters section, configure additional custom headers to be sent with each webhook request.
-
Click Submit to save the configuration.
Webhook payload structure
After a message execution, Journey Optimizer sends the following payload to the configured endpoint.
For the definition of the message feedback event fields, such as messageExclusion, see the Adobe Journey Optimizer Schema Reference.
The payload includes the following campaign and Mobile delivery details:
messageExecution.campaignType- Type of campaign:ScheduledorApiTriggered.messageDeliveryFeedback.encoding- SMS encoding reported by the provider, such asGSMorUNICODE.messageDeliveryFeedback.numberOfMessageParts- Number of SMS parts (segments) the message was split into, sent as a string.messageDeliveryFeedback.deliveryTimestamp- Provider-reported event time in ISO-8601 format.
encoding, numberOfMessageParts, and deliveryTimestamp fields are currently populated only for the Sinch SMS provider. Fields without a value are sent as null.Email sample payload
{
"requestId": "8NoByJneShCdCGRnrGS1t1m3CdA73dhR",
"imsOrg": "myImsOrg",
"sandbox": {
"id": "068abf40-575e-11ea-8512-9b1bfdb82603",
"name": "prod"
},
"channel": "email",
"eventType": "message.feedback",
"messageExecution": {
"messageExecutionID": "HUMA-26362805",
"messageType": "transactional",
"campaignID": "16f24a15-7e21-477c-848a-d5695ca7f137",
"campaignVersionID": "2ca10c10-56dd-4505-87cd-fa5da84e7a5d",
"campaignType": "ApiTriggered"
},
"messageDeliveryFeedback": {
"feedbackStatus": {
"value": "bounce"
},
"offers": null,
"messageExclusion": null,
"messageFailure": {
"category": "sync",
"type": "Ignored",
"code": "25",
"reason": "Admin Failure"
},
"retryCount": 0,
"encoding": null,
"numberOfMessageParts": null,
"deliveryTimestamp": null
},
"identityMap": {
"email": [
{
"id": "john.doe@luma.com",
"primary": true
}
]
}
}
SMS sample payload
The following example shows delivery feedback for an SMS message sent through Sinch:
{
"requestId": "4f1c2d9e-...",
"imsOrg": "XXXX@AdobeOrg",
"sandbox": {
"id": "...",
"name": "prod"
},
"channel": "sms",
"eventType": "message.feedback",
"channelContext": {
"profileAddress": null,
"profileNumber": "+15555550123"
},
"messageExecution": {
"messageExecutionID": "UMA-...",
"messageType": "marketing",
"campaignID": "...",
"campaignVersionID": "...",
"messageID": "...",
"messageProfileID": "...",
"campaignType": "ApiTriggered"
},
"messageDeliveryFeedback": {
"feedbackStatus": {
"value": "delivered"
},
"offers": null,
"messageExclusion": null,
"messageFailure": null,
"retryCount": null,
"responseCode": null,
"responseDurationMillis": null,
"encoding": "GSM",
"numberOfMessageParts": "2",
"deliveryTimestamp": "2026-10-06T18:22:41.512Z"
},
"identityMap": {
"Phone": [
{
"id": "+15555550123"
}
]
}
}
The webhook can capture the following events:
- Sent
- Delivered
- Bounce (see example above)
- Errors
Every incoming request also includes a unique requestId that is sent back to the webhook.
Next steps next
Once a feedback webhook has been created, you can enable it when configuring a transactional API triggered campaign audience. Learn more in this section: Enable webhooks