List conversations with a contact
Every thread the address wrote or was written to, in every folder: the Mail tab on a contact in the app. The address does not have to be a saved contact. `limit` goes up to 100 and defaults to 25, and `nextCursor` goes back as `cursor` while `hasMore` is true.
Runs the real call against your workspace, with your own key.
GET /contacts/{email}/threads
Every thread the address wrote or was written to, in every folder: the Mail tab on a contact in the app. The address does not have to be a saved contact. limit goes up to 100 and defaults to 25, and nextCursor goes back as cursor while hasMore is true.
Example
Needs threads:read, because it reads mail rather than the contact.
curl "$OE/contacts/ada%40example.com/threads?q=invoice&sort=newest" -H "$AUTH"{ "object": "list", "data": [ { "object": "thread", "id": "thr_5d31c2a8…", "subject": "Invoice 2026-09", "from": { "name": "Ada Lovelace", "email": "[email protected]" }, "receivedAt": "2026-09-22T16:04:11.000Z", "messageCount": 3, "hasUnread": true, "labels": [{ "id": "INBOX", "name": "Inbox" }] } ], "hasMore": false, "nextCursor": null}q searches inside those threads with the mailbox search syntax. sort is newest (the default), oldest, sender or subject. Pass cursor back with the same q and sort.
Each row is a summary. GET /threads/{id} reads the messages behind it.