A mail sent through POST /emails has left: mail_sent, origin: api, tracking_id as the send answered. The engine knows only the envelope: the body and subject are empty. gateway.provider_message_id is the server's own Message-ID when it rewrote it (Gmail API, Graph).
Header Parameters
base64url(HMAC-SHA256(raw body, your webhook's signing secret)), the secret being the whsec_… shown in the console. Verify it over the raw bytes before parsing, and refuse the event when it does not match.
The event id, also event_id in the body: the same on every retry of the event. Deduplicate on it.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
A mail event (email_id, not id), plus gateway: { references, headers (lower-case name → values), is_auto_reply, is_bounce, special_use } (and on mail_sent: queue_id, provider_message_id).
Response Body
Example Requests
A mail event (email_id, not id), plus gateway: { references, headers (lower-case name → values), is_auto_reply, is_bounce, special_use } (and on mail_sent: queue_id, provider_message_id).
/EmailMailSentEmail: mail received Webhook
A new mail in a mailbox's inbox: `mail_received`. Its threading headers, auto-reply and bounce flags are under `gateway`.
LinkedIn: invitation received Webhook
Someone invited the account to connect, usually within a minute or two (LinkedIn's My Network badge is the cue; a check every few hours is the fallback). Once per invitation. Invitations already there when Swarmhit first looked are not sent. Accept it with `POST /api/v1/users/invite/received/{invitation_id}`.