email.sent
A message was handed to the mail provider: acceptance, not delivery.
email.sentWebhookAIInbx-Signaturestringrequiredt=<unix seconds>,v1=<hmac>: an HMAC-SHA256 of the timestamp and the raw body, with one v1 per secret while a rotation's grace period runs.
AIInbx-Event-IDstringrequiredThe event id, id in the body.
application/jsonidstringrequiredThe event, evt_…. Stable across retries and replays: deduplicate on it.
typestringrequiredcreated_atstring<date-time>requiredWhen the event happened.
space_idstring | nullrequiredWhich space a resource is in. Null is the workspace itself — what every resource of a workspace that has no spaces says.
Show propertiesHide properties
stringnulldataobjectrequiredShow propertiesHide properties
email_idstringrequiredThe email, eml_…. Retrieve it for bodies and headers.
message_idstringrequiredThe RFC Message-ID, without angle brackets.
thread_idstringrequiredThe conversation it belongs to.
domain_idstring | nullrequiredThe domain the message went through: received on or sent from. Null when it went through a mailbox.
Show propertiesHide properties
stringnullmailbox_idstring | nullrequiredThe mailbox the message went through: synced from or sent with. Null when it went through a domain.
Show propertiesHide properties
stringnullfromstring<email>requiredThe sender.
tostring<email>[]requiredThe recipients on the envelope.
subjectstringrequiredThe subject line.
snippetstringrequiredA short preview of the body.
attachmentsobject[]Show propertiesHide properties
objectidstringrequiredfilenamestringrequiredcontent_typestringrequiredsizeintegerrequiredpreparationstringrequiredreadypartialunsupportedfailedemailobject | nullOnly on an endpoint whose payload is full: the email, exactly as GET /emails/{id}?include=attachment_content returns it. Read when the delivery is sent, so a retry carries freshly signed URLs. Null when it could not be included — the message no longer exists, or the body would pass 4 MB with it; read the email by email_id instead.
Show propertiesHide properties
idstringrequiredthread_idstringrequiredspace_idstring | nullrequiredWhich space a resource is in. Null is the workspace itself — what every resource of a workspace that has no spaces says.
Show propertiesHide properties
stringnulldirectionstringrequiredinboundoutboundstatusstringrequireddraftscheduledcanceleddiscardedqueuedsendingsentdeliveredbouncedcomplainedfailedreceivedfromobjectrequiredShow propertiesHide properties
namestring | nullShow propertiesHide properties
stringnulladdressstring<email>requiredtostring<email>[]requiredccstring<email>[]requiredbccstring<email>[]requiredreply_tostring<email>[]requiredsubjectstringrequiredsnippetstringrequiredhtmlstring | nullrequiredShow propertiesHide properties
stringnulltextstring | nullrequiredShow propertiesHide properties
stringnullcategorystring | nullrequiredShow propertiesHide properties
stringnullverdictsobject | nullrequiredShow propertiesHide properties
spamstring | nullrequiredPASS, FAIL, GRAY or PROCESSING_FAILED. Null when this check was not reported.
Show propertiesHide properties
stringnullspfstring | nullrequiredPASS, FAIL, GRAY or PROCESSING_FAILED. Null when this check was not reported.
Show propertiesHide properties
stringnulldkimstring | nullrequiredPASS, FAIL, GRAY or PROCESSING_FAILED. Null when this check was not reported.
Show propertiesHide properties
stringnulldmarcstring | nullrequiredPASS, FAIL, GRAY or PROCESSING_FAILED. Null when this check was not reported.
Show propertiesHide properties
stringnullnullsuppression_keystring | nullrequiredShow propertiesHide properties
stringnullmessage_idstringrequiredThe RFC Message-ID, without angle brackets.
in_reply_tostring | nullrequiredThe Message-ID of the message this one answers, without angle brackets. Null when it answers none.
Show propertiesHide properties
stringnullidempotency_keystring | nullrequiredShow propertiesHide properties
stringnullcreated_atstring<date-time>requiredWhen it took its place in its thread. A draft's moves to when it is sent — draft.drafted_at keeps when it was written.
scheduled_atstring<date-time> | nullrequiredShow propertiesHide properties
string<date-time>nullsent_atstring<date-time> | nullrequiredShow propertiesHide properties
string<date-time>nulldraftobject | nullrequiredShow propertiesHide properties
drafted_atstring<date-time>requirededited_atstring<date-time> | nullrequiredWhen its content last changed before it was sent. Null when it went as written.
Show propertiesHide properties
string<date-time>nullreview_urlstring<uri> | nullrequiredWhere a person reviews, edits and sends it in the console.
Show propertiesHide properties
string<uri>nullnullattachmentsobject[]requiredShow propertiesHide properties
objectidstringrequiredfilenamestringrequiredcontent_typestringrequiredsizeintegerrequiredcidstring | nullrequiredShow propertiesHide properties
stringnulldownload_urlstring<uri> | nullrequiredSigned URL for the original bytes, good until expires_at. Opens without the API key, so treat it as a secret — and do not send the key to it: storage answers a request that carries an Authorization header with 400. To keep a reference, store the attachment id and call GET /attachments/{id}. Null when the bytes are gone.
Show propertiesHide properties
string<uri>nullexpires_atstring<date-time> | nullrequiredWhen download_url and preparation.content_url stop working — an hour after the response. Read the email again, or call the download endpoint with the attachment ID, for fresh ones.
Show propertiesHide properties
string<date-time>nullpreparationobject | nullrequiredShow propertiesHide properties
statusstringrequiredreadypartialunsupportedfailedformatstring | nullrequiredShow propertiesHide properties
stringnullpagesinteger | nullrequiredShow propertiesHide properties
integernullwarningsstring[]requiredcontent_urlstring<uri> | nullrequiredSigned URL for the prepared text, good until the attachment's expires_at. Opens without the API key — and only without it: storage answers a request that carries an Authorization header with 400. Null when there is no prepared text.
Show propertiesHide properties
string<uri>nulltextstring | nullShow propertiesHide properties
stringnullnullstripped_textstring | nullrequiredWhat this message says: typed text only, quoted conversation and signature removed. A signature the thread has not seen from this sender stays — it is where the name and role are.
Show propertiesHide properties
stringnullstripped_htmlstring | nullrequiredThe HTML part with the same cut as stripped_text: quoted conversation and repeated signature removed, an answer typed into the quote kept under the line it answers. Null when the message has no HTML part or its markup could not be matched to the cut.
Show propertiesHide properties
stringnullsegmentsobject[]requiredShow propertiesHide properties
objectkindstringrequiredwrittenquotedsignaturetextstringrequiredreferencesstring[]requiredThe Message-IDs of the conversation so far, oldest first, without angle brackets.
headersobject[]requiredShow propertiesHide properties
objectnamestringrequiredvaluestringrequiredeventsobject[]requiredShow propertiesHide properties
objectidstringrequiredtypestringrequireddraftededitedscheduledcanceleddiscardedqueuedreplayedsentdelivereddeferredbouncedcomplainedfailedatstring<date-time>requiredrecipientstring<email> | nullrequiredShow propertiesHide properties
string<email>nulldetailstring | nullrequiredShow propertiesHide properties
stringnullengagementsobject[]requiredShow propertiesHide properties
objectkindstringrequiredopenclickatstring<date-time>requiredurlstring<uri> | nullrequiredShow propertiesHide properties
string<uri>nulluser_agentstring | nullrequiredShow propertiesHide properties
stringnullbotbooleanrequiredTrue when a proxy, security scanner or script made the hit rather than the recipient.
bot_reasonstring | nullrequiredWhy: privacy_proxy is Apple Mail Privacy Protection fetching on arrival, script an HTTP library, known_bot a scanner or link expander that names itself, stale_browser a browser build nobody runs any more, too_fast within seconds of delivery, sooner than a person could act. Null when bot is false. More reasons may be added; treat one you do not know as a bot.
Show propertiesHide properties
stringnullnullsuppression_keystring | nullrequiredThe suppression list the send named, when it named one.
Show propertiesHide properties
stringnullAcknowledges the delivery. Anything else, or no answer within 10 seconds, is retried; a Retry-After header is honoured over the standard backoff.