{
  "constants": {
    "dovecot.storage.STATUS_MESSAGES": {
      "name": "STATUS_MESSAGES",
      "tags": "dovecot.storage"
    },
    "dovecot.storage.STATUS_RECENT": {
      "name": "STATUS_RECENT",
      "tags": "dovecot.storage"
    },
    "dovecot.storage.STATUS_UIDNEXT": {
      "name": "STATUS_UIDNEXT",
      "tags": "dovecot.storage"
    },
    "dovecot.storage.STATUS_UIDVALIDITY": {
      "name": "STATUS_UIDVALIDITY",
      "tags": "dovecot.storage"
    },
    "dovecot.storage.STATUS_UNSEEN": {
      "name": "STATUS_UNSEEN",
      "tags": "dovecot.storage"
    },
    "dovecot.storage.STATUS_FIRST_UNSEEN_SEQ": {
      "name": "STATUS_FIRST_UNSEEN_SEQ",
      "tags": "dovecot.storage"
    },
    "dovecot.storage.STATUS_KEYWORDS": {
      "name": "STATUS_KEYWORDS",
      "tags": "dovecot.storage"
    },
    "dovecot.storage.STATUS_HIGHESTMODSEQ": {
      "name": "STATUS_HIGHESTMODSEQ",
      "tags": "dovecot.storage"
    },
    "dovecot.storage.STATUS_PERMANENT_FLAGS": {
      "name": "STATUS_PERMANENT_FLAGS",
      "tags": "dovecot.storage"
    },
    "dovecot.storage.FIRST_RECENT_UID": {
      "name": "FIRST_RECENT_UID",
      "tags": "dovecot.storage"
    },
    "dovecot.storage.STATUS_HIGHESTPVTMODSEQ": {
      "name": "STATUS_HIGHESTPVTMODSEQ",
      "tags": "dovecot.storage"
    },
    "dovecot.storage.MAILBOX_FLAG_READONLY": {
      "name": "MAILBOX_FLAG_READONLY",
      "tags": "dovecot.storage"
    },
    "dovecot.storage.MAILBOX_FLAG_SAVEONLY": {
      "name": "MAILBOX_FLAG_SAVEONLY",
      "tags": "dovecot.storage"
    },
    "dovecot.storage.MAILBOX_FLAG_DROP_RECENT": {
      "name": "MAILBOX_FLAG_DROP_RECENT",
      "tags": "dovecot.storage"
    },
    "dovecot.storage.MAILBOX_FLAG_NO_INDEX_FILES": {
      "name": "MAILBOX_FLAG_NO_INDEX_FILES",
      "tags": "dovecot.storage"
    },
    "dovecot.storage.MAILBOX_FLAG_KEEP_LOCKED": {
      "name": "MAILBOX_FLAG_KEEP_LOCKED",
      "tags": "dovecot.storage"
    },
    "dovecot.storage.MAILBOX_FLAG_IGNORE_ACLS": {
      "name": "MAILBOX_FLAG_IGNORE_ACLS",
      "tags": "dovecot.storage"
    },
    "dovecot.storage.MAILBOX_FLAG_AUTO_CREATE": {
      "name": "MAILBOX_FLAG_AUTO_CREATE",
      "tags": "dovecot.storage"
    },
    "dovecot.storage.MAILBOX_FLAG_AUTO_SUBSCRIBE": {
      "name": "MAILBOX_FLAG_AUTO_SUBSCRIBE",
      "tags": "dovecot.storage"
    },
    "dovecot.storage.MAILBOX_SYNC_FLAG_FULL_READ": {
      "name": "MAILBOX_SYNC_FLAG_FULL_READ",
      "tags": "dovecot.storage"
    },
    "dovecot.storage.MAILBOX_SYNC_FLAG_FULL_WRITE": {
      "name": "MAILBOX_SYNC_FLAG_FULL_WRITE",
      "tags": "dovecot.storage"
    },
    "dovecot.storage.MAILBOX_SYNC_FLAG_FAST": {
      "name": "MAILBOX_SYNC_FLAG_FAST",
      "tags": "dovecot.storage"
    },
    "dovecot.storage.MAILBOX_SYNC_FLAG_NO_EXPUNGES": {
      "name": "MAILBOX_SYNC_FLAG_NO_EXPUNGES",
      "tags": "dovecot.storage"
    },
    "dovecot.storage.MAILBOX_SYNC_FLAG_FIX_INCONSISTENT": {
      "name": "MAILBOX_SYNC_FLAG_FIX_INCONSISTENT",
      "tags": "dovecot.storage"
    },
    "dovecot.storage.MAILBOX_SYNC_FLAG_EXPUNGE": {
      "name": "MAILBOX_SYNC_FLAG_EXPUNGE",
      "tags": "dovecot.storage"
    },
    "dovecot.storage.MAILBOX_SYNC_FLAG_FORGE_RESYNC": {
      "name": "MAILBOX_SYNC_FLAG_FORGE_RESYNC",
      "tags": "dovecot.storage"
    },
    "dovecot.storage.MAILBOX_ATTRIBUTE_PREFIX_DOVECOT": {
      "name": "MAILBOX_ATTRIBUTE_PREFIX_DOVECOT",
      "tags": "dovecot.storage",
      "text": "<p>String constant <code>vendor/vendor.dovecot/</code>.</p>\n"
    },
    "dovecot.storage.MAILBOX_ATTRIBUTE_PREFIX_DOVECOT_PVT": {
      "name": "MAILBOX_ATTRIBUTE_PREFIX_DOVECOT_PVT",
      "tags": "dovecot.storage",
      "text": "<p>String constant <code>vendor/vendor.dovecot/pvt/</code>.</p>\n"
    },
    "dovecot.storage.MAILBOX_ATTRIBUTE_PREFIX_DOVECOT_PVT_SERVER": {
      "name": "MAILBOX_ATTRIBUTE_PREFIX_DOVECOT_PVT_SERVER",
      "tags": "dovecot.storage",
      "text": "<p>String constant <code>vendor/vendor.dovecot/pvt/server/</code>.</p>\n"
    }
  },
  "functions": {
    "dovecot.i_debug": {
      "name": "i_debug",
      "args": {
        "text": {
          "type": "string",
          "text": "<p>Message to log.</p>\n"
        }
      },
      "tags": "dovecot",
      "text": "<p>Log debug level message.</p>\n"
    },
    "dovecot.i_info": {
      "name": "i_info",
      "args": {
        "text": {
          "type": "string",
          "text": "<p>Message to log.</p>\n"
        }
      },
      "tags": "dovecot",
      "text": "<p>Log info level message.</p>\n"
    },
    "dovecot.i_warning": {
      "name": "i_warning",
      "args": {
        "text": {
          "type": "string",
          "text": "<p>Message to log.</p>\n"
        }
      },
      "tags": "dovecot",
      "text": "<p>Log warning level message.</p>\n"
    },
    "dovecot.i_error": {
      "name": "i_error",
      "args": {
        "text": {
          "type": "string",
          "text": "<p>Message to log.</p>\n"
        }
      },
      "tags": "dovecot",
      "text": "<p>Log error level message.</p>\n"
    },
    "dovecot.event": {
      "name": "event",
      "args": {
        "parent": {
          "type": "parent",
          "text": "<p>Use as parent event.</p>\n"
        }
      },
      "tags": "dovecot",
      "text": "<p>Generate new event. If <code>parent</code> is not specified, the lua script is used\nas the parent.</p>\n"
    },
    "dovecot.var_expand": {
      "name": "var_expand",
      "args": {
        "input": {
          "type": "string",
          "text": "<p>String containing variables to expand.</p>\n"
        }
      },
      "tags": "dovecot",
      "text": "<p>Expand variables in the input string, <a href=\"/main/core/settings/variables.html\">Settings Variables</a>.</p>\n"
    },
    "dovecot.base64.encode": {
      "name": "base64.encode",
      "args": {
        "input": {
          "type": "string",
          "text": "<p>Data to encode</p>\n"
        }
      },
      "tags": "dovecot",
      "text": "<p>Base64 encodes the provided input.</p>\n"
    },
    "dovecot.base64.decode": {
      "name": "base64.decode",
      "args": {
        "input": {
          "type": "string",
          "text": "<p>Data to decode</p>\n"
        }
      },
      "tags": "dovecot",
      "text": "<p>Base64 decodes the provided input.</p>\n"
    },
    "dovecot.restrict_global_variables": {
      "name": "restrict_global_variables",
      "args": {
        "toggle": {
          "type": "boolean",
          "text": "<p>Enable or disable defining new global variables.</p>\n"
        }
      },
      "tags": "dovecot",
      "text": "<p>Enable or disable restricting new global variables.</p>\n<p>If enabled, the rest of the script won't be allowed to declare global\nnon-function variables but they can declare local variables and use\nalready defined global variables.</p>\n<p>If a script needs to define a variable, they must declare them as local i.e.\ninstead of <code>my_var = &quot;some value&quot;</code>, do <code>local my_var = &quot;some value&quot;</code>.\nRestrictions will remain in place until the end of the execution of the\nscript or until they are lifted by calling\n<code>dovecot.restrict_global_variables(false)</code>.</p>\n<p>Default is permissive mode, i.e., same as lua's default, global variables\nare not restricted.</p>\n"
    },
    "dovecot.http.client": {
      "name": "client",
      "args": {
        "auto_redirect": {
          "dovecot_setting": "http_client_auto_redirect",
          "hash_arg": true,
          "type": "Boolean",
          "text": "<p>If this setting is <code>yes</code> redirects are handled as long as\n<code><a href=\"/main/core/summaries/settings.html#http_client_request_max_redirects\">http_client_request_max_redirects</a></code> isn't reached. If <code>no</code> the\nredirect responses are handled as regular failure responses.</p>\n<div class=\"warning custom-block\"><p class=\"custom-block-title\">WARNING</p>\n<p>This setting should likely be changed only in the code, never in configuration.</p>\n</div>\n",
          "default": "yes"
        },
        "auto_retry": {
          "dovecot_setting": "http_client_auto_retry",
          "hash_arg": true,
          "type": "Boolean",
          "text": "<p>If this setting is <code>no</code> requests are not automatically retried by the generic\nHTTP client code. It's still possible to retry the requests with explicit\n<code>http_client_request_try_retry()</code> calls as long as\n<code><a href=\"/main/core/summaries/settings.html#http_client_request_max_attempts\">http_client_request_max_attempts</a></code> isn't reached.</p>\n<div class=\"warning custom-block\"><p class=\"custom-block-title\">WARNING</p>\n<p>This setting should likely be changed only in the code, never in configuration.</p>\n</div>\n",
          "default": "yes"
        },
        "connect_backoff_time": {
          "dovecot_setting": "http_client_connect_backoff_time",
          "hash_arg": true,
          "type": "Time (milliseconds)",
          "text": "<p>Initial backoff time for retries. It's doubled at each connection failure.</p>\n",
          "default": "100 ms"
        },
        "connect_backoff_max_time": {
          "dovecot_setting": "http_client_connect_backoff_max_time",
          "hash_arg": true,
          "type": "Time (milliseconds)",
          "text": "<p>Maximum backoff time for retries.</p>\n",
          "default": "1 min"
        },
        "connect_timeout": {
          "dovecot_setting": "http_client_connect_timeout",
          "hash_arg": true,
          "type": "Time (milliseconds)",
          "text": "<p>Max time to wait for TCP connect and SSL handshake to finish before retrying.\n<code>0</code> = use <code><a href=\"/main/core/summaries/settings.html#http_client_request_timeout\">http_client_request_timeout</a></code>.</p>\n",
          "default": 0
        },
        "event_parent": {
          "hash_arg": true,
          "type": "event",
          "text": "<p>Parent event to use.</p>\n"
        },
        "request_max_attempts": {
          "dovecot_setting": "http_client_request_max_attempts",
          "hash_arg": true,
          "type": "Unsigned Integer",
          "text": "<p>Maximum number of attempts for a request.</p>\n",
          "default": 1
        },
        "max_auto_retry_delay": {
          "dovecot_setting": "http_client_max_auto_retry_delay",
          "hash_arg": true,
          "type": "Time",
          "text": "<p>Maximum acceptable delay for automatically retrying/redirecting requests. If a\nserver sends a response with a <code>Retry-After</code> header that causes a delay\nlonger than this, the request is not automatically retried and the response is\nreturned.</p>\n",
          "default": 0
        },
        "max_connect_attempts": {
          "dovecot_setting": "http_client_max_connect_attempts",
          "hash_arg": true,
          "type": "Unsigned Integer",
          "text": "<p>Maximum number of connection attempts to a host before all associated requests fail.</p>\n<p>If non-zero, the maximum will be enforced across all IPs for that host, meaning\nthat IPs may be tried more than once eventually if the number of IPs is smaller\nthan the specified maximum attempts. If the number of IPs is higher than the\nmaximum attempts not all IPs are tried.</p>\n<p>If <code>0</code>, all IPs are tried at most once.</p>\n",
          "default": 0
        },
        "max_idle_time": {
          "dovecot_setting": "http_client_max_idle_time",
          "hash_arg": true,
          "type": "Time (milliseconds)",
          "text": "<p>Maximum time a connection will idle. If parallel connections are idle, the\nduplicates will end earlier based on how many idle connections exist to that\nsame service.</p>\n",
          "default": 0
        },
        "request_max_redirects": {
          "dovecot_setting": "http_client_request_max_redirects",
          "hash_arg": true,
          "type": "Unsigned Integer",
          "text": "<p>Maximum number of redirects for a request. <code>0</code> = redirects refused.</p>\n",
          "default": 0
        },
        "proxy_url": {
          "dovecot_setting": "http_client_proxy_url",
          "hash_arg": true,
          "type": "String",
          "text": "<p>URL for HTTP proxy. Ignored if <code><a href=\"/main/core/summaries/settings.html#http_client_proxy_socket_path\">http_client_proxy_socket_path</a></code> is\nset.</p>\n"
        },
        "request_absolute_timeout": {
          "dovecot_setting": "http_client_request_absolute_timeout",
          "hash_arg": true,
          "type": "Time (milliseconds)",
          "text": "<p>Max total time to wait for HTTP request to finish, including all retries. <code>0</code>\nmeans no limit.</p>\n",
          "default": 0
        },
        "request_timeout": {
          "dovecot_setting": "http_client_request_timeout",
          "hash_arg": true,
          "type": "Time (milliseconds)",
          "text": "<p>Max time to wait for HTTP requests to finish before retrying.</p>\n",
          "default": "1 min"
        },
        "soft_connect_timeout": {
          "dovecot_setting": "http_client_soft_connect_timeout",
          "hash_arg": true,
          "type": "Time (milliseconds)",
          "text": "<p>Time to wait for TCP connect and SSL handshake to finish for the first\nconnection before trying the next IP in parallel. <code>0</code> = wait until current\nconnection attempt finishes.</p>\n",
          "default": 0
        },
        "ssl_cipher_list": {
          "dovecot_setting": "ssl_cipher_list",
          "hash_arg": true,
          "type": "String",
          "text": "<p>The list of SSL ciphers to use for TLSv1.2 and below connections, in order\nof preference. Use <code><a href=\"/main/core/summaries/settings.html#ssl_cipher_suites\">ssl_cipher_suites</a></code> for TLSv1.3 connections.</p>\n<p>You do not need to edit this setting in order to disable specific SSL\nprotocols; that is best done with <code><a href=\"/main/core/summaries/settings.html#ssl_min_protocol\">ssl_min_protocol</a></code> instead.</p>\n<p>This setting is used for both incoming and outgoing SSL connections.</p>\n",
          "default": "ALL:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@STRENGTH (for ssl_server, empty for ssl_client)"
        },
        "ssl_cipher_suites": {
          "dovecot_setting": "ssl_cipher_suites",
          "hash_arg": true,
          "type": "String",
          "text": "<p>The list of SSL cipher suites to use for TLSv1.3 connections, in order of\npreference. Use <code><a href=\"/main/core/summaries/settings.html#ssl_cipher_list\">ssl_cipher_list</a></code> for TLSv1.2 and below connections.</p>\n<p>This setting is used for both incoming and outgoing SSL connections.</p>\n<p>See: <a href=\"https://wiki.openssl.org/index.php/TLS1.3#Ciphersuites\" target=\"_blank\" rel=\"noreferrer\">https://wiki.openssl.org/index.php/TLS1.3#Ciphersuites</a></p>\n",
          "default": "\\<OpenSSL version specific\\>"
        },
        "ssl_client_ca_dir": {
          "dovecot_setting": "ssl_client_ca_dir",
          "hash_arg": true,
          "type": "String",
          "text": "<p>The directory where trusted SSL CA certificates can be found. For example\n<code>/etc/ssl/certs</code>. These certificates are used only for outgoing SSL\nconnections (e.g. with the imapc driver).</p>\n<p>For extra security you might want to point to a directory containing\ncertificates only for the CAs that are actually needed for the server\noperation instead of all the root CAs.</p>\n"
        },
        "ssl_client_ca_file": {
          "dovecot_setting": "ssl_client_ca_file",
          "hash_arg": true,
          "type": "File",
          "text": "<p>File containing the trusted SSL CA certificates. For example\n<code>/etc/ssl/certs/ca-bundle.crt</code>.</p>\n<p>These certificates are used only for outgoing SSL connections (e.g. with\nthe <a href=\"/main/core/config/mailbox_formats/imapc.html\">imapc</a> driver).</p>\n<p>Note that this setting isn't recommended to be used with large CA bundles,\nbecause all the certificates are read into memory. This leads to excessive\nmemory usage, because it gets multiplied by the number of imap processes.\nIt's better to either use <code><a href=\"/main/core/summaries/settings.html#ssl_client_ca_dir\">ssl_client_ca_dir</a></code> setting or\nuse a CA bundle that only contains the CAs that are actually necessary for\nthe server operation.</p>\n"
        },
        "ssl_client_cert_file": {
          "dovecot_setting": "ssl_client_cert_file",
          "hash_arg": true,
          "type": "File",
          "text": "<p>Public SSL certificate used for outgoing SSL connections. This is generally\nneeded only when the server authenticates the client using the certificate.</p>\n<p><code><a href=\"/main/core/summaries/settings.html#ssl_client_key_file\">ssl_client_key_file</a></code> is also needed for the private certificate.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>ssl_client_cert_file = /etc/dovecot/dovecot-client.crt</span></span>\n<span class=\"line\"><span>ssl_client_key_file = /etc/dovecot/dovecot-client.key</span></span></code></pre>\n</div>"
        },
        "ssl_client_key_file": {
          "dovecot_setting": "ssl_client_key_file",
          "hash_arg": true,
          "type": "File",
          "text": "<p>Private key for <code><a href=\"/main/core/summaries/settings.html#ssl_client_cert_file\">ssl_client_cert_file</a></code>. If it is password protected,\nset the password with <code><a href=\"/main/core/summaries/settings.html#ssl_client_key_password\">ssl_client_key_password</a></code>.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>ssl_client_cert_file = /etc/dovecot/dovecot-client.crt</span></span>\n<span class=\"line\"><span>ssl_client_key_file = /etc/dovecot/dovecot-client.key</span></span></code></pre>\n</div>"
        },
        "ssl_client_key_password": {
          "dovecot_setting": "ssl_client_key_password",
          "hash_arg": true,
          "type": "String",
          "text": "<p>Password for the <code><a href=\"/main/core/summaries/settings.html#ssl_client_key_file\">ssl_client_key_file</a></code>.</p>\n"
        },
        "ssl_crypto_device": {
          "dovecot_setting": "ssl_crypto_device",
          "hash_arg": true,
          "type": "String",
          "text": "<p>Available Values: &lt;Obtain by running <code>openssl engine</code> command&gt;</p>\n<p>Which SSL crypto device to use.</p>\n"
        },
        "ssl_curve_list": {
          "dovecot_setting": "ssl_curve_list",
          "hash_arg": true,
          "type": "String",
          "text": "<p>Colon separated list of elliptic curves to use, in order of preference.\nAn empty value uses the defaults from the SSL library.</p>\n<p>This setting is used for both incoming and outgoing SSL connections.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>ssl_curve_list = P-521:P-384:P-256</span></span></code></pre>\n</div>",
          "default": "\\<defaults from the SSL library\\>"
        },
        "ssl_client_require_valid_cert": {
          "dovecot_setting": "ssl_client_require_valid_cert",
          "hash_arg": true,
          "type": "Boolean",
          "text": "<p>Require a valid certificate when connecting to external SSL services?</p>\n",
          "default": "yes"
        },
        "ssl_min_protocol": {
          "dovecot_setting": "ssl_min_protocol",
          "hash_arg": true,
          "type": "String",
          "text": "<p>The minimum SSL protocol version Dovecot accepts. It cannot be empty.</p>\n<p>This setting is used for both incoming and outgoing SSL connections.</p>\n<p>Supported values are:</p>\n<dl>\n<dt><code>ANY</code></dt>\n<dd>\n<div class=\"warning custom-block\"><p class=\"custom-block-title\">WARNING</p>\n<p>This value is meant for tests only. It should not be used in any\ndeployment of any value/relevance.</p>\n</div>\n</dd>\n<dt><code>TLSv1</code></dt>\n<dd>Support TLSv1+. (TLSv1 deprecated: <a target=\"_blank\" rel=\"noreferrer\" href=\"https://datatracker.ietf.org/doc/html/rfc8996\">RFC 8996</a>)</dd>\n<dt><code>TLSv1.1</code></dt>\n<dd>Support TLSv1.1+. (TLSv1.1 deprecated: <a target=\"_blank\" rel=\"noreferrer\" href=\"https://datatracker.ietf.org/doc/html/rfc8996\">RFC 8996</a>)</dd>\n<dt><code>TLSv1.2</code></dt>\n<dd>Support TLSv1.2+.</dd>\n<dt><code>TLSv1.3</code></dt>\n<dd>Support TLSv1.3+.</dd>\n<dt><code>LATEST</code></dt>\n<dd>Support only the latest version available.</dd>\n</dl>\n",
          "default": "TLSv1.2"
        },
        "ssl_options": {
          "dovecot_setting": "ssl_options",
          "hash_arg": true,
          "type": "String",
          "text": "<p>Additional options for SSL.</p>\n<p>This setting is used for both incoming and outgoing SSL connections.</p>\n<p>Currently supported options are:</p>\n<dl>\n<dt><code>compression</code></dt>\n<dd>Enable compression.</dd>\n<dt><code>no_ticket</code></dt>\n<dd>Disable SSL session tickets.</dd>\n</dl>\n"
        },
        "rawlog_dir": {
          "dovecot_setting": "http_client_rawlog_dir",
          "hash_arg": true,
          "type": "String",
          "text": "<p>Directory for writing raw log data for debugging purposes.</p>\n<div class=\"warning custom-block\"><p class=\"custom-block-title\">WARNING</p>\n<p>Must be writable by the process creating this log.</p>\n</div>\n"
        },
        "user_agent": {
          "dovecot_setting": "http_client_user_agent",
          "hash_arg": true,
          "type": "String",
          "text": "<p><code>User-Agent:</code> header to send.</p>\n"
        }
      },
      "return": "An http_client object.",
      "tags": "dovecot.http",
      "text": "<p>Create a new http client object that can be used to submit requests to\nremote servers.</p>\n"
    },
    "http_client.request": {
      "name": "request",
      "args": {
        "url": {
          "hash_arg": true,
          "type": "string",
          "text": "<p>Full url address. Parameters will be parsed from the string. TLS encryption is implied with use of <code>https</code>.</p>\n"
        },
        "method": {
          "hash_arg": true,
          "type": "string",
          "text": "<p>HTTP method to use.</p>\n"
        }
      },
      "return": "An http_request object.",
      "tags": "http_client",
      "text": "<p>Create a new request object.</p>\n<p>By default, the request has <code>Host</code>, and <code>Date</code> headers with relevant\nvalues, as well as <code>Connection: Keep-Alive</code>.</p>\n"
    },
    "http_request.add_header": {
      "name": "add_header",
      "args": {
        "name": {
          "type": "string",
          "text": "<p>Name of the HTTP header.</p>\n"
        },
        "value": {
          "type": "string",
          "text": "<p>Value of the header.</p>\n"
        }
      },
      "tags": "http_request",
      "text": "<p>Add a header to the request.</p>\n"
    },
    "http_request.remove_header": {
      "name": "remove_header",
      "args": {
        "name": {
          "type": "string",
          "text": "<p>Name of the HTTP header.</p>\n"
        }
      },
      "tags": "http_request",
      "text": "<p>Do a lookup of the header in the request and remove it if found.</p>\n"
    },
    "http_request.set_payload": {
      "name": "set_payload",
      "args": {
        "value": {
          "type": "string",
          "text": "<p>Payload of the request as string data.</p>\n"
        },
        "synchronous": {
          "type": "boolean",
          "text": "<p>Expect 100 Continue header before sending data. Defaults to <code>false</code>.</p>\n"
        }
      },
      "tags": "http_request",
      "text": "<p>Set payload data to the request.</p>\n<p>Optionally you can set <code>synchronous</code>, which will cause &quot;100 Continue&quot;\nheader to be sent.</p>\n"
    },
    "http_request.set_event": {
      "name": "set_event",
      "args": {
        "value": {
          "type": "event",
          "text": "<p>Event to be used as parent event.</p>\n"
        }
      },
      "tags": "http_request",
      "text": "<p>Pass the parent event to be used for this request.</p>\n"
    },
    "http_request.get_event": {
      "name": "get_event",
      "tags": "http_request",
      "return": "An event object",
      "text": "<p>Returns the event used by the http_request.</p>\n"
    },
    "http_request.submit": {
      "name": "submit",
      "return": "An http_response object.",
      "tags": "http_request",
      "text": "<p>Connect to the remote server and submit the request.</p>\n<p>This function blocks until the HTTP response is fully received.</p>\n"
    },
    "http_response.status": {
      "name": "status",
      "return": "Status code of the http response.",
      "tags": "http_response",
      "text": "<p>Get the status code of the HTTP response.</p>\n<p>The codes contain error codes as well as HTTP codes, e.g., '200 HTTP_OK'\nand error code that denote connection to remote server failed.</p>\n<p>A human-readable string of the error can then be read using <code>reason()</code>\nfunction.</p>\n<p>Besides the status codes sent by remote HTTP servers, the status code can also\ncontain Dovecot's internal 9xxx errors. See <a href=\"/main/core/admin/http.html#internal-http-response-codes\">Dovecot HTTP Internal Response Codes</a>.</p>\n"
    },
    "http_response.reason": {
      "name": "reason",
      "return": "String representation of the status.",
      "tags": "http_response",
      "text": "<p>Returns a human-readable string of HTTP status codes, e.g. &quot;OK&quot;,\n&quot;Bad Request&quot;, &quot;Service Unavailable&quot;, as well as connection errors, e.g.,\n&quot;connect(...) failed: Connection refused&quot;.</p>\n"
    },
    "http_response.header": {
      "name": "header",
      "args": {
        "name": {
          "type": "string",
          "text": "<p>Header to retrieve.</p>\n"
        }
      },
      "return": "Value of the HTTP response header.",
      "tags": "http_response",
      "text": "<p>Get value of a header in the HTTP request.</p>\n<p>If header is not found from the response, an empty string is returned.</p>\n"
    },
    "http_response.payload": {
      "name": "payload",
      "return": "Payload of the HTTP response as a string.",
      "tags": "http_response",
      "text": "<p>Get the payload of the HTTP response.</p>\n"
    },
    "event.append_log_prefix": {
      "name": "append_log_prefix",
      "args": {
        "prefix": {
          "type": "string",
          "text": "<p>Prefix to append.</p>\n"
        }
      },
      "tags": "event",
      "text": "<p>Set prefix to append into log messages.</p>\n"
    },
    "event_passthrough.append_log_prefix": {
      "name": "append_log_prefix",
      "args": {
        "prefix": {
          "type": "string",
          "text": "<p>Prefix to append.</p>\n"
        }
      },
      "tags": "event_passthrough",
      "text": "<p>Set prefix to append into log messages.</p>\n"
    },
    "event.replace_log_prefix": {
      "name": "replace_log_prefix",
      "args": {
        "prefix": {
          "type": "string",
          "text": "<p>Prefix to append.</p>\n"
        }
      },
      "tags": "event",
      "text": "<p>Append prefix for log messages.</p>\n"
    },
    "event_passthrough.replace_log_prefix": {
      "name": "replace_log_prefix",
      "args": {
        "prefix": {
          "type": "string",
          "text": "<p>Prefix to append.</p>\n"
        }
      },
      "tags": "event_passthrough",
      "text": "<p>Append prefix for log messages.</p>\n"
    },
    "event.set_always_log_source": {
      "name": "set_always_log_source",
      "tags": "event",
      "text": "<p>Add source path:line to the log messages.</p>\n"
    },
    "event_passthrough.set_always_log_source": {
      "name": "set_always_log_source",
      "tags": "event_passthrough",
      "text": "<p>Add source path:line to the log messages.</p>\n"
    },
    "event.set_forced_debug": {
      "name": "set_forced_debug",
      "tags": "event",
      "text": "<p><span class=\"VPBadge tip\">Added: 3.1.0</span> Enable forced debugging for the event\nand its child events.</p>\n"
    },
    "event.unset_forced_debug": {
      "name": "unset_forced_debug",
      "tags": "event",
      "text": "<p><span class=\"VPBadge tip\">Added: 3.1.0</span> Disable previously enabled forced\ndebugging.</p>\n"
    },
    "event.set_name": {
      "name": "set_name",
      "args": {
        "name": {
          "type": "string",
          "text": "<p>Event name.</p>\n"
        }
      },
      "tags": "event",
      "text": "<p>Set name for event.</p>\n"
    },
    "event_passthrough.set_name": {
      "name": "set_name",
      "args": {
        "name": {
          "type": "string",
          "text": "<p>Event name.</p>\n"
        }
      },
      "tags": "event_passthrough",
      "text": "<p>Set name for event.</p>\n"
    },
    "event.add_str": {
      "name": "add_str",
      "args": {
        "key": {
          "type": "string",
          "text": "<p>Key name.</p>\n"
        },
        "value": {
          "type": "string",
          "text": "<p>A value.</p>\n"
        }
      },
      "tags": "event",
      "text": "<p>Add a key-value pair to event.</p>\n"
    },
    "event_passthrough.add_str": {
      "name": "add_str",
      "args": {
        "key": {
          "type": "string",
          "text": "<p>Key name.</p>\n"
        },
        "value": {
          "type": "string",
          "text": "<p>A value.</p>\n"
        }
      },
      "tags": "event_passthrough",
      "text": "<p>Add a key-value pair to event.</p>\n"
    },
    "event.add_int": {
      "name": "add_int",
      "args": {
        "key": {
          "type": "string",
          "text": "<p>Key name.</p>\n"
        },
        "value": {
          "type": "int",
          "text": "<p>Integer value.</p>\n"
        }
      },
      "tags": "event",
      "text": "<p>Add a key-value pair to event.</p>\n"
    },
    "event_passthrough.add_int": {
      "name": "add_int",
      "args": {
        "key": {
          "type": "string",
          "text": "<p>Key name.</p>\n"
        },
        "value": {
          "type": "int",
          "text": "<p>Integer value.</p>\n"
        }
      },
      "tags": "event_passthrough",
      "text": "<p>Add a key-value pair to event.</p>\n"
    },
    "event.add_timeval": {
      "name": "add_timeval",
      "args": {
        "key": {
          "type": "string",
          "text": "<p>Key name.</p>\n"
        },
        "value": {
          "type": "int",
          "text": "<p>Unix timestamp.</p>\n"
        }
      },
      "tags": "event",
      "text": "<p>Add a key-value pair to event.</p>\n"
    },
    "event_passthrough.add_timeval": {
      "name": "add_timeval",
      "args": {
        "key": {
          "type": "string",
          "text": "<p>Key name.</p>\n"
        },
        "value": {
          "type": "int",
          "text": "<p>Unix timestamp.</p>\n"
        }
      },
      "tags": "event_passthrough",
      "text": "<p>Add a key-value pair to event.</p>\n"
    },
    "event.inc_int": {
      "name": "inc_int",
      "args": {
        "key": {
          "type": "string",
          "text": "<p>Key name.</p>\n"
        },
        "diff": {
          "type": "int",
          "text": "<p>Difference to add. Can be negative.</p>\n"
        }
      },
      "tags": "event",
      "text": "<p>Increment key-value pair.</p>\n"
    },
    "event_passthrough.inc_int": {
      "name": "inc_int",
      "args": {
        "key": {
          "type": "string",
          "text": "<p>Key name.</p>\n"
        },
        "diff": {
          "type": "int",
          "text": "<p>Difference to add. Can be negative.</p>\n"
        }
      },
      "tags": "event_passthrough",
      "text": "<p>Increment key-value pair.</p>\n"
    },
    "event.log_debug": {
      "name": "log_debug",
      "args": {
        "message": {
          "type": "string",
          "text": "<p>Message to log.</p>\n"
        }
      },
      "tags": "event",
      "text": "<p>Emit debug message.</p>\n"
    },
    "event_passthrough.log_debug": {
      "name": "log_debug",
      "args": {
        "message": {
          "type": "string",
          "text": "<p>Message to log.</p>\n"
        }
      },
      "tags": "event_passthrough",
      "text": "<p>Emit debug message.</p>\n"
    },
    "event.log_info": {
      "name": "log_info",
      "args": {
        "message": {
          "type": "string",
          "text": "<p>Message to log.</p>\n"
        }
      },
      "tags": "event",
      "text": "<p>Emit info message.</p>\n"
    },
    "event_passthrough.log_info": {
      "name": "log_info",
      "args": {
        "message": {
          "type": "string",
          "text": "<p>Message to log.</p>\n"
        }
      },
      "tags": "event_passthrough",
      "text": "<p>Emit info message.</p>\n"
    },
    "event.log_warning": {
      "name": "log_warning",
      "args": {
        "message": {
          "type": "string",
          "text": "<p>Message to log.</p>\n"
        }
      },
      "tags": "event",
      "text": "<p>Emit warning message.</p>\n"
    },
    "event_passthrough.log_warning": {
      "name": "log_warning",
      "args": {
        "message": {
          "type": "string",
          "text": "<p>Message to log.</p>\n"
        }
      },
      "tags": "event_passthrough",
      "text": "<p>Emit warning message.</p>\n"
    },
    "event.log_error": {
      "name": "log_error",
      "args": {
        "message": {
          "type": "string",
          "text": "<p>Message to log.</p>\n"
        }
      },
      "tags": "event",
      "text": "<p>Emit error message.</p>\n"
    },
    "event_passthrough.log_error": {
      "name": "log_error",
      "args": {
        "message": {
          "type": "string",
          "text": "<p>Message to log.</p>\n"
        }
      },
      "tags": "event_passthrough",
      "text": "<p>Emit error message.</p>\n"
    },
    "event.passthrough_event": {
      "name": "passthrough_event",
      "tags": "event",
      "text": "<p>Returns an passthrough event.</p>\n<p>A log message <em>must be</em> logged or else a panic will occur.</p>\n"
    },
    "dict.lookup": {
      "name": "lookup",
      "args": {
        "key": {
          "type": "string",
          "text": "<p>Key to lookup.</p>\n"
        },
        "username": {
          "optional": true,
          "type": "string",
          "text": "<p>Username for private dict keys.</p>\n"
        }
      },
      "tags": "dict",
      "text": "<p>Lookup key from dict. If key is found, returns a table with values.</p>\n<p>If key is not found, returns <code>nil</code>.</p>\n"
    },
    "dict.iterate": {
      "name": "iterate",
      "args": {
        "path": {
          "type": "string",
          "text": "<p>Path prefix to iterate.</p>\n"
        },
        "flags": {
          "type": "int",
          "text": "<p>Iteration flags. Currently raw numbers must be used for these. See <code>enum dict_iterate_flags</code> in the C code.</p>\n"
        },
        "username": {
          "optional": true,
          "type": "string",
          "text": "<p>Username for private dict paths.</p>\n"
        }
      },
      "tags": "dict",
      "text": "<p>Returns an iteration step function and dict iter userdata. For example:</p>\n<div class=\"language-lua vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\">lua</span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">for</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> key, values </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">in</span><span style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> dict</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">:</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">iterate</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(key_prefix, </span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">0</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) </span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">do</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    dovecot.</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">i_debug</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'key='</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">..</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">key</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">..</span><span style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">', first value='</span><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">..</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">values[</span><span style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">1</span><span style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">])</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">end</span></span></code></pre>\n</div>"
    },
    "dict.transaction_begin": {
      "name": "transaction_begin",
      "args": {
        "username": {
          "optional": true,
          "type": "string",
          "text": "<p>Username for private dict keys.</p>\n"
        }
      },
      "tags": "dict",
      "text": "<p>Returns a new transaction object.</p>\n"
    },
    "dict.transaction.set": {
      "name": "set",
      "args": {
        "key": {
          "type": "string",
          "text": "<p>Key to set.</p>\n"
        },
        "value": {
          "type": "string",
          "text": "<p>Value to set.</p>\n"
        }
      },
      "tags": "dict.transaction",
      "text": "<p>Set key=value in the dict transaction.</p>\n"
    },
    "dict.transaction.unset": {
      "name": "unset",
      "args": {
        "key": {
          "type": "string",
          "text": "<p>Key to unset.</p>\n"
        }
      },
      "tags": "dict.transaction",
      "text": "<p>Unset key in the dict transaction.</p>\n"
    },
    "dict.transaction.set_timestamp": {
      "name": "set_timestamp",
      "args": {
        "seconds": {
          "hash_arg": true,
          "type": "int",
          "text": "<p>UNIX timestamp.</p>\n"
        },
        "nanoseconds": {
          "hash_arg": true,
          "type": "int",
          "text": "<p>Nanoseconds part of the timestamp.</p>\n"
        }
      },
      "tags": "dict.transaction",
      "text": "<p>Set timestamp to the dict transaction.</p>\n<p>This is currently used only with Cassandra.</p>\n"
    },
    "dict.transaction.commit": {
      "name": "commit",
      "tags": "dict.transaction",
      "text": "<p>Commit the transaction.</p>\n"
    },
    "dict.transaction.rollback": {
      "name": "rollback",
      "tags": "dict.transaction",
      "text": "<p>Rollback the transaction.</p>\n"
    },
    "dns_client.lookup": {
      "name": "lookup",
      "args": {
        "hostname": {
          "type": "string",
          "text": "<p>Hostname to lookup.</p>\n"
        },
        "event": {
          "optional": true,
          "type": "event",
          "text": "<p>Event to use for logging.</p>\n"
        }
      },
      "return": "\nOn successful DNS lookup, returns a table with IP addresses (which has at\nleast one IP).\n\nOn failure, returns nil, error string, net_gethosterror()\ncompatible error code (similar to e.g. Lua io.* calls).",
      "tags": "dns_client",
      "text": "<p>Lookup hostname asynchronously via dns-client process.</p>\n"
    },
    "mail_user.plugin_getenv": {
      "name": "plugin_getenv",
      "args": {
        "key": {
          "type": "string",
          "text": "<p>Setting name.</p>\n"
        }
      },
      "tags": "mail_user",
      "text": "<p>Returns key from user plugin settings or userdb environment.</p>\n"
    },
    "mail_user.var_expand": {
      "name": "var_expand",
      "args": {
        "template": {
          "type": "string",
          "text": "<p>Variable template string.</p>\n"
        }
      },
      "tags": "mail_user",
      "text": "<p>Expands mail user variables (see <code><a href=\"/main/core/settings/variables.html\">Settings variables</a></code>).</p>\n"
    },
    "mail_user.mailbox": {
      "name": "mailbox",
      "args": {
        "name": {
          "type": "string",
          "text": "<p>Mailbox name.</p>\n"
        },
        "flags": {
          "optional": true,
          "type": "int",
          "text": "<p>Flags, see <a href=\"#dovecot-storage\"><code>dovecot.storage</code></a>.</p>\n"
        }
      },
      "tags": "mail_user",
      "text": "<p>Allocates a mailbox.</p>\n"
    },
    "mail_user.metadata_get": {
      "name": "metadata_get",
      "args": {
        "key": {
          "type": "string",
          "text": "<p>Metadata key, must begin with <code>/private/</code> or <code>/shared/</code>.</p>\n"
        }
      },
      "tags": "mail_user",
      "text": "<p>Returns given metadata key for the user.</p>\n"
    },
    "mail_user.metadata_set": {
      "name": "metadata_set",
      "args": {
        "key": {
          "type": "string",
          "text": "<p>Metadata key, must begin with <code>/private/</code> or <code>/shared/</code>.</p>\n"
        },
        "value": {
          "type": "string",
          "text": "<p>Value to set, <code>nil</code> unsets value.</p>\n"
        }
      },
      "tags": "mail_user",
      "text": "<p>Sets user metadata key to value.</p>\n"
    },
    "mail_user.metadata_unset": {
      "name": "metadata_unset",
      "args": {
        "key": {
          "type": "string",
          "text": "<p>Metadata key, must begin with <code>/private/</code> or <code>/shared/</code>.</p>\n"
        }
      },
      "tags": "mail_user",
      "text": "<p>Unsets value, same as calling <code>mailbox.metadata_set()</code> with value = <code>nil</code>.</p>\n"
    },
    "mail_user.metadata_list": {
      "name": "metadata_list",
      "args": {
        "key": {
          "multi": true,
          "type": "string",
          "text": "<p>Metadata prefix, must begin with <code>/private/</code> or <code>/shared/</code>.</p>\n"
        }
      },
      "tags": "mail_user",
      "text": "<p>Lists all keys for the mailbox metadata under prefix.</p>\n"
    },
    "mailbox.open": {
      "name": "open",
      "tags": "mailbox",
      "text": "<p>Opens the mailbox.</p>\n"
    },
    "mailbox.close": {
      "name": "close",
      "tags": "mailbox",
      "text": "<p>Closes the mailbox.</p>\n"
    },
    "mailbox.free": {
      "name": "free",
      "tags": "mailbox",
      "text": "<p>Releases mailbox (must be done).</p>\n"
    },
    "mailbox.sync": {
      "name": "sync",
      "args": {
        "flags": {
          "optional": true,
          "type": "int",
          "text": "<p>Flags, see <a href=\"#dovecot-storage\"><code>dovecot.storage</code></a>.</p>\n"
        }
      },
      "tags": "mailbox",
      "text": "<p>Synchronizes the mailbox (should usually be done).</p>\n"
    },
    "mailbox.status": {
      "name": "status",
      "args": {
        "item": {
          "multi": true,
          "type": "string",
          "text": "<p>Item name.</p>\n"
        }
      },
      "return": "mailbox_status table",
      "tags": "mailbox",
      "text": "<p>Returns requested mailbox status items as table.</p>\n"
    },
    "mailbox.metadata_get": {
      "name": "metadata_get",
      "args": {
        "key": {
          "type": "string",
          "text": "<p>Metadata key, must begin with <code>/private/</code> or <code>/shared/</code>.</p>\n"
        }
      },
      "tags": "mailbox",
      "text": "<p>Returns given metadata key for the mailbox.</p>\n"
    },
    "mailbox.metadata_set": {
      "name": "metadata_set",
      "args": {
        "key": {
          "type": "string",
          "text": "<p>Metadata key, must begin with <code>/private/</code> or <code>/shared/</code>.</p>\n"
        },
        "value": {
          "type": "string",
          "text": "<p>Value to set, <code>nil</code> unsets value.</p>\n"
        }
      },
      "tags": "mailbox",
      "text": "<p>Sets mailbox metadata key to value.</p>\n"
    }
  },
  "variables": {
    "mail_user.home": {
      "name": "home",
      "tags": "mail_user",
      "text": "<p>Home directory (if available).</p>\n"
    },
    "mail_user.username": {
      "name": "username",
      "tags": "mail_user",
      "text": "<p>User's name.</p>\n"
    },
    "mail_user.uid": {
      "name": "uid",
      "tags": "mail_user",
      "text": "<p>System UID.</p>\n"
    },
    "mail_user.gid": {
      "name": "gid",
      "tags": "mail_user",
      "text": "<p>System GID.</p>\n"
    },
    "mail_user.service": {
      "name": "service",
      "tags": "mail_user",
      "text": "<p>Service type (IMAP/POP3/LMTP/LDA/...).</p>\n"
    },
    "mail_user.session_id": {
      "name": "session_id",
      "tags": "mail_user",
      "text": "<p>Current session ID.</p>\n"
    },
    "mail_user.session_create_time": {
      "name": "session_create_time",
      "tags": "mail_user",
      "text": "<p>When session was created.</p>\n"
    },
    "mail_user.nonexistent": {
      "name": "nonexistent",
      "tags": "mail_user",
      "text": "<p>Does user exist?</p>\n"
    },
    "mail_user.anonymous": {
      "name": "anonymous",
      "tags": "mail_user",
      "text": "<p>Is user anonymous?</p>\n"
    },
    "mail_user.autocreated": {
      "name": "autocreated",
      "tags": "mail_user",
      "text": "<p>Was user automatically created internally for some operation?</p>\n"
    },
    "mail_user.mail_debug": {
      "name": "mail_debug",
      "tags": "mail_user",
      "text": "<p>Is debugging turned on?</p>\n"
    },
    "mail_user.fuzzy_search": {
      "name": "fuzzy_search",
      "tags": "mail_user",
      "text": "<p>Does fuzzy search work for this user?</p>\n"
    },
    "mail_user.dsyncing": {
      "name": "dsyncing",
      "tags": "mail_user",
      "text": "<p>Is user being dsynced?</p>\n"
    },
    "mailbox.attribute": {
      "name": "attribute",
      "tags": "mailbox",
      "text": "<p>Full mailbox name.</p>\n"
    },
    "mailbox.name": {
      "name": "name",
      "tags": "mailbox",
      "text": "<p>Mailbox name.</p>\n"
    },
    "mailbox_status.mailbox": {
      "name": "mailbox",
      "tags": "mailbox_status",
      "text": "<p>Full name of mailbox.</p>\n"
    },
    "mailbox_status.messages": {
      "name": "messages",
      "tags": "mailbox_status",
      "text": "<p>Number of messages.</p>\n"
    },
    "mailbox_status.recent": {
      "name": "recent",
      "tags": "mailbox_status",
      "text": "<p>Number of \\Recent messages.</p>\n"
    },
    "mailbox_status.unseen": {
      "name": "unseen",
      "tags": "mailbox_status",
      "text": "<p>Number of \\Unseen messages.</p>\n"
    },
    "mailbox_status.uidvalidity": {
      "name": "uidvalidity",
      "tags": "mailbox_status",
      "text": "<p>Current UID validity.</p>\n"
    },
    "mailbox_status.uidnext": {
      "name": "uidnext",
      "tags": "mailbox_status",
      "text": "<p>Next UID.</p>\n"
    },
    "mailbox_status.first_unseen_seq": {
      "name": "first_unseen_seq",
      "tags": "mailbox_status",
      "text": "<p>First sequence number of unseen mail.</p>\n"
    },
    "mailbox_status.first_recent_uid": {
      "name": "first_recent_uid",
      "tags": "mailbox_status",
      "text": "<p>First UID of unseen mail.</p>\n"
    },
    "mailbox_status.highest_modseq": {
      "name": "highest_modseq",
      "tags": "mailbox_status",
      "text": "<p>Highest modification sequence.</p>\n"
    },
    "mailbox_status.highest_pvt_modseq": {
      "name": "highest_pvt_modseq",
      "tags": "mailbox_status",
      "text": "<p>Highest private modification sequence.</p>\n"
    },
    "mailbox_status.permanent_flags": {
      "name": "permanent_flags",
      "tags": "mailbox_status",
      "text": "<p>Supported permanent flags as a bitmask.</p>\n"
    },
    "mailbox_status.flags": {
      "name": "flags",
      "tags": "mailbox_status",
      "text": "<p>Supported flags as a bitmask.</p>\n"
    },
    "mailbox_status.permanent_keywords": {
      "name": "permanent_keywords",
      "tags": "mailbox_status",
      "text": "<p>Are permanent keywords supported?</p>\n"
    },
    "mailbox_status.allow_new_keywords": {
      "name": "allow_new_keywords",
      "tags": "mailbox_status",
      "text": "<p>Can new keywords be added?</p>\n"
    },
    "mailbox_status.nonpermanent_modseqs": {
      "name": "nonpermanent_modseqs",
      "tags": "mailbox_status",
      "text": "<p>Are modification sequences temporary?</p>\n"
    },
    "mailbox_status.no_modseq_tracking": {
      "name": "no_modseq_tracking",
      "tags": "mailbox_status",
      "text": "<p>Are modification sequences being tracked?</p>\n"
    },
    "mailbox_status.have_guids": {
      "name": "have_guids",
      "tags": "mailbox_status",
      "text": "<p>Do GUIDs exist?</p>\n"
    },
    "mailbox_status.have_save_guids": {
      "name": "have_save_guids",
      "tags": "mailbox_status",
      "text": "<p>Can GUIDs be saved?</p>\n"
    },
    "mailbox_status.have_only_guid128": {
      "name": "have_only_guid128",
      "tags": "mailbox_status",
      "text": "<p>Are GUIDs only 128 bits?</p>\n"
    },
    "mailbox_status.keywords": {
      "name": "keywords",
      "tags": "mailbox_status",
      "text": "<p>Table of current keywords.</p>\n"
    },
    "mail.mailbox": {
      "name": "mailbox",
      "tags": "mail",
      "text": "<p>Mailbox object.</p>\n"
    },
    "mail.seq": {
      "name": "seq",
      "tags": "mail",
      "text": "<p>Sequence number (can change).</p>\n"
    },
    "mail.uid": {
      "name": "uid",
      "tags": "mail",
      "text": "<p>UID (immutable).</p>\n"
    }
  }
}