openapi: 3.0.0
info:
    title: WildDuck API
    description: WildDuck API docs
    version: 1.0.0
    contact:
        url: 'https://github.com/nodemailer/wildduck'

servers:
    - url: 'https://api.wildduck.email'

tags:
    - name: Addresses
    - name: ApplicationPasswords
    - name: Archive
      description: Archive includes all deleted messages. Once messages are old enough then these are permanenetly deleted from the archive as well. Until then you can restore the deleted messages.
    - name: Audit
      description: 'Auditing allows to monitor an email account. All existing, deleted and new emails are copied to the auditing system. See also https://github.com/nodemailer/wildduck-audit-manager'
    - name: Authentication
    - name: Autoreplies
    - name: Certs
      description: WildDuck allows to register TLS certificates to be used with SNI connections. These certificates are used by IMAP, POP3, API and SMTP servers when a SNI capable client establishes a TLS connection. This does not apply for MX servers.
    - name: DKIM
      description: Whenever an email is sent WildDuck checks if there is a DKIM key registered for the domain name of the sender address and uses it to sign the message.
    - name: DomainAccess
      description: Add sender domain names to allowlist (messages are all accepted) or blocklist (messages are sent to Spam folder)
    - name: DomainAliases
    - name: Filters
    - name: Mailboxes
    - name: Messages
    - name: Settings
    - name: Storage
      description: Storage allows easier attachment handling when composing Draft messages. Instead of uploading the attachmnent with every draft update, you store the attachment to the Storage and then link stored file for the Draft.
    - name: Submission
    - name: TwoFactorAuth
    - name: Users
    - name: Webhooks

paths:
    '/addresses/forwarded/{address}':
        delete:
            tags:
                - Addresses
            summary: Delete a forwarded Address
            operationId: deleteForwardedAddress
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        get:
            tags:
                - Addresses
            summary: Request forwarded Addresses information
            operationId: getForwardedAddress
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetForwardedAddressResponse'
        put:
            tags:
                - Addresses
            summary: Update forwarded Address information
            operationId: updateForwardedAddress
            requestBody:
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/UpdateForwardedAddressRequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        parameters:
            - name: address
              in: path
              description: ID of the Address
              schema:
                  type: string
              required: true
    '/users/{user}/addresses/{address}':
        delete:
            tags:
                - Addresses
            summary: Delete an Address
            operationId: deleteUserAddress
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        get:
            tags:
                - Addresses
            summary: Request Addresses information
            operationId: getUserAddress
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetUserAddressResponse'
        put:
            tags:
                - Addresses
            summary: Update Address information
            operationId: updateUserAddress
            requestBody:
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/UpdateUserAddressRequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        parameters:
            - name: user
              in: path
              description: ID of the User
              required: true
              schema:
                  type: string
            - name: address
              in: path
              description: ID of the Address
              required: true
              schema:
                  type: string
    '/addresses/resolve/{address}':
        get:
            tags:
                - Addresses
            summary: Get Address info
            operationId: resolveAddress
            parameters:
                - name: allowWildcard
                  in: query
                  description: If true then resolves also wildcard addresses
                  schema:
                      type: boolean
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/ResolveAddressResponse'
        parameters:
            - name: address
              in: path
              description: ID of the Address or e-mail address string
              required: true
              schema:
                  type: string
    /addresses:
        get:
            tags:
                - Addresses
            summary: List registered Addresses
            operationId: getAddresses
            parameters:
                - name: query
                  in: query
                  description: Partial match of an address
                  schema:
                      type: string
                - name: forward
                  in: query
                  description: Partial match of a forward email address or URL
                  schema:
                      type: string
                - name: tags
                  in: query
                  description: Comma separated list of tags. The Address must have at least one to be set
                  schema:
                      type: string
                - name: requiredTags
                  in: query
                  description: Comma separated list of tags. The Address must have all listed tags to be set
                  schema:
                      type: string
                - name: metaData
                  in: query
                  description: 'If true, then includes metaData in the response'
                  schema:
                      type: boolean
                - name: internalData
                  in: query
                  description: 'If true, then includes internalData in the response. Not shown for user-role tokens.'
                  schema:
                      type: boolean
                - name: limit
                  in: query
                  description: How many records to return
                  schema:
                      type: number
                - name: page
                  in: query
                  description: 'Current page number. Informational only, page numbers start from 1'
                  schema:
                      type: number
                - name: next
                  in: query
                  description: 'Cursor value for next page, retrieved from nextCursor response value'
                  schema:
                      type: string
                - name: previous
                  in: query
                  description: 'Cursor value for previous page, retrieved from previousCursor response value'
                  schema:
                      type: string
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetAddressesResponse'
    '/users/{user}/addresses':
        get:
            tags:
                - Addresses
            summary: List registered Addresses for a User
            operationId: getUserAddresses
            parameters:
                - name: metaData
                  in: query
                  description: 'If true, then includes metaData in the response'
                  schema:
                      type: boolean
                - name: internalData
                  in: query
                  description: 'If true, then includes internalData in the response. Not shown for user-role tokens.'
                  schema:
                      type: boolean
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetUserAddressesResponse'
        post:
            tags:
                - Addresses
            summary: Create new Address
            description: 'Add a new email address for a User. Addresses can contain unicode characters. Dots in usernames are normalized so no need to create both "firstlast@example.com" and "first.last@example.com" Special addresses `*@example.com`, `*suffix@example.com` and `username@*` catches all emails to these domains or users without a registered destination (requires allowWildcard argument)'
            operationId: createUserAddress
            requestBody:
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/CreateUserAddressRequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/CreateUserAddressResponse'
        parameters:
            - name: user
              in: path
              description: ID of the User
              required: true
              schema:
                  type: string
    '/users/{user}/addressregister':
        get:
            tags:
                - Addresses
            summary: List addresses from communication register
            description: 'Lists addresses from email headers. Includes addresses both from sent and received messages. Sorted by last usage.'
            operationId: getUserAddressregister
            parameters:
                - name: user
                  in: path
                  description: ID of the User
                  required: true
                  schema:
                      type: string
                      example: 507f1f77bcf86cd799439011
                - name: query
                  in: query
                  description: Prefix of an address or a name
                  required: true
                  schema:
                      type: string
                      example: john
                - name: limit
                  in: query
                  description: How many records to return
                  schema:
                      type: number
                      example: 25
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetUserAddressesregisterResponse'
    /addresses/forwarded:
        post:
            tags:
                - Addresses
            summary: Create new forwarded Address
            description: Add a new forwarded email address. Addresses can contain unicode characters. Dots in usernames are normalized so no need to create both "firstlast@example.com" and "first.last@example.com" Special addresses `*@example.com` and `username@*` catches all emails to these domains or users without a registered destination (requires allowWildcard argument)
            operationId: createForwardedAddress
            requestBody:
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/CreateForwardedAddressRequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/CreateForwardedAddressResponse'
    /addresses/renameDomain:
        put:
            tags:
                - Addresses
            summary: Rename domain in addresses
            description: 'Renames domain names for addresses, DKIM keys and Domain Aliases'
            operationId: renameDomain
            requestBody:
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/RenameDomainRequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
    '/users/{user}/asps/{asp}':
        delete:
            tags:
                - ApplicationPasswords
            summary: Delete an Application Password
            operationId: deleteASP
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        get:
            tags:
                - ApplicationPasswords
            summary: Request ASP information
            operationId: getASP
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetASPResponse'
        parameters:
            - name: user
              in: path
              description: ID of the User
              required: true
              schema:
                  type: string
            - name: asp
              in: path
              description: ID of the Application Password
              required: true
              schema:
                  type: string
    '/users/{user}/asps':
        get:
            tags:
                - ApplicationPasswords
            summary: List Application Passwords
            operationId: getASPs
            parameters:
                - name: showAll
                  in: query
                  description: If not true then skips entries with a TTL set
                  schema:
                      type: boolean
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetASPsResponse'
        post:
            tags:
                - ApplicationPasswords
            summary: Create new Application Password
            operationId: createASP
            requestBody:
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/CreateASPRequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/CreateASPResponse'
        parameters:
            - name: user
              in: path
              description: ID of the User
              required: true
              schema:
                  type: string
    '/users/{user}/archived/messages':
        get:
            tags:
                - Archive
            summary: List archived messages
            description: Archive contains all recently deleted messages besides Drafts etc.
            operationId: getArchivedMessages
            parameters:
                - name: limit
                  in: query
                  description: How many records to return
                  schema:
                      type: number
                - name: page
                  in: query
                  description: 'Current page number. Informational only, page numbers start from 1'
                  schema:
                      type: number
                - name: order
                  in: query
                  description: Ordering of the records by insert date
                  schema:
                      $ref: '#/components/schemas/Order'
                - name: next
                  in: query
                  description: 'Cursor value for next page, retrieved from nextCursor response value'
                  schema:
                      type: string
                - name: previous
                  in: query
                  description: 'Cursor value for previous page, retrieved from previousCursor response value'
                  schema:
                      type: string
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetArchivedMessagesResponse'
        parameters:
            - name: user
              in: path
              description: ID of the User
              required: true
              schema:
                  type: string
    '/users/{user}/archived/messages/{message}/restore':
        post:
            tags:
                - Archive
            summary: Restore archived Message
            description: 'Restores a single archived message by moving it back to the mailbox it was deleted from or to provided target mailbox. If target mailbox does not exist, then the message is moved to INBOX.'
            operationId: restoreMessage
            requestBody:
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/RestoreMessageRequest'
                required: false
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/RestoreMessageResponse'
        parameters:
            - name: user
              in: path
              description: ID of the User
              required: true
              schema:
                  type: string
            - name: message
              in: path
              description: Message ID
              required: true
              schema:
                  type: number
    '/users/{user}/archived/restore':
        post:
            tags:
                - Archive
            summary: Restore archived messages
            description: 'Initiates a restore task to move archived messages of a date range back to the mailboxes the messages were deleted from. If target mailbox does not exist, then the messages are moved to INBOX.'
            operationId: restoreMessages
            requestBody:
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/RestoreMessagesRequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        parameters:
            - name: user
              in: path
              description: ID of the User
              required: true
              schema:
                  type: string
    '/audit/{audit}':
        get:
            tags:
                - Audit
            summary: Request Audit Info
            description: This method returns information about stored audit
            operationId: getAudit
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetAuditResponse'
        parameters:
            - name: audit
              in: path
              description: ID of the Audit
              required: true
              schema:
                  type: string
    '/audit/{audit}/export.mbox':
        get:
            tags:
                - Audit
            summary: Export Audited Emails
            description: This method returns a mailbox file that contains all audited emails
            operationId: getAuditEmails
            responses:
                '200':
                    description: Success
        parameters:
            - name: audit
              in: path
              description: ID of the Audit
              required: true
              schema:
                  type: string
    /audit:
        post:
            tags:
                - Audit
            summary: Create new audit
            description: Initiates a message audit
            operationId: createAudit
            requestBody:
                description: Initiates a message audit
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/CreateAuditRequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/CreateAuditResponse'
    /authenticate:
        delete:
            tags:
                - Authentication
            summary: Invalidate authentication token
            description: This method invalidates currently used authentication token. If token is not provided then nothing happens
            operationId: invalidateAccessToken
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        post:
            tags:
                - Authentication
            summary: Authenticate a User
            operationId: authenticate
            requestBody:
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/AuthenticateRequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/AuthenticateResponse'

    /preauth:
        post:
            tags:
                - Authentication
            summary: Pre-auth check
            description: Check if an username exists and can be used for authentication
            operationId: preauth
            requestBody:
                content:
                    application/json:
                        schema:
                            required:
                                - username
                            type: object
                            properties:
                                username:
                                    type: string
                                    description: Username or E-mail address
                                scope:
                                    type: string
                                    description: 'Required scope. One of master, imap, smtp, pop3'
                                sess:
                                    type: string
                                    description: Session identifier for the logs
                                ip:
                                    type: string
                                    description: IP address for the logs
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                required:
                                    - success
                                    - id
                                    - username
                                    - scope
                                    - require2fa
                                type: object
                                properties:
                                    success:
                                        type: boolean
                                        description: Indicates successful response
                                    id:
                                        type: string
                                        description: ID of authenticated User
                                    username:
                                        type: string
                                        description: Username of authenticated User
                                    scope:
                                        type: string
                                        description: The scope this authentication is valid for
                                    require2fa:
                                        type: array
                                        items:
                                            type: string
                                        description: List of enabled 2FA mechanisms

    '/users/{user}/authlog':
        get:
            tags:
                - Authentication
            summary: List authentication Events
            operationId: getAuthlog
            parameters:
                - name: action
                  in: query
                  description: Limit listing only to values with specific action value
                  schema:
                      type: string
                - name: filterIp
                  in: query
                  description: Limit listing only to values with specific IP address
                  schema:
                      type: string
                - name: limit
                  in: query
                  description: How many records to return
                  schema:
                      type: number
                - name: page
                  in: query
                  description: 'Current page number. Informational only, page numbers start from 1'
                  schema:
                      type: number
                - name: next
                  in: query
                  description: 'Cursor value for next page, retrieved from nextCursor response value'
                  schema:
                      type: string
                - name: previous
                  in: query
                  description: 'Cursor value for previous page, retrieved from previousCursor response value'
                  schema:
                      type: string
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetAuthlogResponse'
        parameters:
            - name: user
              in: path
              description: ID of the User
              required: true
              schema:
                  type: string
    '/users/{user}/authlog/{event}':
        get:
            tags:
                - Authentication
            summary: Request Event information
            operationId: getAuthlogEvent
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetAuthlogEventResponse'
        parameters:
            - name: user
              in: path
              description: ID of the User
              required: true
              schema:
                  type: string
            - name: event
              in: path
              description: ID of the Event
              required: true
              schema:
                  type: string
    '/users/{user}/autoreply':
        delete:
            tags:
                - Autoreplies
            summary: Delete Autoreply information
            operationId: deleteAutoreply
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        get:
            tags:
                - Autoreplies
            summary: Request Autoreply information
            operationId: getAutoreply
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetAutoreplyResponse'
        put:
            tags:
                - Autoreplies
            summary: Update Autoreply information
            operationId: updateAutoreply
            requestBody:
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/UpdateAutoreplyRequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        parameters:
            - name: user
              in: path
              description: ID of the User
              required: true
              schema:
                  type: string

    '/dkim/{dkim}':
        delete:
            tags:
                - DKIM
            summary: Delete a DKIM key
            operationId: deleteDkimKey
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        get:
            tags:
                - DKIM
            summary: Request DKIM information
            operationId: getDkimKey
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetDkimKeyResponse'
        parameters:
            - name: dkim
              in: path
              description: ID of the DKIM
              required: true
              schema:
                  type: string
    /dkim:
        get:
            tags:
                - DKIM
            summary: List registered DKIM keys
            operationId: getDkimKeys
            parameters:
                - name: query
                  in: query
                  description: Partial match of a Domain name
                  schema:
                      type: string
                - name: limit
                  in: query
                  description: How many records to return
                  schema:
                      type: number
                - name: page
                  in: query
                  description: 'Current page number. Informational only, page numbers start from 1'
                  schema:
                      type: number
                - name: next
                  in: query
                  description: 'Cursor value for next page, retrieved from nextCursor response value'
                  schema:
                      type: string
                - name: previous
                  in: query
                  description: 'Cursor value for previous page, retrieved from previousCursor response value'
                  schema:
                      type: string
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetDkimKeysResponse'
        post:
            tags:
                - DKIM
            summary: Create or update DKIM key for domain
            description: Add a new DKIM key for a Domain or update existing one. There can be single DKIM key registered for each domain name.
            operationId: updateDkimKey
            requestBody:
                description: Add a new DKIM key for a Domain or update existing one. There can be single DKIM key registered for each domain name.
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/UpdateDkimKeyRequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/UpdateDkimKeyResponse'
    '/dkim/resolve/{domain}':
        get:
            tags:
                - DKIM
            summary: Resolve ID for a DKIM domain
            operationId: resolveDkim
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/ResolveIdResponse'
        parameters:
            - name: domain
              in: path
              description: DKIM domain
              required: true
              schema:
                  type: string

    '/certs/{cert}':
        delete:
            tags:
                - Certs
            summary: Delete a TLS certificate
            operationId: deleteTlsCert
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        get:
            tags:
                - Certs
            summary: Request TLS certificate information
            operationId: getTLSCerticate
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetTLSCertResult'
        parameters:
            - name: cert
              in: path
              description: ID of the TLS certificate
              required: true
              schema:
                  type: string
    /certs:
        get:
            tags:
                - Certs
            summary: List registered TLS certificates
            operationId: getTLSCerticates
            parameters:
                - name: query
                  in: query
                  description: Partial match of a server name
                  schema:
                      type: string
                      example: example.com
                - name: altNames
                  in: query
                  description: Match `query` value against SAN as well (including wildcard names)
                  schema:
                      type: boolean
                      example: true
                      default: false
                - name: limit
                  in: query
                  description: How many records to return
                  schema:
                      type: number
                - name: page
                  in: query
                  description: 'Current page number. Informational only, page numbers start from 1'
                  schema:
                      type: number
                - name: next
                  in: query
                  description: 'Cursor value for next page, retrieved from nextCursor response value'
                  schema:
                      type: string
                      example: 'eyIkb2lkIjoiNWRmMWZkMmQ3NzkyNTExOGI2MDdjNjg0In0'
                - name: previous
                  in: query
                  description: 'Cursor value for previous page, retrieved from previousCursor response value'
                  schema:
                      type: string
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetTLSCertsResponse'
        post:
            tags:
                - Certs
            summary: Create or update TLS certificate for server name
            description: >
                Add a new TLS certificate for a server name or update existing one. You can add a single certificate for each server name but SAN names are supported as well.
                For example you can add a sertificate for "mydomain.com" that includes "\*.mydomain.com" in SAN and the same certificate would be used for requests that do not have it's own server name registered but match the SAN value.

                > NB! you must ensure yourself that the `servername` value is actually listed in certificate's common name or SAN as WildDuck is going to use this certificate regardless.
            operationId: updateTLSCertificate
            requestBody:
                description: Add a new TLS certificate for a server name or update existing one
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/UpdateTLSCertRequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/UpdateTLSCertResponse'

    '/certs/resolve/{servername}':
        get:
            tags:
                - Certs
            summary: Resolve ID for a server name
            operationId: resolveTLSCertificate
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/ResolveIdResponse'
        parameters:
            - name: servername
              in: path
              description: Server name
              required: true
              schema:
                  type: string

    '/domainaccess/{domain}':
        delete:
            tags:
                - DomainAccess
            summary: Delete a Domain from listing
            operationId: deleteDomainListing
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        parameters:
            - name: domain
              in: path
              description: Listed domains unique ID
              required: true
              schema:
                  type: string
    '/domainaccess/{tag}/allow':
        get:
            tags:
                - DomainAccess
            summary: List allowlisted domains
            operationId: getAllowedDomain
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetAllowedDomainResponse'
        post:
            tags:
                - DomainAccess
            summary: Add domain to allowlist
            description: If an email is sent from a domain that is listed in the allowlist then it is never marked as spam. Lists apply for tagged users.
            operationId: createAllowedDomain
            requestBody:
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/CreateAllowedDomainRequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/CreateAllowedDomainResponse'
        parameters:
            - name: tag
              in: path
              description: Tag to look for
              required: true
              schema:
                  type: string
    '/domainaccess/{tag}/block':
        get:
            tags:
                - DomainAccess
            summary: List blocklisted domains
            operationId: getBlockedDomain
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetBlockedDomainResponse'
        post:
            tags:
                - DomainAccess
            summary: Add domain to blocklist
            description: If an email is sent from a domain that is listed in the blocklist then it is always marked as spam. Lists apply for tagged users.
            operationId: createBlockedDomain
            requestBody:
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/CreateBlockedDomainRequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/CreateBlockedDomainResponse'
        parameters:
            - name: tag
              in: path
              description: Tag to look for
              required: true
              schema:
                  type: string
    '/domainaliases/{alias}':
        delete:
            tags:
                - DomainAliases
            summary: Delete an Alias
            operationId: deleteDomainAlias
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        get:
            tags:
                - DomainAliases
            summary: Request Alias information
            operationId: getDomainAlias
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetDomainAliasResponse'
        parameters:
            - name: alias
              in: path
              description: ID of the Alias
              required: true
              schema:
                  type: string
    /domainaliases:
        get:
            tags:
                - DomainAliases
            summary: List registered Domain Aliases
            operationId: getDomainAliases
            parameters:
                - name: query
                  in: query
                  description: Partial match of a Domain Alias or Domain name
                  schema:
                      type: string
                - name: limit
                  in: query
                  description: How many records to return
                  schema:
                      type: number
                - name: page
                  in: query
                  description: 'Current page number. Informational only, page numbers start from 1'
                  schema:
                      type: number
                - name: next
                  in: query
                  description: 'Cursor value for next page, retrieved from nextCursor response value'
                  schema:
                      type: string
                - name: previous
                  in: query
                  description: 'Cursor value for previous page, retrieved from previousCursor response value'
                  schema:
                      type: string
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetDomainAliasesResponse'
        post:
            tags:
                - DomainAliases
            summary: Create new Domain Alias
            description: Add a new Alias for a Domain. This allows to accept mail on username@domain and username@alias
            operationId: createDomainAlias
            requestBody:
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/CreateDomainAliasRequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/CreateDomainAliasResponse'
    '/domainaliases/resolve/{alias}':
        get:
            tags:
                - DomainAliases
            summary: Resolve ID for a domain aias
            operationId: resolveDomainAlias
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/ResolveIdResponse'
        parameters:
            - name: alias
              in: path
              description: Alias domain
              required: true
              schema:
                  type: string

    /data/export:
        post:
            tags:
                - Export
            summary: Export data
            description: Export data for matching users. Export dump does not include emails, only account structure (user data, password hashes, mailboxes, filters, etc.). A special "export"-role access token is required for exporting and importing.
            operationId: createExport
            requestBody:
                description: Export data for matching users
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                users:
                                    type: array
                                    items:
                                        type: string
                                    description: 'An array of User ID values to export'
                                tags:
                                    type: array
                                    items:
                                        type: string
                                    description: 'An array of user tags to export. If set then at least one tag must exist on an user.'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/octet-stream:
                            schema:
                                type: binary

    /data/import:
        post:
            tags:
                - Export
            summary: Import user data
            description: Import data from an export dump. If a database entry already exists, it is not modified. A special "export"-role access token is required for exporting and importing.
            operationId: createImport
            requestBody:
                description: Import user data
                content:
                    application/octet-stream:
                        schema:
                            type: binary  
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                type: object
                                properties:
                                    entries:
                                        type: number
                                        description: 'How many database entries were found from the export file'
                                    imported:
                                        type: number
                                        description: 'How many database entries were imported from the export file'
                                    failed:
                                        type: number
                                        description: 'How many database entries were not imported due to some error'
                                    existing:
                                        type: number
                                        description: 'How many database existing entries were not imported'


    '/users/{user}/filters/{filter}':
        delete:
            tags:
                - Filters
            summary: Delete a Filter
            operationId: deleteFilter
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        get:
            tags:
                - Filters
            summary: Request Filter information
            operationId: getFilter
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetFilterResponse'
        put:
            tags:
                - Filters
            summary: Update Filter information
            description: 'This method updates Filter data. To unset a value, use empty strings'
            operationId: updateFilter
            requestBody:
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/UpdateFilterRequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/UpdateFilterResponse'
        parameters:
            - name: user
              in: path
              description: Users unique ID
              required: true
              schema:
                  type: string
            - name: filter
              in: path
              description: Filters unique ID
              required: true
              schema:
                  type: string

    /filters:
        get:
            tags:
                - Filters
            summary: List all Filters
            operationId: getAllFilters
            parameters:
                - name: forward
                  in: query
                  description: Partial match of a forward email address or URL
                  schema:
                      type: string
                - name: metaData
                  in: query
                  description: 'If true, then includes metaData in the response'
                  schema:
                      type: boolean
                - name: limit
                  in: query
                  description: How many records to return
                  schema:
                      type: number
                - name: page
                  in: query
                  description: 'Current page number. Informational only, page numbers start from 1'
                  schema:
                      type: number
                - name: next
                  in: query
                  description: 'Cursor value for next page, retrieved from nextCursor response value'
                  schema:
                      type: number
                - name: previous
                  in: query
                  description: 'Cursor value for previous page, retrieved from previousCursor response value'
                  schema:
                      type: number
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetAllFiltersResponse'

    '/users/{user}/filters':
        get:
            tags:
                - Filters
            summary: List Filters for a User
            operationId: getFilters
            parameters:
                - name: metaData
                  in: query
                  description: 'If true, then includes metaData in the response'
                  schema:
                      type: boolean
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetFiltersResponse'
        post:
            tags:
                - Filters
            summary: Create new Filter
            operationId: createFilter
            requestBody:
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/CreateFilterRequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/UpdateFilterResponse'
        parameters:
            - name: user
              in: path
              description: Users unique ID
              required: true
              schema:
                  type: string
    '/users/{user}/mailboxes/{mailbox}':
        delete:
            tags:
                - Mailboxes
            summary: Delete a Mailbox
            operationId: deleteMailbox
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        get:
            tags:
                - Mailboxes
            summary: Request Mailbox information
            operationId: getMailbox
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetMailboxResponse'
        put:
            tags:
                - Mailboxes
            summary: Update Mailbox information
            operationId: updateMailbox
            requestBody:
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/UpdateMailboxRequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        parameters:
            - name: user
              in: path
              description: Users unique ID
              required: true
              schema:
                  type: string
            - name: mailbox
              in: path
              description: Mailbox unique ID. Special use folders and INBOX can not be deleted
              required: true
              schema:
                  type: string
    '/users/{user}/mailboxes':
        get:
            tags:
                - Mailboxes
            summary: List Mailboxes for a User
            operationId: getMailboxes
            parameters:
                - name: specialUse
                  in: query
                  description: Should the response include only folders with specialUse flag set.
                  schema:
                      type: boolean
                - name: showHidden
                  in: query
                  description: Hidden folders are not included in the listing by default.
                  schema:
                      type: boolean
                - name: counters
                  in: query
                  description: Should the response include counters (total + unseen). Counters come with some overhead.
                  schema:
                      type: boolean
                - name: sizes
                  in: query
                  description: Should the response include mailbox size in bytes. Size numbers come with a lot of overhead as an aggregated query is ran.
                  schema:
                      type: boolean
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetMailboxesResponse'
        post:
            tags:
                - Mailboxes
            summary: Create new Mailbox
            operationId: createMailbox
            requestBody:
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/CreateMailboxRequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/CreateMailboxResponse'
        parameters:
            - name: user
              in: path
              description: Users unique ID
              required: true
              schema:
                  type: string
    '/users/{user}/mailboxes/{mailbox}/messages/{message}':
        delete:
            tags:
                - Messages
            summary: Delete a Message
            operationId: deleteMessage
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        get:
            tags:
                - Messages
            summary: Request Message information
            operationId: getMessage
            parameters:
                - name: markAsSeen
                  in: query
                  description: If true then marks message as seen
                  schema:
                      type: boolean
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetMessageResponse'
        parameters:
            - name: user
              in: path
              description: ID of the User
              required: true
              schema:
                  type: string
            - name: mailbox
              in: path
              description: ID of the Mailbox
              required: true
              schema:
                  type: string
            - name: message
              in: path
              description: Message ID
              required: true
              schema:
                  type: number
    '/users/{user}/mailboxes/{mailbox}/messages':
        delete:
            tags:
                - Messages
            summary: Delete all Messages from a Mailbox
            operationId: deleteMessagesInMailbox
            parameters:
                - name: async
                  in: query
                  description: Schedule deletion task
                  schema:
                      type: boolean
                      default: false
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/DeleteMessagesInMailboxResponse'
        get:
            tags:
                - Messages
            summary: List messages in a Mailbox
            operationId: getMessages
            parameters:
                - name: unseen
                  in: query
                  description: 'If true, then returns only unseen messages'
                  schema:
                      type: boolean
                - name: metaData
                  in: query
                  description: 'If true, then includes metaData in the response'
                  schema:
                      type: boolean
                - name: threadCounters
                  in: query
                  description: 'If true, then includes threadMessageCount in the response. Counters come with some overhead'
                  schema:
                      type: boolean
                - name: limit
                  in: query
                  description: How many records to return
                  schema:
                      type: number
                - name: page
                  in: query
                  description: 'Current page number. Informational only, page numbers start from 1'
                  schema:
                      type: number
                - name: order
                  in: query
                  description: Ordering of the records by insert date
                  schema:
                      $ref: '#/components/schemas/Order'
                - name: includeHeaders
                  in: query
                  description: 'Comma separated list of header keys to include in the response'
                  schema:
                      type: string
                      example: 'List-ID, MIME-version'
                - name: next
                  in: query
                  description: 'Cursor value for next page, retrieved from nextCursor response value'
                  schema:
                      type: string
                - name: previous
                  in: query
                  description: 'Cursor value for previous page, retrieved from previousCursor response value'
                  schema:
                      type: string
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetMessagesResponse'
        put:
            tags:
                - Messages
            summary: Update Message information
            description: This method updates message flags and also allows to move messages to a different mailbox
            operationId: updateMessage
            requestBody:
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/UpdateMessageRequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/UpdateMessageResponse'
        post:
            tags:
                - Messages
            summary: Upload Message
            description: 'This method allows to upload either an RFC822 formatted message or a message structure to a mailbox. Raw message is stored unmodified, no headers are added or removed. If you want to generate the uploaded message from structured data fields, then do not use the raw property.'
            operationId: uploadMessage
            requestBody:
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/UploadMessageRequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/UploadMessageResponse'
        parameters:
            - name: user
              in: path
              description: ID of the User
              required: true
              schema:
                  type: string
            - name: mailbox
              in: path
              description: ID of the Mailbox
              required: true
              schema:
                  type: string
    '/users/{user}/mailboxes/{mailbox}/messages/{message}/forward':
        post:
            tags:
                - Messages
            summary: Forward stored Message
            description: This method allows either to re-forward a message to an original forward target or forward it to some other address. This is useful if a user had forwarding turned on but the message was not delivered so you can try again. Forwarding does not modify the original message.
            operationId: forwardStoredMessage
            requestBody:
                description: This method allows either to re-forward a message to an original forward target or forward it to some other address. This is useful if a user had forwarding turned on but the message was not delivered so you can try again. Forwarding does not modify the original message.
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/ForwardStoredMessageRequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/ForwardStoredMessageResponse'
        parameters:
            - name: user
              in: path
              description: ID of the User
              required: true
              schema:
                  type: string
            - name: mailbox
              in: path
              description: ID of the Mailbox
              required: true
              schema:
                  type: string
            - name: message
              in: path
              description: Message ID
              required: true
              schema:
                  type: number
    '/users/{user}/mailboxes/{mailbox}/messages/{message}/attachments/{attachment}':
        get:
            tags:
                - Messages
            summary: Download Attachment
            description: This method returns attachment file contents in binary form
            operationId: getMessageAttachment
            responses:
                '200':
                    description: Success
                    content:
                        application/octet-stream:
                            schema:
                                type: string
                                description: Success
                                format: binary
        parameters:
            - name: user
              in: path
              description: ID of the User
              required: true
              schema:
                  type: string
            - name: mailbox
              in: path
              description: ID of the Mailbox
              required: true
              schema:
                  type: string
            - name: message
              in: path
              description: ID of the Message
              required: true
              schema:
                  type: number
            - name: attachment
              in: path
              description: ID of the Attachment
              required: true
              schema:
                  type: string
    '/users/{user}/mailboxes/{mailbox}/messages/{message}/message.eml':
        get:
            tags:
                - Messages
            summary: Get Message source
            description: This method returns the full RFC822 formatted source of the stored message
            operationId: getMessageSource
            responses:
                '200':
                    description: Success
                    content:
                        text/plain:
                            schema:
                                type: object
                                description: Success
        parameters:
            - name: user
              in: path
              description: ID of the User
              required: true
              schema:
                  type: string
            - name: mailbox
              in: path
              description: ID of the Mailbox
              required: true
              schema:
                  type: string
            - name: message
              in: path
              description: ID of the Message
              required: true
              schema:
                  type: number
    '/users/{user}/outbound/{queueId}':
        delete:
            tags:
                - Messages
            summary: Delete an Outbound Message
            description: You can delete outbound emails that are still in queue. Queue ID can be found from the `outbound` property of a stored email.
            operationId: deleteOutboundMessage
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        parameters:
            - name: user
              in: path
              description: ID of the User
              required: true
              schema:
                  type: string
            - name: queueId
              in: path
              description: Outbound queue ID of the message
              required: true
              schema:
                  type: string

    '/users/{user}/search':
        get:
            tags:
                - Messages
            summary: Search for messages
            operationId: searchMessages
            description: This method allows searching for matching messages.
            parameters:
                - name: mailbox
                  in: query
                  description: ID of the Mailbox
                  schema:
                      type: string
                - name: thread
                  in: query
                  description: Thread ID
                  schema:
                      type: string
                - name: query
                  in: query
                  description: 'Search string, uses MongoDB fulltext index. Covers data from mesage body and also common headers like from, to, subject etc.'
                  schema:
                      type: string
                - name: datestart
                  in: query
                  description: Datestring for the earliest message storing time
                  schema:
                      type: string
                      format: date-time
                - name: dateend
                  in: query
                  description: Datestring for the latest message storing time
                  schema:
                      type: string
                      format: date-time
                - name: from
                  in: query
                  description: 'Partial match for the From: header line'
                  schema:
                      type: string
                - name: to
                  in: query
                  description: 'Partial match for the To: and Cc: header lines'
                  schema:
                      type: string
                - name: subject
                  in: query
                  description: 'Partial match for the Subject: header line'
                  schema:
                      type: string
                - name: attachments
                  in: query
                  description: 'If true, then matches only messages with attachments'
                  schema:
                      type: boolean
                - name: flagged
                  in: query
                  description: 'If true, then matches only messages with \Flagged flags'
                  schema:
                      type: boolean
                - name: unseen
                  in: query
                  description: 'If true, then matches only messages without \Seen flags'
                  schema:
                      type: boolean
                - name: searchable
                  in: query
                  description: 'If true, then matches messages not in Junk or Trash'
                  schema:
                      type: boolean
                - name: or.query
                  in: query
                  description: 'Search string, uses MongoDB fulltext index. Covers data from mesage body and also common headers like from, to, subject etc.'
                  schema:
                      type: string
                - name: or.from
                  in: query
                  description: 'Partial match for the From: header line'
                  schema:
                      type: string
                - name: or.to
                  in: query
                  description: 'Partial match for the To: and Cc: header lines'
                  schema:
                      type: string
                - name: or.subject
                  in: query
                  description: 'Partial match for the Subject: header line'
                  schema:
                      type: string
                - name: minSize
                  in: query
                  description: Minimal message size in bytes
                  schema:
                      type: number
                - name: maxSize
                  in: query
                  description: Maximal message size in bytes
                  schema:
                      type: number
                - name: threadCounters
                  in: query
                  description: 'If true, then includes threadMessageCount in the response. Counters come with some overhead'
                  schema:
                      type: boolean
                - name: limit
                  in: query
                  description: How many records to return
                  schema:
                      type: number
                - name: order
                  in: query
                  description: Ordering of the records by insert date. If no order is supplied, results are sorted by heir mongoDB ObjectId.
                  schema:
                      $ref: '#/components/schemas/Order'
                - name: includeHeaders
                  in: query
                  description: 'Comma separated list of header keys to include in the response'
                  schema:
                      type: string
                      example: 'List-ID, MIME-version'
                - name: page
                  in: query
                  description: 'Current page number. Informational only, page numbers start from 1'
                  schema:
                      type: number
                - name: next
                  in: query
                  description: 'Cursor value for next page, retrieved from nextCursor response value'
                  schema:
                      type: string
                - name: previous
                  in: query
                  description: 'Cursor value for previous page, retrieved from previousCursor response value'
                  schema:
                      type: string
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SearchMessagesResponse'

        post:
            tags:
                - Messages
            summary: Search and update messages
            operationId: searchApplyMessages
            description: This method allows applying an action to all matching messages. This is an async method so that it will return immediately. Actual modifications are run in the background.
            requestBody:
                content:
                    application/json:
                        schema:
                            type: object
                            properties:
                                mailbox:
                                    description: ID of the Mailbox
                                    type: string
                                thread:
                                    description: Thread ID
                                    type: string
                                query:
                                    description: 'Search string, uses MongoDB fulltext index. Covers data from mesage body and also common headers like from, to, subject etc.'
                                    type: string
                                datestart:
                                    description: Datestring for the earliest message storing time
                                    type: string
                                    format: date-time
                                dateend:
                                    description: Datestring for the latest message storing time
                                    type: string
                                    format: date-time
                                from:
                                    description: 'Partial match for the From: header line'
                                    type: string
                                to:
                                    in: query
                                    description: 'Partial match for the To: and Cc: header lines'
                                    type: string
                                subject:
                                    description: 'Partial match for the Subject: header line'
                                    type: string
                                attachments:
                                    description: 'If true, then matches only messages with attachments'
                                    type: boolean
                                flagged:
                                    description: 'If true, then matches only messages with \Flagged flags'
                                    type: boolean
                                unseen:
                                    description: 'If true, then matches only messages without \Seen flags'
                                    type: boolean
                                searchable:
                                    description: 'If true, then matches messages not in Junk or Trash'
                                    type: boolean
                                or:
                                    type: object
                                    description: 'At least onOne of the included terms must match'
                                    properties:
                                        query:
                                            description: 'Search string, uses MongoDB fulltext index. Covers data from mesage body and also common headers like from, to, subject etc.'
                                            type: string
                                        from:
                                            description: 'Partial match for the From: header line'
                                            type: string
                                        to:
                                            description: 'Partial match for the To: and Cc: header lines'
                                            type: string
                                        subject:
                                            description: 'Partial match for the Subject: header line'
                                            type: string
                                minSize:
                                    description: Minimal message size in bytes
                                    type: number
                                maxSize:
                                    description: Maximal message size in bytes
                                    type: number
                                action:
                                    type: object
                                    description: 'Define actions to take with matching messages'
                                    properties:
                                        moveTo:
                                            type: string
                                            description: ID of the target Mailbox if you want to move messages
                                        seen:
                                            type: boolean
                                            description: State of the \Seen flag
                                        flagged:
                                            type: boolean
                                            description: State of the \Flagged flag

            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                type: object
                                properties:
                                    success:
                                        type: boolean
                                        description: Indicates if the action succeeded or not
                                    scheduled:
                                        type: string
                                        description: ID of the scheduled operation

        parameters:
            - name: user
              in: path
              description: ID of the User
              required: true
              schema:
                  type: string
    '/users/{user}/mailboxes/{mailbox}/messages/{message}/submit':
        post:
            tags:
                - Messages
            summary: Submit Draft for delivery
            description: This method allows to submit a draft message for delivery. Draft is moved to Sent mail folder.
            operationId: submitStoredMessage
            requestBody:
                description: This method allows to submit a draft message for delivery. Draft is moved to Sent mail folder.
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/SubmitStoredMessageRequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SubmitStoredMessageResponse'
        parameters:
            - name: user
              in: path
              description: ID of the User
              required: true
              schema:
                  type: string
            - name: mailbox
              in: path
              description: ID of the Mailbox
              required: true
              schema:
                  type: string
            - name: message
              in: path
              description: Message ID
              required: true
              schema:
                  type: number
    '/users/{user}/storage/{file}':
        delete:
            tags:
                - Storage
            summary: Delete a File
            operationId: deleteFile
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        get:
            tags:
                - Storage
            summary: Download File
            description: This method returns stored file contents in binary form
            operationId: getFile
            responses:
                '200':
                    description: Success
                    content:
                        application/octet-stream:
                            schema:
                                type: string
                                description: Success
                                format: binary
        parameters:
            - name: user
              in: path
              description: ID of the User
              required: true
              schema:
                  type: string
            - name: file
              in: path
              description: ID of the File
              required: true
              schema:
                  type: string
    '/users/{user}/storage':
        get:
            tags:
                - Storage
            summary: List stored files
            operationId: getFiles
            parameters:
                - name: query
                  in: query
                  description: Partial match of a filename
                  schema:
                      type: string
                - name: limit
                  in: query
                  description: How many records to return
                  schema:
                      type: number
                - name: page
                  in: query
                  description: 'Current page number. Informational only, page numbers start from 1'
                  schema:
                      type: number
                - name: next
                  in: query
                  description: 'Cursor value for next page, retrieved from nextCursor response value'
                  schema:
                      type: string
                - name: previous
                  in: query
                  description: 'Cursor value for previous page, retrieved from previousCursor response value'
                  schema:
                      type: string
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetFilesResponse'
        post:
            tags:
                - Storage
            summary: Upload File
            description: This method allows to upload an attachment to be linked from a draft
            operationId: uploadFile
            requestBody:
                content:
                    multipart/form-data:
                        encoding: {}
                        schema:
                            required:
                                - content
                            type: object
                            properties:
                                filename:
                                    type: string
                                    description: Name of the file
                                contentType:
                                    type: string
                                    description: MIME type of the file. Is detected from the file name by default
                                encoding:
                                    type: string
                                    description: Encoding of the file content. Useful if you want to upload the file in base64 encoded format. Valid options "base64", "hex", "utf8"
                                content:
                                    type: string
                                    format: binary
                required: false
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/UploadFileResponse'
        parameters:
            - name: user
              in: path
              description: ID of the User
              required: true
              schema:
                  type: string
    '/users/{user}/submit':
        post:
            tags:
                - Submission
            summary: Submit a Message for Delivery
            description: Use this method to send emails from a user account
            operationId: submitMessage
            requestBody:
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/SubmitMessageRequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SubmitMessageResponse'
        parameters:
            - name: user
              in: path
              description: Users unique ID
              required: true
              schema:
                  type: string
    '/users/{user}/2fa/totp/check':
        post:
            tags:
                - TwoFactorAuth
            summary: Validate TOTP Token
            description: This method checks if a TOTP token provided by a User is valid for authentication
            operationId: checkTotp2FA
            requestBody:
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/CheckTotp2FARequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        parameters:
            - name: user
              in: path
              description: ID of the User
              required: true
              schema:
                  type: string
    '/users/{user}/2fa':
        delete:
            tags:
                - TwoFactorAuth
            summary: Disable 2FA
            description: This method disables all 2FA mechanisms a user might have set up
            operationId: disable2FA
            parameters:
                - name: sess
                  in: query
                  description: Session identifier for the logs
                  schema:
                      type: string
                - name: ip
                  in: query
                  description: IP address for the logs
                  schema:
                      type: string
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        parameters:
            - name: user
              in: path
              description: ID of the User
              required: true
              schema:
                  type: string
    '/users/{user}/2fa/custom':
        delete:
            tags:
                - TwoFactorAuth
            summary: Disable custom 2FA for a user
            description: 'This method disables custom 2FA. If it was the only 2FA set up, then account password for IMAP/POP3/SMTP gets enabled again'
            operationId: disableCustom2FA
            parameters:
                - name: sess
                  in: query
                  description: Session identifier for the logs
                  schema:
                      type: string
                - name: ip
                  in: query
                  description: IP address for the logs
                  schema:
                      type: string
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        put:
            tags:
                - TwoFactorAuth
            summary: Enable custom 2FA for a user
            description: This method disables account password for IMAP/POP3/SMTP
            operationId: enableCustom2FA
            requestBody:
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/EnableCustom2FARequest'
                required: false
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        parameters:
            - name: user
              in: path
              description: ID of the User
              required: true
              schema:
                  type: string
    '/users/{user}/2fa/totp':
        delete:
            tags:
                - TwoFactorAuth
            summary: Disable TOTP auth
            description: This method disables TOTP for a user. Does not affect other 2FA mechanisms a user might have set up
            operationId: disableTotp2FA
            parameters:
                - name: sess
                  in: query
                  description: Session identifier for the logs
                  schema:
                      type: string
                - name: ip
                  in: query
                  description: IP address for the logs
                  schema:
                      type: string
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        parameters:
            - name: user
              in: path
              description: ID of the User
              required: true
              schema:
                  type: string
    '/users/{user}/2fa/totp/enable':
        post:
            tags:
                - TwoFactorAuth
            summary: Enable TOTP seed
            description: This method enables TOTP for a user by verifying the seed value generated from 2fa/totp/setup
            operationId: enableTotp2FA
            requestBody:
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/EnableTotp2FARequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        parameters:
            - name: user
              in: path
              description: ID of the User
              required: true
              schema:
                  type: string
    '/users/{user}/2fa/totp/setup':
        post:
            tags:
                - TwoFactorAuth
            summary: Generate TOTP seed
            description: This method generates TOTP seed and QR code for 2FA. User needs to verify the seed value using 2fa/totp/enable endpoint
            operationId: setupTotp2FA
            requestBody:
                description: This method generates TOTP seed and QR code for 2FA. User needs to verify the seed value using 2fa/totp/enable endpoint
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/SetupTotp2FARequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SetupTotp2FAResponse'
        parameters:
            - name: user
              in: path
              description: ID of the User
              required: true
              schema:
                  type: string
    '/users/{id}':
        delete:
            tags:
                - Users
            summary: Delete a User
            description: 'This method deletes user and address entries from DB and schedules a background task to delete messages. You can call this method several times even if the user has already been deleted, in case there are still some pending messages.'
            operationId: deleteUser
            parameters:
                - name: deleteAfter
                  description: Delete user entry from registry but keep all user data until provided date. User account is fully recoverable up to that date.
                  in: query
                  schema:
                      type: string
                      format: date-time
                - name: sess
                  in: query
                  description: Session identifier for the logs
                  schema:
                      type: string
                - name: ip
                  in: query
                  description: IP address for the logs
                  schema:
                      type: string
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        get:
            tags:
                - Users
            summary: Request User information
            operationId: getUser
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetUserResponse'
        put:
            tags:
                - Users
            summary: Update User information
            operationId: updateUser
            requestBody:
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/UpdateUserRequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        parameters:
            - name: id
              in: path
              description: Users unique ID.
              required: true
              schema:
                  type: string
    '/users/{id}/updates':
        get:
            tags:
                - Users
            summary: Open change stream
            description: This api call returns an EventSource response. Listen on this stream to get notifications about changes in messages and mailboxes. Returned events are JSON encoded strings
            operationId: getUpdates
            responses:
                '200':
                    description: Success
                    content:
                        text/event-stream:
                            schema:
                                type: string
                                description: Success
        parameters:
            - name: id
              in: path
              description: Users unique ID.
              required: true
              schema:
                  type: string
    '/users/resolve/{username}':
        get:
            tags:
                - Users
            summary: Resolve ID for a username
            operationId: resolveUser
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/ResolveIdResponse'
        parameters:
            - name: username
              in: path
              description: 'Username of the User. Alphanumeric value. Must start with a letter, dots are allowed but informational only ("user.name" is the same as "username")'
              required: true
              schema:
                  type: string

    '/users/{id}/restore':
        get:
            tags:
                - Users
            summary: Return recovery info for a deleted user
            operationId: restoreUserInfo
            parameters:
                - name: sess
                  in: query
                  description: Session identifier for the logs
                  schema:
                      type: string
                - name: ip
                  in: query
                  description: IP address for the logs
                  schema:
                      type: string
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/RecoverInfoResponse'
        post:
            tags:
                - Users
            summary: Cancel user deletion task
            description: 'Use this endpoint to cancel a timed deletion task scheduled by `DELETE /user/{id}`. If user data is not yet deleted then the account is fully recovered, except any email addresses that might have been already recycled'
            operationId: restoreUser

            requestBody:
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/UserRestoreRequest'
                required: true

            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        parameters:
            - name: id
              in: path
              description: Users unique ID.
              required: true
              schema:
                  type: string
    /users:
        get:
            tags:
                - Users
            summary: List registered Users
            operationId: getUsers
            parameters:
                - name: query
                  in: query
                  description: Partial match of username or default email address
                  schema:
                      type: string
                - name: forward
                  in: query
                  description: Partial match of a forward email address or URL
                  schema:
                      type: string
                - name: tags
                  in: query
                  description: Comma separated list of tags. The User must have at least one to be set
                  schema:
                      type: string
                - name: requiredTags
                  in: query
                  description: Comma separated list of tags. The User must have all listed tags to be set
                  schema:
                      type: string
                - name: metaData
                  in: query
                  description: 'If true, then includes metaData in the response'
                  schema:
                      type: boolean
                - name: internalData
                  in: query
                  description: 'If true, then includes internalData in the response. Not shown for user-role tokens.'
                  schema:
                      type: boolean
                - name: limit
                  in: query
                  description: How many records to return
                  schema:
                      type: number
                - name: page
                  in: query
                  description: 'Current page number. Informational only, page numbers start from 1'
                  schema:
                      type: number
                - name: next
                  in: query
                  description: 'Cursor value for next page, retrieved from nextCursor response value'
                  schema:
                      type: string
                - name: previous
                  in: query
                  description: 'Cursor value for previous page, retrieved from previousCursor response value'
                  schema:
                      type: string
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetUsersResponse'
        post:
            tags:
                - Users
            summary: Create new user
            operationId: createUser
            requestBody:
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/CreateUserRequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/CreateUserResponse'
    '/users/{user}/quota/reset':
        post:
            tags:
                - Users
            summary: Recalculate User quota
            description: 'This method recalculates quota usage for a User. Normally not needed, only use it if quota numbers are way off. This method is not transactional, so if the user is currently receiving new messages then the resulting value is not exact.'
            operationId: recalculateQuota
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/RecalculateQuotaResponse'
        parameters:
            - name: user
              in: path
              description: Users unique ID.
              required: true
              schema:
                  type: string
    /quota/reset:
        post:
            tags:
                - Users
            summary: Recalculate Quota for all Users
            description: 'This method recalculates quota usage for all Users. Normally not needed, only use it if quota numbers are way off. This method is not transactional, so if the user is currently receiving new messages then the resulting value is not exact.'
            operationId: recalculateQuotaAllUsers
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
    '/users/{id}/logout':
        put:
            tags:
                - Users
            summary: Log out User
            description: This method logs out all user sessions in IMAP
            operationId: logoutUser
            requestBody:
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/LogoutUserRequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        parameters:
            - name: id
              in: path
              description: Users unique ID.
              required: true
              schema:
                  type: string
    '/users/{id}/password/reset':
        post:
            tags:
                - Users
            summary: Reset password for a User
            description: This method generates a new temporary password for a User. Additionally it removes all two-factor authentication settings
            operationId: resetUserPassword
            requestBody:
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/ResetUserPasswordRequest'
                required: false
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/ResetUserPasswordResponse'
        parameters:
            - name: id
              in: path
              description: Users unique ID.
              required: true
              schema:
                  type: string

    '/webhooks/{webhook}':
        delete:
            tags:
                - Webhooks
            summary: Delete a webhook
            operationId: deleteWebhook
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'
        parameters:
            - name: webhook
              in: path
              description: ID of the Webhook
              required: true
              schema:
                  type: string
    /webhooks:
        get:
            tags:
                - Webhooks
            summary: List registered Webhooks
            operationId: getWebhooks
            parameters:
                - name: type
                  in: query
                  description: 'Prefix or exact match. Prefix match must end with ".*", eg "channel.*". Use "*" for all types'
                  required: true
                  schema:
                      type: string
                - name: user
                  in: query
                  description: User ID
                  schema:
                      type: string
                - name: limit
                  in: query
                  description: How many records to return
                  schema:
                      type: number
                - name: page
                  in: query
                  description: 'Current page number. Informational only, page numbers start from 1'
                  schema:
                      type: number
                - name: next
                  in: query
                  description: 'Cursor value for next page, retrieved from nextCursor response value'
                  schema:
                      type: string
                - name: previous
                  in: query
                  description: 'Cursor value for previous page, retrieved from previousCursor response value'
                  schema:
                      type: string
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetWebhooksResponse'
        post:
            tags:
                - Webhooks
            summary: Create new Webhook
            description: Create new webhook
            operationId: createWebhook
            requestBody:
                description: Create new webhook
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/CreateWebhookRequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/CreateWebhookResponse'

    '/settings/{setting}':
        get:
            tags:
                - Settings
            summary: Get Setting value
            operationId: getSetting
            parameters:
                - name: sess
                  in: query
                  description: Session identifier for the logs
                  schema:
                      type: string
                - name: ip
                  in: query
                  description: IP address for the logs
                  schema:
                      type: string

            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetSettingResponse'

        post:
            tags:
                - Settings
            summary: Create or Update Setting
            description: Create a new or update an existing setting
            operationId: createSetting
            requestBody:
                description: Create or Update Setting
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/CreateSettingRequest'
                required: true
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/CreateSettingResponse'

        delete:
            tags:
                - Settings
            summary: Delete a setting
            operationId: deleteSetting
            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/SuccessResponse'

        parameters:
            - name: setting
              in: path
              description: Key of the Setting
              required: true
              schema:
                  type: string

    /settings:
        get:
            tags:
                - Settings
            summary: List registered Settings
            operationId: getSettings
            parameters:
                - name: filter
                  in: query
                  description: 'Optional partial match of the Setting key'
                  schema:
                      type: string
                - name: sess
                  in: query
                  description: Session identifier for the logs
                  schema:
                      type: string
                - name: ip
                  in: query
                  description: IP address for the logs
                  schema:
                      type: string

            responses:
                '200':
                    description: Success
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/GetSettingsResponse'

components:
    schemas:
        AddressLimits:
            required:
                - forwards
            type: object
            properties:
                forwards:
                    $ref: '#/components/schemas/Forwards'
            description: Account limits and usage
        AutoreplyInfo:
            required:
                - status
                - name
                - subject
                - text
                - html
            type: object
            properties:
                status:
                    type: boolean
                    description: 'If true, then autoreply is enabled for this address'
                name:
                    type: string
                    description: 'Name that is used for the From: header in autoreply message'
                subject:
                    type: string
                    description: Autoreply subject line
                text:
                    type: string
                    description: Autoreply plaintext content
                html:
                    type: string
                    description: Autoreply HTML content
            description: Autoreply information
        Autoreply:
            type: object
            properties:
                status:
                    type: boolean
                    description: 'If true, then autoreply is enabled for this address'
                start:
                    type: string
                    format: date-time
                    description: Either a date string or boolean false to disable start time checks
                end:
                    type: string
                    format: date-time
                    description: Either a date string or boolean false to disable end time checks
                name:
                    type: string
                    description: 'Name that is used for the From: header in autoreply message'
                subject:
                    type: string
                    description: Autoreply subject line
                text:
                    type: string
                    description: Autoreply plaintext content
                html:
                    type: string
                    description: Autoreply HTML content
            description: Autoreply information
        LastUse:
            required:
                - time
                - event
            type: object
            properties:
                time:
                    type: string
                    description: Datestring of last use or false if password has not been used
                    format: date-time
                event:
                    type: string
                    description: Event ID of the security log for the last authentication
            description: Information about last use
        ContentType:
            required:
                - value
                - params
            type: object
            properties:
                value:
                    type: string
                    description: 'MIME type of the message, eg. "multipart/mixed"'
                params:
                    type: object
                    description: An object with Content-Type params as key-value pairs
            description: Parsed Content-Type header. Usually needed to identify encrypted messages and such
        DnsTxt:
            required:
                - name
                - value
            type: object
            properties:
                name:
                    type: string
                    description: Is the domain name of TXT
                value:
                    type: string
                    description: Is the value of TXT
            description: Value for DNS TXT entry
        Query:
            type: object
            properties:
                from:
                    type: string
                    description: 'Partial match for the From: header (case insensitive)'
                to:
                    type: string
                    description: 'Partial match for the To:/Cc: headers (case insensitive)'
                subject:
                    type: string
                    description: 'Partial match for the Subject: header (case insensitive)'
                listId:
                    type: string
                    description: 'Partial match for the List-ID: header (case insensitive)'
                text:
                    type: string
                    description: Fulltext search against message text
                ha:
                    type: boolean
                    description: Does a message have to have an attachment or not
                size:
                    type: number
                    description: 'Message size in bytes. If the value is a positive number then message needs to be larger, if negative then message needs to be smaller than abs(size) value'
            description: Rules that a message must match
        Action:
            type: object
            properties:
                seen:
                    type: boolean
                    description: If true then mark matching messages as Seen
                flag:
                    type: boolean
                    description: If true then mark matching messages as Flagged
                delete:
                    type: boolean
                    description: If true then do not store matching messages
                spam:
                    type: boolean
                    description: If true then store matching messags to Junk Mail folder
                mailbox:
                    type: string
                    description: Mailbox ID to store matching messages to
                targets:
                    type: array
                    items:
                        type: string
                    description: 'An array of forwarding targets. The value could either be an email address or a relay url to next MX server ("smtp://mx2.zone.eu:25") or an URL where mail contents are POSTed to'
            description: Action to take with a matching message
        SpecialUse:
            enum:
                - \Drafts
                - \Junk
                - \Sent
                - \Trash
            type: string
            description: 'Either special use identifier or null. One of \Drafts, \Junk, \Sent or \Trash'
        Envelope:
            required:
                - from
                - rcpt
            type: object
            properties:
                from:
                    type: string
                    description: Address from MAIL FROM
                rcpt:
                    $ref: '#/components/schemas/Rcpt'
            description: SMTP envelope (if available)
        Rcpt:
            required:
                - value
                - formatted
            type: object
            properties:
                value:
                    type: string
                    description: RCPT TO address as provided by SMTP client
                formatted:
                    type: string
                    description: Normalized RCPT address
            description: Array of addresses from RCPT TO (should have just one normally)
        Address:
            required:
                - name
                - address
            type: object
            properties:
                name:
                    type: string
                    description: Name of the sender/recipient
                address:
                    type: string
                    description: Address of the sender/recipient
        AddressOptionalName:
            required:
                - address
            type: object
            properties:
                name:
                    type: string
                    description: Name of the sender
                address:
                    type: string
                    description: Address of the sender
        List:
            required:
                - id
                - unsubscribe
            type: object
            properties:
                id:
                    type: string
                    description: Value from List-ID header
                unsubscribe:
                    type: string
                    description: Value from List-Unsubscribe header
            description: If set then this message is from a mailing list

        Outbound:
            required:
                - queueId
                - entries
            type: object
            properties:
                queueId:
                    type: string
                    description: Queue ID
                entries:
                    type: array
                    items:
                        $ref: '#/components/schemas/OutboundQueueEntry'
                    description: Queued recipients
        OutboundQueueEntry:
            required:
                - seq
                - recipient
            type: object
            properties:
                seq:
                    type: string
                    description: Queue target ID
                recipient:
                    type: string
                    description: Target recipient
                sendingZone:
                    type: string
                    description: Zone ID in ZoneMTA
                queued:
                    type: string
                    description: ISO Date of the expected delivery time
        Attachments:
            required:
                - id
                - filename
                - contentType
                - disposition
                - transferEncoding
                - related
                - sizeKb
            type: object
            properties:
                id:
                    type: string
                    description: Attachment ID
                hash:
                    type: string
                    description: SHA-256 hash of the contents of the attachment
                filename:
                    type: string
                    description: Filename of the attachment
                contentType:
                    type: string
                    description: MIME type
                disposition:
                    type: string
                    description: Attachment disposition
                transferEncoding:
                    type: string
                    description: Which transfer encoding was used (actual content when fetching attachments is not encoded)
                related:
                    type: boolean
                    description: Was this attachment found from a multipart/related node. This usually means that this is an embedded image
                sizeKb:
                    type: number
                    description: Approximate size of the attachment in kilobytes
            description: List of attachments for this message
        VerificationResults:
            required:
                - tls
                - spf
                - dkim
            type: object
            properties:
                tls:
                    $ref: '#/components/schemas/Tls'
                spf:
                    type: object
                    description: Domain name (either MFROM or HELO) of verified SPF or false if no SPF match was found
                dkim:
                    type: object
                    description: Domain name of verified DKIM signature or false if no valid signature was found
            description: 'Security verification info if message was received from MX. If this property is missing then do not automatically assume invalid TLS, SPF or DKIM.'
        Tls:
            required:
                - name
                - version
            type: object
            properties:
                name:
                    type: object
                    description: 'Cipher name, eg "ECDHE-RSA-AES128-GCM-SHA256"'
                version:
                    type: object
                    description: 'TLS version, eg "TLSv1/SSLv3"'
            description: TLS information. Value is false if TLS was not used
        Files:
            required:
                - id
                - filename
                - contentType
                - size
            type: object
            properties:
                id:
                    type: string
                    description: File ID
                filename:
                    type: string
                    description: Filename of the attached file
                contentType:
                    type: string
                    description: MIME type
                size:
                    type: number
                    description: MIME type
            description: 'List of files added to this message as attachments. Applies to Drafts, normal messages do not have this property. Needed to prevent uploading the same attachment every time a draft is updated'
        Header:
            required:
                - key
                - value
            type: object
            properties:
                key:
                    type: string
                    description: Header key ('X-Mailer')
                value:
                    type: string
                    description: Header value ('My Awesome Mailing Service')
        AttachmentsUpload:
            required:
                - content
            type: object
            properties:
                content:
                    type: string
                    description: Base64 encoded attachment content
                filename:
                    type: string
                    description: Attachment filename
                contentType:
                    type: string
                    description: MIME type for the attachment file
                cid:
                    type: string
                    description: Content-ID value if you want to reference to this attachment from HTML formatted message
        ReferenceWithAttachments:
            required:
                - mailbox
                - id
                - action
                - attachments
            type: object
            properties:
                mailbox:
                    type: string
                    description: Mailbox ID
                id:
                    type: number
                    description: Message ID in Mailbox
                action:
                    type: string
                    description: 'Either reply, replyAll or forward'
                attachments:
                    type: array
                    items:
                        type: string
                    description: "If true, then includes all attachments from the original message. If it is an array of attachment ID's includes attachments from the list"
            description: Optional referenced email. If uploaded message is a reply draft and relevant fields are not provided then these are resolved from the message to be replied to
        Message:
            required:
                - id
                - mailbox
            type: object
            properties:
                id:
                    type: number
                    description: Message ID in mailbox
                mailbox:
                    type: string
                    description: Mailbox ID the message was stored into
                size:
                    type: number
                    description: Size of the RFC822 formatted email
            description: Message information
            title: ''
        Forwarded:
            required:
                - seq
                - type
                - value
            type: object
            properties:
                seq:
                    type: string
                    description: Sequence ID
                type:
                    type: string
                    description: Target type
                value:
                    type: string
                    description: Target address
        Reference:
            required:
                - mailbox
                - id
                - action
            type: object
            properties:
                mailbox:
                    type: string
                    description: Mailbox ID
                id:
                    type: number
                    description: Message ID in Mailbox
                action:
                    type: string
                    description: 'Either reply, replyAll or forward'
            description: Optional referenced email. If submitted message is a reply and relevant fields are not provided then these are resolved from the message to be replied to
        EnvelopeUpload:
            type: object
            properties:
                from:
                    $ref: '#/components/schemas/AddressOptionalName'
                to:
                    type: array
                    items:
                        $ref: '#/components/schemas/AddressOptionalName'
                    description: Recipients information
            description: SMTP envelope. If not provided then resolved either from message headers or from referenced message
        MessageWithQueueId:
            required:
                - mailbox
                - id
                - queueId
            type: object
            properties:
                mailbox:
                    type: string
                    description: Mailbox ID the message was stored to
                id:
                    type: number
                    description: Message ID in Mailbox
                queueId:
                    type: string
                    description: Queue ID in MTA
            description: Information about submitted Message
        KeyInfo:
            required:
                - name
                - address
                - fingerprint
            type: object
            properties:
                name:
                    type: string
                    description: Name listed in public key
                address:
                    type: string
                    description: E-mail address listed in public key
                fingerprint:
                    type: string
                    description: Fingerprint of the public key
            description: Information about public key or false if key is not available
        UserLimits:
            required:
                - quota
                - recipients
                - forwards
                - received
                - imapUpload
                - imapDownload
                - pop3Download
            type: object
            properties:
                quota:
                    $ref: '#/components/schemas/Quota'
                recipients:
                    $ref: '#/components/schemas/Recipients'
                filters:
                    $ref: '#/components/schemas/Filters'
                forwards:
                    $ref: '#/components/schemas/Forwards'
                received:
                    $ref: '#/components/schemas/Received'
                imapUpload:
                    $ref: '#/components/schemas/ImapUpload'
                imapDownload:
                    $ref: '#/components/schemas/ImapDownload'
                pop3Download:
                    $ref: '#/components/schemas/Pop3Download'
                imapMaxConnections:
                    $ref: '#/components/schemas/ImapMaxConnections'
            description: Account limits and usage
        Quota:
            required:
                - allowed
                - used
            type: object
            properties:
                allowed:
                    type: number
                    description: Allowed quota of the user in bytes
                used:
                    type: number
                    description: Space used in bytes
            description: Quota usage limits
        Recipients:
            required:
                - allowed
                - used
                - ttl
            type: object
            properties:
                allowed:
                    type: number
                    description: How many messages per 24 hours can be sent
                used:
                    type: number
                    description: How many messages are sent during current 24 hour period
                ttl:
                    type: number
                    description: Time until the end of current 24 hour period
            description: Sending quota
        Filters:
            required:
                - allowed
                - used
            type: object
            properties:
                allowed:
                    type: number
                    description: How many filters are allowed
                used:
                    type: number
                    description: How many filters have been created
            description: Sending quota
        Forwards:
            required:
                - allowed
                - used
                - ttl
            type: object
            properties:
                allowed:
                    type: number
                    description: How many messages per 24 hours can be forwarded
                used:
                    type: number
                    description: How many messages are forwarded during current 24 hour period
                ttl:
                    type: number
                    description: Time until the end of current 24 hour period
            description: Forwarding quota
        Received:
            required:
                - allowed
                - used
                - ttl
            type: object
            properties:
                allowed:
                    type: number
                    description: How many messages per 1 hour can be received
                used:
                    type: number
                    description: How many messages are received during current 1 hour period
                ttl:
                    type: number
                    description: Time until the end of current 1 hour period
            description: Receiving quota
        ImapUpload:
            required:
                - allowed
                - used
                - ttl
            type: object
            properties:
                allowed:
                    type: number
                    description: 'How many bytes per 24 hours can be uploaded via IMAP. Only message contents are counted, not protocol overhead.'
                used:
                    type: number
                    description: How many bytes are uploaded during current 24 hour period
                ttl:
                    type: number
                    description: Time until the end of current 24 hour period
            description: IMAP upload quota
        ImapDownload:
            required:
                - allowed
                - used
                - ttl
            type: object
            properties:
                allowed:
                    type: number
                    description: 'How many bytes per 24 hours can be downloaded via IMAP. Only message contents are counted, not protocol overhead.'
                used:
                    type: number
                    description: How many bytes are downloaded during current 24 hour period
                ttl:
                    type: number
                    description: Time until the end of current 24 hour period
            description: IMAP download quota
        Pop3Download:
            required:
                - allowed
                - used
                - ttl
            type: object
            properties:
                allowed:
                    type: number
                    description: 'How many bytes per 24 hours can be downloaded via POP3. Only message contents are counted, not protocol overhead.'
                used:
                    type: number
                    description: How many bytes are downloaded during current 24 hour period
                ttl:
                    type: number
                    description: Time until the end of current 24 hour period
            description: POP3 download quota
        ImapMaxConnections:
            required:
                - allowed
                - used
            type: object
            properties:
                allowed:
                    type: number
                    description: How many parallel IMAP connections are permitted
                used:
                    type: number
                    description: How many parallel IMAP connections are currenlty in use
        Mailboxes:
            type: object
            properties:
                sent:
                    type: string
                    description: Path of Sent Mail folder
                junk:
                    type: string
                    description: Path of spam folder
                drafts:
                    type: string
                    description: Path of drafts folder
                trash:
                    type: string
                    description: Path of trash folder
            description: Optional names for special mailboxes
        SuccessResponse:
            required:
                - success
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
        UploadMessageRequest:
            type: object
            properties:
                unseen:
                    type: boolean
                    description: Is the message unseen or not
                draft:
                    type: boolean
                    description: Is the message a draft or not
                flagged:
                    type: boolean
                    description: Is the message flagged or not
                raw:
                    type: string
                    description: 'base64 encoded message source. Alternatively, you can provide this value as POST body by using message/rfc822 MIME type. If raw message is provided then it overrides any other mail configuration'
                from:
                    $ref: '#/components/schemas/Address'
                to:
                    type: array
                    items:
                        $ref: '#/components/schemas/AddressOptionalName'
                    description: 'Addresses for the To: header'
                cc:
                    type: array
                    items:
                        $ref: '#/components/schemas/AddressOptionalName'
                    description: 'Addresses for the Cc: header'
                bcc:
                    type: array
                    items:
                        $ref: '#/components/schemas/AddressOptionalName'
                    description: 'Addresses for the Bcc: header'
                subject:
                    type: string
                    description: Message subject. If not then resolved from Reference message
                text:
                    type: string
                    description: Plaintext message
                html:
                    type: string
                    description: HTML formatted message
                headers:
                    type: array
                    items:
                        $ref: '#/components/schemas/Header'
                    description: Custom headers for the message. If reference message is set then In-Reply-To and References headers are set  automaticall y
                files:
                    type: array
                    items:
                        type: string
                    description: Attachments as storage file IDs. NB! When retrieving message info then an array of objects is returned. When uploading a message then an array of IDs is used.
                attachments:
                    type: array
                    items:
                        $ref: '#/components/schemas/AttachmentsUpload'
                    description: Attachments for the message
                metaData:
                    description: 'Optional metadata, must be an object or JSON formatted string'
                    oneOf:
                        - type: object
                        - type: string
                reference:
                    $ref: '#/components/schemas/ReferenceWithAttachments'
                bimi:
                    type: object
                    description: Marks BIMI verification as passed for a domain. NB! BIMI record and logo files for the domain must be valid.
                    required:
                        - domain
                    properties:
                        domain:
                            type: string
                            description: Domain name for the BIMI record. It does not have to be the same as the From address.
                        selector:
                            type: string
                            description: Optional BIMI selector
                replacePrevious:
                    type: object
                    description: If set, then deletes a previous message when storing the new one. Useful when uploading a new Draft message.
                    required:
                        - id
                    properties:
                        mailbox:
                            type: string
                            description: Mailbox ID. Defaults to the mailbox of the uploaded message.
                        id:
                            type: number
                            description: Message ID in Mailbox
                sess:
                    type: string
                    description: Session identifier for the logs
                ip:
                    type: string
                    description: IP address for the logs
        ForwardStoredMessageRequest:
            type: object
            properties:
                target:
                    type: number
                    description: Number of original forwarding target
                addresses:
                    type: array
                    description: An array of additional forward targets
                    items:
                        type: string
        UploadMessageResponse:
            required:
                - success
                - message
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                message:
                    $ref: '#/components/schemas/Message'
                previousDeleted:
                    type: boolean
                    description: Set if replacing a previous message was requested
        ForwardStoredMessageResponse:
            required:
                - success
                - queueId
                - forwarded
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                queueId:
                    type: string
                    description: Message ID in outbound queue
                forwarded:
                    type: array
                    items:
                        $ref: '#/components/schemas/Forwarded'
                    description: Information about forwarding targets
        UploadFileResponse:
            required:
                - success
                - id
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                id:
                    type: object
                    description: File ID
        GetForwardedAddressResponse:
            required:
                - success
                - id
                - address
                - name
                - targets
                - limits
                - autoreply
                - created
                - tags
                - forwardedDisabled
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                id:
                    type: string
                    description: ID of the Address
                address:
                    type: string
                    description: E-mail address string
                name:
                    type: string
                    description: Identity name
                targets:
                    type: array
                    items:
                        type: string
                    description: List of forwarding targets
                limits:
                    $ref: '#/components/schemas/AddressLimits'
                autoreply:
                    $ref: '#/components/schemas/AutoreplyInfo'
                created:
                    type: string
                    description: Datestring of the time the address was created
                    format: date-time
                tags:
                    type: array
                    items:
                        type: string
                    description: List of tags associated with the Address
                forwardedDisabled:
                    type: boolean
                    description: If true then the forwarded address is disabled
        GetUserAddressResponse:
            required:
                - success
                - id
                - name
                - address
                - tags
                - main
                - created
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                id:
                    type: string
                    description: ID of the Address
                name:
                    type: string
                    description: Identity name
                address:
                    type: string
                    description: E-mail address string
                tags:
                    type: array
                    items:
                        type: string
                    description: List of tags associated with the Address
                metaData:
                    type: object
                    description: Metadata object (if available)
                internalData:
                    type: object
                    description: 'Internal metadata object (if available), not included for user-role requests'
                main:
                    type: boolean
                    description: Indicates if this is the default address for the User
                created:
                    type: string
                    description: Datestring of the time the address was created
                    format: date-time
        ResolveAddressResponse:
            required:
                - success
                - id
                - address
                - name
                - user
                - targets
                - limits
                - autoreply
                - tags
                - created
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                id:
                    type: string
                    description: ID of the Address
                address:
                    type: string
                    description: E-mail address string
                name:
                    type: string
                    description: Identity name
                user:
                    type: string
                    description: ID of the user if the address belongs to a User
                targets:
                    type: array
                    items:
                        type: string
                    description: List of forwarding targets if this is a Forwarded address
                limits:
                    $ref: '#/components/schemas/AddressLimits'
                autoreply:
                    $ref: '#/components/schemas/AutoreplyInfo'
                tags:
                    type: array
                    items:
                        type: string
                    description: List of tags associated with the Address
                created:
                    type: string
                    description: Datestring of the time the address was created
                    format: date-time
        GetAddressesResponse:
            required:
                - success
                - total
                - page
                - previousCursor
                - nextCursor
                - results
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                total:
                    type: number
                    description: How many results were found
                page:
                    type: number
                    description: Current page number. Derived from page query argument
                previousCursor:
                    type: string
                    description: Either a cursor string or false if there are not any previous results
                nextCursor:
                    type: string
                    description: Either a cursor string or false if there are not any next results
                results:
                    type: array
                    items:
                        $ref: '#/components/schemas/GetAddressesResult'
                    description: Address listing
        GetUserAddressesResponse:
            required:
                - success
                - results
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                results:
                    type: array
                    items:
                        $ref: '#/components/schemas/GetUserAddressesResult'
                    description: Address listing
        CreateUserAddressResponse:
            required:
                - success
                - id
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                id:
                    type: string
                    description: ID of the Address
        GetUserAddressesregisterResponse:
            required:
                - success
                - results
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                results:
                    type: array
                    items:
                        $ref: '#/components/schemas/GetUserAddressesregisterResult'
                    description: Address listing
        CreateForwardedAddressResponse:
            required:
                - success
                - id
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                id:
                    type: string
                    description: ID of the Address
        GetASPResponse:
            required:
                - success
                - id
                - description
                - scopes
                - lastUse
                - created
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                id:
                    type: string
                    description: ID of the Application Password
                description:
                    type: string
                    description: Description
                scopes:
                    type: array
                    items:
                        $ref: '#/components/schemas/AspScopes'
                    description: Allowed scopes for the Application Password
                lastUse:
                    $ref: '#/components/schemas/LastUse'
                created:
                    type: string
                    description: Datestring
                    format: date-time
        GetASPsResponse:
            required:
                - success
                - results
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                results:
                    type: array
                    items:
                        $ref: '#/components/schemas/GetASPsResult'
                    description: Event listing
        CreateASPResponse:
            required:
                - success
                - id
                - password
                - mobileconfig
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                    example: true
                id:
                    type: string
                    description: ID of the Application Password
                    example: '60b91b5cc419d97445f8e57d'
                password:
                    type: string
                    description: 'Application Specific Password. Generated password is whitespace agnostic, so it could be displayed to the client as "abcd efgh ijkl mnop" instead of "abcdefghijklmnop"'
                    example: 'aaaaaaaaaaaaaaaa'
                mobileconfig:
                    type: string
                    description: Base64 encoded mobileconfig file. Generated profile file should be sent to the client with Content-Type value of application/x-apple-aspen-config.
        GetArchivedMessagesResponse:
            required:
                - success
                - total
                - page
                - previousCursor
                - nextCursor
                - results
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                total:
                    type: number
                    description: How many results were found
                page:
                    type: number
                    description: Current page number. Derived from page query argument
                previousCursor:
                    type: string
                    description: Either a cursor string or false if there are not any previous results
                nextCursor:
                    type: string
                    description: Either a cursor string or false if there are not any next results
                results:
                    type: array
                    items:
                        $ref: '#/components/schemas/GetArchivedMessagesResult'
                    description: Message listing
        RestoreMessageResponse:
            required:
                - success
                - mailbox
                - id
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                mailbox:
                    type: string
                    description: Maibox ID the message was moved to
                id:
                    type: number
                    description: New ID for the Message
        GetAuditResponse:
            required:
                - success
                - user
                - expires
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                user:
                    type: string
                    description: Users unique ID.
                start:
                    type: string
                    description: Start time as ISO date
                    format: date-time
                end:
                    type: string
                    description: End time as ISO date
                    format: date-time
                expires:
                    type: string
                    description: Expiration date. Audit data is deleted after this date
                    format: date-time
        CreateAuditResponse:
            required:
                - success
                - id
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                id:
                    type: string
                    description: ID for the created Audit
        AuthenticateResponse:
            required:
                - success
                - id
                - username
                - scope
                - require2fa
                - requirePasswordChange
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                id:
                    type: string
                    description: ID of authenticated User
                username:
                    type: string
                    description: Username of authenticated User
                scope:
                    type: string
                    description: The scope this authentication is valid for
                require2fa:
                    type: array
                    items:
                        type: string
                    description: List of enabled 2FA mechanisms
                requirePasswordChange:
                    type: boolean
                    description: Indicates if account hassword has been reset and should be replaced
                token:
                    type: string
                    description: If access token was requested then this is the value to use as access token when making API requests on behalf of logged in user.
        GetAuthlogResponse:
            required:
                - success
                - total
                - page
                - previousCursor
                - nextCursor
                - results
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                total:
                    type: number
                    description: How many results were found
                page:
                    type: number
                    description: Current page number. Derived from page query argument
                previousCursor:
                    type: string
                    description: Either a cursor string or false if there are not any previous results
                nextCursor:
                    type: string
                    description: Either a cursor string or false if there are not any next results
                results:
                    type: array
                    items:
                        $ref: '#/components/schemas/GetAuthlogResult'
                    description: Event listing
        GetAuthlogEventResponse:
            required:
                - success
                - id
                - action
                - result
                - created
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                id:
                    type: string
                    description: ID of the Event
                action:
                    type: string
                    description: Action identifier
                result:
                    type: string
                    description: Did the action succeed
                sess:
                    type: string
                    description: Session identifier
                ip:
                    type: string
                    description: IP address of the Event
                created:
                    type: string
                    description: Datestring of the Event time
                    format: date-time

        GetAutoreplyResponse:
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                status:
                    type: boolean
                    description: Is the autoreply enabled (true) or not (false)
                name:
                    type: string
                    description: 'Name that is used for the From: header in autoreply message'
                subject:
                    type: string
                    description: Subject line for the autoreply. If empty then uses subject of the original message
                html:
                    type: string
                    description: HTML formatted content of the autoreply message
                text:
                    type: string
                    description: Plaintext formatted content of the autoreply message
                start:
                    type: string
                    description: Datestring of the start of the autoreply
                    format: date-time
                end:
                    type: string
                    description: Datestring of the end of the autoreply
                    format: date-time
            required:
                - success
                - status
                - name
                - subject
                - html
                - text
                - start
                - end

        GetDkimKeyResponse:
            required:
                - success
                - id
                - domain
                - selector
                - description
                - fingerprint
                - publicKey
                - dnsTxt
                - created
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                id:
                    type: string
                    description: ID of the DKIM
                domain:
                    type: string
                    description: The domain this DKIM key applies to
                selector:
                    type: string
                    description: DKIM selector
                description:
                    type: string
                    description: Key description
                fingerprint:
                    type: string
                    description: Key fingerprint (SHA1)
                publicKey:
                    type: string
                    description: 'Public key in DNS format (no prefix/suffix, single line)'
                dnsTxt:
                    $ref: '#/components/schemas/DnsTxt'
                created:
                    type: string
                    description: Datestring
                    format: date-time

        GetDkimKeysResponse:
            required:
                - success
                - total
                - page
                - previousCursor
                - nextCursor
                - results
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                total:
                    type: number
                    description: How many results were found
                page:
                    type: number
                    description: Current page number. Derived from page query argument
                previousCursor:
                    type: string
                    description: Either a cursor string or false if there are not any previous results
                nextCursor:
                    type: string
                    description: Either a cursor string or false if there are not any next results
                results:
                    type: array
                    items:
                        $ref: '#/components/schemas/GetDkimKeysResult'
                    description: DKIM listing

        GetTLSCertsResponse:
            required:
                - success
                - total
                - page
                - previousCursor
                - nextCursor
                - results
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                total:
                    type: number
                    description: How many results were found
                    example: 541
                page:
                    type: number
                    description: Current page number. Derived from page query argument
                    example: 1
                previousCursor:
                    type: string
                    description: Either a cursor string or false if there are not any previous results
                    example: false
                nextCursor:
                    type: string
                    description: Either a cursor string or false if there are not any next results
                    example: 'eyIkb2lkIjoiNWRmMWZkMmQ3NzkyNTExOGI2MDdjNjg0In0'
                results:
                    type: array
                    items:
                        $ref: '#/components/schemas/GetTLSCertResult'
                    description: Certificate listing

        UpdateDkimKeyResponse:
            required:
                - success
                - id
                - domain
                - selector
                - description
                - fingerprint
                - publicKey
                - dnsTxt
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                id:
                    type: string
                    description: ID of the DKIM
                domain:
                    type: string
                    description: The domain this DKIM key applies to
                selector:
                    type: string
                    description: DKIM selector
                description:
                    type: string
                    description: Key description
                fingerprint:
                    type: string
                    description: Key fingerprint (SHA1)
                publicKey:
                    type: string
                    description: 'Public key in DNS format (no prefix/suffix, single line)'
                dnsTxt:
                    $ref: '#/components/schemas/DnsTxt'

        UpdateTLSCertResponse:
            required:
                - success
                - id
                - servername
                - fingerprint
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                id:
                    type: string
                    description: ID of the certificate
                    example: '609d201236d1d936948f23b1'
                servername:
                    type: string
                    description: The server name this certificate applies to
                    example: 'imap.example.com'
                description:
                    type: string
                    description: Key description
                    example: 'Some notes about this certificate'
                fingerprint:
                    type: string
                    description: Key fingerprint (SHA1)
                    example: '59:8b:ed:11:5b:4f:ce:b4:e5:1a:2f:35:b1:6f:7d:93:40:c8:2f:9c:38:3b:cd:f4:04:92:a1:0e:17:2c:3f:f3'
                expires:
                    type: string
                    description: Certificate expiration time
                    example: '2021-06-26T21:55:55.000Z'
                    format: date-time
                altNames:
                    type: array
                    description: SAN servernames listed in the certificate
                    items:
                        type: string
                    example: ['example.com', 'www.example.com']

        ResolveIdResponse:
            required:
                - success
                - id
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                    example: true
                id:
                    type: string
                    description: Unique ID (24 byte hex)
                    example: '609d201236d1d936948f23b1'

        RecoverInfoResponse:
            type: object
            required:
                - success
                - user
                - username
                - storageUsed
                - tags
                - deleted
                - recoverableAddresses
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                    example: true
                user:
                    type: string
                    description: ID of the deleted User
                    example: '609d201236d1d936948f23b1'
                username:
                    type: string
                    description: Username of the User
                    example: andris
                storageUsed:
                    type: number
                    description: Calculated quota usage for the user
                    example: 2423070
                tags:
                    type: array
                    items:
                        type: string
                    description: List of tags associated with the User
                    example: ['domain:andrisreinman.com']
                deleted:
                    type: string
                    description: Datestring of the time the user was deleted
                    format: date-time
                recoverableAddresses:
                    type: array
                    items:
                        type: string
                    description: List of email addresses that can be restored
                    example: ['andris@andrisreinman.com']

        GetAllowedDomainResponse:
            required:
                - success
                - results
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                results:
                    type: array
                    items:
                        $ref: '#/components/schemas/GetAllowedDomainResult'
                    description: Domain list
        CreateAllowedDomainResponse:
            required:
                - success
                - id
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                id:
                    type: string
                    description: ID for the created record
        GetBlockedDomainResponse:
            required:
                - success
                - results
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                results:
                    type: array
                    items:
                        $ref: '#/components/schemas/GetBlockedDomainResult'
                    description: Domain list
        CreateBlockedDomainResponse:
            required:
                - success
                - id
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                id:
                    type: string
                    description: ID for the created record
        GetDomainAliasResponse:
            required:
                - success
                - id
                - alias
                - domain
                - created
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                id:
                    type: string
                    description: ID of the Alias
                alias:
                    type: string
                    description: Alias domain
                domain:
                    type: string
                    description: Alias target
                created:
                    type: string
                    description: Datestring of the time the alias was created
                    format: date-time
        GetDomainAliasesResponse:
            required:
                - success
                - total
                - page
                - previousCursor
                - nextCursor
                - results
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                total:
                    type: number
                    description: How many results were found
                page:
                    type: number
                    description: Current page number. Derived from page query argument
                previousCursor:
                    type: string
                    description: Either a cursor string or false if there are not any previous results
                nextCursor:
                    type: string
                    description: Either a cursor string or false if there are not any next results
                results:
                    type: array
                    items:
                        $ref: '#/components/schemas/GetDomainAliasesResult'
                    description: Aliases listing

        CreateDomainAliasResponse:
            required:
                - success
                - id
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                id:
                    type: string
                    description: ID of the Domain Alias

        GetFilterResponse:
            required:
                - success
                - id
                - name
                - query
                - action
                - disabled
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                id:
                    type: string
                    description: ID for the Filter
                name:
                    type: string
                    description: Name of the Filter
                query:
                    $ref: '#/components/schemas/Query'
                action:
                    $ref: '#/components/schemas/Action'
                disabled:
                    type: boolean
                    description: 'If true, then this filter is ignored'
                metaData:
                    type: object
                    description: Custom metadata value
        UpdateFilterResponse:
            required:
                - success
                - id
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                id:
                    type: string
                    description: ID for the created Filter
        GetAllFiltersResponse:
            required:
                - success
                - total
                - page
                - previousCursor
                - nextCursor
                - results
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                total:
                    type: number
                    description: How many results were found
                page:
                    type: number
                    description: Current page number. Derived from page query argument
                previousCursor:
                    type: string
                    description: Either a cursor string or false if there are not any previous results
                nextCursor:
                    type: string
                    description: Either a cursor string or false if there are not any next results
                results:
                    type: array
                    items:
                        $ref: '#/components/schemas/GetAllFiltersResult'
                    description: Address listing
        GetFiltersResponse:
            required:
                - success
                - limits
                - results
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                limits:
                    type: object
                    description: Filter usage limits for the user account
                    properties:
                        allowed:
                            type: number
                            description: How many filters are allowed
                        used:
                            type: number
                            description: How many filters have been created
                results:
                    type: array
                    items:
                        $ref: '#/components/schemas/GetFiltersResult'
                    description: Filter description
        GetMailboxResponse:
            required:
                - success
                - id
                - name
                - path
                - specialUse
                - modifyIndex
                - subscribed
                - hidden
                - total
                - unseen
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                id:
                    type: string
                    description: Mailbox ID
                name:
                    type: string
                    description: Name for the mailbox (unicode string)
                path:
                    type: string
                    description: 'Full path of the mailbox, folders are separated by slashes, ends with the mailbox name (unicode string)'
                specialUse:
                    $ref: '#/components/schemas/SpecialUse'
                modifyIndex:
                    type: number
                    description: Modification sequence number. Incremented on every change in the mailbox.
                subscribed:
                    type: boolean
                    description: Mailbox subscription status. IMAP clients may unsubscribe from a folder.
                hidden:
                    type: boolean
                    description: Is the folder hidden or not
                total:
                    type: number
                    description: How many messages are stored in this mailbox
                unseen:
                    type: number
                    description: How many unseen messages are stored in this mailbox
        GetMailboxesResponse:
            required:
                - success
                - results
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                results:
                    type: array
                    items:
                        $ref: '#/components/schemas/GetMailboxesResult'
                    description: List of user mailboxes
        CreateMailboxResponse:
            required:
                - success
                - id
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                id:
                    type: string
                    description: Mailbox ID
        GetMessageResponse:
            required:
                - success
                - id
                - mailbox
                - user
                - envelope
                - thread
                - from
                - subject
                - messageId
                - date
                - seen
                - deleted
                - flagged
                - draft
                - contentType
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                id:
                    type: number
                    description: ID of the Message
                mailbox:
                    type: string
                    description: ID of the Mailbox
                user:
                    type: string
                    description: ID of the User
                envelope:
                    $ref: '#/components/schemas/Envelope'
                thread:
                    type: string
                    description: ID of the Thread
                from:
                    $ref: '#/components/schemas/Address'
                to:
                    $ref: '#/components/schemas/Address'
                cc:
                    $ref: '#/components/schemas/Address'
                bcc:
                    $ref: '#/components/schemas/Address'
                subject:
                    type: string
                    description: Message subject
                messageId:
                    type: string
                    description: Message-ID header
                date:
                    type: string
                    description: Date string from header
                    format: date-time
                idate:
                    type: string
                    description: Date string of receive time
                    format: date-time
                list:
                    $ref: '#/components/schemas/List'
                expires:
                    type: string
                    description: 'Datestring, if set then indicates the time after this message is automatically deleted'
                seen:
                    type: boolean
                    description: Does this message have a \Seen flag
                deleted:
                    type: boolean
                    description: Does this message have a \Deleted flag
                flagged:
                    type: boolean
                    description: Does this message have a \Flagged flag
                draft:
                    type: boolean
                    description: Does this message have a \Draft flag
                html:
                    type: array
                    items:
                        type: string
                    description: 'An array of HTML string. Every array element is from a separate mime node, usually you would just join these to a single string'
                text:
                    type: string
                    description: Plaintext content of the message
                attachments:
                    type: array
                    items:
                        $ref: '#/components/schemas/Attachments'
                    description: Attachments for the message
                verificationResults:
                    $ref: '#/components/schemas/VerificationResults'
                bimi:
                    type: object
                    description: BIMI logo info. If logo validation failed in any way, then this property is not set
                    properties:
                        certified:
                            type: boolean
                            description: If true, then this logo is from a VMC file
                        url:
                            type: string
                            description: URL of the resource the logo was retrieved from
                        image:
                            type: string
                            description: Data URL for the SVG image
                contentType:
                    $ref: '#/components/schemas/ContentType'
                metaData:
                    type: object
                    description: Custom metadata object set for this message
                reference:
                    type: object
                    description: Referenced message info
                files:
                    $ref: '#/components/schemas/Files'
                outbound:
                    type: array
                    items:
                        $ref: '#/components/schemas/Outbound'
                    description: Outbound queue entries
        DeleteMessagesInMailboxResponse:
            required:
                - success
                - deleted
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                deleted:
                    type: number
                    description: Indicates count of deleted messages
        GetMessagesResponse:
            required:
                - success
                - total
                - page
                - previousCursor
                - nextCursor
                - results
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                total:
                    type: number
                    description: How many results were found
                page:
                    type: number
                    description: Current page number. Derived from page query argument
                previousCursor:
                    type: string
                    description: Either a cursor string or false if there are not any previous results
                nextCursor:
                    type: string
                    description: Either a cursor string or false if there are not any next results
                results:
                    type: array
                    items:
                        $ref: '#/components/schemas/GetMessagesResult'
                    description: Message listing
        UpdateMessageResponse:
            required:
                - success
                - id
                - updated
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                id:
                    type: array
                    items:
                        type: object
                    description: If messages were moved then lists new ID values. Array entry is an array with first element pointing to old ID and second to new ID
                updated:
                    type: number
                    description: 'If messages were not moved, then indicates the number of updated messages'
        SearchMessagesResponse:
            required:
                - success
                - total
                - page
                - previousCursor
                - nextCursor
                - results
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                total:
                    type: number
                    description: How many results were found
                page:
                    type: number
                    description: Current page number. Derived from page query argument
                previousCursor:
                    type: string
                    description: Either a cursor string or false if there are not any previous results
                nextCursor:
                    type: string
                    description: Either a cursor string or false if there are not any next results
                results:
                    type: array
                    items:
                        $ref: '#/components/schemas/GetMessagesResult'
                    description: Message listing
        SubmitStoredMessageResponse:
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                queueId:
                    type: string
                    description: Message ID in outbound queue
                message:
                    $ref: '#/components/schemas/Message'
            required:
                - success
                - queueId
        GetFilesResponse:
            required:
                - success
                - total
                - page
                - previousCursor
                - nextCursor
                - results
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                total:
                    type: number
                    description: How many results were found
                page:
                    type: number
                    description: Current page number. Derived from page query argument
                previousCursor:
                    type: string
                    description: Either a cursor string or false if there are not any previous results
                nextCursor:
                    type: string
                    description: Either a cursor string or false if there are not any next results
                results:
                    type: array
                    items:
                        $ref: '#/components/schemas/GetFilesResult'
                    description: File listing
        SubmitMessageResponse:
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                message:
                    $ref: '#/components/schemas/MessageWithQueueId'
            required:
                - success
                - message
        SetupTotp2FAResponse:
            required:
                - success
                - seed
                - qrcode
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                seed:
                    type: string
                    description: Generated TOTP seed value
                qrcode:
                    type: string
                    description: Base64 encoded QR code
        GetUserResponse:
            required:
                - success
                - id
                - username
                - name
                - address
                - retention
                - enabled2fa
                - autoreply
                - encryptMessages
                - encryptForwarded
                - pubKey
                - keyInfo
                - metaData
                - internalData
                - targets
                - spamLevel
                - limits
                - tags
                - disabledScopes
                - hasPasswordSet
                - activated
                - disabled
                - suspended
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                id:
                    type: string
                    description: Users unique ID (24 byte hex)
                username:
                    type: string
                    description: Username of the User
                name:
                    type: string
                    description: Name of the User
                address:
                    type: string
                    description: Main email address of the User
                retention:
                    type: number
                    description: Default retention time (in ms). false if not enabled
                enabled2fa:
                    type: array
                    items:
                        type: string
                    description: List of enabled 2FA methods
                autoreply:
                    type: boolean
                    description: Is autoreply enabled or not (start time may still be in the future or end time in the past)
                encryptMessages:
                    type: boolean
                    description: If true then received messages are encrypted
                encryptForwarded:
                    type: boolean
                    description: If true then forwarded messages are encrypted
                pubKey:
                    type: string
                    description: Public PGP key for the User that is used for encryption
                keyInfo:
                    $ref: '#/components/schemas/KeyInfo'
                metaData:
                    type: object
                    description: Custom metadata object set for this user
                internalData:
                    type: object
                    description: Custom interna metadata object set for this user. Not available for user-role tokens
                targets:
                    type: array
                    items:
                        type: string
                    description: List of forwarding targets
                spamLevel:
                    type: number
                    description: 'Relative scale for detecting spam. 0 means that everything is spam, 100 means that nothing is spam'
                limits:
                    $ref: '#/components/schemas/UserLimits'
                tags:
                    type: array
                    items:
                        type: string
                    description: List of tags associated with the User
                fromWhitelist:
                    type: array
                    items:
                        type: string
                    description: A list of additional email addresses this user can send mail from. Wildcard is allowed.
                disabledScopes:
                    type: array
                    items:
                        $ref: '#/components/schemas/DisabledScopes'
                    description: Disabled scopes for this user
                hasPasswordSet:
                    type: boolean
                    description: If true then the User has a password set and can authenticate
                activated:
                    type: boolean
                    description: Is the account activated
                disabled:
                    type: boolean
                    description: If true then the user can not authenticate or receive any new mail
                suspended:
                    type: boolean
                    description: If true then the user can not authenticate

        GetUsersResponse:
            required:
                - success
                - total
                - page
                - previousCursor
                - nextCursor
                - results
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                total:
                    type: number
                    description: How many results were found
                page:
                    type: number
                    description: Current page number. Derived from page query argument
                previousCursor:
                    type: string
                    description: Either a cursor string or false if there are not any previous results
                nextCursor:
                    type: string
                    description: Either a cursor string or false if there are not any next results
                results:
                    type: array
                    items:
                        $ref: '#/components/schemas/GetUsersResult'
                    description: User listing
        CreateUserResponse:
            required:
                - success
                - id
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                id:
                    type: string
                    description: ID for the created User
        RecalculateQuotaResponse:
            required:
                - success
                - storageUsed
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                storageUsed:
                    type: number
                    description: Calculated quota usage for the user
        ResetUserPasswordResponse:
            required:
                - success
                - password
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                password:
                    type: string
                    description: Temporary password

        GetWebhooksResponse:
            required:
                - success
                - total
                - page
                - previousCursor
                - nextCursor
                - results
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                total:
                    type: number
                    description: How many results were found
                page:
                    type: number
                    description: Current page number. Derived from page query argument
                previousCursor:
                    type: string
                    description: Either a cursor string or false if there are not any previous results
                nextCursor:
                    type: string
                    description: Either a cursor string or false if there are not any next results
                results:
                    type: array
                    items:
                        $ref: '#/components/schemas/GetWebhooksResult'
                    description: Webhook listing

        CreateWebhookResponse:
            required:
                - success
                - id
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                id:
                    type: string
                    description: ID of the Webhook

        GetSettingResponse:
            required:
                - success
                - id
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                key:
                    type: string
                    description: Key of the Setting
                value:
                    oneOf:
                        - type: string
                        - type: number
                    description: Setting value

        GetSettingsResponse:
            required:
                - success
                - settings
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                filter:
                    type: string
                    description: Partial match if requested
                settings:
                    type: array
                    items:
                        $ref: '#/components/schemas/GetSettingsResult'
                    description: Setting listing

        CreateSettingResponse:
            required:
                - success
                - id
            type: object
            properties:
                success:
                    type: boolean
                    description: Indicates successful response
                key:
                    type: string
                    description: Key of the Setting

        UpdateForwardedAddressRequest:
            type: object
            description: ''
            properties:
                address:
                    type: string
                    description: 'New address. Only affects normal addresses, special addresses that include * can not be changed'
                name:
                    type: string
                    description: Identity name
                targets:
                    type: array
                    description: 'An array of forwarding targets. The value could either be an email address or a relay url to next MX server ("smtp://mx2.zone.eu:25") or an URL where mail contents are POSTed to. If set then overwrites previous targets array'
                    items:
                        type: string
                forwards:
                    type: number
                    description: Daily allowed forwarding count for this address
                tags:
                    type: array
                    description: A list of tags associated with this address
                    items:
                        type: string
                metaData:
                    description: 'Optional metadata, must be an object or JSON formatted string'
                    oneOf:
                        - type: object
                        - type: string
                internalData:
                    description: 'Optional metadata for internal use, must be an object or JSON formatted string of an object. Not available for user-role tokens'
                    oneOf:
                        - type: object
                        - type: string
                forwardedDisabled:
                    type: boolean
                    description: If true then disables forwarded address (stops forwarding messages)
                autoreply:
                    $ref: '#/components/schemas/Autoreply'
        UpdateUserAddressRequest:
            type: object
            properties:
                name:
                    type: string
                    description: Identity name
                address:
                    type: string
                    description: 'New address if you want to rename existing address. Only affects normal addresses, special addresses that include * can not be changed'
                main:
                    type: boolean
                    description: Indicates if this is the default address for the User
                metaData:
                    description: 'Optional metadata, must be an object or JSON formatted string'
                    oneOf:
                        - type: object
                        - type: string
                internalData:
                    description: 'Optional metadata for internal use, must be an object or JSON formatted string of an object. Not available for user-role tokens'
                    oneOf:
                        - type: object
                        - type: string
                tags:
                    type: array
                    description: A list of tags associated with this address
                    items:
                        type: string
            required:
                - main
        CreateUserAddressRequest:
            required:
                - address
            type: object
            properties:
                address:
                    type: string
                    description: E-mail Address
                name:
                    type: string
                    description: Identity name
                tags:
                    type: array
                    items:
                        type: string
                    description: A list of tags associated with this address
                main:
                    type: boolean
                    description: Indicates if this is the default address for the User
                allowWildcard:
                    type: boolean
                    description: 'If true then address value can be in the form of `*@example.com`, `*suffix@example.com` and `username@*`, otherwise using * is not allowed. Static suffix can be up to 32 characters long.'
                metaData:
                    description: 'Optional metadata, must be an object or JSON formatted string'
                    oneOf:
                        - type: object
                        - type: string
                internalData:
                    description: 'Optional metadata for internal use, must be an object or JSON formatted string of an object. Not available for user-role tokens'
                    oneOf:
                        - type: object
                        - type: string
        CreateForwardedAddressRequest:
            required:
                - address
            type: object
            properties:
                address:
                    type: string
                    description: E-mail Address
                name:
                    type: string
                    description: Identity name
                targets:
                    type: array
                    items:
                        type: string
                    description: 'An array of forwarding targets. The value could either be an email address or a relay url to next MX server ("smtp://mx2.zone.eu:25") or an URL where mail contents are POSTed to'
                forwards:
                    type: number
                    description: Daily allowed forwarding count for this address
                allowWildcard:
                    type: boolean
                    description: 'If true then address value can be in the form of `*@example.com`, otherwise using * is not allowed'
                tags:
                    type: array
                    items:
                        type: string
                    description: A list of tags associated with this address
                metaData:
                    description: 'Optional metadata, must be an object or JSON formatted string'
                    oneOf:
                        - type: object
                        - type: string
                internalData:
                    description: 'Optional metadata for internal use, must be an object or JSON formatted string of an object. Not available for user-role tokens'
                    oneOf:
                        - type: object
                        - type: string
                autoreply:
                    $ref: '#/components/schemas/Autoreply'
        RenameDomainRequest:
            required:
                - oldDomain
                - newDomain
            type: object
            properties:
                oldDomain:
                    type: string
                    description: Old Domain Name
                newDomain:
                    type: string
                    description: New Domain Name
        CreateASPRequest:
            required:
                - description
                - scopes
            type: object
            properties:
                description:
                    type: string
                    description: Description
                scopes:
                    type: array
                    items:
                        $ref: '#/components/schemas/AspScopes'
                    description: List of scopes this Password applies to. Special scope "*" indicates that this password can be used for any scope except "master"
                    example: ['imap', 'smtp']
                generateMobileconfig:
                    type: boolean
                    description: If true then result contains a mobileconfig formatted file with account config
                    example: true
                address:
                    type: string
                    description: E-mail address to be used as the account address in mobileconfig file. Must be one of the listed identity addresses of the user. Defaults to the main address of the user
                    example: 'user@example.com'
                password:
                    type: string
                    description: Optional pregenerated password. Must be 16 characters, latin letters only.
                    example: 'aaaaaaaaaaaaaaaa'
                ttl:
                    type: number
                    description: 'TTL in seconds for this password. Every time password is used, TTL is reset to this value'
                    example: 3600000
                sess:
                    type: string
                    description: Session identifier for the logs
                ip:
                    type: string
                    description: IP address for the logs
                    example: '127.0.0.1'
        RestoreMessageRequest:
            type: object
            properties:
                mailbox:
                    type: string
                    description: ID of the target Mailbox. If not set then original mailbox is used.
        RestoreMessagesRequest:
            required:
                - start
                - end
            type: object
            properties:
                start:
                    type: string
                    description: Datestring
                    format: date-time
                end:
                    type: string
                    description: Datestring
                    format: date-time
        CreateAuditRequest:
            required:
                - user
                - expires
            type: object
            properties:
                user:
                    type: string
                    description: Users unique ID.
                start:
                    type: string
                    description: Start time as ISO date
                    format: date-time
                end:
                    type: string
                    description: End time as ISO date
                    format: date-time
                expires:
                    type: string
                    description: Expiration date. Audit data is deleted after this date
                    format: date-time
        AuthenticateRequest:
            required:
                - username
                - password
            type: object
            properties:
                username:
                    type: string
                    description: Username or E-mail address
                password:
                    type: string
                    description: Password
                protocol:
                    type: string
                    description: Application identifier for security logs
                scope:
                    type: string
                    description: 'Required scope. One of master, imap, smtp, pop3'
                token:
                    type: boolean
                    description: If true then generates a temporary access token that is valid for this user. Only available if scope is "master". When using user tokens then you can replace user ID in URLs with "me".
                sess:
                    type: string
                    description: Session identifier for the logs
                ip:
                    type: string
                    description: IP address for the logs
            title: ''
        UpdateAutoreplyRequest:
            type: object
            properties:
                status:
                    type: boolean
                    description: Is the autoreply enabled (true) or not (false)
                name:
                    type: string
                    description: 'Name that is used for the From: header in autoreply message'
                subject:
                    type: string
                    description: Subject line for the autoreply. If empty then uses subject of the original message
                html:
                    type: string
                    description: HTML formatted content of the autoreply message
                text:
                    type: string
                    description: Plaintext formatted content of the autoreply message
                start:
                    type: string
                    description: Datestring of the start of the autoreply or boolean false to disable start checks
                    format: date-time
                end:
                    type: string
                    description: Datestring of the end of the autoreply or boolean false to disable end checks
                    format: date-time

        UpdateDkimKeyRequest:
            required:
                - domain
                - selector
            type: object
            properties:
                domain:
                    type: string
                    description: Domain name this DKIM key applies to. Use "*" as a special value that will be used for domains that do not have their own DKIM key set
                selector:
                    type: string
                    description: Selector for the key
                description:
                    type: string
                    description: Key description
                privateKey:
                    type: string
                    description: 'Pem formatted DKIM private key. If not set then a new 2048 bit RSA key is generated, beware though that it can take several seconds to complete.'

        UpdateTLSCertRequest:
            required:
                - servername
            type: object
            properties:
                servername:
                    type: string
                    description: Server name this TLS certificate applies to
                    example: imap.example.com
                acme:
                    type: boolean
                    description: If true then private key and certificate are managed automatically by ACME
                    example: false
                privateKey:
                    type: string
                    description: PEM formatted TLS private key. Optional if certificate is managed by ACME
                    example: "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADA..."
                cert:
                    type: string
                    description: 'PEM formatted TLS certificate or a certificate bundle with concatenated certificate and CA chain. Optional if certificate is managed by ACME'
                    example: "-----BEGIN CERTIFICATE-----\nMIIDEDCCAfg..."
                ca:
                    type: array
                    description: 'CA chain certificates. Not needed if `cert` value is a bundle'
                    items:
                        type: string
                        description: 'PEM formatted TLS certificate'
                        example: "-----BEGIN CERTIFICATE-----\nMIIDEDCCAfgs..."
                description:
                    type: string
                    description: Certificate description
                    example: 'Some notes about this certificate'

        CreateAllowedDomainRequest:
            required:
                - domain
            type: object
            properties:
                domain:
                    type: string
                    description: Domain name to allowlist for users/addresses that include this tag
        CreateBlockedDomainRequest:
            required:
                - domain
            type: object
            properties:
                domain:
                    type: string
                    description: Domain name to blocklist for users/addresses that include this tag
        CreateDomainAliasRequest:
            required:
                - alias
                - domain
            type: object
            properties:
                alias:
                    type: string
                    description: Domain Alias
                domain:
                    type: string
                    description: Domain name this Alias applies to
        UpdateFilterRequest:
            type: object
            properties:
                name:
                    type: string
                    description: Name of the Filter
                query:
                    $ref: '#/components/schemas/Query'
                action:
                    $ref: '#/components/schemas/Action'
                disabled:
                    type: boolean
                    description: If true then this filter is ignored
                metaData:
                    description: 'Optional metadata, must be an object or JSON formatted string'
                    oneOf:
                        - type: object
                        - type: string
        CreateFilterRequest:
            required:
                - query
                - action
            type: object
            properties:
                name:
                    type: string
                    description: Name of the Filter
                query:
                    $ref: '#/components/schemas/Query'
                action:
                    $ref: '#/components/schemas/Action'
                disabled:
                    type: boolean
                    description: If true then this filter is ignored
                metaData:
                    description: 'Optional metadata, must be an object or JSON formatted string'
                    oneOf:
                        - type: object
                        - type: string
        UpdateMailboxRequest:
            type: object
            properties:
                path:
                    type: string
                    description: 'Full path of the mailbox, use this to rename an existing Mailbox'
                hidden:
                    type: boolean
                    description: Is the folder hidden or not. Hidden folders can not be opened in IMAP.
                retention:
                    type: number
                    description: Retention policy for the Mailbox (in ms). Changing retention value only affects messages added to this folder after the change
                subscribed:
                    type: boolean
                    description: Change Mailbox subscription state
        CreateMailboxRequest:
            required:
                - path
            type: object
            properties:
                path:
                    type: string
                    description: 'Full path of the mailbox, folders are separated by slashes, ends with the mailbox name (unicode string)'
                hidden:
                    type: boolean
                    description: Is the folder hidden or not. Hidden folders can not be opened in IMAP.
                retention:
                    type: number
                    description: Retention policy for the created Mailbox. Milliseconds after a message added to mailbox expires. Set to 0 to disable.
        UpdateMessageRequest:
            type: object
            properties:
                message:
                    type: string
                    description: 'Message ID values. Either comma separated numbers (1,2,3) or colon separated range (3:15), or a range from UID to end (3:*)'
                moveTo:
                    type: string
                    description: ID of the target Mailbox if you want to move messages
                seen:
                    type: boolean
                    description: State of the \Seen flag
                flagged:
                    type: boolean
                    description: State of the \Flagged flag
                draft:
                    type: boolean
                    description: State of the \Draft flag
                expires:
                    type: string
                    description: Either expiration date or false to turn of autoexpiration
                metaData:
                    description: 'Optional metadata, must be an object or JSON formatted string'
                    oneOf:
                        - type: object
                        - type: string
        SubmitStoredMessageRequest:
            type: object
            properties:
                deleteFiles:
                    type: boolean
                    description: If true then deletes attachment files listed in metaData.files array
                sendTime:
                    type: string
                    description: Datestring for delivery if message should be sent some later time
                    format: date-time
        SubmitMessageRequest:
            required:
                - subject
                - text
                - html
            type: object
            properties:
                reference:
                    $ref: '#/components/schemas/Reference'
                mailbox:
                    type: string
                    description: Mailbox ID where to upload the message. If not set then message is uploaded to Sent Mail folder.
                uploadOnly:
                    type: boolean
                    description: If true then generated message is not added to the sending queue
                isDraft:
                    type: boolean
                    description: If true then treats this message as draft (should be used with uploadOnly=true)
                sendTime:
                    type: string
                    description: Datestring for delivery if message should be sent some later time
                    format: date-time
                envelope:
                    $ref: '#/components/schemas/EnvelopeUpload'
                from:
                    $ref: '#/components/schemas/Address'
                to:
                    type: array
                    items:
                        $ref: '#/components/schemas/AddressOptionalName'
                    description: 'Addresses for the To: header'
                cc:
                    type: array
                    items:
                        $ref: '#/components/schemas/AddressOptionalName'
                    description: 'Addresses for the Cc: header'
                bcc:
                    type: array
                    items:
                        $ref: '#/components/schemas/AddressOptionalName'
                    description: 'Addresses for the Bcc: header'
                subject:
                    type: string
                    description: Message subject. If not then resolved from Reference message
                text:
                    type: string
                    description: Plaintext message
                html:
                    type: string
                    description: HTML formatted message
                headers:
                    type: array
                    items:
                        $ref: '#/components/schemas/Header'
                    description: Custom headers for the message. If reference message is set then In-Reply-To and References headers are set automatically
                attachments:
                    type: array
                    items:
                        $ref: '#/components/schemas/AttachmentsUpload'
                    description: Attachments for the message
                meta:
                    type: object
                    description: Custom metainfo for the message
                sess:
                    type: string
                    description: Session identifier for the logs
                ip:
                    type: string
                    description: IP address for the logs
        CheckTotp2FARequest:
            required:
                - token
            type: object
            properties:
                token:
                    type: string
                    description: 6-digit number
                sess:
                    type: string
                    description: Session identifier for the logs
                ip:
                    type: string
                    description: IP address for the logs
        EnableCustom2FARequest:
            type: object
            properties:
                sess:
                    type: string
                    description: Session identifier for the logs
                ip:
                    type: string
                    description: IP address for the logs
        EnableTotp2FARequest:
            required:
                - token
            type: object
            properties:
                token:
                    type: string
                    description: 6-digit number that matches seed value from 2fa/totp/setup
                sess:
                    type: string
                    description: Session identifier for the logs
                ip:
                    type: string
                    description: IP address for the logs
        SetupTotp2FARequest:
            type: object
            properties:
                label:
                    type: string
                    description: Label text for QR code (defaults to username)
                issuer:
                    type: string
                    description: Description text for QR code (defaults to "WildDuck")
                sess:
                    type: string
                    description: Session identifier for the logs
                ip:
                    type: string
                    description: IP address for the logs
        UpdateUserRequest:
            type: object
            properties:
                name:
                    type: string
                    description: Name of the User
                existingPassword:
                    type: string
                    description: If provided then validates against account password before applying any changes
                password:
                    type: string
                    description: New password for the account. Set to boolean false to disable password usage for the master scope, Application Specific Passwords would still be allowed
                hashedPassword:
                    type: boolean
                    description: 'If true then password is already hashed, so store as is. Supported hashes: pbkdf2, bcrypt ($2a, $2y, $2b), md5 ($1), sha512 ($6), sha256 ($5), argon2 ($argon2d, $argon2i, $argon2id). Stored hashes are rehashed to pbkdf2 on first successful password check.'
                allowUnsafe:
                    type: boolean
                    description: 'If false then validates provided passwords against Have I Been Pwned API. Experimental, so validation is disabled by default but will be enabled automatically in some future version of WildDuck.'
                tags:
                    type: array
                    items:
                        type: string
                    description: A list of tags associated with this user
                retention:
                    type: number
                    description: Default retention time (in ms). Set to 0 to disable
                uploadSentMessages:
                    type: boolean
                    description: 'If true then all messages sent through MSA are also uploaded to the Sent Mail folder. Might cause duplicates with some email clients, so disabled by default.'
                encryptMessages:
                    type: boolean
                    description: If true then received messages are encrypted
                encryptForwarded:
                    type: boolean
                    description: If true then forwarded messages are encrypted
                pubKey:
                    type: string
                    description: Public PGP key for the User that is used for encryption. Use empty string to remove the key
                metaData:
                    description: 'Optional metadata, must be an object or JSON formatted string'
                    oneOf:
                        - type: object
                        - type: string
                internalData:
                    type: object
                    description: 'Optional internal metadata, must be an object or JSON formatted string of an object. Not available for user-role tokens'
                language:
                    type: string
                    description: Language code for the User
                targets:
                    type: array
                    items:
                        type: string
                    description: 'An array of forwarding targets. The value could either be an email address or a relay url to next MX server ("smtp://mx2.zone.eu:25") or an URL where mail contents are POSTed to'
                spamLevel:
                    type: number
                    description: 'Relative scale for detecting spam. 0 means that everything is spam, 100 means that nothing is spam'
                quota:
                    type: number
                    description: Allowed quota of the user in bytes
                recipients:
                    type: number
                    description: How many messages per 24 hour can be sent
                forwards:
                    type: number
                    description: How many messages per 24 hour can be forwarded
                filters:
                    type: number
                    description: How many filters are allowed for this account
                imapMaxUpload:
                    type: number
                    description: How many bytes can be uploaded via IMAP during 24 hour
                imapMaxDownload:
                    type: number
                    description: How many bytes can be downloaded via IMAP during 24 hour
                pop3MaxDownload:
                    type: number
                    description: How many bytes can be downloaded via POP3 during 24 hour
                pop3MaxMessages:
                    type: number
                    description: How many latest messages to list in POP3 session
                imapMaxConnections:
                    type: number
                    description: How many parallel IMAP connections are alowed
                receivedMax:
                    type: number
                    description: How many messages can be received from MX during 60 seconds
                disable2fa:
                    type: boolean
                    description: 'If true, then disables 2FA for this user'
                disabledScopes:
                    type: array
                    items:
                        $ref: '#/components/schemas/DisabledScopes'
                    description: 'List of scopes that are disabled for this user ("imap", "pop3", "smtp")'
                disabled:
                    type: boolean
                    description: 'If true then disables user account (can not login, can not receive messages)'
                fromWhitelist:
                    type: array
                    items:
                        type: string
                    description: A list of additional email addresses this user can send mail from. Wildcard is allowed.
                suspended:
                    type: boolean
                    description: If true then disables authentication
                sess:
                    type: string
                    description: Session identifier for the logs
                ip:
                    type: string
                    description: IP address for the logs
        CreateUserRequest:
            required:
                - username
                - password
            type: object
            properties:
                username:
                    type: string
                    description: Username of the User. Dots are allowed but informational only ("user.name" is the same as "username").
                name:
                    type: string
                    description: Name of the User
                password:
                    type: string
                    description: Password for the account. Set to boolean false to disable password usage for the master scope, Application Specific Passwords would still be allowed
                hashedPassword:
                    type: boolean
                    description: 'If true then password is already hashed, so store as is. Supported hashes: pbkdf2, bcrypt ($2a, $2y, $2b), md5 ($1), sha512 ($6), sha256 ($5), argon2 ($argon2d, $argon2i, $argon2id). Stored hashes are rehashed to pbkdf2 on first successful password check.'
                allowUnsafe:
                    type: boolean
                    description: 'If false then validates provided passwords against Have I Been Pwned API. Experimental, so validation is disabled by default but will be enabled automatically in some future version of WildDuck.'
                address:
                    type: string
                    description: Default email address for the User (autogenerated if not set)
                emptyAddress:
                    type: boolean
                    description: If true then do not autogenerate missing email address for the User. Only needed if you want to create a user account that does not have any email address associated
                requirePasswordChange:
                    type: boolean
                    description: 'If true then requires the user to change password, useful if password for the account was autogenerated'
                tags:
                    type: array
                    items:
                        type: string
                    description: A list of tags associated with this user
                addTagsToAddress:
                    type: boolean
                    description: If true then autogenerated address gets the same tags as the user
                retention:
                    type: number
                    description: Default retention time (in ms). Set to 0 to disable
                uploadSentMessages:
                    type: boolean
                    description: 'If true then all messages sent through MSA are also uploaded to the Sent Mail folder. Might cause duplicates with some email clients, so disabled by default.'
                encryptMessages:
                    type: boolean
                    description: If true then received messages are encrypted
                encryptForwarded:
                    type: boolean
                    description: If true then forwarded messages are encrypted
                pubKey:
                    type: string
                    description: Public PGP key for the User that is used for encryption. Use empty string to remove the key
                metaData:
                    description: 'Optional metadata, must be an object or JSON formatted string'
                    oneOf:
                        - type: object
                        - type: string
                internalData:
                    description: 'Optional metadata for internal use, must be an object or JSON formatted string of an object. Not available for user-role tokens'
                    oneOf:
                        - type: object
                        - type: string
                language:
                    type: string
                    description: Language code for the User
                targets:
                    type: array
                    items:
                        type: string
                    description: 'An array of forwarding targets. The value could either be an email address or a relay url to next MX server ("smtp://mx2.zone.eu:25") or an URL where mail contents are POSTed to'
                spamLevel:
                    type: number
                    description: 'Relative scale for detecting spam. 0 means that everything is spam, 100 means that nothing is spam'
                quota:
                    type: number
                    description: Allowed quota of the user in bytes
                recipients:
                    type: number
                    description: How many messages per 24 hour can be sent
                forwards:
                    type: number
                    description: How many messages per 24 hour can be forwarded
                filters:
                    type: number
                    description: How many filters are allowed for this account
                imapMaxUpload:
                    type: number
                    description: How many bytes can be uploaded via IMAP during 24 hour
                imapMaxDownload:
                    type: number
                    description: How many bytes can be downloaded via IMAP during 24 hour
                pop3MaxDownload:
                    type: number
                    description: How many bytes can be downloaded via POP3 during 24 hour
                pop3MaxMessages:
                    type: number
                    description: How many latest messages to list in POP3 session
                imapMaxConnections:
                    type: number
                    description: How many parallel IMAP connections are alowed
                receivedMax:
                    type: number
                    description: How many messages can be received from MX during 60 seconds
                mailboxes:
                    $ref: '#/components/schemas/Mailboxes'
                disabledScopes:
                    type: array
                    items:
                        $ref: '#/components/schemas/DisabledScopes'
                    description: 'List of scopes that are disabled for this user ("imap", "pop3", "smtp")'
                fromWhitelist:
                    type: array
                    items:
                        type: string
                    description: A list of additional email addresses this user can send mail from. Wildcard is allowed.
                sess:
                    type: string
                    description: Session identifier for the logs
                ip:
                    type: string
                    description: IP address for the logs

        LogoutUserRequest:
            type: object
            properties:
                reason:
                    type: string
                    description: Message to be shown to connected IMAP client

        UserRestoreRequest:
            type: object
            properties:
                sess:
                    type: string
                    description: Session identifier for the logs
                ip:
                    type: string
                    description: IP address for the logs

        ResetUserPasswordRequest:
            type: object
            properties:
                validAfter:
                    type: string
                    format: date-time
                    description: Allow using the generated password not earlier than provided time
                sess:
                    type: string
                    description: Session identifier for the logs
                ip:
                    type: string
                    description: IP address for the logs
        CreateWebhookRequest:
            required:
                - type
                - url
            type: object
            properties:
                type:
                    type: array
                    items:
                        type: string
                    description: An array of event types to match. For prefix match use ".*" at the end (eg. "user.*") or "*" for all types
                user:
                    type: string
                    description: User ID to match (only makes sense for user specific resources)
                url:
                    type: string
                    description: URL to POST data to

        CreateSettingRequest:
            required:
                - value
            type: object
            properties:
                value:
                    oneOf:
                        - type: string
                        - type: number
                    description: Setting value
                sess:
                    description: Session identifier for the logs
                    type: string
                ip:
                    description: IP address for the logs
                    type: string

        GetAddressesResult:
            required:
                - id
                - name
                - address
                - user
                - forwarded
                - forwardedDisabled
            type: object
            properties:
                id:
                    type: string
                    description: ID of the Address
                name:
                    type: string
                    description: Identity name
                address:
                    type: string
                    description: E-mail address string
                user:
                    type: string
                    description: User ID this address belongs to if this is a User address
                forwarded:
                    type: boolean
                    description: If true then it is a forwarded address
                forwardedDisabled:
                    type: boolean
                    description: If true then the forwarded address is disabled
                target:
                    type: array
                    items:
                        type: string
                    description: List of forwarding targets
        GetUserAddressesResult:
            required:
                - id
                - name
                - address
                - main
                - created
                - tags
            type: object
            properties:
                id:
                    type: string
                    description: ID of the Address
                name:
                    type: string
                    description: Identity name
                address:
                    type: string
                    description: E-mail address string
                main:
                    type: boolean
                    description: Indicates if this is the default address for the User
                created:
                    type: string
                    description: Datestring of the time the address was created
                    format: date-time
                tags:
                    type: array
                    items:
                        type: string
                    description: List of tags associated with the Address
                metaData:
                    type: object
                    description: Metadata object (if available)
                internalData:
                    type: object
                    description: 'Internal metadata object (if available), not included for user-role requests'
        GetUserAddressesregisterResult:
            required:
                - id
                - address
            type: object
            properties:
                id:
                    type: string
                    description: ID of the Address
                    example: 507f1f77bcf86cd799439011
                name:
                    type: string
                    description: Name from address header
                    example: John Doe
                address:
                    type: string
                    description: E-mail address string
                    example: john@example.com
        GetASPsResult:
            required:
                - id
                - description
                - scopes
                - lastUse
                - created
            type: object
            properties:
                id:
                    type: string
                    description: ID of the Application Password
                description:
                    type: string
                    description: Description
                scopes:
                    type: array
                    items:
                        $ref: '#/components/schemas/AspScopes'
                    description: Allowed scopes for the Application Password
                lastUse:
                    $ref: '#/components/schemas/LastUse'
                created:
                    type: string
                    description: Datestring
                    format: date-time
        GetArchivedMessagesResult:
            required:
                - id
                - mailbox
                - thread
                - from
                - to
                - cc
                - bcc
                - subject
                - date
                - intro
                - attachments
                - seen
                - deleted
                - flagged
                - contentType
            type: object
            properties:
                id:
                    type: string
                    description: ID of the Message (24 byte hex)
                mailbox:
                    type: string
                    description: ID of the Mailbox
                thread:
                    type: string
                    description: ID of the Thread
                from:
                    $ref: '#/components/schemas/Address'
                to:
                    type: array
                    items:
                        $ref: '#/components/schemas/Address'
                    description: 'Recipients in To: field'
                cc:
                    type: array
                    items:
                        $ref: '#/components/schemas/Address'
                    description: 'Recipients in Cc: field'
                bcc:
                    type: array
                    items:
                        $ref: '#/components/schemas/Address'
                    description: 'Recipients in Bcc: field. Usually only available for drafts'
                subject:
                    type: string
                    description: Message subject
                date:
                    type: string
                    description: Date string from header
                    format: date-time
                idate:
                    type: string
                    description: Date string of receive time
                    format: date-time
                intro:
                    type: string
                    description: First 128 bytes of the message
                attachments:
                    type: boolean
                    description: Does the message have attachments
                seen:
                    type: boolean
                    description: Is this message alread seen or not
                deleted:
                    type: boolean
                    description: Does this message have a \Deleted flag (should not have as messages are automatically deleted once this flag is set)
                flagged:
                    type: boolean
                    description: Does this message have a \Flagged flag
                contentType:
                    $ref: '#/components/schemas/ContentType'
        GetAuthlogResult:
            required:
                - id
                - action
                - result
                - created
            type: object
            properties:
                id:
                    type: string
                    description: ID of the Event
                action:
                    type: string
                    description: Action identifier
                result:
                    type: string
                    description: Did the action succeed
                sess:
                    type: string
                    description: Session identifier
                ip:
                    type: string
                    description: IP address of the Event
                created:
                    type: string
                    description: Datestring of the Event time
                    format: date-time

        GetDkimKeysResult:
            required:
                - id
                - domain
                - selector
                - description
                - fingerprint
                - created
            type: object
            properties:
                id:
                    type: string
                    description: ID of the DKIM
                domain:
                    type: string
                    description: The domain this DKIM key applies to
                selector:
                    type: string
                    description: DKIM selector
                description:
                    type: string
                    description: Key description
                fingerprint:
                    type: string
                    description: Key fingerprint (SHA1)
                created:
                    type: string
                    description: Datestring
                    format: date-time

        GetTLSCertResult:
            required:
                - id
                - servername
                - description
                - fingerprint
                - created
            type: object
            properties:
                id:
                    type: string
                    description: ID of the certificate
                    example: '609d201236d1d936948f23b1'
                servername:
                    type: string
                    description: The server name this certificate applies to
                    example: 'imap.example.com'
                acme:
                    type: boolean
                    description: If true then private key and certificate are managed automatically by ACME
                    example: false
                description:
                    type: string
                    description: Key description
                    example: 'Some notes about this certificate'
                fingerprint:
                    type: string
                    description: Key fingerprint (SHA1)
                    example: '59:8b:ed:11:5b:4f:ce:b4:e5:1a:2f:35:b1:6f:7d:93:40:c8:2f:9c:38:3b:cd:f4:04:92:a1:0e:17:2c:3f:f3'
                created:
                    type: string
                    description: Datestring
                    format: date-time
                    example: '2021-05-13T20:06:46.179Z'
                expires:
                    type: string
                    description: Certificate expiration time
                    example: '2021-06-26T21:55:55.000Z'
                    format: date-time
                altNames:
                    type: array
                    description: SAN servernames listed in the certificate
                    items:
                        type: string
                    example: ['example.com', 'www.example.com']

        GetAllowedDomainResult:
            required:
                - id
                - domain
            type: object
            properties:
                id:
                    type: string
                    description: Entry ID
                domain:
                    type: string
                    description: allowlisted domain name
        GetBlockedDomainResult:
            required:
                - id
                - domain
            type: object
            properties:
                id:
                    type: string
                    description: Entry ID
                domain:
                    type: string
                    description: blocklisted domain name
        GetDomainAliasesResult:
            required:
                - id
                - alias
                - domain
            type: object
            properties:
                id:
                    type: string
                    description: ID of the Domain Alias
                alias:
                    type: string
                    description: Domain Alias
                domain:
                    type: string
                    description: The domain this alias applies to
        GetAllFiltersResult:
            required:
                - id
                - user
                - name
                - created
                - query
                - action
                - disabled
            type: object
            properties:
                id:
                    type: string
                    description: Filter ID
                user:
                    type: string
                    description: User ID
                name:
                    type: string
                    description: Name for the filter
                created:
                    type: string
                    description: Datestring of the time the filter was created
                    format: date-time
                query:
                    type: array
                    items:
                        type: array
                        items:
                            type: string
                action:
                    type: array
                    items:
                        type: array
                        items:
                            type: string
                disabled:
                    type: boolean
                    description: 'If true, then this filter is ignored'
                metaData:
                    type: object
                    description: Custom metadata value. Included if metaData query argument was true
                targets:
                    type: array
                    items:
                        type: string
                    description: List of forwarding targets

        GetFiltersResult:
            required:
                - id
                - name
                - created
                - query
                - action
                - disabled
            type: object
            properties:
                id:
                    type: string
                    description: Filter ID
                name:
                    type: string
                    description: Name for the filter
                created:
                    type: string
                    description: Datestring of the time the filter was created
                    format: date-time
                query:
                    type: array
                    items:
                        type: array
                        items:
                            type: string
                action:
                    type: array
                    items:
                        type: array
                        items:
                            type: string
                metaData:
                    type: object
                    description: Custom metadata value. Included if metaData query argument was true
                disabled:
                    type: boolean
                    description: 'If true, then this filter is ignored'
        GetMailboxesResult:
            required:
                - id
                - name
                - path
                - specialUse
                - modifyIndex
                - subscribed
                - hidden
                - total
                - unseen
            type: object
            properties:
                id:
                    type: string
                    description: Mailbox ID
                name:
                    type: string
                    description: Name for the mailbox (unicode string)
                path:
                    type: string
                    description: 'Full path of the mailbox, folders are separated by slashes, ends with the mailbox name (unicode string)'
                specialUse:
                    type: string
                    description: 'Either special use identifier or null. One of \Drafts, \Junk, \Sent or \Trash'
                modifyIndex:
                    type: number
                    description: Modification sequence number. Incremented on every change in the mailbox.
                subscribed:
                    type: boolean
                    description: Mailbox subscription status. IMAP clients may unsubscribe from a folder.
                retention:
                    type: number
                    description: Default retention policy for this mailbox (in ms). If set then messages added to this maibox will be automatically deleted after retention time.
                hidden:
                    type: boolean
                    description: Is the folder hidden or not
                total:
                    type: number
                    description: How many messages are stored in this mailbox
                unseen:
                    type: number
                    description: How many unseen messages are stored in this mailbox
        GetMessagesResult:
            required:
                - id
                - mailbox
                - thread
                - from
                - to
                - cc
                - bcc
                - subject
                - date
                - size
                - intro
                - attachments
                - seen
                - deleted
                - flagged
                - answered
                - forwarded
                - contentType
            type: object
            properties:
                id:
                    type: number
                    description: ID of the Message
                mailbox:
                    type: string
                    description: ID of the Mailbox
                thread:
                    type: string
                    description: ID of the Thread
                threadMessageCount:
                    type: number
                    description: Amount of messages in the Thread. Included if threadCounters query argument was true
                from:
                    $ref: '#/components/schemas/Address'
                to:
                    type: array
                    items:
                        $ref: '#/components/schemas/Address'
                    description: 'Recipients in To: field'
                cc:
                    type: array
                    items:
                        $ref: '#/components/schemas/Address'
                    description: 'Recipients in Cc: field'
                bcc:
                    type: array
                    items:
                        $ref: '#/components/schemas/Address'
                    description: 'Recipients in Bcc: field. Usually only available for drafts'
                subject:
                    type: string
                    description: Message subject
                date:
                    type: string
                    description: Date string from header
                    format: date-time
                idate:
                    type: string
                    description: Date string of receive time
                    format: date-time
                size:
                    type: number
                    description: Message size in bytes
                intro:
                    type: string
                    description: First 128 bytes of the message
                attachments:
                    type: boolean
                    description: Does the message have attachments
                seen:
                    type: boolean
                    description: Is this message alread seen or not
                deleted:
                    type: boolean
                    description: Does this message have a \Deleted flag (should not have as messages are automatically deleted once this flag is set)
                flagged:
                    type: boolean
                    description: Does this message have a \Flagged flag
                answered:
                    type: boolean
                    description: Does this message have a \Answered flag
                forwarded:
                    type: boolean
                    description: Does this message have a $Forwarded flag
                contentType:
                    $ref: '#/components/schemas/ContentType'
                metaData:
                    type: object
                    description: Custom metadata value. Included if metaData query argument was true
                headers:
                    type: object
                    description: Header object keys requested with the includeHeaders argument
        GetFilesResult:
            required:
                - id
                - filename
                - contentType
                - size
            type: object
            properties:
                id:
                    type: string
                    description: ID of the File
                filename:
                    type: string
                    description: Filename
                contentType:
                    type: string
                    description: Content-Type of the file
                size:
                    type: number
                    description: File size
        GetUsersResult:
            required:
                - id
                - username
                - name
                - address
                - tags
                - targets
                - enabled2fa
                - autoreply
                - encryptMessages
                - encryptForwarded
                - quota
                - hasPasswordSet
                - activated
                - disabled
                - suspended
            type: object
            properties:
                id:
                    type: string
                    description: Users unique ID (24 byte hex)
                username:
                    type: string
                    description: Username of the User
                name:
                    type: string
                    description: Name of the User
                address:
                    type: string
                    description: Main email address of the User
                tags:
                    type: array
                    items:
                        type: string
                    description: List of tags associated with the User'
                targets:
                    type: array
                    items:
                        type: string
                    description: List of forwarding targets
                enabled2fa:
                    type: array
                    items:
                        type: string
                    description: List of enabled 2FA methods
                autoreply:
                    type: boolean
                    description: Is autoreply enabled or not (start time may still be in the future or end time in the past)
                encryptMessages:
                    type: boolean
                    description: If true then received messages are encrypted
                encryptForwarded:
                    type: boolean
                    description: If true then forwarded messages are encrypted
                quota:
                    $ref: '#/components/schemas/Quota'
                metaData:
                    type: object
                    description: Custom metadata value. Included if metaData query argument was true
                internalData:
                    type: object
                    description: Custom metadata value for internal use. Included if internalData query argument was true and request was not made using user-role token
                hasPasswordSet:
                    type: boolean
                    description: If true then the User has a password set and can authenticate
                activated:
                    type: boolean
                    description: Is the account activated
                disabled:
                    type: boolean
                    description: If true then the user can not authenticate or receive any new mail
                suspended:
                    type: boolean
                    description: If true then the user can not authenticate

        GetWebhooksResult:
            required:
                - id
                - type
                - user
                - url
            type: object
            properties:
                id:
                    type: string
                    description: Webhooks unique ID (24 byte hex)
                type:
                    type: array
                    items:
                        type: string
                    description: An array of event types this webhook matches
                user:
                    type: string
                    description: User ID or null
                url:
                    type: string
                    description: Webhook URL
        AspScopes:
            type: string
            enum:
                - imap
                - pop3
                - smtp
                - '*'
        DisabledScopes:
            type: string
            enum:
                - imap
                - pop3
                - smtp
        Order:
            type: string
            enum:
                - asc
                - desc

        GetSettingsResult:
            required:
                - key
            type: object
            properties:
                key:
                    type: string
                    description: Setting key
                value:
                    oneOf:
                        - type: string
                        - type: number
                    description: Setting value
                name:
                    type: string
                    description: Setting name
                description:
                    type: string
                    description: Setting description
                default:
                    oneOf:
                        - type: string
                        - type: number
                    description: Default value for this key
                type:
                    type: string
                    description: Value subtype
                custom:
                    type: boolean
                    description: If true then the value is set

    securitySchemes:
        AccessTokenAuth:
            name: X-Access-Token
            type: apiKey
            in: header
            description: |-
                If authentication is enabled in the WildDuck configuration, you will need to supply an access token in the `X-Access-Token` header.

                ```json
                {
                  "X-Access-Token": "59fc66a03e54454869460e45"
                }
                ```
security:
    - AccessTokenAuth: []
