Get a mailbox message
Changed onReturns one message from the authenticated mailbox. Responses include a weak ETag header. When attachment metadata includes short-lived download URLs, a conditional request may return 200 even when the stable message ETag matches so the response can renew expired URLs.
Request
- Base URL: https://app.sendmux.ai/api/v1
- URL: https://app.sendmux.ai/api/v1/mailbox/messages/{message_id}
- Auth: one of:
- HTTP bearer
- OAuth 2 (authorization code, authorization URL https://app.sendmux.ai/oauth/authorize, token URL https://app.sendmux.ai/oauth/token, scopes: mailbox.read)
Path parameters
Message ID.
Query parameters
Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox.
Headers
Weak ETag from a previous response. Returns 304 when unchanged.
Response
Message
Example response
{
"meta": {
"request_id": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"data": {
"attachments": [
{
"content_type": "application/pdf",
"disposition": "attachment",
"download_url": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...",
"filename": "invoice.pdf",
"size_bytes": 12345
}
],
"bcc": [
{
"email": "agent@example.com",
"name": "Support"
}
],
"cc": [
{
"email": "agent@example.com",
"name": "Support"
}
],
"from": {
"email": "agent@example.com",
"name": "Support"
},
"in_reply_to": [
"20260918.0009@example.com"
],
"keywords": [
"$seen",
"$flagged",
"agent_triaged"
],
"message_id": [
"20260919.0001@example.com"
],
"references": [
"20260917.0001@example.com",
"20260918.0009@example.com"
],
"reply_to": [
{
"email": "agent@example.com",
"name": "Support"
}
],
"to": [
{
"email": "agent@example.com",
"name": "Support"
}
]
}
}Changes
- info
removed
subschema #2from the//response propertyallOflist for the response status - info
added
subschema #2to the//response propertyanyOflist for the response status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status
- info
- breaking
the
/response's property type changed from no type toobjectfor status - info
added the optional property
//to the response with the status - info
removed
subschema #2from the/response propertyallOflist for the response status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status - info
added the required property
//to the response with the status
- breaking