Skip to the documentation
API

Team inbox

Every operation in this group: what it accepts, what it returns and the errors it can answer with.

Operations

Work a shared address as a team: give a thread to one person, mark it done, and talk about it in comments the sender never sees. Done archives the thread for everyone, and a new reply brings it back to the inbox. Only people who can see a thread can be given it or mentioned on it: the workspace owner, members who reach every address, and members who hold its address or its domain.

GET/threads/{id}/team

Read who has a thread

Scopesthreads:readReads

Who the thread is assigned to and who marked it done, how many comments it has, who else is writing a reply right now, and everyone who can see it, the people it can be given to or who can be mentioned on it.

Requires the threads:read scope.

Path parameters

idstringRequired

The thread, as GET /threads returns it.

Returns

The thread as the team sees it.

Errors

The errors every operation can return400401403404422429500Error catalog

Also available in

TypeScript
threads.getTeam()
Python
threads.get_team()
Ruby
threads.get_team
PHP
threads->getTeam
Go
Threads.GetTeam
Java
threads().getTeam
C#
Threads.GetTeamAsync
CLI
openemail threads get-team
MCP
getThreadTeam

PUT/threads/{id}/assignee

Assign a thread

Scopesthreads:writeChanges data

Gives the thread to one person, who is emailed unless they assigned it to themselves. assigneeId has to be somebody who can see the thread, or the call is a 422 invalid_parameter on assigneeId. null leaves it with nobody.

Requires the threads:write scope.

Path parameters

idstringRequired

The thread, as GET /threads returns it.

Request body

assigneeIdstringRequired

The person to assign the thread to, or null to leave it with nobody.

Can be null1 to 128 characters

Returns

Who has the thread now.

Errors

The errors every operation can return400401403404422429500Error catalog

Also available in

TypeScript
threads.assign()
Python
threads.assign()
Ruby
threads.assign
PHP
threads->assign
Go
Threads.Assign
Java
threads().assign
C#
Threads.AssignAsync
CLI
openemail threads assign
MCP
assignThread

DELETE/threads/{id}/assignee

Unassign a thread

Scopesthreads:writeDeletes

Leaves the thread with nobody.

Requires the threads:write scope.

Path parameters

idstringRequired

The thread, as GET /threads returns it.

Returns

The thread, assigned to nobody.

Errors

The errors every operation can return400401403404422429500Error catalog

Also available in

TypeScript
threads.unassign()
Python
threads.unassign()
Ruby
threads.unassign
PHP
threads->unassign
Go
Threads.Unassign
Java
threads().unassign
C#
Threads.UnassignAsync
CLI
openemail threads unassign
MCP
assignThread

POST/threads/{id}/done

Mark a thread done

Scopesthreads:writeChanges data

Archives the thread for everyone and records who marked it done. A new reply brings it back to the inbox.

Requires the threads:write scope.

Path parameters

idstringRequired

The thread, as GET /threads returns it.

Returns

The thread, with who marked it done.

Errors

The errors every operation can return400401403404422429500Error catalog

Also available in

TypeScript
threads.markDone()
Python
threads.mark_done()
Ruby
threads.mark_done
PHP
threads->markDone
Go
Threads.MarkDone
Java
threads().markDone
C#
Threads.MarkDoneAsync
CLI
openemail threads mark-done
MCP
markThreadsDone

POST/threads/{id}/reopen

Reopen a thread

Scopesthreads:writeChanges data

Moves a done thread back to the inbox for everyone.

Requires the threads:write scope.

Path parameters

idstringRequired

The thread, as GET /threads returns it.

Returns

The thread, open again.

Errors

The errors every operation can return400401403404422429500Error catalog

Also available in

TypeScript
threads.reopen()
Python
threads.reopen()
Ruby
threads.reopen
PHP
threads->reopen
Go
Threads.Reopen
Java
threads().reopen
C#
Threads.ReopenAsync
CLI
openemail threads reopen
MCP
reopenThreads

GET/threads/{id}/comments

List the comments on a thread

Scopesthreads:readReads

Oldest first. Comments are the team’s: everyone who can see the thread reads them, and the sender never does.

Requires the threads:read scope.

Path parameters

idstringRequired

The thread, as GET /threads returns it.

Returns

Every comment on the thread, oldest first.

Errors

The errors every operation can return400401403404422429500Error catalog

Also available in

TypeScript
threads.listComments()
Python
threads.list_comments()
Ruby
threads.list_comments
PHP
threads->listComments
Go
Threads.ListComments
Java
threads().listComments
C#
Threads.ListCommentsAsync
CLI
openemail threads list-comments
MCP
listThreadComments

POST/threads/{id}/comments

Comment on a thread

Scopesthreads:writeChanges data

Adds a comment for the team. Everybody in mentions is emailed, and each has to be able to see the thread, or the call is a 422 invalid_parameter on mentions.

Requires the threads:write scope.

Path parameters

idstringRequired

The thread, as GET /threads returns it.

Request body

bodystringRequired

What the comment says. The people on the thread see it; the sender never does.

1 to 10000 characters
mentionsstring[]

The ids of people the comment mentions. Each has to be able to see the thread, and each is emailed.

Up to 20 itemsDefault[]

Returns

The comment.

Errors

The errors every operation can return400401403404422429500Error catalog

Also available in

TypeScript
threads.createComment()
Python
threads.create_comment()
Ruby
threads.create_comment
PHP
threads->createComment
Go
Threads.CreateComment
Java
threads().createComment
C#
Threads.CreateCommentAsync
CLI
openemail threads create-comment
MCP
addThreadComment

PATCH/threads/{id}/comments/{commentId}

Change a comment

Scopesthreads:writeChanges data

Replaces its text and its mentions. Only its author can change it, and anybody newly mentioned is emailed. Someone else’s comment, or one on another thread, is a 404.

Requires the threads:write scope.

Path parameters

idstringRequired

The thread, as GET /threads returns it.

commentIdstringRequired

The id of a comment on that thread.

Request body

bodystringRequired

What the comment says. The people on the thread see it; the sender never does.

1 to 10000 characters
mentionsstring[]

The ids of people the comment mentions. Each has to be able to see the thread, and each is emailed.

Up to 20 itemsDefault[]

Returns

The comment as it is now.

Errors

The errors every operation can return400401403404422429500Error catalog

Also available in

TypeScript
threads.updateComment()
Python
threads.update_comment()
Ruby
threads.update_comment
PHP
threads->updateComment
Go
Threads.UpdateComment
Java
threads().updateComment
C#
Threads.UpdateCommentAsync
CLI
openemail threads update-comment
MCP
updateThreadComment

DELETE/threads/{id}/comments/{commentId}

Delete a comment

Scopesthreads:writeDeletes

Its author can delete it, and so can the workspace owner. Gone for good.

Requires the threads:write scope.

Path parameters

idstringRequired

The thread, as GET /threads returns it.

commentIdstringRequired

The id of a comment on that thread.

Returns

Errors

The errors every operation can return400401403404422429500Error catalog

Also available in

TypeScript
threads.deleteComment()
Python
threads.delete_comment()
Ruby
threads.delete_comment
PHP
threads->deleteComment
Go
Threads.DeleteComment
Java
threads().deleteComment
C#
Threads.DeleteCommentAsync
CLI
openemail threads delete-comment
MCP
deleteThreadComment

Objects

DeletedThreadCommentobject

objectstring
One of"thread_comment"
idstring
threadIdstring
deletedboolean
One oftrue

TeamMemberobject

objectstringRequired
One of"team_member"
idstringRequired

Their user id, what assigneeId and mentions take.

namestringRequired
Can be null
emailstringRequired

ThreadAssignmentobject

objectstringRequired
One of"thread_assignment"
threadIdstringRequired
assigneeTeamMemberRequired
assignedByTeamMemberRequired
assignedAtstringRequired
Can be nullFormatdate-time
doneByTeamMemberRequired
doneAtstringRequired
Can be nullFormatdate-time

ThreadCommentobject

objectstringRequired
One of"thread_comment"
idstringRequired
threadIdstringRequired
authorTeamMemberRequired
bodystringRequired
Up to 10000 characters
mentionsTeamMember[]Required
createdAtstringRequired
Formatdate-time
editedAtstringRequired
Can be nullFormatdate-time

ThreadTeamobject

objectstringRequired
One of"thread_team"
threadIdstringRequired
assignmentThreadAssignmentRequired
commentCountintegerRequired
replyingTeamMember[]Required

Others writing a reply in the app in the last 30 seconds.

teamTeamMember[]Required

Everyone who can see the thread.