Inbound · MachineMail Docs
| Method | Path | Summary |
|---|---|---|
POST |
/inbound/raw |
Inject Raw Message |
Inject Raw Message
http
POST /inbound/raw
Stores a raw RFC 5322 message (the request body, any Content-Type, at most 40 MB) as if it had been received, once per recipient inbox in the credential’s scope. The recipient is X-Recipient, otherwise every To and Cc address.
Injected messages are marked received_via: "raw". Their trust report never believes the authentication results they carry (headers and provider verdicts are ignored): authentication is none, so the trust level is at most unknown.
An unrestricted key (*) does not imply inbound_raw; it must be granted by name.
Injected mail counts toward plan limits like any other inbound mail, even when the trust layer marks it spam or quarantined (its content is yours). On the Free plan, a copy past the monthly or daily allowance (or past storage) is held: it is listed in held, not in messages, and delivered when the allowance resets or after an upgrade.
Authentication: Authorization: Bearer <api key> or the dashboard mm_session cookie.
Headers
| Field | Description |
|---|---|
X-Recipient |
string |
Request body
Content type: message/rfc822. Required.
Type: string (binary)
Response
201 Stored (or held) (application/json)
| Field | Description |
|---|---|
count |
integer Required |
messages |
Message[] Required |
errors |
object[] |
held |
object[] |
Each item of messages is a Message:
| Field | Description |
|---|---|
inbox_id |
string Required |
thread_id |
string Required |
message_id |
string Required |
labels |
string[] Required |
timestamp |
string (date-time) Required |
from |
string Required |
to |
string[] Required |
cc |
string[] |
bcc |
string[] |
subject |
string |
preview |
string |
attachments |
Attachment[] |
in_reply_to |
string |
references |
string[] |
headers |
Record<string, string> |
authentication_results |
MessageAuthenticationResults |
size |
integer Required |
updated_at |
string (date-time) Required |
created_at |
string (date-time) Required |
pod_id |
string Required |
direction |
`"inbound" |
delivery_status |
`"sent" |
trust_level |
`"verified" |
reply_to |
string[] |
text |
string |
html |
string |
extracted_text |
string |
extracted_html |
string |
received_via |
"raw" |
held_at |
string (date-time) |
trust |
TrustReport |
Errors
| Status | Meaning |
|---|---|
400 |
Invalid request |
401 |
Missing, invalid, expired or revoked credential. |
402 |
Free plan: organization limit reached. |
403 |
Lacks permission or scope for this request. |
404 |
Not found. |
500 |
Unexpected server error. |
Example
Request
curl -X POST "https://api.machinemail.dev/inbound/raw" \
-H "Authorization: Bearer $MACHINEMAIL_API_KEY" \
-H "Content-Type: message/rfc822" \
--data-binary @body
Response 201
{
"count": 1,
"messages": [
{
"inbox_id": "agent@machinemail.dev",
"thread_id": "thd_01k6x3a1fz0000c9k5ns1x4e6g",
"message_id": "msg_01k6x3a1g00000d0m6pt2y5f7h",
"labels": ["UNREAD"],
"timestamp": "2026-10-01T12:00:00.000Z",
"from": "Support Agent <agent@machinemail.dev>",
"to": ["customer@example.com"],
"cc": ["team@example.com"],
"bcc": ["audit@example.com"],
"subject": "Order #1042",
"preview": "Thanks for the quick reply.",
"attachments": [
{
"attachment_id": "att_01k6x3h7qv0000m7v3xb9f2p4r",
"filename": "invoice.pdf",
"size": 2048,
"content_type": "application/pdf",
"content_disposition": "string",
"content_id": "string"
}
],
"in_reply_to": "msg_01k6x3a1g00000d0m6pt2y5f7h",
"references": ["string"],
"headers": {
"key": "value"
},
"authentication_results": {
"spf": "pass",
"dkim": "pass",
"dmarc": "pass",
"spf_domain": "string",
"dkim_domain": "string",
"dmarc_domain": "string",
"arc_sealer": "string"
},
"size": 2048,
"updated_at": "2026-10-01T12:00:00.000Z",
"created_at": "2026-10-01T12:00:00.000Z",
"pod_id": "pod_01k6x2m9qd0001b8j4mr0w3d5f",
"direction": "inbound",
"delivery_status": "sent",
"trust_level": "verified",
"reply_to": ["agent@machinemail.dev"],
"text": "Thanks for the quick reply.",
"html": "<p>Thanks for the quick reply.</p>",
"extracted_text": "Thanks for the quick reply.",
"extracted_html": "<p>Thanks for the quick reply.</p>",
"received_via": "raw",
"held_at": "2026-10-01T12:00:00.000Z",
"trust": {
"level": "verified",
"score": 0.8,
"basis": "trusted_domain",
"authentication": {
"spf": "pass",
"dkim": "pass",
"dmarc": "pass",
"aligned": false
},
"sender": {
"address": "agent@machinemail.dev",
"domain": "example.com",
"prior_correspondence": false,
"on_allow_list": false,
"on_block_list": false,
"free_mail_provider": false,
"trusted_domain": {
"id": "string",
"domain": "example.com",
"scope": "org"
},
"trusted_domain_shadowed_by": "block"
},
"content": {
"text": "Thanks for the quick reply.",
"html": "<p>Thanks for the quick reply.</p>",
"segments": [{}],
"hidden_text_found": false,
"zero_width_found": false,
"tracking_pixels": 1,
"agent_instructions_detected": false,
"warnings": ["string"]
},
"links": [
{
"href": "string",
"text": "Thanks for the quick reply.",
"final_url": "https://example.com",
"domain": "example.com",
"display_mismatch": false,
"shortener": false,
"suspicious": false,
"reasons": []
}
],
"attachments": [
{
"attachment_id": "att_01k6x3h7qv0000m7v3xb9f2p4r",
"filename": "invoice.pdf",
"content_type": "application/pdf",
"risk": "low",
"reasons": [],
"extracted_text": "Thanks for the quick reply."
}
],
"classification": {
"is_spam": 0.8,
"is_phishing": 0.8,
"contains_instructions_to_agent": 0.8,
"requests_credentials_or_payment": 0.8,
"urgency": 0.8,
"category": "transactional",
"language": "string",
"backend": "string",
"input_hash": "string",
"cached": false
},
"provider_verdicts": {
"spam": "pass",
"virus": "pass",
"source": "string"
},
"reasons": ["string"],
"computed_at": "2026-10-01T12:00:00.000Z"
}
}
],
"errors": [
{
"recipient": "string",
"message": "string"
}
],
"held": [
{
"recipient": "string",
"reason": "monthly"
}
]
}