Skip to the documentation
MCP server

Workspace and people

Who is asking, what they may do, and who else is here.

Workspace and people tools

ToolWhat it does
whoAmIWhat you may do in the mailbox that is currently active: the role you hold, whether you own the workspace, and every permission that role grants.
listRolesThe roles this workspace defines and what each one grants, with how many people and API keys hold each, the fact that says whether changing one is safe. Returned a page at a time.
listWorkspaceMembersWho is in the workspace, the role each of them holds, and which addresses they were given. Returned a page at a time.
listInvitationsThe invitations nobody has accepted yet: the role and the addresses each will grant, when it expires, and whether the email reached them. Returned a page at a time.
revokeInvitationWithdraw a waiting invitation. Its link stops working at once. A chat always asks first.
resendInvitationSend a waiting invitation again, with a new link and fourteen more days.
getRoleOne role in full: what it is for, every permission it grants and who holds it.
listPermissionsEvery permission a role can grant, its group, and whether a key or an app can hold it.
createRoleCreate a role from a name and the permissions it grants, never more than you hold yourself.
updateRoleRename a role, change its description, or replace its whole list of permissions. The owner role cannot be changed.
deleteRoleDelete a role and move whoever holds it to the role in reassignTo. A chat always asks first.
inviteMemberInvite somebody by email with a role and, if you like, addresses or whole domains. They join once they accept.
setMemberRoleGive a member another role. Their addresses and domains stay as they are.
removeMemberTake somebody out of the workspace with every grant they hold. A chat always asks first.
grantMemberAddressGive a member one address, as member or viewer, or change their access to it.
revokeMemberAddressTake one address back from a member. A chat always asks first.
grantMemberDomainGive a member a whole domain, every address on it including ones added later.
revokeMemberDomainTake a whole domain back from a member. A chat always asks first.
getSettingsThe settings the app shows under Settings, for the workspace and your account, or for one address with address.
updateSettingsChange settings by the names getSettings reports, the sender name and postal address of the marketing footer included. With address, an address or a catch-all gets its own signature, tracking, external images, trusted senders and blocklist, and @domain its own external images, trusted senders and blocklist. null clears one.
getOutOfOfficeThe out of office replies saved in the workspace, or the one of a single address or catch-all.
setOutOfOfficeSave the out of office reply of an address or a catch-all, with optional start and end times. Each sender is answered once per away period.
clearOutOfOfficeRemove the saved out of office reply of an address or a catch-all.
listSignaturesThe signatures of every address, or of one address or catch-all: the name, the HTML and what each is the default for.
createSignatureAdd a named signature to an address or a catch-all. The first one becomes its default for new mail and for replies.
updateSignatureRename a signature, rewrite its HTML, or make it the default for new mail or for replies and forwards.
deleteSignatureDelete a signature for good. A chat always asks first.
copySignaturePut a copy of a signature on other addresses, replacing the one with the same name there.
listWorkspaceSecurityEventsThe security log of the workspace, newest first: invitations, members, roles, the two-factor requirement, passwords set for an address and directory sync, each with who did it. Returned a page at a time.

Read whoAmI before telling somebody a thing cannot be done. A tool you lack the permission for is not in your tool list AT ALL, so an absent tool is far more often a permission you do not hold than a feature this server is missing. It answers for the ACTIVE connection, so the answer changes after setActiveConnection.

whoAmI needs no permission. listRoles, getRole and listPermissions sit behind roles:read and the tools that change a role behind roles:write. listWorkspaceMembers and listInvitations sit behind members:read, and the tools that invite, change or remove somebody, or give and take back an address or a domain, behind members:write. Describing yourself is not a statement about anybody else, and the tools that name colleagues are gated like every other statement about somebody else.

A ROLE and an ADDRESS GRANT are two different things, and listWorkspaceMembers reports both per person because neither answers for the other. The role is what somebody may do, the addresses are what they may do it to, and a person can hold a role with no addresses (they open an empty mailbox, unless the role holds addresses:all, which reaches every address without a grant) or an address with no role row at all, which is an older grant that implies a role rather than one anybody chose. The workspace owner is not listed: they are the account the workspace belongs to and hold everything.

roles:write and members:write reach the whole workspace, so only a client connected with every address can be given them, and the tools that change roles and members act exactly as /roles and /members on the REST API do. A role can never grant more than your client may use itself, and anybody but the owner can only give addresses and domains they reach themselves. Anybody but the owner is refused resendInvitation when the invitation’s role holds a permission their client may not use, a console-only one included, or when it gives access to addresses or domains they do not reach themselves.

deleteRole, removeMember, revokeMemberAddress and revokeMemberDomain always show the person a card to approve in the assistant, and a client should ask first as well. The other tools that change roles and members run straight away when the person asked for the change.

Some tools on this server make a change the REST API guards with a verification code, and ask for the same code. Until the client has verified a code in the last 60 minutes, or the person has chosen Allow changes for 60 minutes on it in Account → Connected apps, such a tool answers with a result that starts Refused (step_up_required): and changes nothing. emptyAudience never asks for a code. The API Authentication page lists every tool that asks, and shows how to ask for a code and verify it.

listWorkspaceSecurityEvents sits behind members:read, like the other tools that name colleagues. The log is only ever read: no tool changes an entry or removes one.

Reference

whoAmI

No scopeMCP only, not in the app's assistantToolkitcore

What you are allowed to do in the mailbox that is currently active: the role you hold, whether you own the workspace, and every permission that role grants. Read this before telling somebody a thing cannot be done. Tools you do not hold the permission for are not in your tool list at all, so an absent tool is more often a permission you lack than a feature this server is missing. It answers for the ACTIVE connection, so the answer changes after setActiveConnection. An app connected over OAuth also gets a last line saying how much of that the person gave the app, which addresses it reaches, and until when.

Inputs

Takes no input.

Also available in

API
GET /addressesGET /keys/self
TypeScript
nextmail.addresses.list()nextmail.addresses.listAll()nextmail.addresses.iterate()nextmail.me.get()
Python
addresses.list()addresses.list_all()addresses.iterate()me.get()
Ruby
addresses.listaddresses.list_alladdresses.iterateme.get
PHP
addresses->listaddresses->listAlladdresses->iterateme->get
Go
Addresses.ListAddresses.ListAllAddresses.IterateMe.Get
Java
addresses().listaddresses().listAlladdresses().iterateme().get
C#
Addresses.ListAsyncAddresses.ListAllAsyncAddresses.IterateAsyncMe.GetAsync

listRoles

Scopesroles:readThe app's assistant runs it without askingToolkitworkspace

The roles this workspace defines and what each one grants. A role says what a person may DO, and with one exception it does not say which addresses they may do it to: that is a separate per-address grant, which listWorkspaceMembers reports. The exception is addresses:all, which reaches every address on every domain, including ones added later, for everybody who holds the role. Seeded roles come first; a workspace starts with six and may have renamed or deleted any but Owner, so do not assume a fixed set. Reports how many people and API keys hold each one, which is the fact that says whether changing it is safe. One page at a time: when more follow, the last line gives a cursor to pass back for the next page.

Inputs

limitinteger
At least 1At most 100
cursorstring

Also available in

API
GET /domainsGET /rolesGET /roles/permissions
TypeScript
nextmail.domains.list()nextmail.domains.listAll()nextmail.domains.iterate()nextmail.roles.list()nextmail.roles.listAll()nextmail.roles.iterate()nextmail.roles.listPermissions()
Python
domains.list()domains.list_all()domains.iterate()roles.list()roles.list_all()roles.iterate()roles.list_permissions()
Ruby
domains.listdomains.list_alldomains.iterateroles.listroles.list_allroles.iterateroles.list_permissions
PHP
domains->listdomains->listAlldomains->iterateroles->listroles->listAllroles->iterateroles->listPermissions
Go
Domains.ListDomains.ListAllDomains.IterateRoles.ListRoles.ListAllRoles.IterateRoles.ListPermissions
Java
domains().listdomains().listAlldomains().iterateroles().listroles().listAllroles().iterateroles().listPermissions
C#
Domains.ListAsyncDomains.ListAllAsyncDomains.IterateAsyncRoles.ListAsyncRoles.ListAllAsyncRoles.IterateAsyncRoles.ListPermissionsAsync

listWorkspaceMembers

Scopesmembers:readThe app's assistant runs it without askingToolkitworkspace

Who is in this workspace, the role each of them holds, and which addresses or whole domains they were given. Two different things per person and they are not interchangeable: the ROLE is what they may do, the ADDRESSES and DOMAINS are what they may do it to (a whole domain covers every address on it), and somebody can hold a role with no addresses (they see an empty mailbox, unless the role holds addresses:all, which reaches every address) or an address with no explicit role (an older grant, which implies one). The workspace owner is the first row, marked as the owner, and holds everything whatever their role says. One page at a time: when more follow, the last line gives a cursor to pass back for the next page.

Inputs

limitinteger
At least 1At most 100
cursorstring

Also available in

API
GET /membersGET /members/{userId}
TypeScript
nextmail.members.list()nextmail.members.listAll()nextmail.members.iterate()nextmail.members.get()
Python
members.list()members.list_all()members.iterate()members.get()
Ruby
members.listmembers.list_allmembers.iteratemembers.get
PHP
members->listmembers->listAllmembers->iteratemembers->get
Go
Members.ListMembers.ListAllMembers.IterateMembers.Get
Java
members().listmembers().listAllmembers().iteratemembers().get
C#
Members.ListAsyncMembers.ListAllAsyncMembers.IterateAsyncMembers.GetAsync

listInvitations

Scopesmembers:readThe app's assistant runs it without askingToolkitworkspace

Invitations to this workspace that nobody has accepted yet, by email: the role and the addresses or whole domains each will grant once accepted, when it expires, and whether the last email reached them. A role that holds addresses:all reaches every address on every domain whatever the invitation grants. A waiting invitation grants nothing until it is accepted. One page at a time: when more follow, the last line gives a cursor to pass back for the next page.

Inputs

limitinteger
At least 1At most 100
cursorstring

Also available in

API
GET /members/invitations
TypeScript
nextmail.members.listInvitations()nextmail.members.listAllInvitations()nextmail.members.iterateInvitations()
Python
members.list_invitations()members.list_all_invitations()members.iterate_invitations()
Ruby
members.list_invitationsmembers.list_all_invitationsmembers.iterate_invitations
PHP
members->listInvitationsmembers->listAllInvitationsmembers->iterateInvitations
Go
Members.ListInvitationsMembers.ListAllInvitationsMembers.IterateInvitations
Java
members().listInvitationsmembers().listAllInvitationsmembers().iterateInvitations
C#
Members.ListInvitationsAsyncMembers.ListAllInvitationsAsyncMembers.IterateInvitationsAsync

revokeInvitation

Scopesmembers:writeThe app's assistant always asks firstToolkitworkspace

Withdraw an invitation that has not been accepted. Its link stops working at once and nothing it would have granted is granted. Inviting the same address again later sends a new one.

Inputs

invitationIdstringRequired
Not empty

Also available in

API
DELETE /members/invitations/{invitationId}
TypeScript
nextmail.members.revokeInvitation()
Python
members.revoke_invitation()
Ruby
members.revoke_invitation
PHP
members->revokeInvitation
Go
Members.RevokeInvitation
Java
members().revokeInvitation
C#
Members.RevokeInvitationAsync

resendInvitation

Scopesmembers:writeThe app's assistant asks first unless you asked for itToolkitworkspace

Send a waiting invitation again: a new link, fourteen more days, and the old link retired. The same address cannot be sent to twice within ten minutes. Anybody but the workspace owner is refused when the role it carries holds a permission this app may not use for them (a console-only one, such as billing, never can), or when it gives access to an address or a domain they do not reach themselves.

Inputs

invitationIdstringRequired
Not empty

Also available in

API
POST /members/invitations/{invitationId}/resend
TypeScript
nextmail.members.resendInvitation()
Python
members.resend_invitation()
Ruby
members.resend_invitation
PHP
members->resendInvitation
Go
Members.ResendInvitation
Java
members().resendInvitation
C#
Members.ResendInvitationAsync

getRole

Scopesroles:readThe app's assistant runs it without askingToolkitworkspace

One role in full: its name, what it is for, every permission it grants and how many people and API keys hold it. A role says what somebody may do; which addresses they may do it to is a separate grant that listWorkspaceMembers reports.

Inputs

idstringRequired

The role, by its id (role_…). listRoles names every one.

1 to 128 characters

Also available in

API
GET /roles/{id}
TypeScript
nextmail.roles.get()
Python
roles.get()
Ruby
roles.get
PHP
roles->get
Go
Roles.Get
Java
roles().get
C#
Roles.GetAsync

listPermissions

Scopesroles:readThe app's assistant runs it without askingToolkitworkspace

Every permission a role can grant, with what it allows, the group it belongs to, and whether a key or an app can hold it. The console-only ones work for people and never for a key or an app. createRole and updateRole take these ids.

Inputs

Takes no input.

Also available in

API
GET /roles/permissions
TypeScript
nextmail.roles.listPermissions()
Python
roles.list_permissions()
Ruby
roles.list_permissions
PHP
roles->listPermissions
Go
Roles.ListPermissions
Java
roles().listPermissions
C#
Roles.ListPermissionsAsync

createRole

Scopesroles:writeThe app's assistant always asks firstToolkitworkspace

Create a role: a name and the permissions it grants, from listPermissions. Nobody holds it until setMemberRole or inviteMember hands it out. A role can never grant more than you hold yourself.

Inputs

namestringRequired
1 to 48 characters
descriptionstring
Up to 240 characters
permissionsstring[]Required
Up to 53 items

Also available in

API
POST /roles
TypeScript
nextmail.roles.create()
Python
roles.create()
Ruby
roles.create
PHP
roles->create
Go
Roles.Create
Java
roles().create
C#
Roles.CreateAsync

updateRole

Scopesroles:writeThe app's assistant always asks firstToolkitworkspace

Rename a role, change its description, or replace the permissions it grants. permissions REPLACES the whole list, so name every permission the role should keep. The change reaches everybody and every API key holding the role on their next request. The owner role cannot be changed.

Inputs

idstringRequired

The role, by its id (role_…). listRoles names every one.

1 to 128 characters
namestring
1 to 48 characters
descriptionstring
Can be nullUp to 240 characters
permissionsstring[]
Up to 53 items

Also available in

API
PATCH /roles/{id}
TypeScript
nextmail.roles.update()
Python
roles.update()
Ruby
roles.update
PHP
roles->update
Go
Roles.Update
Java
roles().update
C#
Roles.UpdateAsync

deleteRole

Scopesroles:writeThe app's assistant always asks firstToolkitworkspace

Delete a role. Anybody, any API key and any waiting invitation holding it moves to the role named in reassignTo; without one, a role somebody still holds is refused. The owner role cannot be deleted. This cannot be undone.

Inputs

idstringRequired

The role, by its id (role_…). listRoles names every one.

1 to 128 characters
reassignTostring

The role its holders move to, by id.

1 to 128 characters

Also available in

API
DELETE /roles/{id}
TypeScript
nextmail.roles.delete()
Python
roles.delete()
Ruby
roles.delete
PHP
roles->delete
Go
Roles.Delete
Java
roles().delete
C#
Roles.DeleteAsync

inviteMember

Scopesmembers:writeThe app's assistant always asks firstToolkitworkspace

Invite somebody to this workspace by email, with a role and optionally the addresses or whole domains they may reach. They get an email with a link that lasts fourteen days, and they join with nothing until they accept. Somebody who is already a member is refused: setMemberRole changes what they may do.

Inputs

emailstringRequired
Formatemail
roleIdstringRequired

The role, by its id (role_…). listRoles names every one.

1 to 128 characters
addressIdsstring[]
Up to 64 items
domainIdsstring[]
Up to 64 items
accessstring

member reads and sends as it, viewer only reads it. Left out, member.

One of"member""viewer"Default"member"

Also available in

API
POST /members
TypeScript
nextmail.members.add()
Python
members.add()
Ruby
members.add
PHP
members->add
Go
Members.Add
Java
members().add
C#
Members.AddAsync

setMemberRole

Scopesmembers:writeThe app's assistant always asks firstToolkitworkspace

Give a member of this workspace a different role. It changes what they may do and nothing about which addresses they reach. The owner keeps every permission and cannot be given a role, and the owner role cannot be handed out.

Inputs

userIdstringRequired

The account id of the person, the User ID listWorkspaceMembers reports. Never an email address.

1 to 128 characters
roleIdstringRequired

The role, by its id (role_…). listRoles names every one.

1 to 128 characters

Also available in

API
PATCH /members/{userId}
TypeScript
nextmail.members.update()
Python
members.update()
Ruby
members.update
PHP
members->update
Go
Members.Update
Java
members().update
C#
Members.UpdateAsync

removeMember

Scopesmembers:writeThe app's assistant always asks firstToolkitworkspace

Remove somebody from this workspace: their role, every address and domain they were given, and every app they connected to it go at once. Their account stays. The owner cannot be removed.

Inputs

userIdstringRequired

The account id of the person, the User ID listWorkspaceMembers reports. Never an email address.

1 to 128 characters

Also available in

API
DELETE /members/{userId}
TypeScript
nextmail.members.remove()
Python
members.remove()
Ruby
members.remove
PHP
members->remove
Go
Members.Remove
Java
members().remove
C#
Members.RemoveAsync

grantMemberAddress

Scopesmembers:writeThe app's assistant always asks firstToolkitworkspace

Give a member one address, or change what they may do with one they already have: member reads it and sends as it, viewer only reads it. Sending also needs a role that may send. You can only give an address you reach yourself.

Inputs

userIdstringRequired

The account id of the person, the User ID listWorkspaceMembers reports. Never an email address.

1 to 128 characters
addressIdstringRequired
1 to 128 characters
accessstring

member reads and sends as it, viewer only reads it. Left out, member.

One of"member""viewer"Default"member"

Also available in

API
POST /members/{userId}/addresses
TypeScript
nextmail.members.grantAddress()
Python
members.grant_address()
Ruby
members.grant_address
PHP
members->grantAddress
Go
Members.GrantAddress
Java
members().grantAddress
C#
Members.GrantAddressAsync

revokeMemberAddress

Scopesmembers:writeThe app's assistant always asks firstToolkitworkspace

Take one address away from a member. They stay in the workspace with their role and their other addresses.

Inputs

userIdstringRequired

The account id of the person, the User ID listWorkspaceMembers reports. Never an email address.

1 to 128 characters
addressIdstringRequired
1 to 128 characters

Also available in

API
DELETE /members/{userId}/addresses/{addressId}
TypeScript
nextmail.members.revokeAddress()
Python
members.revoke_address()
Ruby
members.revoke_address
PHP
members->revokeAddress
Go
Members.RevokeAddress
Java
members().revokeAddress
C#
Members.RevokeAddressAsync

grantMemberDomain

Scopesmembers:writeThe app's assistant always asks firstToolkitworkspace

Give a member a whole domain: every address on it, including ones added later. member reads and sends, viewer only reads. You can only give a domain you reach yourself.

Inputs

userIdstringRequired

The account id of the person, the User ID listWorkspaceMembers reports. Never an email address.

1 to 128 characters
domainIdstringRequired
1 to 128 characters
accessstring

member reads and sends as it, viewer only reads it. Left out, member.

One of"member""viewer"Default"member"

Also available in

API
POST /members/{userId}/domains
TypeScript
nextmail.members.grantDomain()
Python
members.grant_domain()
Ruby
members.grant_domain
PHP
members->grantDomain
Go
Members.GrantDomain
Java
members().grantDomain
C#
Members.GrantDomainAsync

revokeMemberDomain

Scopesmembers:writeThe app's assistant always asks firstToolkitworkspace

Take a whole domain away from a member. Addresses on it that were given to them one by one stay, and so do their role and their other grants.

Inputs

userIdstringRequired

The account id of the person, the User ID listWorkspaceMembers reports. Never an email address.

1 to 128 characters
domainIdstringRequired
1 to 128 characters

Also available in

API
DELETE /members/{userId}/domains/{domainId}
TypeScript
nextmail.members.revokeDomain()
Python
members.revoke_domain()
Ruby
members.revoke_domain
PHP
members->revokeDomain
Go
Members.RevokeDomain
Java
members().revokeDomain
C#
Members.RevokeDomainAsync

getSettings

Scopessettings:readThe app's assistant runs it without askingToolkitworkspace

The settings the app shows under Settings: time zone and formats, images, tracking, sounds and notifications, the blocklist and trusted senders, the signature, the workspace name, and the sender name and postal address the footer of broadcasts and automation emails shows. With address, the settings that apply to one address, a catch-all (*@domain) or a whole domain (@domain): its own signature, tracking and privacy choices, and the workspace's for the rest. overrides lists what that scope sets itself, and everything else is inherited.

Inputs

addressstring

One address, such as hello@example.com, *@example.com for the catch-all of a domain, or @example.com for a whole domain.

3 to 320 characters

Also available in

API
GET /settings
TypeScript
nextmail.settings.get()
Python
settings.get()
Ruby
settings.get
PHP
settings->get
Go
Settings.Get
Java
settings().get
C#
Settings.GetAsync

updateSettings

Scopessettings:writeThe app's assistant asks first unless you asked for itToolkitworkspace

Change settings, the way Settings does, with the same names getSettings reports. Without address it changes your account, the workspace name (workspaceName) and the workspace's privacy: external images, trusted senders, the blocklist, search by meaning (semanticSearch), suggested replies (replySuggestions), learning from replies (knowledgeLearning), and the sender name (marketingSenderName) and postal address (marketingPostalAddress) the footer of broadcasts and automation emails shows. With address it gives one address, a catch-all (*@domain) or a whole domain (@domain) a choice of its own: an address or a catch-all takes signature, openEmailSignature, trackOpens and trackClicks, external images, trusted senders and the blocklist, and a domain external images, trusted senders and the blocklist only. null removes a value the scope sets itself, so it inherits again. A value you leave out keeps what it had, and a list replaces the old one.

Inputs

addressstring

One address, such as hello@example.com, *@example.com for the catch-all of a domain, or @example.com for a whole domain.

3 to 320 characters
valuesRecord<string, any>Required

The settings to change, by the names getSettings reports, such as { "timezone": "Europe/Berlin" } or { "signature": "<p>Best, Ada</p>" }. null removes a value the scope sets itself, so it inherits again: { "externalImages": null } with an address goes back to the domain's or the workspace's choice.

Also available in

API
PATCH /settings
TypeScript
nextmail.settings.update()
Python
settings.update()
Ruby
settings.update
PHP
settings->update
Go
Settings.Update
Java
settings().update
C#
Settings.UpdateAsync

getOutOfOffice

Scopessettings:readThe app's assistant runs it without askingToolkitcore

The out of office replies saved in the workspace, as the Out of office tab of each address shows them: whether each is on, whether it is answering mail right now, its dates, subject and message. With address, the reply of that one address or catch-all, which reads Off when none was saved.

Inputs

addressstring

One address, such as hello@example.com, or *@example.com for the catch-all of a domain.

3 to 320 characters

Also available in

API
GET /out-of-office
TypeScript
nextmail.outOfOffice.list()
Python
out_of_office.list()
Ruby
out_of_office.list
PHP
outOfOffice->list
Go
OutOfOffice.List
Java
outOfOffice().list
C#
OutOfOffice.ListAsync

setOutOfOffice

Scopessettings:writeThe app's assistant asks first unless you asked for itToolkitcore

Save the out of office reply of one address, or of a catch-all with *@domain, replacing what was saved. While it is active, each person who writes to the address gets the message once for the whole away period, as a reply in the same thread. Spam, newsletters and other bulk mail, automatic mail, bounces, blocked senders and the workspace's own addresses get no reply. startsAt and endsAt are ISO 8601 times: leave startsAt out to start now, or to keep the start of a reply that is already on, and endsAt out to keep it on until it is switched off. A new startsAt begins a new away period, in which everyone is answered once more. An empty subject answers with Re: and the subject received. contactsOnly answers only contacts and people the workspace has written to. enabled false keeps the text and stops the replies. getCurrentDate gives the time now.

Inputs

addressstringRequired

One address, such as hello@example.com, or *@example.com for the catch-all of a domain.

3 to 320 characters
enabledboolean
Defaulttrue
startsAtstring
Can be nullFormatdate-time
endsAtstring
Can be nullFormatdate-time
subjectstring
Up to 255 charactersDefault""
messagestringRequired
1 to 10000 characters
contactsOnlyboolean
Defaultfalse

Also available in

API
PUT /out-of-office
TypeScript
nextmail.outOfOffice.set()
Python
out_of_office.set()
Ruby
out_of_office.set
PHP
outOfOffice->set
Go
OutOfOffice.Set
Java
outOfOffice().set
C#
OutOfOffice.SetAsync

clearOutOfOffice

Scopessettings:writeThe app's assistant asks first unless you asked for itToolkitcore

Remove the saved out of office reply of one address or catch-all, so nothing is answered from it any more. To pause a reply and keep its text, use setOutOfOffice with enabled false instead.

Inputs

addressstringRequired

One address, such as hello@example.com, or *@example.com for the catch-all of a domain.

3 to 320 characters

Also available in

API
DELETE /out-of-office
TypeScript
nextmail.outOfOffice.clear()
Python
out_of_office.clear()
Ruby
out_of_office.clear
PHP
outOfOffice->clear
Go
OutOfOffice.Clear
Java
outOfOffice().clear
C#
OutOfOffice.ClearAsync

listSignatures

Scopessettings:readThe app's assistant runs it without askingToolkitworkspace

The signatures saved in the workspace, as the Signature tab of each address shows them: the id, the address, the name, the HTML and what each is the default for. An address keeps a list of named signatures. One can be the default for new mail and one for replies and forwards, and sendEmail picks any of them with signatureId. With address, only the signatures of that address or catch-all.

Inputs

addressstring

One address, such as hello@example.com, or *@example.com for the catch-all of a domain.

3 to 320 characters
limitinteger
At least 1At most 100
cursorstring

Also available in

API
GET /signaturesGET /signatures/{id}
TypeScript
nextmail.signatures.list()nextmail.signatures.listAll()nextmail.signatures.iterate()nextmail.signatures.get()
Python
signatures.list()signatures.list_all()signatures.iterate()signatures.get()
Ruby
signatures.listsignatures.list_allsignatures.iteratesignatures.get
PHP
signatures->listsignatures->listAllsignatures->iteratesignatures->get
Go
Signatures.ListSignatures.ListAllSignatures.IterateSignatures.Get
Java
signatures().listsignatures().listAllsignatures().iteratesignatures().get
C#
Signatures.ListAsyncSignatures.ListAllAsyncSignatures.IterateAsyncSignatures.GetAsync

createSignature

Scopessettings:writeThe app's assistant asks first unless you asked for itToolkitworkspace

Add a signature to one address, or to a catch-all with *@domain. html is the signature as HTML, such as <p>Ada Lovelace<br>Acme Ltd</p>, and is cleaned up on save. The first signature of an address becomes its default for new mail and for replies. A later one becomes a default only with isDefault or isReplyDefault true, and then takes that place from the one that held it. Names are unique per address.

Inputs

addressstringRequired

The address the signature is for, such as hello@example.com, or *@example.com for the catch-all of a domain.

3 to 320 characters
namestringRequired

What the signature is called. Unique on its address, whatever the case.

1 to 80 characters
htmlstringRequired

The signature as HTML. It is sanitised on write and has to keep some text or an image.

1 to 150000 characters
isDefaultboolean

true makes it the signature of new mail from the address. false takes that away when it held it.

isReplyDefaultboolean

true makes it the signature of replies and forwards from the address. false takes that away when it held it.

Also available in

API
POST /signatures
TypeScript
nextmail.signatures.create()
Python
signatures.create()
Ruby
signatures.create
PHP
signatures->create
Go
Signatures.Create
Java
signatures().create
C#
Signatures.CreateAsync

updateSignature

Scopessettings:writeThe app's assistant asks first unless you asked for itToolkitworkspace

Rename a signature, rewrite its HTML or change what it is the default for. Send only what changes. isDefault true makes it the signature of new mail from its address in place of the one that was, and false leaves new mail unsigned when this one was the default. isReplyDefault does the same for replies and forwards. listSignatures gives the ids.

Inputs

idstringRequired

The id of the signature, as listSignatures reports it.

1 to 64 characters
namestring

What the signature is called. Unique on its address, whatever the case.

1 to 80 characters
htmlstring

The signature as HTML. It is sanitised on write and has to keep some text or an image.

1 to 150000 characters
isDefaultboolean

true makes it the signature of new mail from the address. false takes that away when it held it.

isReplyDefaultboolean

true makes it the signature of replies and forwards from the address. false takes that away when it held it.

Also available in

API
PATCH /signatures/{id}
TypeScript
nextmail.signatures.update()
Python
signatures.update()
Ruby
signatures.update
PHP
signatures->update
Go
Signatures.Update
Java
signatures().update
C#
Signatures.UpdateAsync

deleteSignature

Scopessettings:writeThe app's assistant always asks firstToolkitworkspace

Delete a signature for good. When it was a default, that default is left empty, so mail it would have signed goes out with no signature until another one is made the default with updateSignature.

Inputs

idstringRequired

The id of the signature, as listSignatures reports it.

1 to 64 characters

Also available in

API
DELETE /signatures/{id}
TypeScript
nextmail.signatures.delete()
Python
signatures.delete()
Ruby
signatures.delete
PHP
signatures->delete
Go
Signatures.Delete
Java
signatures().delete
C#
Signatures.DeleteAsync

copySignature

Scopessettings:writeThe app's assistant asks first unless you asked for itToolkitworkspace

Put a copy of a signature on other addresses or catch-alls. An address that already has a signature with the same name gets its HTML replaced, so copying again after an edit brings every copy up to date, and any other address gets a new signature. A copy becomes a default where isDefault or isReplyDefault is true, and on an address that had no signature at all.

Inputs

idstringRequired

The id of the signature, as listSignatures reports it.

1 to 64 characters
addressesstring[]Required

The addresses to copy it to. Each is one address or *@example.com for a catch-all.

1 to 500 items
isDefaultboolean

true makes it the signature of new mail from the address. false takes that away when it held it.

isReplyDefaultboolean

true makes it the signature of replies and forwards from the address. false takes that away when it held it.

Also available in

API
POST /signatures/{id}/copy
TypeScript
nextmail.signatures.copy()
Python
signatures.copy()
Ruby
signatures.copy
PHP
signatures->copy
Go
Signatures.Copy
Java
signatures().copy
C#
Signatures.CopyAsync

listWorkspaceSecurityEvents

Scopesmembers:readThe app's assistant runs it without askingToolkitworkspace

The security log of the workspace, newest first: invitations sent and withdrawn, members added and removed, roles created, changed and deleted, the two-factor requirement, passwords set for an address and directory sync, each with who did it. Nothing is ever removed from it.

Inputs

limitinteger

How many entries to return, newest first. 50 when left out.

At least 1At most 100
cursorstring

The cursor the previous page ended with, to read the entries before it.

Not empty

Also available in

API
GET /security/events
TypeScript
nextmail.security.listEvents()nextmail.security.listAllEvents()nextmail.security.iterateEvents()
Python
security.list_events()security.list_all_events()security.iterate_events()
Ruby
security.list_eventssecurity.list_all_eventssecurity.iterate_events
PHP
security->listEventssecurity->listAllEventssecurity->iterateEvents
Go
Security.ListEventsSecurity.ListAllEventsSecurity.IterateEvents
Java
security().listEventssecurity().listAllEventssecurity().iterateEvents
C#
Security.ListEventsAsyncSecurity.ListAllEventsAsyncSecurity.IterateEventsAsync