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: 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: 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: 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/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: order in: query description: Ordering of the records by insert date 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/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' '/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: 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/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: 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/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: 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: 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/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 '/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 '/users/{user}/filters': get: tags: - Filters summary: List Filters for a User operationId: getFilters 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: limit in: query description: How many records to return schema: type: number - name: order in: query description: Ordering of the records by insert date 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/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 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: limit in: query description: How many records to return 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/SearchMessagesResponse' 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: 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/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: 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: 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: 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/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: 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/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' 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 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' 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 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' 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' 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: date-time description: Certificate expiration time example: '2021-06-26T21:55:55.000Z' 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' UpdateFilterResponse: required: - success - id type: object properties: success: type: boolean description: Indicates successful response id: type: string description: ID for the created Filter GetFiltersResponse: required: - success - results type: object properties: success: type: boolean description: Indicates successful response 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 - metaData 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' 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/SearchMessagesResult' 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 Address 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 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 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: required: - message - moveTo - seen - flagged - draft - expires type: object properties: message: type: string description: 'Message ID values. Either comma separated numbers (1,2,3) or colon separated range (3:15)' 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 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 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 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: date-time description: Certificate expiration time example: '2021-06-26T21:55:55.000Z' 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 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 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 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 SearchMessagesResult: required: - id - mailbox - thread - from - to - cc - bcc - subject - date - intro - attachments - seen - deleted - flagged - url - 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 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 url: type: string description: Relative API url for fetching message contents contentType: $ref: '#/components/schemas/ContentType' 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 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: []