Amazon Pinpoint · AsyncAPI Specification
Amazon Pinpoint Events
Version
View Spec
View on GitHub
CampaignsCommunicationsEmailMarketingMessagingPush NotificationsSMSVoiceCustomer EngagementSegmentationJourneysAnalyticsAsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-08-13'
method: searched
source: >-
https://docs.aws.amazon.com/pinpoint/latest/developerguide/event-streams.html,
https://docs.aws.amazon.com/pinpoint/latest/developerguide/event-streams-data-app.html,
https://docs.aws.amazon.com/pinpoint/latest/developerguide/event-streams-data-campaign.html,
https://docs.aws.amazon.com/pinpoint/latest/developerguide/event-streams-data-email.html,
https://docs.aws.amazon.com/pinpoint/latest/developerguide/event-streams-data-sms.html,
https://docs.aws.amazon.com/pinpoint/latest/developerguide/channels-custom.html
spec_type: none
asyncapi_published: false
asyncapi_note: >-
Amazon Pinpoint has a real, documented event surface but AWS publishes NO AsyncAPI document for
it - not on the docs host, not in the aws GitHub org, not at any /asyncapi path. This file
captures the event surface as AWS documents it. It is deliberately not an AsyncAPI: writing one
on AWS's behalf would assert a contract AWS does not publish.
surfaces:
- kind: event-stream
name: Pinpoint event stream
transport: Amazon Kinesis Data Streams or Amazon Data Firehose
direction: outbound (Pinpoint -> your stream)
configured_by:
- openapi/amazon-pinpoint-apps-api-openapi.yml#PutEventStream
- openapi/amazon-pinpoint-apps-api-openapi.yml#GetEventStream
- openapi/amazon-pinpoint-apps-api-openapi.yml#DeleteEventStream
envelope:
fields: [event_type, event_timestamp, arrival_timestamp, event_version, application, client, device, session, attributes, metrics, awsAccountId]
encoding: JSON, one record per event
excluded:
- transactional push notifications
- transactional voice messages
note: >-
Pinpoint does not stream events for transactional push or voice - a documented gap in the
event surface, stated by AWS.
- kind: webhook
name: Custom channel webhook
direction: outbound (Pinpoint -> your HTTPS endpoint)
trigger: A campaign whose delivery is configured as a custom channel with a webhook URL
requirements:
- URL must begin with https://
- URL must comply with RFC 3986 and use only alphanumerics plus - . _ ~ ? / # :
- >-
Pinpoint first issues an HTTP HEAD to the URL; the response MUST carry an
X-Amz-Pinpoint-AccountId header whose value equals your AWS account ID, or the campaign is
rejected. This is the ownership handshake.
payload_fields: [Message, Data, ApplicationId, CampaignId, TreatmentId, ActivityId, ScheduledTime, Endpoints]
alternative: An AWS Lambda function receiving the same payload shape instead of an HTTPS endpoint
source: https://docs.aws.amazon.com/pinpoint/latest/developerguide/channels-custom.html
event_catalog:
app:
version: '3.0'
events:
- {type: _session.start, description: An app session began}
- {type: _session.stop, description: An app session ended}
- {type: custom, description: Any custom event name recorded through PutEvents}
source: https://docs.aws.amazon.com/pinpoint/latest/developerguide/event-streams-data-app.html
campaign:
version: '3.1'
events:
- {type: _campaign.send, description: Pinpoint executed the campaign}
- {type: _campaign.opened_notification, description: Push recipient tapped the notification (AWS Amplify only)}
- {type: _campaign.received_foreground, description: Push received as a foreground notification (AWS Amplify only)}
- {type: _campaign.received_background, description: Push received as a background notification (AWS Amplify only)}
source: https://docs.aws.amazon.com/pinpoint/latest/developerguide/event-streams-data-campaign.html
email:
version: '3.1'
events:
- {type: _email.send, description: Email accepted for sending}
- {type: _email.delivered, description: Email delivered to the recipient}
- {type: _email.hardbounce, description: Permanent bounce}
- {type: _email.softbounce, description: Transient bounce}
- {type: _email.complaint, description: Recipient marked the message as spam}
- {type: _email.open, description: Recipient opened the message}
- {type: _email.click, description: Recipient clicked a link}
- {type: _email.rejected, description: Message rejected before sending}
- {type: _email.unsubscribe, description: Recipient unsubscribed}
- {type: _email.rendering_failure, description: Template rendering failed}
source: https://docs.aws.amazon.com/pinpoint/latest/developerguide/event-streams-data-email.html
sms:
version: '3.1'
events:
- {type: _SMS.SUCCESS, description: Message delivered}
- {type: _SMS.BUFFERED, description: Message accepted and queued by the carrier}
- {type: _SMS.FAILURE, description: Delivery failed}
- {type: _SMS.OPTOUT, description: Recipient opted out}
record_status_note: >-
SMS events carry a record_status (for example DELIVERED) alongside the event type.
source: https://docs.aws.amazon.com/pinpoint/latest/developerguide/event-streams-data-sms.html
journey:
events_note: >-
Journey event data is documented at
https://docs.aws.amazon.com/pinpoint/latest/developerguide/event-streams-data-journey.html
and shares the app/campaign envelope.
inbound_events:
- name: PutEvents
direction: inbound (your app -> Pinpoint)
operation: openapi/amazon-pinpoint-apps-api-openapi.yml#PutEvents
note: The write side of the same event model - how engagement events enter Pinpoint.
lifecycle_note: >-
The event stream and custom-channel webhook go away with the service on 2026-10-30. AWS
recommends Amazon Kinesis directly for event collection after that date.