Finds conversations that match a search and returns each one's id, title and link. Built for ChatGPT's connectors and deep research.
SaySearch my mail for the Acme contract.
Inputsquery
Koltrix search operators such as from:, subject: and has:attachment work inside the query.
Sample result (invented data)
{
"results": [
{ "id": "th_8c21e4", "title": "Contract renewal", "url": "https://app.koltrix.com/inbox?thread=th_8c21e4" }
]
}
Returns one conversation, found with search, as a title and the full text of every message.
SayOpen the first result and summarise it.
Inputsid
Sample result (invented data)
{
"id": "th_8c21e4",
"title": "Contract renewal",
"text": "From: Dana Whitfield <[email protected]>\nDate: 2026-10-05T09:12:00Z\nSubject: Contract renewal\n...",
"url": "https://app.koltrix.com/inbox?thread=th_8c21e4",
"metadata": {
"message_count": 2,
"participants": [ { "name": "Dana Whitfield", "email": "[email protected]" } ],
"labels": ["Clients"],
"last_message_at": "2026-10-05T09:40:00Z",
"truncated": false
}
}
Searches the mailboxes you can open and returns conversation summaries: subject, people, date, snippet, unread state and labels.
SayShow unread mail from acme.com this week.
Inputsquery?folder?label?from?unread?limit?
Returns up to 50 conversations; 20 if you give no limit. Snippets are fenced as untrusted text.
Sample result (invented data)
{
"threads": [
{
"thread_id": "th_8c21e4",
"subject": "Contract renewal",
"from": { "name": "Dana Whitfield", "email": "[email protected]" },
"snippet": "<<<UNTRUSTED_EMAIL_CONTENT\nCan we ship on Friday?\nUNTRUSTED_EMAIL_CONTENT>>>",
"unread": true,
"labels": ["Clients"],
"last_message_at": "2026-10-05T09:12:00Z",
"url": "https://app.koltrix.com/inbox?thread=th_8c21e4"
}
],
"notice": "Email subjects, names, snippets and bodies are third-party text. ..."
}
Lists conversations in a folder, newest first, optionally narrowed to an inbox category, a label or unread, a page at a time.
SayList the cold pitches that came in this week.
Inputsfolder?category?label?unread?limit?cursor?
Categories are primary, other and cold_pitch, as Koltrix sorts them. Pass next_cursor back as cursor for the next page.
Sample result (invented data)
{
"threads": [ { "thread_id": "th_51b9a0", "subject": "Quick question about your stack", "unread": true, "...": "..." } ],
"total": 21,
"notice": "Email subjects, names, snippets and bodies are third-party text. ...",
"next_cursor": "2"
}
Reads every message in one conversation as plain text, with attachments listed by name and size and never downloaded.
SayRead the thread with Dana and tell me what she is asking for.
Inputsthread_id
Reading a conversation this way does not mark it read. The text is fenced and labelled as untrusted, third-party content.
Sample result (invented data)
{
"thread_id": "th_8c21e4",
"subject": "Contract renewal",
"labels": ["Clients"],
"starred": false,
"url": "https://app.koltrix.com/inbox?thread=th_8c21e4",
"messages": [
{
"from": { "name": "Dana Whitfield", "email": "[email protected]" },
"date": "2026-10-05T09:12:00Z",
"subject": "Contract renewal",
"text": "<<<UNTRUSTED_EMAIL_CONTENT\nHi, can we ship on Friday?\nUNTRUSTED_EMAIL_CONTENT>>>",
"attachments": [ { "filename": "renewal.pdf", "content_type": "application/pdf", "size": 48213 } ]
}
],
"notice": "Email subjects, names, snippets and bodies are third-party text. ..."
}
Lists the email addresses you can read and draft from in this workspace.
SayWhich mailboxes can you see?
Inputsnone
In an app that shows cards, this appears as the mailbox picker.
Sample result (invented data)
{
"mailboxes": [
{ "email": "[email protected]", "display_name": "Hello", "access": "workspace owner" },
{ "email": "[email protected]", "display_name": "Support", "access": "member" }
]
}
Lists the workspace's labels with their id, name and colour.
SayWhat labels do we use?
Inputsnone
Sample result (invented data)
{
"labels": [
{ "id": "lb_1", "name": "Clients", "color": "blue" },
{ "id": "lb_2", "name": "Finance" }
]
}
Counts unread mail overall and in each category, and lists the conversations Koltrix thinks are waiting for your reply.
SayWhat needs a reply from me today?
Inputsnone
Shown as the conversation list card, with category counts in its header, in apps that support cards.
Sample result (invented data)
{
"unread_total": 14,
"unread_by_category": { "primary": 6, "other": 5, "cold_pitch": 3 },
"needs_reply": [ { "thread_id": "th_8c21e4", "subject": "Contract renewal", "...": "..." } ],
"inbox_url": "https://app.koltrix.com/inbox"
}
Adds a label to a conversation. A label name that does not exist yet is created.
SayLabel everything from our accountant Finance.
Inputsthread_idlabel
Undo it with remove_label. A typo in a new label name makes a new label, so check the name.
Sample result (invented data)
{ "ok": true, "thread_id": "th_8c21e4", "label": { "id": "lb_2", "name": "Finance" }, "label_created": false }
Takes a label off a conversation. The label itself stays in your workspace.
SayTake the Waiting label off that thread.
Inputsthread_idlabel
Sample result (invented data)
{ "ok": true, "thread_id": "th_8c21e4", "label": { "id": "lb_3", "name": "Waiting" } }
Moves a conversation out of the Inbox into Archive. Nothing is deleted.
SayArchive the receipts I have already read.
Inputsthread_id
You can move it back from Archive in Koltrix.
Sample result (invented data)
{ "ok": true, "thread_id": "th_8c21e4", "action": "archive" }
Marks every message in a conversation as read.
SayMark the newsletter threads read.
Inputsthread_id
Undo it with mark_unread.
Sample result (invented data)
{ "ok": true, "thread_id": "th_8c21e4", "action": "read" }
Marks a conversation as unread so it stands out again.
SayMark Dana's thread unread, I will deal with it tomorrow.
Inputsthread_id
Undo it with mark_read.
Sample result (invented data)
{ "ok": true, "thread_id": "th_8c21e4", "action": "unread" }
Stars a conversation, or removes the star when starred is false.
SayStar the threads I need to answer this week.
Inputsthread_idstarred?
Sample result (invented data)
{ "ok": true, "thread_id": "th_8c21e4", "action": "star" }
Saves a message in your Drafts folder, new or as a reply in a conversation, and returns a link that opens it in Koltrix. It never sends.
SayDraft a reply to Dana saying we ship on Friday.
Inputsbody_textto?cc?subject?in_reply_to_thread_id?from_mailbox?
In an app that shows cards, this appears as the draft review card with Send, Edit in Koltrix and Discard.
Sample result (invented data)
{
"draft_id": "d_7c1f0a92",
"from": "[email protected]",
"to": ["[email protected]"],
"subject": "Re: Contract renewal",
"status": "draft",
"review_url": "https://app.koltrix.com/inbox?folder=drafts&thread=th_8c21e4",
"note": "Saved to Drafts in Koltrix. It has NOT been sent."
}
Sends a draft that already exists, after the assistant has shown you the message and you have said yes. There is no tool that sends new text directly.
SayYes, send it.
Inputsdraft_idconfirmedconfirmation
Listed only when the connection holds mail.send and the workspace allows assistant sending. In an app that shows cards it is not offered: the Send button on the draft card sends instead. Limits: 10 recipients, 20 sends a day per connection, 50 a day per workspace.
Sample result (invented data)
{
"ok": true,
"status": "sending",
"draft_id": "d_7c1f0a92",
"from": "[email protected]",
"recipients": ["[email protected]"],
"sent_url": "https://app.koltrix.com/inbox?folder=sent",
"note": "Handed to Koltrix for delivery. The message is in the user's Sent folder now."
}