wildduck/docs/api/openapi.yml
2023-06-15 11:23:26 +03:00

7103 lines
269 KiB
YAML

openapi: 3.0.0
info:
title: WildDuck API
description: WildDuck API docs
version: 1.0.0
contact:
url: 'https://github.com/nodemailer/wildduck'
servers:
- url: 'https://api.wildduck.email'
tags:
- name: Addresses
- name: ApplicationPasswords
- name: Archive
description: Archive includes all deleted messages. Once messages are old enough then these are permanenetly deleted from the archive as well. Until then you can restore the deleted messages.
- name: Audit
description: 'Auditing allows to monitor an email account. All existing, deleted and new emails are copied to the auditing system. See also https://github.com/nodemailer/wildduck-audit-manager'
- name: Authentication
- name: Autoreplies
- name: Certs
description: WildDuck allows to register TLS certificates to be used with SNI connections. These certificates are used by IMAP, POP3, API and SMTP servers when a SNI capable client establishes a TLS connection. This does not apply for MX servers.
- name: DKIM
description: Whenever an email is sent WildDuck checks if there is a DKIM key registered for the domain name of the sender address and uses it to sign the message.
- name: DomainAccess
description: Add sender domain names to allowlist (messages are all accepted) or blocklist (messages are sent to Spam folder)
- name: DomainAliases
- name: Filters
- name: Mailboxes
- name: Messages
- name: Settings
- name: Storage
description: Storage allows easier attachment handling when composing Draft messages. Instead of uploading the attachmnent with every draft update, you store the attachment to the Storage and then link stored file for the Draft.
- name: Submission
- name: TwoFactorAuth
- name: Users
- name: Webhooks
paths:
'/addresses/forwarded/{address}':
delete:
tags:
- Addresses
summary: Delete a forwarded Address
operationId: deleteForwardedAddress
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
get:
tags:
- Addresses
summary: Request forwarded Addresses information
operationId: getForwardedAddress
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetForwardedAddressResponse'
put:
tags:
- Addresses
summary: Update forwarded Address information
operationId: updateForwardedAddress
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateForwardedAddressRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
parameters:
- name: address
in: path
description: ID of the Address
schema:
type: string
required: true
'/users/{user}/addresses/{address}':
delete:
tags:
- Addresses
summary: Delete an Address
operationId: deleteUserAddress
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
get:
tags:
- Addresses
summary: Request Addresses information
operationId: getUserAddress
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetUserAddressResponse'
put:
tags:
- Addresses
summary: Update Address information
operationId: updateUserAddress
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateUserAddressRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
parameters:
- name: user
in: path
description: ID of the User
required: true
schema:
type: string
- name: address
in: path
description: ID of the Address
required: true
schema:
type: string
'/addresses/resolve/{address}':
get:
tags:
- Addresses
summary: Get Address info
operationId: resolveAddress
parameters:
- name: allowWildcard
in: query
description: If true then resolves also wildcard addresses
schema:
type: boolean
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ResolveAddressResponse'
parameters:
- name: address
in: path
description: ID of the Address or e-mail address string
required: true
schema:
type: string
/addresses:
get:
tags:
- Addresses
summary: List registered Addresses
operationId: getAddresses
parameters:
- name: query
in: query
description: Partial match of an address
schema:
type: string
- name: forward
in: query
description: Partial match of a forward email address or URL
schema:
type: string
- name: tags
in: query
description: Comma separated list of tags. The Address must have at least one to be set
schema:
type: string
- name: requiredTags
in: query
description: Comma separated list of tags. The Address must have all listed tags to be set
schema:
type: string
- name: metaData
in: query
description: 'If true, then includes metaData in the response'
schema:
type: boolean
- name: internalData
in: query
description: 'If true, then includes internalData in the response. Not shown for user-role tokens.'
schema:
type: boolean
- name: limit
in: query
description: How many records to return
schema:
type: number
- name: page
in: query
description: 'Current page number. Informational only, page numbers start from 1'
schema:
type: number
- name: next
in: query
description: 'Cursor value for next page, retrieved from nextCursor response value'
schema:
type: string
- name: previous
in: query
description: 'Cursor value for previous page, retrieved from previousCursor response value'
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetAddressesResponse'
'/users/{user}/addresses':
get:
tags:
- Addresses
summary: List registered Addresses for a User
operationId: getUserAddresses
parameters:
- name: metaData
in: query
description: 'If true, then includes metaData in the response'
schema:
type: boolean
- name: internalData
in: query
description: 'If true, then includes internalData in the response. Not shown for user-role tokens.'
schema:
type: boolean
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetUserAddressesResponse'
post:
tags:
- Addresses
summary: Create new Address
description: 'Add a new email address for a User. Addresses can contain unicode characters. Dots in usernames are normalized so no need to create both "firstlast@example.com" and "first.last@example.com" Special addresses `*@example.com`, `*suffix@example.com` and `username@*` catches all emails to these domains or users without a registered destination (requires allowWildcard argument)'
operationId: createUserAddress
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateUserAddressRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/CreateUserAddressResponse'
parameters:
- name: user
in: path
description: ID of the User
required: true
schema:
type: string
'/users/{user}/addressregister':
get:
tags:
- Addresses
summary: List addresses from communication register
description: 'Lists addresses from email headers. Includes addresses both from sent and received messages. Sorted by last usage.'
operationId: getUserAddressregister
parameters:
- name: user
in: path
description: ID of the User
required: true
schema:
type: string
example: 507f1f77bcf86cd799439011
- name: query
in: query
description: Prefix of an address or a name
required: true
schema:
type: string
example: john
- name: limit
in: query
description: How many records to return
schema:
type: number
example: 25
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetUserAddressesregisterResponse'
/addresses/forwarded:
post:
tags:
- Addresses
summary: Create new forwarded Address
description: Add a new forwarded email address. Addresses can contain unicode characters. Dots in usernames are normalized so no need to create both "firstlast@example.com" and "first.last@example.com" Special addresses `*@example.com` and `username@*` catches all emails to these domains or users without a registered destination (requires allowWildcard argument)
operationId: createForwardedAddress
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateForwardedAddressRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/CreateForwardedAddressResponse'
/addresses/renameDomain:
put:
tags:
- Addresses
summary: Rename domain in addresses
description: 'Renames domain names for addresses, DKIM keys and Domain Aliases'
operationId: renameDomain
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/RenameDomainRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
'/users/{user}/asps/{asp}':
delete:
tags:
- ApplicationPasswords
summary: Delete an Application Password
operationId: deleteASP
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
get:
tags:
- ApplicationPasswords
summary: Request ASP information
operationId: getASP
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetASPResponse'
parameters:
- name: user
in: path
description: ID of the User
required: true
schema:
type: string
- name: asp
in: path
description: ID of the Application Password
required: true
schema:
type: string
'/users/{user}/asps':
get:
tags:
- ApplicationPasswords
summary: List Application Passwords
operationId: getASPs
parameters:
- name: showAll
in: query
description: If not true then skips entries with a TTL set
schema:
type: boolean
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetASPsResponse'
post:
tags:
- ApplicationPasswords
summary: Create new Application Password
operationId: createASP
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateASPRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/CreateASPResponse'
parameters:
- name: user
in: path
description: ID of the User
required: true
schema:
type: string
'/users/{user}/archived/messages':
get:
tags:
- Archive
summary: List archived messages
description: Archive contains all recently deleted messages besides Drafts etc.
operationId: getArchivedMessages
parameters:
- name: limit
in: query
description: How many records to return
schema:
type: number
- name: page
in: query
description: 'Current page number. Informational only, page numbers start from 1'
schema:
type: number
- name: order
in: query
description: Ordering of the records by insert date
schema:
$ref: '#/components/schemas/Order'
- name: next
in: query
description: 'Cursor value for next page, retrieved from nextCursor response value'
schema:
type: string
- name: previous
in: query
description: 'Cursor value for previous page, retrieved from previousCursor response value'
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetArchivedMessagesResponse'
parameters:
- name: user
in: path
description: ID of the User
required: true
schema:
type: string
'/users/{user}/archived/messages/{message}/restore':
post:
tags:
- Archive
summary: Restore archived Message
description: 'Restores a single archived message by moving it back to the mailbox it was deleted from or to provided target mailbox. If target mailbox does not exist, then the message is moved to INBOX.'
operationId: restoreMessage
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/RestoreMessageRequest'
required: false
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/RestoreMessageResponse'
parameters:
- name: user
in: path
description: ID of the User
required: true
schema:
type: string
- name: message
in: path
description: Message ID
required: true
schema:
type: number
'/users/{user}/archived/restore':
post:
tags:
- Archive
summary: Restore archived messages
description: 'Initiates a restore task to move archived messages of a date range back to the mailboxes the messages were deleted from. If target mailbox does not exist, then the messages are moved to INBOX.'
operationId: restoreMessages
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/RestoreMessagesRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
parameters:
- name: user
in: path
description: ID of the User
required: true
schema:
type: string
'/audit/{audit}':
get:
tags:
- Audit
summary: Request Audit Info
description: This method returns information about stored audit
operationId: getAudit
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetAuditResponse'
parameters:
- name: audit
in: path
description: ID of the Audit
required: true
schema:
type: string
'/audit/{audit}/export.mbox':
get:
tags:
- Audit
summary: Export Audited Emails
description: This method returns a mailbox file that contains all audited emails
operationId: getAuditEmails
responses:
'200':
description: Success
parameters:
- name: audit
in: path
description: ID of the Audit
required: true
schema:
type: string
/audit:
post:
tags:
- Audit
summary: Create new audit
description: Initiates a message audit
operationId: createAudit
requestBody:
description: Initiates a message audit
content:
application/json:
schema:
$ref: '#/components/schemas/CreateAuditRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/CreateAuditResponse'
/authenticate:
delete:
tags:
- Authentication
summary: Invalidate authentication token
description: This method invalidates currently used authentication token. If token is not provided then nothing happens
operationId: invalidateAccessToken
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
post:
tags:
- Authentication
summary: Authenticate a User
operationId: authenticate
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AuthenticateRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/AuthenticateResponse'
/preauth:
post:
tags:
- Authentication
summary: Pre-auth check
description: Check if an username exists and can be used for authentication
operationId: preauth
requestBody:
content:
application/json:
schema:
required:
- username
type: object
properties:
username:
type: string
description: Username or E-mail address
scope:
type: string
description: 'Required scope. One of master, imap, smtp, pop3'
sess:
type: string
description: Session identifier for the logs
ip:
type: string
description: IP address for the logs
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
required:
- success
- id
- username
- scope
- require2fa
type: object
properties:
success:
type: boolean
description: Indicates successful response
id:
type: string
description: ID of authenticated User
username:
type: string
description: Username of authenticated User
scope:
type: string
description: The scope this authentication is valid for
require2fa:
type: array
items:
type: string
description: List of enabled 2FA mechanisms
'/users/{user}/authlog':
get:
tags:
- Authentication
summary: List authentication Events
operationId: getAuthlog
parameters:
- name: action
in: query
description: Limit listing only to values with specific action value
schema:
type: string
- name: filterIp
in: query
description: Limit listing only to values with specific IP address
schema:
type: string
- name: limit
in: query
description: How many records to return
schema:
type: number
- name: page
in: query
description: 'Current page number. Informational only, page numbers start from 1'
schema:
type: number
- name: next
in: query
description: 'Cursor value for next page, retrieved from nextCursor response value'
schema:
type: string
- name: previous
in: query
description: 'Cursor value for previous page, retrieved from previousCursor response value'
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetAuthlogResponse'
parameters:
- name: user
in: path
description: ID of the User
required: true
schema:
type: string
'/users/{user}/authlog/{event}':
get:
tags:
- Authentication
summary: Request Event information
operationId: getAuthlogEvent
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetAuthlogEventResponse'
parameters:
- name: user
in: path
description: ID of the User
required: true
schema:
type: string
- name: event
in: path
description: ID of the Event
required: true
schema:
type: string
'/users/{user}/autoreply':
delete:
tags:
- Autoreplies
summary: Delete Autoreply information
operationId: deleteAutoreply
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
get:
tags:
- Autoreplies
summary: Request Autoreply information
operationId: getAutoreply
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetAutoreplyResponse'
put:
tags:
- Autoreplies
summary: Update Autoreply information
operationId: updateAutoreply
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateAutoreplyRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
parameters:
- name: user
in: path
description: ID of the User
required: true
schema:
type: string
'/dkim/{dkim}':
delete:
tags:
- DKIM
summary: Delete a DKIM key
operationId: deleteDkimKey
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
get:
tags:
- DKIM
summary: Request DKIM information
operationId: getDkimKey
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetDkimKeyResponse'
parameters:
- name: dkim
in: path
description: ID of the DKIM
required: true
schema:
type: string
/dkim:
get:
tags:
- DKIM
summary: List registered DKIM keys
operationId: getDkimKeys
parameters:
- name: query
in: query
description: Partial match of a Domain name
schema:
type: string
- name: limit
in: query
description: How many records to return
schema:
type: number
- name: page
in: query
description: 'Current page number. Informational only, page numbers start from 1'
schema:
type: number
- name: next
in: query
description: 'Cursor value for next page, retrieved from nextCursor response value'
schema:
type: string
- name: previous
in: query
description: 'Cursor value for previous page, retrieved from previousCursor response value'
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetDkimKeysResponse'
post:
tags:
- DKIM
summary: Create or update DKIM key for domain
description: Add a new DKIM key for a Domain or update existing one. There can be single DKIM key registered for each domain name.
operationId: updateDkimKey
requestBody:
description: Add a new DKIM key for a Domain or update existing one. There can be single DKIM key registered for each domain name.
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateDkimKeyRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateDkimKeyResponse'
'/dkim/resolve/{domain}':
get:
tags:
- DKIM
summary: Resolve ID for a DKIM domain
operationId: resolveDkim
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ResolveIdResponse'
parameters:
- name: domain
in: path
description: DKIM domain
required: true
schema:
type: string
'/certs/{cert}':
delete:
tags:
- Certs
summary: Delete a TLS certificate
operationId: deleteTlsCert
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
get:
tags:
- Certs
summary: Request TLS certificate information
operationId: getTLSCerticate
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetTLSCertResult'
parameters:
- name: cert
in: path
description: ID of the TLS certificate
required: true
schema:
type: string
/certs:
get:
tags:
- Certs
summary: List registered TLS certificates
operationId: getTLSCerticates
parameters:
- name: query
in: query
description: Partial match of a server name
schema:
type: string
example: example.com
- name: altNames
in: query
description: Match `query` value against SAN as well (including wildcard names)
schema:
type: boolean
example: true
default: false
- name: limit
in: query
description: How many records to return
schema:
type: number
- name: page
in: query
description: 'Current page number. Informational only, page numbers start from 1'
schema:
type: number
- name: next
in: query
description: 'Cursor value for next page, retrieved from nextCursor response value'
schema:
type: string
example: 'eyIkb2lkIjoiNWRmMWZkMmQ3NzkyNTExOGI2MDdjNjg0In0'
- name: previous
in: query
description: 'Cursor value for previous page, retrieved from previousCursor response value'
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetTLSCertsResponse'
post:
tags:
- Certs
summary: Create or update TLS certificate for server name
description: >
Add a new TLS certificate for a server name or update existing one. You can add a single certificate for each server name but SAN names are supported as well.
For example you can add a sertificate for "mydomain.com" that includes "\*.mydomain.com" in SAN and the same certificate would be used for requests that do not have it's own server name registered but match the SAN value.
> NB! you must ensure yourself that the `servername` value is actually listed in certificate's common name or SAN as WildDuck is going to use this certificate regardless.
operationId: updateTLSCertificate
requestBody:
description: Add a new TLS certificate for a server name or update existing one
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateTLSCertRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateTLSCertResponse'
'/certs/resolve/{servername}':
get:
tags:
- Certs
summary: Resolve ID for a server name
operationId: resolveTLSCertificate
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ResolveIdResponse'
parameters:
- name: servername
in: path
description: Server name
required: true
schema:
type: string
'/domainaccess/{domain}':
delete:
tags:
- DomainAccess
summary: Delete a Domain from listing
operationId: deleteDomainListing
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
parameters:
- name: domain
in: path
description: Listed domains unique ID
required: true
schema:
type: string
'/domainaccess/{tag}/allow':
get:
tags:
- DomainAccess
summary: List allowlisted domains
operationId: getAllowedDomain
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetAllowedDomainResponse'
post:
tags:
- DomainAccess
summary: Add domain to allowlist
description: If an email is sent from a domain that is listed in the allowlist then it is never marked as spam. Lists apply for tagged users.
operationId: createAllowedDomain
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateAllowedDomainRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/CreateAllowedDomainResponse'
parameters:
- name: tag
in: path
description: Tag to look for
required: true
schema:
type: string
'/domainaccess/{tag}/block':
get:
tags:
- DomainAccess
summary: List blocklisted domains
operationId: getBlockedDomain
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetBlockedDomainResponse'
post:
tags:
- DomainAccess
summary: Add domain to blocklist
description: If an email is sent from a domain that is listed in the blocklist then it is always marked as spam. Lists apply for tagged users.
operationId: createBlockedDomain
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateBlockedDomainRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/CreateBlockedDomainResponse'
parameters:
- name: tag
in: path
description: Tag to look for
required: true
schema:
type: string
'/domainaliases/{alias}':
delete:
tags:
- DomainAliases
summary: Delete an Alias
operationId: deleteDomainAlias
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
get:
tags:
- DomainAliases
summary: Request Alias information
operationId: getDomainAlias
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetDomainAliasResponse'
parameters:
- name: alias
in: path
description: ID of the Alias
required: true
schema:
type: string
/domainaliases:
get:
tags:
- DomainAliases
summary: List registered Domain Aliases
operationId: getDomainAliases
parameters:
- name: query
in: query
description: Partial match of a Domain Alias or Domain name
schema:
type: string
- name: limit
in: query
description: How many records to return
schema:
type: number
- name: page
in: query
description: 'Current page number. Informational only, page numbers start from 1'
schema:
type: number
- name: next
in: query
description: 'Cursor value for next page, retrieved from nextCursor response value'
schema:
type: string
- name: previous
in: query
description: 'Cursor value for previous page, retrieved from previousCursor response value'
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetDomainAliasesResponse'
post:
tags:
- DomainAliases
summary: Create new Domain Alias
description: Add a new Alias for a Domain. This allows to accept mail on username@domain and username@alias
operationId: createDomainAlias
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateDomainAliasRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/CreateDomainAliasResponse'
'/domainaliases/resolve/{alias}':
get:
tags:
- DomainAliases
summary: Resolve ID for a domain aias
operationId: resolveDomainAlias
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ResolveIdResponse'
parameters:
- name: alias
in: path
description: Alias domain
required: true
schema:
type: string
/data/export:
post:
tags:
- Export
summary: Export data
description: Export data for matching users. Export dump does not include emails, only account structure (user data, password hashes, mailboxes, filters, etc.). A special "export"-role access token is required for exporting and importing.
operationId: createExport
requestBody:
description: Export data for matching users
content:
application/json:
schema:
type: object
properties:
users:
type: array
items:
type: string
description: 'An array of User ID values to export'
tags:
type: array
items:
type: string
description: 'An array of user tags to export. If set then at least one tag must exist on an user.'
required: true
responses:
'200':
description: Success
content:
application/octet-stream:
schema:
type: binary
/data/import:
post:
tags:
- Export
summary: Import user data
description: Import data from an export dump. If a database entry already exists, it is not modified. A special "export"-role access token is required for exporting and importing.
operationId: createImport
requestBody:
description: Import user data
content:
application/octet-stream:
schema:
type: binary
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
entries:
type: number
description: 'How many database entries were found from the export file'
imported:
type: number
description: 'How many database entries were imported from the export file'
failed:
type: number
description: 'How many database entries were not imported due to some error'
existing:
type: number
description: 'How many database existing entries were not imported'
'/users/{user}/filters/{filter}':
delete:
tags:
- Filters
summary: Delete a Filter
operationId: deleteFilter
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
get:
tags:
- Filters
summary: Request Filter information
operationId: getFilter
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetFilterResponse'
put:
tags:
- Filters
summary: Update Filter information
description: 'This method updates Filter data. To unset a value, use empty strings'
operationId: updateFilter
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateFilterRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateFilterResponse'
parameters:
- name: user
in: path
description: Users unique ID
required: true
schema:
type: string
- name: filter
in: path
description: Filters unique ID
required: true
schema:
type: string
/filters:
get:
tags:
- Filters
summary: List all Filters
operationId: getAllFilters
parameters:
- name: forward
in: query
description: Partial match of a forward email address or URL
schema:
type: string
- name: metaData
in: query
description: 'If true, then includes metaData in the response'
schema:
type: boolean
- name: limit
in: query
description: How many records to return
schema:
type: number
- name: page
in: query
description: 'Current page number. Informational only, page numbers start from 1'
schema:
type: number
- name: next
in: query
description: 'Cursor value for next page, retrieved from nextCursor response value'
schema:
type: number
- name: previous
in: query
description: 'Cursor value for previous page, retrieved from previousCursor response value'
schema:
type: number
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetAllFiltersResponse'
'/users/{user}/filters':
get:
tags:
- Filters
summary: List Filters for a User
operationId: getFilters
parameters:
- name: metaData
in: query
description: 'If true, then includes metaData in the response'
schema:
type: boolean
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetFiltersResponse'
post:
tags:
- Filters
summary: Create new Filter
operationId: createFilter
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateFilterRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateFilterResponse'
parameters:
- name: user
in: path
description: Users unique ID
required: true
schema:
type: string
'/users/{user}/mailboxes/{mailbox}':
delete:
tags:
- Mailboxes
summary: Delete a Mailbox
operationId: deleteMailbox
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
get:
tags:
- Mailboxes
summary: Request Mailbox information
operationId: getMailbox
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetMailboxResponse'
put:
tags:
- Mailboxes
summary: Update Mailbox information
operationId: updateMailbox
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateMailboxRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
parameters:
- name: user
in: path
description: Users unique ID
required: true
schema:
type: string
- name: mailbox
in: path
description: Mailbox unique ID. Special use folders and INBOX can not be deleted
required: true
schema:
type: string
'/users/{user}/mailboxes':
get:
tags:
- Mailboxes
summary: List Mailboxes for a User
operationId: getMailboxes
parameters:
- name: specialUse
in: query
description: Should the response include only folders with specialUse flag set.
schema:
type: boolean
- name: showHidden
in: query
description: Hidden folders are not included in the listing by default.
schema:
type: boolean
- name: counters
in: query
description: Should the response include counters (total + unseen). Counters come with some overhead.
schema:
type: boolean
- name: sizes
in: query
description: Should the response include mailbox size in bytes. Size numbers come with a lot of overhead as an aggregated query is ran.
schema:
type: boolean
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetMailboxesResponse'
post:
tags:
- Mailboxes
summary: Create new Mailbox
operationId: createMailbox
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateMailboxRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/CreateMailboxResponse'
parameters:
- name: user
in: path
description: Users unique ID
required: true
schema:
type: string
'/users/{user}/mailboxes/{mailbox}/messages/{message}':
delete:
tags:
- Messages
summary: Delete a Message
operationId: deleteMessage
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
get:
tags:
- Messages
summary: Request Message information
operationId: getMessage
parameters:
- name: markAsSeen
in: query
description: If true then marks message as seen
schema:
type: boolean
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetMessageResponse'
parameters:
- name: user
in: path
description: ID of the User
required: true
schema:
type: string
- name: mailbox
in: path
description: ID of the Mailbox
required: true
schema:
type: string
- name: message
in: path
description: Message ID
required: true
schema:
type: number
'/users/{user}/mailboxes/{mailbox}/messages':
delete:
tags:
- Messages
summary: Delete all Messages from a Mailbox
operationId: deleteMessagesInMailbox
parameters:
- name: async
in: query
description: Schedule deletion task
schema:
type: boolean
default: false
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteMessagesInMailboxResponse'
get:
tags:
- Messages
summary: List messages in a Mailbox
operationId: getMessages
parameters:
- name: unseen
in: query
description: 'If true, then returns only unseen messages'
schema:
type: boolean
- name: metaData
in: query
description: 'If true, then includes metaData in the response'
schema:
type: boolean
- name: threadCounters
in: query
description: 'If true, then includes threadMessageCount in the response. Counters come with some overhead'
schema:
type: boolean
- name: limit
in: query
description: How many records to return
schema:
type: number
- name: page
in: query
description: 'Current page number. Informational only, page numbers start from 1'
schema:
type: number
- name: order
in: query
description: Ordering of the records by insert date
schema:
$ref: '#/components/schemas/Order'
- name: next
in: query
description: 'Cursor value for next page, retrieved from nextCursor response value'
schema:
type: string
- name: previous
in: query
description: 'Cursor value for previous page, retrieved from previousCursor response value'
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetMessagesResponse'
put:
tags:
- Messages
summary: Update Message information
description: This method updates message flags and also allows to move messages to a different mailbox
operationId: updateMessage
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateMessageRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateMessageResponse'
post:
tags:
- Messages
summary: Upload Message
description: 'This method allows to upload either an RFC822 formatted message or a message structure to a mailbox. Raw message is stored unmodified, no headers are added or removed. If you want to generate the uploaded message from structured data fields, then do not use the raw property.'
operationId: uploadMessage
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UploadMessageRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/UploadMessageResponse'
parameters:
- name: user
in: path
description: ID of the User
required: true
schema:
type: string
- name: mailbox
in: path
description: ID of the Mailbox
required: true
schema:
type: string
'/users/{user}/mailboxes/{mailbox}/messages/{message}/forward':
post:
tags:
- Messages
summary: Forward stored Message
description: This method allows either to re-forward a message to an original forward target or forward it to some other address. This is useful if a user had forwarding turned on but the message was not delivered so you can try again. Forwarding does not modify the original message.
operationId: forwardStoredMessage
requestBody:
description: This method allows either to re-forward a message to an original forward target or forward it to some other address. This is useful if a user had forwarding turned on but the message was not delivered so you can try again. Forwarding does not modify the original message.
content:
application/json:
schema:
$ref: '#/components/schemas/ForwardStoredMessageRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ForwardStoredMessageResponse'
parameters:
- name: user
in: path
description: ID of the User
required: true
schema:
type: string
- name: mailbox
in: path
description: ID of the Mailbox
required: true
schema:
type: string
- name: message
in: path
description: Message ID
required: true
schema:
type: number
'/users/{user}/mailboxes/{mailbox}/messages/{message}/attachments/{attachment}':
get:
tags:
- Messages
summary: Download Attachment
description: This method returns attachment file contents in binary form
operationId: getMessageAttachment
responses:
'200':
description: Success
content:
application/octet-stream:
schema:
type: string
description: Success
format: binary
parameters:
- name: user
in: path
description: ID of the User
required: true
schema:
type: string
- name: mailbox
in: path
description: ID of the Mailbox
required: true
schema:
type: string
- name: message
in: path
description: ID of the Message
required: true
schema:
type: number
- name: attachment
in: path
description: ID of the Attachment
required: true
schema:
type: string
'/users/{user}/mailboxes/{mailbox}/messages/{message}/message.eml':
get:
tags:
- Messages
summary: Get Message source
description: This method returns the full RFC822 formatted source of the stored message
operationId: getMessageSource
responses:
'200':
description: Success
content:
text/plain:
schema:
type: object
description: Success
parameters:
- name: user
in: path
description: ID of the User
required: true
schema:
type: string
- name: mailbox
in: path
description: ID of the Mailbox
required: true
schema:
type: string
- name: message
in: path
description: ID of the Message
required: true
schema:
type: number
'/users/{user}/outbound/{queueId}':
delete:
tags:
- Messages
summary: Delete an Outbound Message
description: You can delete outbound emails that are still in queue. Queue ID can be found from the `outbound` property of a stored email.
operationId: deleteOutboundMessage
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
parameters:
- name: user
in: path
description: ID of the User
required: true
schema:
type: string
- name: queueId
in: path
description: Outbound queue ID of the message
required: true
schema:
type: string
'/users/{user}/search':
get:
tags:
- Messages
summary: Search for messages
operationId: searchMessages
description: This method allows searching for matching messages.
parameters:
- name: mailbox
in: query
description: ID of the Mailbox
schema:
type: string
- name: thread
in: query
description: Thread ID
schema:
type: string
- name: query
in: query
description: 'Search string, uses MongoDB fulltext index. Covers data from mesage body and also common headers like from, to, subject etc.'
schema:
type: string
- name: datestart
in: query
description: Datestring for the earliest message storing time
schema:
type: string
format: date-time
- name: dateend
in: query
description: Datestring for the latest message storing time
schema:
type: string
format: date-time
- name: from
in: query
description: 'Partial match for the From: header line'
schema:
type: string
- name: to
in: query
description: 'Partial match for the To: and Cc: header lines'
schema:
type: string
- name: subject
in: query
description: 'Partial match for the Subject: header line'
schema:
type: string
- name: attachments
in: query
description: 'If true, then matches only messages with attachments'
schema:
type: boolean
- name: flagged
in: query
description: 'If true, then matches only messages with \Flagged flags'
schema:
type: boolean
- name: unseen
in: query
description: 'If true, then matches only messages without \Seen flags'
schema:
type: boolean
- name: searchable
in: query
description: 'If true, then matches messages not in Junk or Trash'
schema:
type: boolean
- name: or.query
in: query
description: 'Search string, uses MongoDB fulltext index. Covers data from mesage body and also common headers like from, to, subject etc.'
schema:
type: string
- name: or.from
in: query
description: 'Partial match for the From: header line'
schema:
type: string
- name: or.to
in: query
description: 'Partial match for the To: and Cc: header lines'
schema:
type: string
- name: or.subject
in: query
description: 'Partial match for the Subject: header line'
schema:
type: string
- name: minSize
in: query
description: Minimal message size in bytes
schema:
type: number
- name: maxSize
in: query
description: Maximal message size in bytes
schema:
type: number
- name: threadCounters
in: query
description: 'If true, then includes threadMessageCount in the response. Counters come with some overhead'
schema:
type: boolean
- name: limit
in: query
description: How many records to return
schema:
type: number
- name: order
in: query
description: Ordering of the records by insert date. If no order is supplied, results are sorted by heir mongoDB ObjectId.
schema:
$ref: '#/components/schemas/Order'
- name: page
in: query
description: 'Current page number. Informational only, page numbers start from 1'
schema:
type: number
- name: next
in: query
description: 'Cursor value for next page, retrieved from nextCursor response value'
schema:
type: string
- name: previous
in: query
description: 'Cursor value for previous page, retrieved from previousCursor response value'
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SearchMessagesResponse'
post:
tags:
- Messages
summary: Search and update messages
operationId: searchApplyMessages
description: This method allows applying an action to all matching messages. This is an async method so that it will return immediately. Actual modifications are run in the background.
requestBody:
content:
application/json:
schema:
type: object
properties:
mailbox:
description: ID of the Mailbox
type: string
thread:
description: Thread ID
type: string
query:
description: 'Search string, uses MongoDB fulltext index. Covers data from mesage body and also common headers like from, to, subject etc.'
type: string
datestart:
description: Datestring for the earliest message storing time
type: string
format: date-time
dateend:
description: Datestring for the latest message storing time
type: string
format: date-time
from:
description: 'Partial match for the From: header line'
type: string
to:
in: query
description: 'Partial match for the To: and Cc: header lines'
type: string
subject:
description: 'Partial match for the Subject: header line'
type: string
attachments:
description: 'If true, then matches only messages with attachments'
type: boolean
flagged:
description: 'If true, then matches only messages with \Flagged flags'
type: boolean
unseen:
description: 'If true, then matches only messages without \Seen flags'
type: boolean
searchable:
description: 'If true, then matches messages not in Junk or Trash'
type: boolean
or:
type: object
description: 'At least onOne of the included terms must match'
properties:
query:
description: 'Search string, uses MongoDB fulltext index. Covers data from mesage body and also common headers like from, to, subject etc.'
type: string
from:
description: 'Partial match for the From: header line'
type: string
to:
description: 'Partial match for the To: and Cc: header lines'
type: string
subject:
description: 'Partial match for the Subject: header line'
type: string
minSize:
description: Minimal message size in bytes
type: number
maxSize:
description: Maximal message size in bytes
type: number
action:
type: object
description: 'Define actions to take with matching messages'
properties:
moveTo:
type: string
description: ID of the target Mailbox if you want to move messages
seen:
type: boolean
description: State of the \Seen flag
flagged:
type: boolean
description: State of the \Flagged flag
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: Indicates if the action succeeded or not
scheduled:
type: string
description: ID of the scheduled operation
parameters:
- name: user
in: path
description: ID of the User
required: true
schema:
type: string
'/users/{user}/mailboxes/{mailbox}/messages/{message}/submit':
post:
tags:
- Messages
summary: Submit Draft for delivery
description: This method allows to submit a draft message for delivery. Draft is moved to Sent mail folder.
operationId: submitStoredMessage
requestBody:
description: This method allows to submit a draft message for delivery. Draft is moved to Sent mail folder.
content:
application/json:
schema:
$ref: '#/components/schemas/SubmitStoredMessageRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SubmitStoredMessageResponse'
parameters:
- name: user
in: path
description: ID of the User
required: true
schema:
type: string
- name: mailbox
in: path
description: ID of the Mailbox
required: true
schema:
type: string
- name: message
in: path
description: Message ID
required: true
schema:
type: number
'/users/{user}/storage/{file}':
delete:
tags:
- Storage
summary: Delete a File
operationId: deleteFile
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
get:
tags:
- Storage
summary: Download File
description: This method returns stored file contents in binary form
operationId: getFile
responses:
'200':
description: Success
content:
application/octet-stream:
schema:
type: string
description: Success
format: binary
parameters:
- name: user
in: path
description: ID of the User
required: true
schema:
type: string
- name: file
in: path
description: ID of the File
required: true
schema:
type: string
'/users/{user}/storage':
get:
tags:
- Storage
summary: List stored files
operationId: getFiles
parameters:
- name: query
in: query
description: Partial match of a filename
schema:
type: string
- name: limit
in: query
description: How many records to return
schema:
type: number
- name: page
in: query
description: 'Current page number. Informational only, page numbers start from 1'
schema:
type: number
- name: next
in: query
description: 'Cursor value for next page, retrieved from nextCursor response value'
schema:
type: string
- name: previous
in: query
description: 'Cursor value for previous page, retrieved from previousCursor response value'
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetFilesResponse'
post:
tags:
- Storage
summary: Upload File
description: This method allows to upload an attachment to be linked from a draft
operationId: uploadFile
requestBody:
content:
multipart/form-data:
encoding: {}
schema:
required:
- content
type: object
properties:
filename:
type: string
description: Name of the file
contentType:
type: string
description: MIME type of the file. Is detected from the file name by default
encoding:
type: string
description: Encoding of the file content. Useful if you want to upload the file in base64 encoded format. Valid options "base64", "hex", "utf8"
content:
type: string
format: binary
required: false
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/UploadFileResponse'
parameters:
- name: user
in: path
description: ID of the User
required: true
schema:
type: string
'/users/{user}/submit':
post:
tags:
- Submission
summary: Submit a Message for Delivery
description: Use this method to send emails from a user account
operationId: submitMessage
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SubmitMessageRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SubmitMessageResponse'
parameters:
- name: user
in: path
description: Users unique ID
required: true
schema:
type: string
'/users/{user}/2fa/totp/check':
post:
tags:
- TwoFactorAuth
summary: Validate TOTP Token
description: This method checks if a TOTP token provided by a User is valid for authentication
operationId: checkTotp2FA
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CheckTotp2FARequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
parameters:
- name: user
in: path
description: ID of the User
required: true
schema:
type: string
'/users/{user}/2fa':
delete:
tags:
- TwoFactorAuth
summary: Disable 2FA
description: This method disables all 2FA mechanisms a user might have set up
operationId: disable2FA
parameters:
- name: sess
in: query
description: Session identifier for the logs
schema:
type: string
- name: ip
in: query
description: IP address for the logs
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
parameters:
- name: user
in: path
description: ID of the User
required: true
schema:
type: string
'/users/{user}/2fa/custom':
delete:
tags:
- TwoFactorAuth
summary: Disable custom 2FA for a user
description: 'This method disables custom 2FA. If it was the only 2FA set up, then account password for IMAP/POP3/SMTP gets enabled again'
operationId: disableCustom2FA
parameters:
- name: sess
in: query
description: Session identifier for the logs
schema:
type: string
- name: ip
in: query
description: IP address for the logs
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
put:
tags:
- TwoFactorAuth
summary: Enable custom 2FA for a user
description: This method disables account password for IMAP/POP3/SMTP
operationId: enableCustom2FA
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/EnableCustom2FARequest'
required: false
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
parameters:
- name: user
in: path
description: ID of the User
required: true
schema:
type: string
'/users/{user}/2fa/totp':
delete:
tags:
- TwoFactorAuth
summary: Disable TOTP auth
description: This method disables TOTP for a user. Does not affect other 2FA mechanisms a user might have set up
operationId: disableTotp2FA
parameters:
- name: sess
in: query
description: Session identifier for the logs
schema:
type: string
- name: ip
in: query
description: IP address for the logs
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
parameters:
- name: user
in: path
description: ID of the User
required: true
schema:
type: string
'/users/{user}/2fa/totp/enable':
post:
tags:
- TwoFactorAuth
summary: Enable TOTP seed
description: This method enables TOTP for a user by verifying the seed value generated from 2fa/totp/setup
operationId: enableTotp2FA
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/EnableTotp2FARequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
parameters:
- name: user
in: path
description: ID of the User
required: true
schema:
type: string
'/users/{user}/2fa/totp/setup':
post:
tags:
- TwoFactorAuth
summary: Generate TOTP seed
description: This method generates TOTP seed and QR code for 2FA. User needs to verify the seed value using 2fa/totp/enable endpoint
operationId: setupTotp2FA
requestBody:
description: This method generates TOTP seed and QR code for 2FA. User needs to verify the seed value using 2fa/totp/enable endpoint
content:
application/json:
schema:
$ref: '#/components/schemas/SetupTotp2FARequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SetupTotp2FAResponse'
parameters:
- name: user
in: path
description: ID of the User
required: true
schema:
type: string
'/users/{id}':
delete:
tags:
- Users
summary: Delete a User
description: 'This method deletes user and address entries from DB and schedules a background task to delete messages. You can call this method several times even if the user has already been deleted, in case there are still some pending messages.'
operationId: deleteUser
parameters:
- name: deleteAfter
description: Delete user entry from registry but keep all user data until provided date. User account is fully recoverable up to that date.
in: query
schema:
type: string
format: date-time
- name: sess
in: query
description: Session identifier for the logs
schema:
type: string
- name: ip
in: query
description: IP address for the logs
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
get:
tags:
- Users
summary: Request User information
operationId: getUser
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetUserResponse'
put:
tags:
- Users
summary: Update User information
operationId: updateUser
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateUserRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
parameters:
- name: id
in: path
description: Users unique ID.
required: true
schema:
type: string
'/users/{id}/updates':
get:
tags:
- Users
summary: Open change stream
description: This api call returns an EventSource response. Listen on this stream to get notifications about changes in messages and mailboxes. Returned events are JSON encoded strings
operationId: getUpdates
responses:
'200':
description: Success
content:
text/event-stream:
schema:
type: string
description: Success
parameters:
- name: id
in: path
description: Users unique ID.
required: true
schema:
type: string
'/users/resolve/{username}':
get:
tags:
- Users
summary: Resolve ID for a username
operationId: resolveUser
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ResolveIdResponse'
parameters:
- name: username
in: path
description: 'Username of the User. Alphanumeric value. Must start with a letter, dots are allowed but informational only ("user.name" is the same as "username")'
required: true
schema:
type: string
'/users/{id}/restore':
get:
tags:
- Users
summary: Return recovery info for a deleted user
operationId: restoreUserInfo
parameters:
- name: sess
in: query
description: Session identifier for the logs
schema:
type: string
- name: ip
in: query
description: IP address for the logs
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/RecoverInfoResponse'
post:
tags:
- Users
summary: Cancel user deletion task
description: 'Use this endpoint to cancel a timed deletion task scheduled by `DELETE /user/{id}`. If user data is not yet deleted then the account is fully recovered, except any email addresses that might have been already recycled'
operationId: restoreUser
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UserRestoreRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
parameters:
- name: id
in: path
description: Users unique ID.
required: true
schema:
type: string
/users:
get:
tags:
- Users
summary: List registered Users
operationId: getUsers
parameters:
- name: query
in: query
description: Partial match of username or default email address
schema:
type: string
- name: forward
in: query
description: Partial match of a forward email address or URL
schema:
type: string
- name: tags
in: query
description: Comma separated list of tags. The User must have at least one to be set
schema:
type: string
- name: requiredTags
in: query
description: Comma separated list of tags. The User must have all listed tags to be set
schema:
type: string
- name: metaData
in: query
description: 'If true, then includes metaData in the response'
schema:
type: boolean
- name: internalData
in: query
description: 'If true, then includes internalData in the response. Not shown for user-role tokens.'
schema:
type: boolean
- name: limit
in: query
description: How many records to return
schema:
type: number
- name: page
in: query
description: 'Current page number. Informational only, page numbers start from 1'
schema:
type: number
- name: next
in: query
description: 'Cursor value for next page, retrieved from nextCursor response value'
schema:
type: string
- name: previous
in: query
description: 'Cursor value for previous page, retrieved from previousCursor response value'
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetUsersResponse'
post:
tags:
- Users
summary: Create new user
operationId: createUser
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateUserRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/CreateUserResponse'
'/users/{user}/quota/reset':
post:
tags:
- Users
summary: Recalculate User quota
description: 'This method recalculates quota usage for a User. Normally not needed, only use it if quota numbers are way off. This method is not transactional, so if the user is currently receiving new messages then the resulting value is not exact.'
operationId: recalculateQuota
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/RecalculateQuotaResponse'
parameters:
- name: user
in: path
description: Users unique ID.
required: true
schema:
type: string
/quota/reset:
post:
tags:
- Users
summary: Recalculate Quota for all Users
description: 'This method recalculates quota usage for all Users. Normally not needed, only use it if quota numbers are way off. This method is not transactional, so if the user is currently receiving new messages then the resulting value is not exact.'
operationId: recalculateQuotaAllUsers
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
'/users/{id}/logout':
put:
tags:
- Users
summary: Log out User
description: This method logs out all user sessions in IMAP
operationId: logoutUser
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/LogoutUserRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
parameters:
- name: id
in: path
description: Users unique ID.
required: true
schema:
type: string
'/users/{id}/password/reset':
post:
tags:
- Users
summary: Reset password for a User
description: This method generates a new temporary password for a User. Additionally it removes all two-factor authentication settings
operationId: resetUserPassword
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ResetUserPasswordRequest'
required: false
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ResetUserPasswordResponse'
parameters:
- name: id
in: path
description: Users unique ID.
required: true
schema:
type: string
'/webhooks/{webhook}':
delete:
tags:
- Webhooks
summary: Delete a webhook
operationId: deleteWebhook
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
parameters:
- name: webhook
in: path
description: ID of the Webhook
required: true
schema:
type: string
/webhooks:
get:
tags:
- Webhooks
summary: List registered Webhooks
operationId: getWebhooks
parameters:
- name: type
in: query
description: 'Prefix or exact match. Prefix match must end with ".*", eg "channel.*". Use "*" for all types'
required: true
schema:
type: string
- name: user
in: query
description: User ID
schema:
type: string
- name: limit
in: query
description: How many records to return
schema:
type: number
- name: page
in: query
description: 'Current page number. Informational only, page numbers start from 1'
schema:
type: number
- name: next
in: query
description: 'Cursor value for next page, retrieved from nextCursor response value'
schema:
type: string
- name: previous
in: query
description: 'Cursor value for previous page, retrieved from previousCursor response value'
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetWebhooksResponse'
post:
tags:
- Webhooks
summary: Create new Webhook
description: Create new webhook
operationId: createWebhook
requestBody:
description: Create new webhook
content:
application/json:
schema:
$ref: '#/components/schemas/CreateWebhookRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/CreateWebhookResponse'
'/settings/{setting}':
get:
tags:
- Settings
summary: Get Setting value
operationId: getSetting
parameters:
- name: sess
in: query
description: Session identifier for the logs
schema:
type: string
- name: ip
in: query
description: IP address for the logs
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetSettingResponse'
post:
tags:
- Settings
summary: Create or Update Setting
description: Create a new or update an existing setting
operationId: createSetting
requestBody:
description: Create or Update Setting
content:
application/json:
schema:
$ref: '#/components/schemas/CreateSettingRequest'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/CreateSettingResponse'
delete:
tags:
- Settings
summary: Delete a setting
operationId: deleteSetting
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
parameters:
- name: setting
in: path
description: Key of the Setting
required: true
schema:
type: string
/settings:
get:
tags:
- Settings
summary: List registered Settings
operationId: getSettings
parameters:
- name: filter
in: query
description: 'Optional partial match of the Setting key'
schema:
type: string
- name: sess
in: query
description: Session identifier for the logs
schema:
type: string
- name: ip
in: query
description: IP address for the logs
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GetSettingsResponse'
components:
schemas:
AddressLimits:
required:
- forwards
type: object
properties:
forwards:
$ref: '#/components/schemas/Forwards'
description: Account limits and usage
AutoreplyInfo:
required:
- status
- name
- subject
- text
- html
type: object
properties:
status:
type: boolean
description: 'If true, then autoreply is enabled for this address'
name:
type: string
description: 'Name that is used for the From: header in autoreply message'
subject:
type: string
description: Autoreply subject line
text:
type: string
description: Autoreply plaintext content
html:
type: string
description: Autoreply HTML content
description: Autoreply information
Autoreply:
type: object
properties:
status:
type: boolean
description: 'If true, then autoreply is enabled for this address'
start:
type: string
format: date-time
description: Either a date string or boolean false to disable start time checks
end:
type: string
format: date-time
description: Either a date string or boolean false to disable end time checks
name:
type: string
description: 'Name that is used for the From: header in autoreply message'
subject:
type: string
description: Autoreply subject line
text:
type: string
description: Autoreply plaintext content
html:
type: string
description: Autoreply HTML content
description: Autoreply information
LastUse:
required:
- time
- event
type: object
properties:
time:
type: string
description: Datestring of last use or false if password has not been used
format: date-time
event:
type: string
description: Event ID of the security log for the last authentication
description: Information about last use
ContentType:
required:
- value
- params
type: object
properties:
value:
type: string
description: 'MIME type of the message, eg. "multipart/mixed"'
params:
type: object
description: An object with Content-Type params as key-value pairs
description: Parsed Content-Type header. Usually needed to identify encrypted messages and such
DnsTxt:
required:
- name
- value
type: object
properties:
name:
type: string
description: Is the domain name of TXT
value:
type: string
description: Is the value of TXT
description: Value for DNS TXT entry
Query:
type: object
properties:
from:
type: string
description: 'Partial match for the From: header (case insensitive)'
to:
type: string
description: 'Partial match for the To:/Cc: headers (case insensitive)'
subject:
type: string
description: 'Partial match for the Subject: header (case insensitive)'
listId:
type: string
description: 'Partial match for the List-ID: header (case insensitive)'
text:
type: string
description: Fulltext search against message text
ha:
type: boolean
description: Does a message have to have an attachment or not
size:
type: number
description: 'Message size in bytes. If the value is a positive number then message needs to be larger, if negative then message needs to be smaller than abs(size) value'
description: Rules that a message must match
Action:
type: object
properties:
seen:
type: boolean
description: If true then mark matching messages as Seen
flag:
type: boolean
description: If true then mark matching messages as Flagged
delete:
type: boolean
description: If true then do not store matching messages
spam:
type: boolean
description: If true then store matching messags to Junk Mail folder
mailbox:
type: string
description: Mailbox ID to store matching messages to
targets:
type: array
items:
type: string
description: 'An array of forwarding targets. The value could either be an email address or a relay url to next MX server ("smtp://mx2.zone.eu:25") or an URL where mail contents are POSTed to'
description: Action to take with a matching message
SpecialUse:
enum:
- \Drafts
- \Junk
- \Sent
- \Trash
type: string
description: 'Either special use identifier or null. One of \Drafts, \Junk, \Sent or \Trash'
Envelope:
required:
- from
- rcpt
type: object
properties:
from:
type: string
description: Address from MAIL FROM
rcpt:
$ref: '#/components/schemas/Rcpt'
description: SMTP envelope (if available)
Rcpt:
required:
- value
- formatted
type: object
properties:
value:
type: string
description: RCPT TO address as provided by SMTP client
formatted:
type: string
description: Normalized RCPT address
description: Array of addresses from RCPT TO (should have just one normally)
Address:
required:
- name
- address
type: object
properties:
name:
type: string
description: Name of the sender/recipient
address:
type: string
description: Address of the sender/recipient
AddressOptionalName:
required:
- address
type: object
properties:
name:
type: string
description: Name of the sender
address:
type: string
description: Address of the sender
List:
required:
- id
- unsubscribe
type: object
properties:
id:
type: string
description: Value from List-ID header
unsubscribe:
type: string
description: Value from List-Unsubscribe header
description: If set then this message is from a mailing list
Outbound:
required:
- queueId
- entries
type: object
properties:
queueId:
type: string
description: Queue ID
entries:
type: array
items:
$ref: '#/components/schemas/OutboundQueueEntry'
description: Queued recipients
OutboundQueueEntry:
required:
- seq
- recipient
type: object
properties:
seq:
type: string
description: Queue target ID
recipient:
type: string
description: Target recipient
sendingZone:
type: string
description: Zone ID in ZoneMTA
queued:
type: string
description: ISO Date of the expected delivery time
Attachments:
required:
- id
- filename
- contentType
- disposition
- transferEncoding
- related
- sizeKb
type: object
properties:
id:
type: string
description: Attachment ID
hash:
type: string
description: SHA-256 hash of the contents of the attachment
filename:
type: string
description: Filename of the attachment
contentType:
type: string
description: MIME type
disposition:
type: string
description: Attachment disposition
transferEncoding:
type: string
description: Which transfer encoding was used (actual content when fetching attachments is not encoded)
related:
type: boolean
description: Was this attachment found from a multipart/related node. This usually means that this is an embedded image
sizeKb:
type: number
description: Approximate size of the attachment in kilobytes
description: List of attachments for this message
VerificationResults:
required:
- tls
- spf
- dkim
type: object
properties:
tls:
$ref: '#/components/schemas/Tls'
spf:
type: object
description: Domain name (either MFROM or HELO) of verified SPF or false if no SPF match was found
dkim:
type: object
description: Domain name of verified DKIM signature or false if no valid signature was found
description: 'Security verification info if message was received from MX. If this property is missing then do not automatically assume invalid TLS, SPF or DKIM.'
Tls:
required:
- name
- version
type: object
properties:
name:
type: object
description: 'Cipher name, eg "ECDHE-RSA-AES128-GCM-SHA256"'
version:
type: object
description: 'TLS version, eg "TLSv1/SSLv3"'
description: TLS information. Value is false if TLS was not used
Files:
required:
- id
- filename
- contentType
- size
type: object
properties:
id:
type: string
description: File ID
filename:
type: string
description: Filename of the attached file
contentType:
type: string
description: MIME type
size:
type: number
description: MIME type
description: 'List of files added to this message as attachments. Applies to Drafts, normal messages do not have this property. Needed to prevent uploading the same attachment every time a draft is updated'
Header:
required:
- key
- value
type: object
properties:
key:
type: string
description: Header key ('X-Mailer')
value:
type: string
description: Header value ('My Awesome Mailing Service')
AttachmentsUpload:
required:
- content
type: object
properties:
content:
type: string
description: Base64 encoded attachment content
filename:
type: string
description: Attachment filename
contentType:
type: string
description: MIME type for the attachment file
cid:
type: string
description: Content-ID value if you want to reference to this attachment from HTML formatted message
ReferenceWithAttachments:
required:
- mailbox
- id
- action
- attachments
type: object
properties:
mailbox:
type: string
description: Mailbox ID
id:
type: number
description: Message ID in Mailbox
action:
type: string
description: 'Either reply, replyAll or forward'
attachments:
type: array
items:
type: string
description: "If true, then includes all attachments from the original message. If it is an array of attachment ID's includes attachments from the list"
description: Optional referenced email. If uploaded message is a reply draft and relevant fields are not provided then these are resolved from the message to be replied to
Message:
required:
- id
- mailbox
type: object
properties:
id:
type: number
description: Message ID in mailbox
mailbox:
type: string
description: Mailbox ID the message was stored into
size:
type: number
description: Size of the RFC822 formatted email
description: Message information
title: ''
Forwarded:
required:
- seq
- type
- value
type: object
properties:
seq:
type: string
description: Sequence ID
type:
type: string
description: Target type
value:
type: string
description: Target address
Reference:
required:
- mailbox
- id
- action
type: object
properties:
mailbox:
type: string
description: Mailbox ID
id:
type: number
description: Message ID in Mailbox
action:
type: string
description: 'Either reply, replyAll or forward'
description: Optional referenced email. If submitted message is a reply and relevant fields are not provided then these are resolved from the message to be replied to
EnvelopeUpload:
type: object
properties:
from:
$ref: '#/components/schemas/AddressOptionalName'
to:
type: array
items:
$ref: '#/components/schemas/AddressOptionalName'
description: Recipients information
description: SMTP envelope. If not provided then resolved either from message headers or from referenced message
MessageWithQueueId:
required:
- mailbox
- id
- queueId
type: object
properties:
mailbox:
type: string
description: Mailbox ID the message was stored to
id:
type: number
description: Message ID in Mailbox
queueId:
type: string
description: Queue ID in MTA
description: Information about submitted Message
KeyInfo:
required:
- name
- address
- fingerprint
type: object
properties:
name:
type: string
description: Name listed in public key
address:
type: string
description: E-mail address listed in public key
fingerprint:
type: string
description: Fingerprint of the public key
description: Information about public key or false if key is not available
UserLimits:
required:
- quota
- recipients
- forwards
- received
- imapUpload
- imapDownload
- pop3Download
type: object
properties:
quota:
$ref: '#/components/schemas/Quota'
recipients:
$ref: '#/components/schemas/Recipients'
filters:
$ref: '#/components/schemas/Filters'
forwards:
$ref: '#/components/schemas/Forwards'
received:
$ref: '#/components/schemas/Received'
imapUpload:
$ref: '#/components/schemas/ImapUpload'
imapDownload:
$ref: '#/components/schemas/ImapDownload'
pop3Download:
$ref: '#/components/schemas/Pop3Download'
imapMaxConnections:
$ref: '#/components/schemas/ImapMaxConnections'
description: Account limits and usage
Quota:
required:
- allowed
- used
type: object
properties:
allowed:
type: number
description: Allowed quota of the user in bytes
used:
type: number
description: Space used in bytes
description: Quota usage limits
Recipients:
required:
- allowed
- used
- ttl
type: object
properties:
allowed:
type: number
description: How many messages per 24 hours can be sent
used:
type: number
description: How many messages are sent during current 24 hour period
ttl:
type: number
description: Time until the end of current 24 hour period
description: Sending quota
Filters:
required:
- allowed
- used
type: object
properties:
allowed:
type: number
description: How many filters are allowed
used:
type: number
description: How many filters have been created
description: Sending quota
Forwards:
required:
- allowed
- used
- ttl
type: object
properties:
allowed:
type: number
description: How many messages per 24 hours can be forwarded
used:
type: number
description: How many messages are forwarded during current 24 hour period
ttl:
type: number
description: Time until the end of current 24 hour period
description: Forwarding quota
Received:
required:
- allowed
- used
- ttl
type: object
properties:
allowed:
type: number
description: How many messages per 1 hour can be received
used:
type: number
description: How many messages are received during current 1 hour period
ttl:
type: number
description: Time until the end of current 1 hour period
description: Receiving quota
ImapUpload:
required:
- allowed
- used
- ttl
type: object
properties:
allowed:
type: number
description: 'How many bytes per 24 hours can be uploaded via IMAP. Only message contents are counted, not protocol overhead.'
used:
type: number
description: How many bytes are uploaded during current 24 hour period
ttl:
type: number
description: Time until the end of current 24 hour period
description: IMAP upload quota
ImapDownload:
required:
- allowed
- used
- ttl
type: object
properties:
allowed:
type: number
description: 'How many bytes per 24 hours can be downloaded via IMAP. Only message contents are counted, not protocol overhead.'
used:
type: number
description: How many bytes are downloaded during current 24 hour period
ttl:
type: number
description: Time until the end of current 24 hour period
description: IMAP download quota
Pop3Download:
required:
- allowed
- used
- ttl
type: object
properties:
allowed:
type: number
description: 'How many bytes per 24 hours can be downloaded via POP3. Only message contents are counted, not protocol overhead.'
used:
type: number
description: How many bytes are downloaded during current 24 hour period
ttl:
type: number
description: Time until the end of current 24 hour period
description: POP3 download quota
ImapMaxConnections:
required:
- allowed
- used
type: object
properties:
allowed:
type: number
description: How many parallel IMAP connections are permitted
used:
type: number
description: How many parallel IMAP connections are currenlty in use
Mailboxes:
type: object
properties:
sent:
type: string
description: Path of Sent Mail folder
junk:
type: string
description: Path of spam folder
drafts:
type: string
description: Path of drafts folder
trash:
type: string
description: Path of trash folder
description: Optional names for special mailboxes
SuccessResponse:
required:
- success
type: object
properties:
success:
type: boolean
description: Indicates successful response
UploadMessageRequest:
type: object
properties:
unseen:
type: boolean
description: Is the message unseen or not
draft:
type: boolean
description: Is the message a draft or not
flagged:
type: boolean
description: Is the message flagged or not
raw:
type: string
description: 'base64 encoded message source. Alternatively, you can provide this value as POST body by using message/rfc822 MIME type. If raw message is provided then it overrides any other mail configuration'
from:
$ref: '#/components/schemas/Address'
to:
type: array
items:
$ref: '#/components/schemas/AddressOptionalName'
description: 'Addresses for the To: header'
cc:
type: array
items:
$ref: '#/components/schemas/AddressOptionalName'
description: 'Addresses for the Cc: header'
bcc:
type: array
items:
$ref: '#/components/schemas/AddressOptionalName'
description: 'Addresses for the Bcc: header'
subject:
type: string
description: Message subject. If not then resolved from Reference message
text:
type: string
description: Plaintext message
html:
type: string
description: HTML formatted message
headers:
type: array
items:
$ref: '#/components/schemas/Header'
description: Custom headers for the message. If reference message is set then In-Reply-To and References headers are set automaticall y
files:
type: array
items:
type: string
description: Attachments as storage file IDs. NB! When retrieving message info then an array of objects is returned. When uploading a message then an array of IDs is used.
attachments:
type: array
items:
$ref: '#/components/schemas/AttachmentsUpload'
description: Attachments for the message
metaData:
description: 'Optional metadata, must be an object or JSON formatted string'
oneOf:
- type: object
- type: string
reference:
$ref: '#/components/schemas/ReferenceWithAttachments'
bimi:
type: object
description: Marks BIMI verification as passed for a domain. NB! BIMI record and logo files for the domain must be valid.
required:
- domain
properties:
domain:
type: string
description: Domain name for the BIMI record. It does not have to be the same as the From address.
selector:
type: string
description: Optional BIMI selector
replacePrevious:
type: object
description: If set, then deletes a previous message when storing the new one. Useful when uploading a new Draft message.
required:
- id
properties:
mailbox:
type: string
description: Mailbox ID. Defaults to the mailbox of the uploaded message.
id:
type: number
description: Message ID in Mailbox
sess:
type: string
description: Session identifier for the logs
ip:
type: string
description: IP address for the logs
ForwardStoredMessageRequest:
type: object
properties:
target:
type: number
description: Number of original forwarding target
addresses:
type: array
description: An array of additional forward targets
items:
type: string
UploadMessageResponse:
required:
- success
- message
type: object
properties:
success:
type: boolean
description: Indicates successful response
message:
$ref: '#/components/schemas/Message'
previousDeleted:
type: boolean
description: Set if replacing a previous message was requested
ForwardStoredMessageResponse:
required:
- success
- queueId
- forwarded
type: object
properties:
success:
type: boolean
description: Indicates successful response
queueId:
type: string
description: Message ID in outbound queue
forwarded:
type: array
items:
$ref: '#/components/schemas/Forwarded'
description: Information about forwarding targets
UploadFileResponse:
required:
- success
- id
type: object
properties:
success:
type: boolean
description: Indicates successful response
id:
type: object
description: File ID
GetForwardedAddressResponse:
required:
- success
- id
- address
- name
- targets
- limits
- autoreply
- created
- tags
- forwardedDisabled
type: object
properties:
success:
type: boolean
description: Indicates successful response
id:
type: string
description: ID of the Address
address:
type: string
description: E-mail address string
name:
type: string
description: Identity name
targets:
type: array
items:
type: string
description: List of forwarding targets
limits:
$ref: '#/components/schemas/AddressLimits'
autoreply:
$ref: '#/components/schemas/AutoreplyInfo'
created:
type: string
description: Datestring of the time the address was created
format: date-time
tags:
type: array
items:
type: string
description: List of tags associated with the Address
forwardedDisabled:
type: boolean
description: If true then the forwarded address is disabled
GetUserAddressResponse:
required:
- success
- id
- name
- address
- tags
- main
- created
type: object
properties:
success:
type: boolean
description: Indicates successful response
id:
type: string
description: ID of the Address
name:
type: string
description: Identity name
address:
type: string
description: E-mail address string
tags:
type: array
items:
type: string
description: List of tags associated with the Address
metaData:
type: object
description: Metadata object (if available)
internalData:
type: object
description: 'Internal metadata object (if available), not included for user-role requests'
main:
type: boolean
description: Indicates if this is the default address for the User
created:
type: string
description: Datestring of the time the address was created
format: date-time
ResolveAddressResponse:
required:
- success
- id
- address
- name
- user
- targets
- limits
- autoreply
- tags
- created
type: object
properties:
success:
type: boolean
description: Indicates successful response
id:
type: string
description: ID of the Address
address:
type: string
description: E-mail address string
name:
type: string
description: Identity name
user:
type: string
description: ID of the user if the address belongs to a User
targets:
type: array
items:
type: string
description: List of forwarding targets if this is a Forwarded address
limits:
$ref: '#/components/schemas/AddressLimits'
autoreply:
$ref: '#/components/schemas/AutoreplyInfo'
tags:
type: array
items:
type: string
description: List of tags associated with the Address
created:
type: string
description: Datestring of the time the address was created
format: date-time
GetAddressesResponse:
required:
- success
- total
- page
- previousCursor
- nextCursor
- results
type: object
properties:
success:
type: boolean
description: Indicates successful response
total:
type: number
description: How many results were found
page:
type: number
description: Current page number. Derived from page query argument
previousCursor:
type: string
description: Either a cursor string or false if there are not any previous results
nextCursor:
type: string
description: Either a cursor string or false if there are not any next results
results:
type: array
items:
$ref: '#/components/schemas/GetAddressesResult'
description: Address listing
GetUserAddressesResponse:
required:
- success
- results
type: object
properties:
success:
type: boolean
description: Indicates successful response
results:
type: array
items:
$ref: '#/components/schemas/GetUserAddressesResult'
description: Address listing
CreateUserAddressResponse:
required:
- success
- id
type: object
properties:
success:
type: boolean
description: Indicates successful response
id:
type: string
description: ID of the Address
GetUserAddressesregisterResponse:
required:
- success
- results
type: object
properties:
success:
type: boolean
description: Indicates successful response
results:
type: array
items:
$ref: '#/components/schemas/GetUserAddressesregisterResult'
description: Address listing
CreateForwardedAddressResponse:
required:
- success
- id
type: object
properties:
success:
type: boolean
description: Indicates successful response
id:
type: string
description: ID of the Address
GetASPResponse:
required:
- success
- id
- description
- scopes
- lastUse
- created
type: object
properties:
success:
type: boolean
description: Indicates successful response
id:
type: string
description: ID of the Application Password
description:
type: string
description: Description
scopes:
type: array
items:
$ref: '#/components/schemas/AspScopes'
description: Allowed scopes for the Application Password
lastUse:
$ref: '#/components/schemas/LastUse'
created:
type: string
description: Datestring
format: date-time
GetASPsResponse:
required:
- success
- results
type: object
properties:
success:
type: boolean
description: Indicates successful response
results:
type: array
items:
$ref: '#/components/schemas/GetASPsResult'
description: Event listing
CreateASPResponse:
required:
- success
- id
- password
- mobileconfig
type: object
properties:
success:
type: boolean
description: Indicates successful response
example: true
id:
type: string
description: ID of the Application Password
example: '60b91b5cc419d97445f8e57d'
password:
type: string
description: 'Application Specific Password. Generated password is whitespace agnostic, so it could be displayed to the client as "abcd efgh ijkl mnop" instead of "abcdefghijklmnop"'
example: 'aaaaaaaaaaaaaaaa'
mobileconfig:
type: string
description: Base64 encoded mobileconfig file. Generated profile file should be sent to the client with Content-Type value of application/x-apple-aspen-config.
GetArchivedMessagesResponse:
required:
- success
- total
- page
- previousCursor
- nextCursor
- results
type: object
properties:
success:
type: boolean
description: Indicates successful response
total:
type: number
description: How many results were found
page:
type: number
description: Current page number. Derived from page query argument
previousCursor:
type: string
description: Either a cursor string or false if there are not any previous results
nextCursor:
type: string
description: Either a cursor string or false if there are not any next results
results:
type: array
items:
$ref: '#/components/schemas/GetArchivedMessagesResult'
description: Message listing
RestoreMessageResponse:
required:
- success
- mailbox
- id
type: object
properties:
success:
type: boolean
description: Indicates successful response
mailbox:
type: string
description: Maibox ID the message was moved to
id:
type: number
description: New ID for the Message
GetAuditResponse:
required:
- success
- user
- expires
type: object
properties:
success:
type: boolean
description: Indicates successful response
user:
type: string
description: Users unique ID.
start:
type: string
description: Start time as ISO date
format: date-time
end:
type: string
description: End time as ISO date
format: date-time
expires:
type: string
description: Expiration date. Audit data is deleted after this date
format: date-time
CreateAuditResponse:
required:
- success
- id
type: object
properties:
success:
type: boolean
description: Indicates successful response
id:
type: string
description: ID for the created Audit
AuthenticateResponse:
required:
- success
- id
- username
- scope
- require2fa
- requirePasswordChange
type: object
properties:
success:
type: boolean
description: Indicates successful response
id:
type: string
description: ID of authenticated User
username:
type: string
description: Username of authenticated User
scope:
type: string
description: The scope this authentication is valid for
require2fa:
type: array
items:
type: string
description: List of enabled 2FA mechanisms
requirePasswordChange:
type: boolean
description: Indicates if account hassword has been reset and should be replaced
token:
type: string
description: If access token was requested then this is the value to use as access token when making API requests on behalf of logged in user.
GetAuthlogResponse:
required:
- success
- total
- page
- previousCursor
- nextCursor
- results
type: object
properties:
success:
type: boolean
description: Indicates successful response
total:
type: number
description: How many results were found
page:
type: number
description: Current page number. Derived from page query argument
previousCursor:
type: string
description: Either a cursor string or false if there are not any previous results
nextCursor:
type: string
description: Either a cursor string or false if there are not any next results
results:
type: array
items:
$ref: '#/components/schemas/GetAuthlogResult'
description: Event listing
GetAuthlogEventResponse:
required:
- success
- id
- action
- result
- created
type: object
properties:
success:
type: boolean
description: Indicates successful response
id:
type: string
description: ID of the Event
action:
type: string
description: Action identifier
result:
type: string
description: Did the action succeed
sess:
type: string
description: Session identifier
ip:
type: string
description: IP address of the Event
created:
type: string
description: Datestring of the Event time
format: date-time
GetAutoreplyResponse:
type: object
properties:
success:
type: boolean
description: Indicates successful response
status:
type: boolean
description: Is the autoreply enabled (true) or not (false)
name:
type: string
description: 'Name that is used for the From: header in autoreply message'
subject:
type: string
description: Subject line for the autoreply. If empty then uses subject of the original message
html:
type: string
description: HTML formatted content of the autoreply message
text:
type: string
description: Plaintext formatted content of the autoreply message
start:
type: string
description: Datestring of the start of the autoreply
format: date-time
end:
type: string
description: Datestring of the end of the autoreply
format: date-time
required:
- success
- status
- name
- subject
- html
- text
- start
- end
GetDkimKeyResponse:
required:
- success
- id
- domain
- selector
- description
- fingerprint
- publicKey
- dnsTxt
- created
type: object
properties:
success:
type: boolean
description: Indicates successful response
id:
type: string
description: ID of the DKIM
domain:
type: string
description: The domain this DKIM key applies to
selector:
type: string
description: DKIM selector
description:
type: string
description: Key description
fingerprint:
type: string
description: Key fingerprint (SHA1)
publicKey:
type: string
description: 'Public key in DNS format (no prefix/suffix, single line)'
dnsTxt:
$ref: '#/components/schemas/DnsTxt'
created:
type: string
description: Datestring
format: date-time
GetDkimKeysResponse:
required:
- success
- total
- page
- previousCursor
- nextCursor
- results
type: object
properties:
success:
type: boolean
description: Indicates successful response
total:
type: number
description: How many results were found
page:
type: number
description: Current page number. Derived from page query argument
previousCursor:
type: string
description: Either a cursor string or false if there are not any previous results
nextCursor:
type: string
description: Either a cursor string or false if there are not any next results
results:
type: array
items:
$ref: '#/components/schemas/GetDkimKeysResult'
description: DKIM listing
GetTLSCertsResponse:
required:
- success
- total
- page
- previousCursor
- nextCursor
- results
type: object
properties:
success:
type: boolean
description: Indicates successful response
total:
type: number
description: How many results were found
example: 541
page:
type: number
description: Current page number. Derived from page query argument
example: 1
previousCursor:
type: string
description: Either a cursor string or false if there are not any previous results
example: false
nextCursor:
type: string
description: Either a cursor string or false if there are not any next results
example: 'eyIkb2lkIjoiNWRmMWZkMmQ3NzkyNTExOGI2MDdjNjg0In0'
results:
type: array
items:
$ref: '#/components/schemas/GetTLSCertResult'
description: Certificate listing
UpdateDkimKeyResponse:
required:
- success
- id
- domain
- selector
- description
- fingerprint
- publicKey
- dnsTxt
type: object
properties:
success:
type: boolean
description: Indicates successful response
id:
type: string
description: ID of the DKIM
domain:
type: string
description: The domain this DKIM key applies to
selector:
type: string
description: DKIM selector
description:
type: string
description: Key description
fingerprint:
type: string
description: Key fingerprint (SHA1)
publicKey:
type: string
description: 'Public key in DNS format (no prefix/suffix, single line)'
dnsTxt:
$ref: '#/components/schemas/DnsTxt'
UpdateTLSCertResponse:
required:
- success
- id
- servername
- fingerprint
type: object
properties:
success:
type: boolean
description: Indicates successful response
id:
type: string
description: ID of the certificate
example: '609d201236d1d936948f23b1'
servername:
type: string
description: The server name this certificate applies to
example: 'imap.example.com'
description:
type: string
description: Key description
example: 'Some notes about this certificate'
fingerprint:
type: string
description: Key fingerprint (SHA1)
example: '59:8b:ed:11:5b:4f:ce:b4:e5:1a:2f:35:b1:6f:7d:93:40:c8:2f:9c:38:3b:cd:f4:04:92:a1:0e:17:2c:3f:f3'
expires:
type: string
description: Certificate expiration time
example: '2021-06-26T21:55:55.000Z'
format: date-time
altNames:
type: array
description: SAN servernames listed in the certificate
items:
type: string
example: ['example.com', 'www.example.com']
ResolveIdResponse:
required:
- success
- id
type: object
properties:
success:
type: boolean
description: Indicates successful response
example: true
id:
type: string
description: Unique ID (24 byte hex)
example: '609d201236d1d936948f23b1'
RecoverInfoResponse:
type: object
required:
- success
- user
- username
- storageUsed
- tags
- deleted
- recoverableAddresses
properties:
success:
type: boolean
description: Indicates successful response
example: true
user:
type: string
description: ID of the deleted User
example: '609d201236d1d936948f23b1'
username:
type: string
description: Username of the User
example: andris
storageUsed:
type: number
description: Calculated quota usage for the user
example: 2423070
tags:
type: array
items:
type: string
description: List of tags associated with the User
example: ['domain:andrisreinman.com']
deleted:
type: string
description: Datestring of the time the user was deleted
format: date-time
recoverableAddresses:
type: array
items:
type: string
description: List of email addresses that can be restored
example: ['andris@andrisreinman.com']
GetAllowedDomainResponse:
required:
- success
- results
type: object
properties:
success:
type: boolean
description: Indicates successful response
results:
type: array
items:
$ref: '#/components/schemas/GetAllowedDomainResult'
description: Domain list
CreateAllowedDomainResponse:
required:
- success
- id
type: object
properties:
success:
type: boolean
description: Indicates successful response
id:
type: string
description: ID for the created record
GetBlockedDomainResponse:
required:
- success
- results
type: object
properties:
success:
type: boolean
description: Indicates successful response
results:
type: array
items:
$ref: '#/components/schemas/GetBlockedDomainResult'
description: Domain list
CreateBlockedDomainResponse:
required:
- success
- id
type: object
properties:
success:
type: boolean
description: Indicates successful response
id:
type: string
description: ID for the created record
GetDomainAliasResponse:
required:
- success
- id
- alias
- domain
- created
type: object
properties:
success:
type: boolean
description: Indicates successful response
id:
type: string
description: ID of the Alias
alias:
type: string
description: Alias domain
domain:
type: string
description: Alias target
created:
type: string
description: Datestring of the time the alias was created
format: date-time
GetDomainAliasesResponse:
required:
- success
- total
- page
- previousCursor
- nextCursor
- results
type: object
properties:
success:
type: boolean
description: Indicates successful response
total:
type: number
description: How many results were found
page:
type: number
description: Current page number. Derived from page query argument
previousCursor:
type: string
description: Either a cursor string or false if there are not any previous results
nextCursor:
type: string
description: Either a cursor string or false if there are not any next results
results:
type: array
items:
$ref: '#/components/schemas/GetDomainAliasesResult'
description: Aliases listing
CreateDomainAliasResponse:
required:
- success
- id
type: object
properties:
success:
type: boolean
description: Indicates successful response
id:
type: string
description: ID of the Domain Alias
GetFilterResponse:
required:
- success
- id
- name
- query
- action
- disabled
type: object
properties:
success:
type: boolean
description: Indicates successful response
id:
type: string
description: ID for the Filter
name:
type: string
description: Name of the Filter
query:
$ref: '#/components/schemas/Query'
action:
$ref: '#/components/schemas/Action'
disabled:
type: boolean
description: 'If true, then this filter is ignored'
metaData:
type: object
description: Custom metadata value
UpdateFilterResponse:
required:
- success
- id
type: object
properties:
success:
type: boolean
description: Indicates successful response
id:
type: string
description: ID for the created Filter
GetAllFiltersResponse:
required:
- success
- total
- page
- previousCursor
- nextCursor
- results
type: object
properties:
success:
type: boolean
description: Indicates successful response
total:
type: number
description: How many results were found
page:
type: number
description: Current page number. Derived from page query argument
previousCursor:
type: string
description: Either a cursor string or false if there are not any previous results
nextCursor:
type: string
description: Either a cursor string or false if there are not any next results
results:
type: array
items:
$ref: '#/components/schemas/GetAllFiltersResult'
description: Address listing
GetFiltersResponse:
required:
- success
- limits
- results
type: object
properties:
success:
type: boolean
description: Indicates successful response
limits:
type: object
description: Filter usage limits for the user account
properties:
allowed:
type: number
description: How many filters are allowed
used:
type: number
description: How many filters have been created
results:
type: array
items:
$ref: '#/components/schemas/GetFiltersResult'
description: Filter description
GetMailboxResponse:
required:
- success
- id
- name
- path
- specialUse
- modifyIndex
- subscribed
- hidden
- total
- unseen
type: object
properties:
success:
type: boolean
description: Indicates successful response
id:
type: string
description: Mailbox ID
name:
type: string
description: Name for the mailbox (unicode string)
path:
type: string
description: 'Full path of the mailbox, folders are separated by slashes, ends with the mailbox name (unicode string)'
specialUse:
$ref: '#/components/schemas/SpecialUse'
modifyIndex:
type: number
description: Modification sequence number. Incremented on every change in the mailbox.
subscribed:
type: boolean
description: Mailbox subscription status. IMAP clients may unsubscribe from a folder.
hidden:
type: boolean
description: Is the folder hidden or not
total:
type: number
description: How many messages are stored in this mailbox
unseen:
type: number
description: How many unseen messages are stored in this mailbox
GetMailboxesResponse:
required:
- success
- results
type: object
properties:
success:
type: boolean
description: Indicates successful response
results:
type: array
items:
$ref: '#/components/schemas/GetMailboxesResult'
description: List of user mailboxes
CreateMailboxResponse:
required:
- success
- id
type: object
properties:
success:
type: boolean
description: Indicates successful response
id:
type: string
description: Mailbox ID
GetMessageResponse:
required:
- success
- id
- mailbox
- user
- envelope
- thread
- from
- subject
- messageId
- date
- seen
- deleted
- flagged
- draft
- contentType
type: object
properties:
success:
type: boolean
description: Indicates successful response
id:
type: number
description: ID of the Message
mailbox:
type: string
description: ID of the Mailbox
user:
type: string
description: ID of the User
envelope:
$ref: '#/components/schemas/Envelope'
thread:
type: string
description: ID of the Thread
from:
$ref: '#/components/schemas/Address'
to:
$ref: '#/components/schemas/Address'
cc:
$ref: '#/components/schemas/Address'
bcc:
$ref: '#/components/schemas/Address'
subject:
type: string
description: Message subject
messageId:
type: string
description: Message-ID header
date:
type: string
description: Date string from header
format: date-time
idate:
type: string
description: Date string of receive time
format: date-time
list:
$ref: '#/components/schemas/List'
expires:
type: string
description: 'Datestring, if set then indicates the time after this message is automatically deleted'
seen:
type: boolean
description: Does this message have a \Seen flag
deleted:
type: boolean
description: Does this message have a \Deleted flag
flagged:
type: boolean
description: Does this message have a \Flagged flag
draft:
type: boolean
description: Does this message have a \Draft flag
html:
type: array
items:
type: string
description: 'An array of HTML string. Every array element is from a separate mime node, usually you would just join these to a single string'
text:
type: string
description: Plaintext content of the message
attachments:
type: array
items:
$ref: '#/components/schemas/Attachments'
description: Attachments for the message
verificationResults:
$ref: '#/components/schemas/VerificationResults'
bimi:
type: object
description: BIMI logo info. If logo validation failed in any way, then this property is not set
properties:
certified:
type: boolean
description: If true, then this logo is from a VMC file
url:
type: string
description: URL of the resource the logo was retrieved from
image:
type: string
description: Data URL for the SVG image
contentType:
$ref: '#/components/schemas/ContentType'
metaData:
type: object
description: Custom metadata object set for this message
reference:
type: object
description: Referenced message info
files:
$ref: '#/components/schemas/Files'
outbound:
type: array
items:
$ref: '#/components/schemas/Outbound'
description: Outbound queue entries
DeleteMessagesInMailboxResponse:
required:
- success
- deleted
type: object
properties:
success:
type: boolean
description: Indicates successful response
deleted:
type: number
description: Indicates count of deleted messages
GetMessagesResponse:
required:
- success
- total
- page
- previousCursor
- nextCursor
- results
type: object
properties:
success:
type: boolean
description: Indicates successful response
total:
type: number
description: How many results were found
page:
type: number
description: Current page number. Derived from page query argument
previousCursor:
type: string
description: Either a cursor string or false if there are not any previous results
nextCursor:
type: string
description: Either a cursor string or false if there are not any next results
results:
type: array
items:
$ref: '#/components/schemas/GetMessagesResult'
description: Message listing
UpdateMessageResponse:
required:
- success
- id
- updated
type: object
properties:
success:
type: boolean
description: Indicates successful response
id:
type: array
items:
type: object
description: If messages were moved then lists new ID values. Array entry is an array with first element pointing to old ID and second to new ID
updated:
type: number
description: 'If messages were not moved, then indicates the number of updated messages'
SearchMessagesResponse:
required:
- success
- total
- page
- previousCursor
- nextCursor
- results
type: object
properties:
success:
type: boolean
description: Indicates successful response
total:
type: number
description: How many results were found
page:
type: number
description: Current page number. Derived from page query argument
previousCursor:
type: string
description: Either a cursor string or false if there are not any previous results
nextCursor:
type: string
description: Either a cursor string or false if there are not any next results
results:
type: array
items:
$ref: '#/components/schemas/GetMessagesResult'
description: Message listing
SubmitStoredMessageResponse:
type: object
properties:
success:
type: boolean
description: Indicates successful response
queueId:
type: string
description: Message ID in outbound queue
message:
$ref: '#/components/schemas/Message'
required:
- success
- queueId
GetFilesResponse:
required:
- success
- total
- page
- previousCursor
- nextCursor
- results
type: object
properties:
success:
type: boolean
description: Indicates successful response
total:
type: number
description: How many results were found
page:
type: number
description: Current page number. Derived from page query argument
previousCursor:
type: string
description: Either a cursor string or false if there are not any previous results
nextCursor:
type: string
description: Either a cursor string or false if there are not any next results
results:
type: array
items:
$ref: '#/components/schemas/GetFilesResult'
description: File listing
SubmitMessageResponse:
type: object
properties:
success:
type: boolean
description: Indicates successful response
message:
$ref: '#/components/schemas/MessageWithQueueId'
required:
- success
- message
SetupTotp2FAResponse:
required:
- success
- seed
- qrcode
type: object
properties:
success:
type: boolean
description: Indicates successful response
seed:
type: string
description: Generated TOTP seed value
qrcode:
type: string
description: Base64 encoded QR code
GetUserResponse:
required:
- success
- id
- username
- name
- address
- retention
- enabled2fa
- autoreply
- encryptMessages
- encryptForwarded
- pubKey
- keyInfo
- metaData
- internalData
- targets
- spamLevel
- limits
- tags
- disabledScopes
- hasPasswordSet
- activated
- disabled
- suspended
type: object
properties:
success:
type: boolean
description: Indicates successful response
id:
type: string
description: Users unique ID (24 byte hex)
username:
type: string
description: Username of the User
name:
type: string
description: Name of the User
address:
type: string
description: Main email address of the User
retention:
type: number
description: Default retention time (in ms). false if not enabled
enabled2fa:
type: array
items:
type: string
description: List of enabled 2FA methods
autoreply:
type: boolean
description: Is autoreply enabled or not (start time may still be in the future or end time in the past)
encryptMessages:
type: boolean
description: If true then received messages are encrypted
encryptForwarded:
type: boolean
description: If true then forwarded messages are encrypted
pubKey:
type: string
description: Public PGP key for the User that is used for encryption
keyInfo:
$ref: '#/components/schemas/KeyInfo'
metaData:
type: object
description: Custom metadata object set for this user
internalData:
type: object
description: Custom interna metadata object set for this user. Not available for user-role tokens
targets:
type: array
items:
type: string
description: List of forwarding targets
spamLevel:
type: number
description: 'Relative scale for detecting spam. 0 means that everything is spam, 100 means that nothing is spam'
limits:
$ref: '#/components/schemas/UserLimits'
tags:
type: array
items:
type: string
description: List of tags associated with the User
fromWhitelist:
type: array
items:
type: string
description: A list of additional email addresses this user can send mail from. Wildcard is allowed.
disabledScopes:
type: array
items:
$ref: '#/components/schemas/DisabledScopes'
description: Disabled scopes for this user
hasPasswordSet:
type: boolean
description: If true then the User has a password set and can authenticate
activated:
type: boolean
description: Is the account activated
disabled:
type: boolean
description: If true then the user can not authenticate or receive any new mail
suspended:
type: boolean
description: If true then the user can not authenticate
GetUsersResponse:
required:
- success
- total
- page
- previousCursor
- nextCursor
- results
type: object
properties:
success:
type: boolean
description: Indicates successful response
total:
type: number
description: How many results were found
page:
type: number
description: Current page number. Derived from page query argument
previousCursor:
type: string
description: Either a cursor string or false if there are not any previous results
nextCursor:
type: string
description: Either a cursor string or false if there are not any next results
results:
type: array
items:
$ref: '#/components/schemas/GetUsersResult'
description: User listing
CreateUserResponse:
required:
- success
- id
type: object
properties:
success:
type: boolean
description: Indicates successful response
id:
type: string
description: ID for the created User
RecalculateQuotaResponse:
required:
- success
- storageUsed
type: object
properties:
success:
type: boolean
description: Indicates successful response
storageUsed:
type: number
description: Calculated quota usage for the user
ResetUserPasswordResponse:
required:
- success
- password
type: object
properties:
success:
type: boolean
description: Indicates successful response
password:
type: string
description: Temporary password
GetWebhooksResponse:
required:
- success
- total
- page
- previousCursor
- nextCursor
- results
type: object
properties:
success:
type: boolean
description: Indicates successful response
total:
type: number
description: How many results were found
page:
type: number
description: Current page number. Derived from page query argument
previousCursor:
type: string
description: Either a cursor string or false if there are not any previous results
nextCursor:
type: string
description: Either a cursor string or false if there are not any next results
results:
type: array
items:
$ref: '#/components/schemas/GetWebhooksResult'
description: Webhook listing
CreateWebhookResponse:
required:
- success
- id
type: object
properties:
success:
type: boolean
description: Indicates successful response
id:
type: string
description: ID of the Webhook
GetSettingResponse:
required:
- success
- id
type: object
properties:
success:
type: boolean
description: Indicates successful response
key:
type: string
description: Key of the Setting
value:
oneOf:
- type: string
- type: number
description: Setting value
GetSettingsResponse:
required:
- success
- settings
type: object
properties:
success:
type: boolean
description: Indicates successful response
filter:
type: string
description: Partial match if requested
settings:
type: array
items:
$ref: '#/components/schemas/GetSettingsResult'
description: Setting listing
CreateSettingResponse:
required:
- success
- id
type: object
properties:
success:
type: boolean
description: Indicates successful response
key:
type: string
description: Key of the Setting
UpdateForwardedAddressRequest:
type: object
description: ''
properties:
address:
type: string
description: 'New address. Only affects normal addresses, special addresses that include * can not be changed'
name:
type: string
description: Identity name
targets:
type: array
description: 'An array of forwarding targets. The value could either be an email address or a relay url to next MX server ("smtp://mx2.zone.eu:25") or an URL where mail contents are POSTed to. If set then overwrites previous targets array'
items:
type: string
forwards:
type: number
description: Daily allowed forwarding count for this address
tags:
type: array
description: A list of tags associated with this address
items:
type: string
metaData:
description: 'Optional metadata, must be an object or JSON formatted string'
oneOf:
- type: object
- type: string
internalData:
description: 'Optional metadata for internal use, must be an object or JSON formatted string of an object. Not available for user-role tokens'
oneOf:
- type: object
- type: string
forwardedDisabled:
type: boolean
description: If true then disables forwarded address (stops forwarding messages)
autoreply:
$ref: '#/components/schemas/Autoreply'
UpdateUserAddressRequest:
type: object
properties:
name:
type: string
description: Identity name
address:
type: string
description: 'New address if you want to rename existing address. Only affects normal addresses, special addresses that include * can not be changed'
main:
type: boolean
description: Indicates if this is the default address for the User
metaData:
description: 'Optional metadata, must be an object or JSON formatted string'
oneOf:
- type: object
- type: string
internalData:
description: 'Optional metadata for internal use, must be an object or JSON formatted string of an object. Not available for user-role tokens'
oneOf:
- type: object
- type: string
tags:
type: array
description: A list of tags associated with this address
items:
type: string
required:
- main
CreateUserAddressRequest:
required:
- address
type: object
properties:
address:
type: string
description: E-mail Address
name:
type: string
description: Identity name
tags:
type: array
items:
type: string
description: A list of tags associated with this address
main:
type: boolean
description: Indicates if this is the default address for the User
allowWildcard:
type: boolean
description: 'If true then address value can be in the form of `*@example.com`, `*suffix@example.com` and `username@*`, otherwise using * is not allowed. Static suffix can be up to 32 characters long.'
metaData:
description: 'Optional metadata, must be an object or JSON formatted string'
oneOf:
- type: object
- type: string
internalData:
description: 'Optional metadata for internal use, must be an object or JSON formatted string of an object. Not available for user-role tokens'
oneOf:
- type: object
- type: string
CreateForwardedAddressRequest:
required:
- address
type: object
properties:
address:
type: string
description: E-mail Address
name:
type: string
description: Identity name
targets:
type: array
items:
type: string
description: 'An array of forwarding targets. The value could either be an email address or a relay url to next MX server ("smtp://mx2.zone.eu:25") or an URL where mail contents are POSTed to'
forwards:
type: number
description: Daily allowed forwarding count for this address
allowWildcard:
type: boolean
description: 'If true then address value can be in the form of `*@example.com`, otherwise using * is not allowed'
tags:
type: array
items:
type: string
description: A list of tags associated with this address
metaData:
description: 'Optional metadata, must be an object or JSON formatted string'
oneOf:
- type: object
- type: string
internalData:
description: 'Optional metadata for internal use, must be an object or JSON formatted string of an object. Not available for user-role tokens'
oneOf:
- type: object
- type: string
autoreply:
$ref: '#/components/schemas/Autoreply'
RenameDomainRequest:
required:
- oldDomain
- newDomain
type: object
properties:
oldDomain:
type: string
description: Old Domain Name
newDomain:
type: string
description: New Domain Name
CreateASPRequest:
required:
- description
- scopes
type: object
properties:
description:
type: string
description: Description
scopes:
type: array
items:
$ref: '#/components/schemas/AspScopes'
description: List of scopes this Password applies to. Special scope "*" indicates that this password can be used for any scope except "master"
example: ['imap', 'smtp']
generateMobileconfig:
type: boolean
description: If true then result contains a mobileconfig formatted file with account config
example: true
address:
type: string
description: E-mail address to be used as the account address in mobileconfig file. Must be one of the listed identity addresses of the user. Defaults to the main address of the user
example: 'user@example.com'
password:
type: string
description: Optional pregenerated password. Must be 16 characters, latin letters only.
example: 'aaaaaaaaaaaaaaaa'
ttl:
type: number
description: 'TTL in seconds for this password. Every time password is used, TTL is reset to this value'
example: 3600000
sess:
type: string
description: Session identifier for the logs
ip:
type: string
description: IP address for the logs
example: '127.0.0.1'
RestoreMessageRequest:
type: object
properties:
mailbox:
type: string
description: ID of the target Mailbox. If not set then original mailbox is used.
RestoreMessagesRequest:
required:
- start
- end
type: object
properties:
start:
type: string
description: Datestring
format: date-time
end:
type: string
description: Datestring
format: date-time
CreateAuditRequest:
required:
- user
- expires
type: object
properties:
user:
type: string
description: Users unique ID.
start:
type: string
description: Start time as ISO date
format: date-time
end:
type: string
description: End time as ISO date
format: date-time
expires:
type: string
description: Expiration date. Audit data is deleted after this date
format: date-time
AuthenticateRequest:
required:
- username
- password
type: object
properties:
username:
type: string
description: Username or E-mail address
password:
type: string
description: Password
protocol:
type: string
description: Application identifier for security logs
scope:
type: string
description: 'Required scope. One of master, imap, smtp, pop3'
token:
type: boolean
description: If true then generates a temporary access token that is valid for this user. Only available if scope is "master". When using user tokens then you can replace user ID in URLs with "me".
sess:
type: string
description: Session identifier for the logs
ip:
type: string
description: IP address for the logs
title: ''
UpdateAutoreplyRequest:
type: object
properties:
status:
type: boolean
description: Is the autoreply enabled (true) or not (false)
name:
type: string
description: 'Name that is used for the From: header in autoreply message'
subject:
type: string
description: Subject line for the autoreply. If empty then uses subject of the original message
html:
type: string
description: HTML formatted content of the autoreply message
text:
type: string
description: Plaintext formatted content of the autoreply message
start:
type: string
description: Datestring of the start of the autoreply or boolean false to disable start checks
format: date-time
end:
type: string
description: Datestring of the end of the autoreply or boolean false to disable end checks
format: date-time
UpdateDkimKeyRequest:
required:
- domain
- selector
type: object
properties:
domain:
type: string
description: Domain name this DKIM key applies to. Use "*" as a special value that will be used for domains that do not have their own DKIM key set
selector:
type: string
description: Selector for the key
description:
type: string
description: Key description
privateKey:
type: string
description: 'Pem formatted DKIM private key. If not set then a new 2048 bit RSA key is generated, beware though that it can take several seconds to complete.'
UpdateTLSCertRequest:
required:
- servername
type: object
properties:
servername:
type: string
description: Server name this TLS certificate applies to
example: imap.example.com
acme:
type: boolean
description: If true then private key and certificate are managed automatically by ACME
example: false
privateKey:
type: string
description: PEM formatted TLS private key. Optional if certificate is managed by ACME
example: "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADA..."
cert:
type: string
description: 'PEM formatted TLS certificate or a certificate bundle with concatenated certificate and CA chain. Optional if certificate is managed by ACME'
example: "-----BEGIN CERTIFICATE-----\nMIIDEDCCAfg..."
ca:
type: array
description: 'CA chain certificates. Not needed if `cert` value is a bundle'
items:
type: string
description: 'PEM formatted TLS certificate'
example: "-----BEGIN CERTIFICATE-----\nMIIDEDCCAfgs..."
description:
type: string
description: Certificate description
example: 'Some notes about this certificate'
CreateAllowedDomainRequest:
required:
- domain
type: object
properties:
domain:
type: string
description: Domain name to allowlist for users/addresses that include this tag
CreateBlockedDomainRequest:
required:
- domain
type: object
properties:
domain:
type: string
description: Domain name to blocklist for users/addresses that include this tag
CreateDomainAliasRequest:
required:
- alias
- domain
type: object
properties:
alias:
type: string
description: Domain Alias
domain:
type: string
description: Domain name this Alias applies to
UpdateFilterRequest:
type: object
properties:
name:
type: string
description: Name of the Filter
query:
$ref: '#/components/schemas/Query'
action:
$ref: '#/components/schemas/Action'
disabled:
type: boolean
description: If true then this filter is ignored
metaData:
description: 'Optional metadata, must be an object or JSON formatted string'
oneOf:
- type: object
- type: string
CreateFilterRequest:
required:
- query
- action
type: object
properties:
name:
type: string
description: Name of the Filter
query:
$ref: '#/components/schemas/Query'
action:
$ref: '#/components/schemas/Action'
disabled:
type: boolean
description: If true then this filter is ignored
metaData:
description: 'Optional metadata, must be an object or JSON formatted string'
oneOf:
- type: object
- type: string
UpdateMailboxRequest:
type: object
properties:
path:
type: string
description: 'Full path of the mailbox, use this to rename an existing Mailbox'
hidden:
type: boolean
description: Is the folder hidden or not. Hidden folders can not be opened in IMAP.
retention:
type: number
description: Retention policy for the Mailbox (in ms). Changing retention value only affects messages added to this folder after the change
subscribed:
type: boolean
description: Change Mailbox subscription state
CreateMailboxRequest:
required:
- path
type: object
properties:
path:
type: string
description: 'Full path of the mailbox, folders are separated by slashes, ends with the mailbox name (unicode string)'
hidden:
type: boolean
description: Is the folder hidden or not. Hidden folders can not be opened in IMAP.
retention:
type: number
description: Retention policy for the created Mailbox. Milliseconds after a message added to mailbox expires. Set to 0 to disable.
UpdateMessageRequest:
type: object
properties:
message:
type: string
description: 'Message ID values. Either comma separated numbers (1,2,3) or colon separated range (3:15), or a range from UID to end (3:*)'
moveTo:
type: string
description: ID of the target Mailbox if you want to move messages
seen:
type: boolean
description: State of the \Seen flag
flagged:
type: boolean
description: State of the \Flagged flag
draft:
type: boolean
description: State of the \Draft flag
expires:
type: string
description: Either expiration date or false to turn of autoexpiration
metaData:
description: 'Optional metadata, must be an object or JSON formatted string'
oneOf:
- type: object
- type: string
SubmitStoredMessageRequest:
type: object
properties:
deleteFiles:
type: boolean
description: If true then deletes attachment files listed in metaData.files array
sendTime:
type: string
description: Datestring for delivery if message should be sent some later time
format: date-time
SubmitMessageRequest:
required:
- subject
- text
- html
type: object
properties:
reference:
$ref: '#/components/schemas/Reference'
mailbox:
type: string
description: Mailbox ID where to upload the message. If not set then message is uploaded to Sent Mail folder.
uploadOnly:
type: boolean
description: If true then generated message is not added to the sending queue
isDraft:
type: boolean
description: If true then treats this message as draft (should be used with uploadOnly=true)
sendTime:
type: string
description: Datestring for delivery if message should be sent some later time
format: date-time
envelope:
$ref: '#/components/schemas/EnvelopeUpload'
from:
$ref: '#/components/schemas/Address'
to:
type: array
items:
$ref: '#/components/schemas/AddressOptionalName'
description: 'Addresses for the To: header'
cc:
type: array
items:
$ref: '#/components/schemas/AddressOptionalName'
description: 'Addresses for the Cc: header'
bcc:
type: array
items:
$ref: '#/components/schemas/AddressOptionalName'
description: 'Addresses for the Bcc: header'
subject:
type: string
description: Message subject. If not then resolved from Reference message
text:
type: string
description: Plaintext message
html:
type: string
description: HTML formatted message
headers:
type: array
items:
$ref: '#/components/schemas/Header'
description: Custom headers for the message. If reference message is set then In-Reply-To and References headers are set automatically
attachments:
type: array
items:
$ref: '#/components/schemas/AttachmentsUpload'
description: Attachments for the message
meta:
type: object
description: Custom metainfo for the message
sess:
type: string
description: Session identifier for the logs
ip:
type: string
description: IP address for the logs
CheckTotp2FARequest:
required:
- token
type: object
properties:
token:
type: string
description: 6-digit number
sess:
type: string
description: Session identifier for the logs
ip:
type: string
description: IP address for the logs
EnableCustom2FARequest:
type: object
properties:
sess:
type: string
description: Session identifier for the logs
ip:
type: string
description: IP address for the logs
EnableTotp2FARequest:
required:
- token
type: object
properties:
token:
type: string
description: 6-digit number that matches seed value from 2fa/totp/setup
sess:
type: string
description: Session identifier for the logs
ip:
type: string
description: IP address for the logs
SetupTotp2FARequest:
type: object
properties:
label:
type: string
description: Label text for QR code (defaults to username)
issuer:
type: string
description: Description text for QR code (defaults to "WildDuck")
sess:
type: string
description: Session identifier for the logs
ip:
type: string
description: IP address for the logs
UpdateUserRequest:
type: object
properties:
name:
type: string
description: Name of the User
existingPassword:
type: string
description: If provided then validates against account password before applying any changes
password:
type: string
description: New password for the account. Set to boolean false to disable password usage for the master scope, Application Specific Passwords would still be allowed
hashedPassword:
type: boolean
description: 'If true then password is already hashed, so store as is. Supported hashes: pbkdf2, bcrypt ($2a, $2y, $2b), md5 ($1), sha512 ($6), sha256 ($5), argon2 ($argon2d, $argon2i, $argon2id). Stored hashes are rehashed to pbkdf2 on first successful password check.'
allowUnsafe:
type: boolean
description: 'If false then validates provided passwords against Have I Been Pwned API. Experimental, so validation is disabled by default but will be enabled automatically in some future version of WildDuck.'
tags:
type: array
items:
type: string
description: A list of tags associated with this user
retention:
type: number
description: Default retention time (in ms). Set to 0 to disable
uploadSentMessages:
type: boolean
description: 'If true then all messages sent through MSA are also uploaded to the Sent Mail folder. Might cause duplicates with some email clients, so disabled by default.'
encryptMessages:
type: boolean
description: If true then received messages are encrypted
encryptForwarded:
type: boolean
description: If true then forwarded messages are encrypted
pubKey:
type: string
description: Public PGP key for the User that is used for encryption. Use empty string to remove the key
metaData:
description: 'Optional metadata, must be an object or JSON formatted string'
oneOf:
- type: object
- type: string
internalData:
type: object
description: 'Optional internal metadata, must be an object or JSON formatted string of an object. Not available for user-role tokens'
language:
type: string
description: Language code for the User
targets:
type: array
items:
type: string
description: 'An array of forwarding targets. The value could either be an email address or a relay url to next MX server ("smtp://mx2.zone.eu:25") or an URL where mail contents are POSTed to'
spamLevel:
type: number
description: 'Relative scale for detecting spam. 0 means that everything is spam, 100 means that nothing is spam'
quota:
type: number
description: Allowed quota of the user in bytes
recipients:
type: number
description: How many messages per 24 hour can be sent
forwards:
type: number
description: How many messages per 24 hour can be forwarded
filters:
type: number
description: How many filters are allowed for this account
imapMaxUpload:
type: number
description: How many bytes can be uploaded via IMAP during 24 hour
imapMaxDownload:
type: number
description: How many bytes can be downloaded via IMAP during 24 hour
pop3MaxDownload:
type: number
description: How many bytes can be downloaded via POP3 during 24 hour
pop3MaxMessages:
type: number
description: How many latest messages to list in POP3 session
imapMaxConnections:
type: number
description: How many parallel IMAP connections are alowed
receivedMax:
type: number
description: How many messages can be received from MX during 60 seconds
disable2fa:
type: boolean
description: 'If true, then disables 2FA for this user'
disabledScopes:
type: array
items:
$ref: '#/components/schemas/DisabledScopes'
description: 'List of scopes that are disabled for this user ("imap", "pop3", "smtp")'
disabled:
type: boolean
description: 'If true then disables user account (can not login, can not receive messages)'
fromWhitelist:
type: array
items:
type: string
description: A list of additional email addresses this user can send mail from. Wildcard is allowed.
suspended:
type: boolean
description: If true then disables authentication
sess:
type: string
description: Session identifier for the logs
ip:
type: string
description: IP address for the logs
CreateUserRequest:
required:
- username
- password
type: object
properties:
username:
type: string
description: Username of the User. Dots are allowed but informational only ("user.name" is the same as "username").
name:
type: string
description: Name of the User
password:
type: string
description: Password for the account. Set to boolean false to disable password usage for the master scope, Application Specific Passwords would still be allowed
hashedPassword:
type: boolean
description: 'If true then password is already hashed, so store as is. Supported hashes: pbkdf2, bcrypt ($2a, $2y, $2b), md5 ($1), sha512 ($6), sha256 ($5), argon2 ($argon2d, $argon2i, $argon2id). Stored hashes are rehashed to pbkdf2 on first successful password check.'
allowUnsafe:
type: boolean
description: 'If false then validates provided passwords against Have I Been Pwned API. Experimental, so validation is disabled by default but will be enabled automatically in some future version of WildDuck.'
address:
type: string
description: Default email address for the User (autogenerated if not set)
emptyAddress:
type: boolean
description: If true then do not autogenerate missing email address for the User. Only needed if you want to create a user account that does not have any email address associated
requirePasswordChange:
type: boolean
description: 'If true then requires the user to change password, useful if password for the account was autogenerated'
tags:
type: array
items:
type: string
description: A list of tags associated with this user
addTagsToAddress:
type: boolean
description: If true then autogenerated address gets the same tags as the user
retention:
type: number
description: Default retention time (in ms). Set to 0 to disable
uploadSentMessages:
type: boolean
description: 'If true then all messages sent through MSA are also uploaded to the Sent Mail folder. Might cause duplicates with some email clients, so disabled by default.'
encryptMessages:
type: boolean
description: If true then received messages are encrypted
encryptForwarded:
type: boolean
description: If true then forwarded messages are encrypted
pubKey:
type: string
description: Public PGP key for the User that is used for encryption. Use empty string to remove the key
metaData:
description: 'Optional metadata, must be an object or JSON formatted string'
oneOf:
- type: object
- type: string
internalData:
description: 'Optional metadata for internal use, must be an object or JSON formatted string of an object. Not available for user-role tokens'
oneOf:
- type: object
- type: string
language:
type: string
description: Language code for the User
targets:
type: array
items:
type: string
description: 'An array of forwarding targets. The value could either be an email address or a relay url to next MX server ("smtp://mx2.zone.eu:25") or an URL where mail contents are POSTed to'
spamLevel:
type: number
description: 'Relative scale for detecting spam. 0 means that everything is spam, 100 means that nothing is spam'
quota:
type: number
description: Allowed quota of the user in bytes
recipients:
type: number
description: How many messages per 24 hour can be sent
forwards:
type: number
description: How many messages per 24 hour can be forwarded
filters:
type: number
description: How many filters are allowed for this account
imapMaxUpload:
type: number
description: How many bytes can be uploaded via IMAP during 24 hour
imapMaxDownload:
type: number
description: How many bytes can be downloaded via IMAP during 24 hour
pop3MaxDownload:
type: number
description: How many bytes can be downloaded via POP3 during 24 hour
pop3MaxMessages:
type: number
description: How many latest messages to list in POP3 session
imapMaxConnections:
type: number
description: How many parallel IMAP connections are alowed
receivedMax:
type: number
description: How many messages can be received from MX during 60 seconds
mailboxes:
$ref: '#/components/schemas/Mailboxes'
disabledScopes:
type: array
items:
$ref: '#/components/schemas/DisabledScopes'
description: 'List of scopes that are disabled for this user ("imap", "pop3", "smtp")'
fromWhitelist:
type: array
items:
type: string
description: A list of additional email addresses this user can send mail from. Wildcard is allowed.
sess:
type: string
description: Session identifier for the logs
ip:
type: string
description: IP address for the logs
LogoutUserRequest:
type: object
properties:
reason:
type: string
description: Message to be shown to connected IMAP client
UserRestoreRequest:
type: object
properties:
sess:
type: string
description: Session identifier for the logs
ip:
type: string
description: IP address for the logs
ResetUserPasswordRequest:
type: object
properties:
validAfter:
type: string
format: date-time
description: Allow using the generated password not earlier than provided time
sess:
type: string
description: Session identifier for the logs
ip:
type: string
description: IP address for the logs
CreateWebhookRequest:
required:
- type
- url
type: object
properties:
type:
type: array
items:
type: string
description: An array of event types to match. For prefix match use ".*" at the end (eg. "user.*") or "*" for all types
user:
type: string
description: User ID to match (only makes sense for user specific resources)
url:
type: string
description: URL to POST data to
CreateSettingRequest:
required:
- value
type: object
properties:
value:
oneOf:
- type: string
- type: number
description: Setting value
sess:
description: Session identifier for the logs
type: string
ip:
description: IP address for the logs
type: string
GetAddressesResult:
required:
- id
- name
- address
- user
- forwarded
- forwardedDisabled
type: object
properties:
id:
type: string
description: ID of the Address
name:
type: string
description: Identity name
address:
type: string
description: E-mail address string
user:
type: string
description: User ID this address belongs to if this is a User address
forwarded:
type: boolean
description: If true then it is a forwarded address
forwardedDisabled:
type: boolean
description: If true then the forwarded address is disabled
target:
type: array
items:
type: string
description: List of forwarding targets
GetUserAddressesResult:
required:
- id
- name
- address
- main
- created
- tags
type: object
properties:
id:
type: string
description: ID of the Address
name:
type: string
description: Identity name
address:
type: string
description: E-mail address string
main:
type: boolean
description: Indicates if this is the default address for the User
created:
type: string
description: Datestring of the time the address was created
format: date-time
tags:
type: array
items:
type: string
description: List of tags associated with the Address
metaData:
type: object
description: Metadata object (if available)
internalData:
type: object
description: 'Internal metadata object (if available), not included for user-role requests'
GetUserAddressesregisterResult:
required:
- id
- address
type: object
properties:
id:
type: string
description: ID of the Address
example: 507f1f77bcf86cd799439011
name:
type: string
description: Name from address header
example: John Doe
address:
type: string
description: E-mail address string
example: john@example.com
GetASPsResult:
required:
- id
- description
- scopes
- lastUse
- created
type: object
properties:
id:
type: string
description: ID of the Application Password
description:
type: string
description: Description
scopes:
type: array
items:
$ref: '#/components/schemas/AspScopes'
description: Allowed scopes for the Application Password
lastUse:
$ref: '#/components/schemas/LastUse'
created:
type: string
description: Datestring
format: date-time
GetArchivedMessagesResult:
required:
- id
- mailbox
- thread
- from
- to
- cc
- bcc
- subject
- date
- intro
- attachments
- seen
- deleted
- flagged
- contentType
type: object
properties:
id:
type: string
description: ID of the Message (24 byte hex)
mailbox:
type: string
description: ID of the Mailbox
thread:
type: string
description: ID of the Thread
from:
$ref: '#/components/schemas/Address'
to:
type: array
items:
$ref: '#/components/schemas/Address'
description: 'Recipients in To: field'
cc:
type: array
items:
$ref: '#/components/schemas/Address'
description: 'Recipients in Cc: field'
bcc:
type: array
items:
$ref: '#/components/schemas/Address'
description: 'Recipients in Bcc: field. Usually only available for drafts'
subject:
type: string
description: Message subject
date:
type: string
description: Date string from header
format: date-time
idate:
type: string
description: Date string of receive time
format: date-time
intro:
type: string
description: First 128 bytes of the message
attachments:
type: boolean
description: Does the message have attachments
seen:
type: boolean
description: Is this message alread seen or not
deleted:
type: boolean
description: Does this message have a \Deleted flag (should not have as messages are automatically deleted once this flag is set)
flagged:
type: boolean
description: Does this message have a \Flagged flag
contentType:
$ref: '#/components/schemas/ContentType'
GetAuthlogResult:
required:
- id
- action
- result
- created
type: object
properties:
id:
type: string
description: ID of the Event
action:
type: string
description: Action identifier
result:
type: string
description: Did the action succeed
sess:
type: string
description: Session identifier
ip:
type: string
description: IP address of the Event
created:
type: string
description: Datestring of the Event time
format: date-time
GetDkimKeysResult:
required:
- id
- domain
- selector
- description
- fingerprint
- created
type: object
properties:
id:
type: string
description: ID of the DKIM
domain:
type: string
description: The domain this DKIM key applies to
selector:
type: string
description: DKIM selector
description:
type: string
description: Key description
fingerprint:
type: string
description: Key fingerprint (SHA1)
created:
type: string
description: Datestring
format: date-time
GetTLSCertResult:
required:
- id
- servername
- description
- fingerprint
- created
type: object
properties:
id:
type: string
description: ID of the certificate
example: '609d201236d1d936948f23b1'
servername:
type: string
description: The server name this certificate applies to
example: 'imap.example.com'
acme:
type: boolean
description: If true then private key and certificate are managed automatically by ACME
example: false
description:
type: string
description: Key description
example: 'Some notes about this certificate'
fingerprint:
type: string
description: Key fingerprint (SHA1)
example: '59:8b:ed:11:5b:4f:ce:b4:e5:1a:2f:35:b1:6f:7d:93:40:c8:2f:9c:38:3b:cd:f4:04:92:a1:0e:17:2c:3f:f3'
created:
type: string
description: Datestring
format: date-time
example: '2021-05-13T20:06:46.179Z'
expires:
type: string
description: Certificate expiration time
example: '2021-06-26T21:55:55.000Z'
format: date-time
altNames:
type: array
description: SAN servernames listed in the certificate
items:
type: string
example: ['example.com', 'www.example.com']
GetAllowedDomainResult:
required:
- id
- domain
type: object
properties:
id:
type: string
description: Entry ID
domain:
type: string
description: allowlisted domain name
GetBlockedDomainResult:
required:
- id
- domain
type: object
properties:
id:
type: string
description: Entry ID
domain:
type: string
description: blocklisted domain name
GetDomainAliasesResult:
required:
- id
- alias
- domain
type: object
properties:
id:
type: string
description: ID of the Domain Alias
alias:
type: string
description: Domain Alias
domain:
type: string
description: The domain this alias applies to
GetAllFiltersResult:
required:
- id
- user
- name
- created
- query
- action
- disabled
type: object
properties:
id:
type: string
description: Filter ID
user:
type: string
description: User ID
name:
type: string
description: Name for the filter
created:
type: string
description: Datestring of the time the filter was created
format: date-time
query:
type: array
items:
type: array
items:
type: string
action:
type: array
items:
type: array
items:
type: string
disabled:
type: boolean
description: 'If true, then this filter is ignored'
metaData:
type: object
description: Custom metadata value. Included if metaData query argument was true
targets:
type: array
items:
type: string
description: List of forwarding targets
GetFiltersResult:
required:
- id
- name
- created
- query
- action
- disabled
type: object
properties:
id:
type: string
description: Filter ID
name:
type: string
description: Name for the filter
created:
type: string
description: Datestring of the time the filter was created
format: date-time
query:
type: array
items:
type: array
items:
type: string
action:
type: array
items:
type: array
items:
type: string
metaData:
type: object
description: Custom metadata value. Included if metaData query argument was true
disabled:
type: boolean
description: 'If true, then this filter is ignored'
GetMailboxesResult:
required:
- id
- name
- path
- specialUse
- modifyIndex
- subscribed
- hidden
- total
- unseen
type: object
properties:
id:
type: string
description: Mailbox ID
name:
type: string
description: Name for the mailbox (unicode string)
path:
type: string
description: 'Full path of the mailbox, folders are separated by slashes, ends with the mailbox name (unicode string)'
specialUse:
type: string
description: 'Either special use identifier or null. One of \Drafts, \Junk, \Sent or \Trash'
modifyIndex:
type: number
description: Modification sequence number. Incremented on every change in the mailbox.
subscribed:
type: boolean
description: Mailbox subscription status. IMAP clients may unsubscribe from a folder.
retention:
type: number
description: Default retention policy for this mailbox (in ms). If set then messages added to this maibox will be automatically deleted after retention time.
hidden:
type: boolean
description: Is the folder hidden or not
total:
type: number
description: How many messages are stored in this mailbox
unseen:
type: number
description: How many unseen messages are stored in this mailbox
GetMessagesResult:
required:
- id
- mailbox
- thread
- from
- to
- cc
- bcc
- subject
- date
- size
- intro
- attachments
- seen
- deleted
- flagged
- answered
- forwarded
- contentType
type: object
properties:
id:
type: number
description: ID of the Message
mailbox:
type: string
description: ID of the Mailbox
thread:
type: string
description: ID of the Thread
threadMessageCount:
type: number
description: Amount of messages in the Thread. Included if threadCounters query argument was true
from:
$ref: '#/components/schemas/Address'
to:
type: array
items:
$ref: '#/components/schemas/Address'
description: 'Recipients in To: field'
cc:
type: array
items:
$ref: '#/components/schemas/Address'
description: 'Recipients in Cc: field'
bcc:
type: array
items:
$ref: '#/components/schemas/Address'
description: 'Recipients in Bcc: field. Usually only available for drafts'
subject:
type: string
description: Message subject
date:
type: string
description: Date string from header
format: date-time
idate:
type: string
description: Date string of receive time
format: date-time
size:
type: number
description: Message size in bytes
intro:
type: string
description: First 128 bytes of the message
attachments:
type: boolean
description: Does the message have attachments
seen:
type: boolean
description: Is this message alread seen or not
deleted:
type: boolean
description: Does this message have a \Deleted flag (should not have as messages are automatically deleted once this flag is set)
flagged:
type: boolean
description: Does this message have a \Flagged flag
answered:
type: boolean
description: Does this message have a \Answered flag
forwarded:
type: boolean
description: Does this message have a $Forwarded flag
contentType:
$ref: '#/components/schemas/ContentType'
metaData:
type: object
description: Custom metadata value. Included if metaData query argument was true
GetFilesResult:
required:
- id
- filename
- contentType
- size
type: object
properties:
id:
type: string
description: ID of the File
filename:
type: string
description: Filename
contentType:
type: string
description: Content-Type of the file
size:
type: number
description: File size
GetUsersResult:
required:
- id
- username
- name
- address
- tags
- targets
- enabled2fa
- autoreply
- encryptMessages
- encryptForwarded
- quota
- hasPasswordSet
- activated
- disabled
- suspended
type: object
properties:
id:
type: string
description: Users unique ID (24 byte hex)
username:
type: string
description: Username of the User
name:
type: string
description: Name of the User
address:
type: string
description: Main email address of the User
tags:
type: array
items:
type: string
description: List of tags associated with the User'
targets:
type: array
items:
type: string
description: List of forwarding targets
enabled2fa:
type: array
items:
type: string
description: List of enabled 2FA methods
autoreply:
type: boolean
description: Is autoreply enabled or not (start time may still be in the future or end time in the past)
encryptMessages:
type: boolean
description: If true then received messages are encrypted
encryptForwarded:
type: boolean
description: If true then forwarded messages are encrypted
quota:
$ref: '#/components/schemas/Quota'
metaData:
type: object
description: Custom metadata value. Included if metaData query argument was true
internalData:
type: object
description: Custom metadata value for internal use. Included if internalData query argument was true and request was not made using user-role token
hasPasswordSet:
type: boolean
description: If true then the User has a password set and can authenticate
activated:
type: boolean
description: Is the account activated
disabled:
type: boolean
description: If true then the user can not authenticate or receive any new mail
suspended:
type: boolean
description: If true then the user can not authenticate
GetWebhooksResult:
required:
- id
- type
- user
- url
type: object
properties:
id:
type: string
description: Webhooks unique ID (24 byte hex)
type:
type: array
items:
type: string
description: An array of event types this webhook matches
user:
type: string
description: User ID or null
url:
type: string
description: Webhook URL
AspScopes:
type: string
enum:
- imap
- pop3
- smtp
- '*'
DisabledScopes:
type: string
enum:
- imap
- pop3
- smtp
Order:
type: string
enum:
- asc
- desc
GetSettingsResult:
required:
- key
type: object
properties:
key:
type: string
description: Setting key
value:
oneOf:
- type: string
- type: number
description: Setting value
name:
type: string
description: Setting name
description:
type: string
description: Setting description
default:
oneOf:
- type: string
- type: number
description: Default value for this key
type:
type: string
description: Value subtype
custom:
type: boolean
description: If true then the value is set
securitySchemes:
AccessTokenAuth:
name: X-Access-Token
type: apiKey
in: header
description: |-
If authentication is enabled in the WildDuck configuration, you will need to supply an access token in the `X-Access-Token` header.
```json
{
"X-Access-Token": "59fc66a03e54454869460e45"
}
```
security:
- AccessTokenAuth: []