# description
A stored message (msg_…), inbound or outbound. GET /api/messages returns list rows: the stored fields plus per-message delivery counters, without bodies. GET /api/messages/:id (see message-detail) returns the same resource with bodies (text_body/html_body/headers_json) and without the list counters.

# properties.id.description
Message id (msg_…), stable across webhook retries and replays.

# properties.route_id.description
The route that handled an inbound message (rte_…); null for outbound sends.

# properties.mailbox_id.description
The mailbox the message is anchored to for access control; null when the address isn't on an owned domain.

# properties.direction.description
Whether MailKite received or sent the message.

# properties.from.description
Structured sender — the same shape the email.received webhook carries.

# properties.from.properties.name.description
Display name decoded from the MIME header. Omitted when the message carried none or the header names a different address. Sender-asserted and unverified.

# properties.to.description
Structured recipients — the same shape the email.received webhook carries.

# properties.to.items.properties.name.description
Display name decoded from the MIME header. Omitted when the message carried none or the header names a different address. Sender-asserted and unverified.

# properties.from_addr.description
Bare sender address from the SMTP envelope (MAIL FROM).

# properties.to_addr.description
Bare recipient address from the SMTP envelope (RCPT TO).

# properties.subject.description
Decoded subject line; null when the message had none.

# properties.text_body.description
Plain-text body. Detail responses only — list rows never carry bodies.

# properties.html_body.description
HTML body. Detail responses only — list rows never carry bodies.

# properties.headers_json.description
Stored MIME headers as a JSON string. Detail responses only.

# properties.spf.description
SPF verdict for an inbound message ('pass', 'fail', …); null when not checked.

# properties.dkim.description
DKIM verdict for an inbound message; null when not checked.

# properties.dmarc.description
DMARC verdict for an inbound message; null when not checked.

# properties.spam.description
Spam verdict for an inbound message ('ham', 'spam'); null when not checked.

# properties.thread_id.description
Conversation root id — pass it to send()'s inReplyTo to reply in-thread. null when the message carried no usable id.

# properties.send_status.description
Outbound send state: 'sending', 'sent', or 'failed'. Always 'sent' for inbound rows.

# properties.track_id.description
Open-tracking token for an outbound message when tracking was on; null = off.

# properties.received_at.description
When MailKite accepted the message (arrival time — stable across retries and replays), in Unix epoch milliseconds (UTC).

# properties.size_bytes.description
Stored byte size (headers + bodies; attachments sized separately).

# properties.delivery_count.description
How many webhook deliveries exist for this message. List rows only.

# properties.attempts.description
Max attempts across this message's deliveries. List rows only.

# properties.last_status_code.description
HTTP status of the most recent delivery. List rows only.

# properties.delivered_count.description
Deliveries in state 'delivered'. List rows only.

# properties.failed_count.description
Deliveries in state 'failed'. List rows only.

# properties.pending_count.description
Deliveries in state 'pending'. List rows only.

# properties.webhook_status.description
Rolled-up webhook state for the list pill ('delivered', 'failed', 'pending'); null when the message has no deliveries. List rows only.