GET /v1/messages returns, arranged the way the
web app arranges them.
Required permission: Messages → Read (messages:read)
A thread is a view over messages a key can already read, so it needs no
permission of its own.
List conversations
uids is the useful one: archiving a whole conversation is this list handed
straight to the bulk endpoint.
Ordering is by last activity, not by when the conversation started. An old
thread somebody just replied to belongs at the top, which is where it appears.
Read one conversation
mailbox (required) and folder parameters.
GET /v1/messages/{uid} for its text; a
thirty-message conversation with full HTML would be megabytes.
How conversations are worked out
Messages are grouped by theirMessage-ID, In-Reply-To and References
headers, transitively — so a reply joins the conversation whether it names its
parent, the whole chain, or only part of it, and two replies to the same
message stay in one conversation rather than splitting into two.
Conversations are computed per request, from the live mailbox. They are not
read from a stored index, so they are never stale — a message that arrived a
second ago is in the right conversation.The cost is one headers-only read of the folder per request: no bodies, no
attachments. Threading cannot be paginated at the source, because a
conversation’s messages are scattered through a folder by arrival time and any
window smaller than the folder produces threads missing their other halves. So
the whole folder is grouped and
limit/page apply to the conversations.Errors
See Errors for the full response shape.