SMTP2GO · AsyncAPI Specification
Smtp2Go Webhooks
Version
View Spec
View on GitHub
EmailEmail DeliveryTransactional EmailSMTPSMSEmail APIDeliverabilityWebhookMessagingCommunicationsMCPAgent SkillsAsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-08-13'
method: searched
source: https://developers.smtp2go.com/docs/webhooks-overview
spec_type: none
asyncapi_published: false
note: >-
SMTP2GO publishes no AsyncAPI document — /asyncapi.yaml, /asyncapi.json and the
GitHub org were all checked and none exists. It does publish a complete,
documented webhook event surface, captured verbatim below and wired as
type: Webhooks. Webhooks are created and managed through the REST API
(/webhook/add, /webhook/edit, /webhook/view, /webhook/remove) or the app under
Settings > Webhooks, and can be scoped to selected SMTP users, API keys or
authenticated IPs.
transport:
protocol: HTTP or HTTPS
method: POST
payload_formats: [JSON, form-encoded]
payload_format_note: Chosen per webhook in its settings.
signature: null
signature_note: >-
SMTP2GO does not sign webhook deliveries. The documented ways to protect an
endpoint are HTTP basic credentials embedded in the URL, a secret in the
query string or path, or allow-listing the A record of
webhooks.smtp2go.com. A consumer cannot cryptographically verify origin.
delivery:
timeout_seconds: 10
timeout_note: A timeout occurs if no response headers are received in that window.
retry_window_hours: 48
max_attempts: 35
retry_schedule:
- 5 times in the first 30 minutes
- Every hour for the next 24 hours
- Every 6 hours for the next 24 hours
- Every 12 hours for the next 24 hours
- One final attempt after 24 hours
failure_console: Settings > Webhooks > Failed Notifications (view, retry, cancel)
limits:
webhooks_per_account: {free: 1, paid: 10}
subaccounts:
supported: true
note: 'All webhook endpoints accept subaccount_id since 2025-07-01.'
channels:
- channel: email-events
description: Email delivery lifecycle events
events:
- {event: processed, description: 'The email was received by the incoming servers and is being processed for delivery; it stays in Processed while delivery attempts are pending.'}
- {event: delivered, description: 'Delivered to the recipient, confirmed by a 250 response from the recipient server.'}
- {event: open, description: 'The recipient opened the email; can fire on each open.'}
- {event: click, description: 'The recipient clicked a tracked link; can fire on each click.'}
- {event: bounce, description: 'The recipient server bounced the message; classified soft or hard.'}
- {event: spam, description: 'The recipient marked the email as spam; the address is added to Suppressions indefinitely.'}
- {event: unsubscribe, description: 'The recipient unsubscribed via the Unsubscribe Footer; the address is added to Suppressions indefinitely.'}
- {event: resubscribe, description: The recipient resubscribed or was removed from Suppressions.}
- {event: reject, description: 'Rejected because the address is suppressed, the sender is unverified, or the SMTP user / authenticated IP / API key is sandboxed.'}
payload_fields:
- {name: event, description: 'One of processed, delivered, open, click, bounce, spam, unsubscribe, resubscribe, reject.'}
- {name: time, description: UTC timestamp of when the event happened.}
- {name: sendtime, description: UTC timestamp of when the email was sent to the SMTP2GO server.}
- {name: sender, description: The envelope-from email address.}
- {name: from, description: Display name (where available) and email address the email was sent from.}
- {name: from_address, description: The email address the email was sent from.}
- {name: from_name, description: The display name accompanying the address, where available.}
- {name: rcpt, description: The email address the email was addressed to.}
- {name: recipients, description: The email addresses the email was sent to.}
- {name: auth, description: 'The SMTP username, API key or IP address used to send.'}
- {name: host, description: The recipient server that bounced the message (bounce only).}
- {name: message, description: 'The error message received, where available.'}
- {name: context, description: 'Additional information on the event, where available.'}
- {name: email_id, description: Identifier uniquely identifying the email; used to retrieve delivery detail.}
- {name: id, description: The unique id for the webhook.}
- {name: message-id, description: The unique id from the sender.}
- {name: bounce, description: 'hard or soft, on bounce events.'}
- {name: subject, description: The subject of the email.}
- {name: user-agent, description: User-Agent header of the device that opened the email, where applicable.}
- {name: read-secs, description: 'Seconds the email was open, in five-second increments up to 30, where applicable.'}
- {name: client, description: Reported client that clicked/opened the link, based on the User-Agent.}
- {name: client-device, description: Reported device type of the User-Agent, where available.}
- {name: client-os, description: Reported operating system of the User-Agent, where available.}
- {name: geoip-continent, description: Two-character continent code from a geoip lookup, where available.}
- {name: geoip-country, description: Two-character country code from a geoip lookup, where available.}
- {name: geoip-city, description: City name from a geoip lookup, where available.}
- {name: srchost, description: 'End-user IP for open/click events, or the submitting IP for processed events.'}
- {name: any_custom_header, description: Any custom header configured on the webhook and present in the sent email.}
- channel: sms-events
description: SMS delivery lifecycle events
events:
- {event: sms_sending, description: The SMS is currently being processed.}
- {event: sms_submitted, description: 'Submitted to the downstream provider; often delivered but unconfirmed.'}
- {event: sms_delivered, description: Sent and delivery confirmed by the downstream provider.}
- {event: sms_failed, description: 'Failed to deliver — validity check failure, gateway failure, dropped or duplicate.'}
- {event: sms_rejected, description: 'Blocked by the SMS network, e.g. the destination has blocked the sender.'}
- {event: opt-out, description: The recipient has opted out of further communications.}
payload_fields:
- {name: event, description: 'One of sms_submitted, sms_delivered, sms_rejected, sms_sending, sms_failed.'}
- {name: destination_number, description: The number the SMS is being sent to.}
- {name: email_subject, description: The subject of the email (email-to-SMS only).}
- {name: id, description: The unique id for the webhook.}
- {name: message_content, description: The body content of the SMS message.}
- {name: message_id, description: The unique id for the SMS.}
- {name: received_timestamp, description: UTC timestamp of the event.}
- {name: region, description: The destination region based on the number country code.}
- {name: retry_count, description: Number of attempts to send the SMS.}
- {name: sender_email, description: The From email address.}
- {name: source_number, description: The pool/number the SMS was delivered from.}
- {name: status_code, description: The status code of the SMS.}
- {name: submitted_timestamp, description: UTC timestamp of submission to the downstream provider.}
management_operations:
- {operation: add-webhook, path: /webhook/add}
- {operation: edit-webhook, path: /webhook/edit}
- {operation: view-webhook, path: /webhook/view}
- {operation: remove-webhook, path: /webhook/remove}
alternatives:
polling: /activity/search (rate-limited to 60 requests per minute; webhooks are the documented realtime path)
slack: https://developers.smtp2go.com/docs/slack-app
docs:
- https://developers.smtp2go.com/docs/webhooks-overview
- https://developers.smtp2go.com/docs/setup-a-webhook