Skip to the documentation
API

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.

GETapi.openemail.uk/contacts/{email}/threads

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
curl "$OE/contacts/ada%40example.com/threads?q=invoice&sort=newest" -H "$AUTH"
Response
{  "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.