Command line

Every Reqad install ships a reqad command that creates, changes and removes hosting accounts, databases and mailboxes from a shell or a script. It runs the same code as the panel, so an account created on the command line is indistinguishable from one created in the browser - same vhost, same PHP-FPM pool, same mail and DNS setup.

Run it as root. reqad account, reqad db and reqad email change the server and refuse to run as anyone else. reqad info and reqad --version work as any user.

Commands

CommandWhat it does
reqad infoThe OS, the web server and template in use, and every installed PHP version.
reqad accountList, show, create, edit and delete hosting accounts.
reqad dbList, create and delete MySQL/MariaDB databases, change a database user's password.
reqad emailList, create, edit and delete mailboxes.
reqad --versionThe installed Reqad version.

Every command has its own help:

reqad --help
reqad account --help
reqad db --help
reqad email --help

Not seeing account, db or email in reqad --help? Update the panel with dnf update reqad.

Hosting accounts

reqad account list
reqad account show   <user>
reqad account create <user> <domain>
                     [--www] [--email] [--dns] [--letsencrypt] [--quota=MB]
reqad account edit   <user>
                     [--password] [--php=VERSION[:fpm|mod_php]] [--email=on|off]
reqad account delete <user> [--yes]

Create an account for a domain, with mail, the www. alias, a DNS zone at your configured provider and a Let's Encrypt certificate:

reqad account create bob example.com --www --email --dns --letsencrypt
OptionWhat it does
--wwwServe www.<domain> as well as the bare domain.
--emailEnable mail for the domain: exim, DKIM keys and the MX, SPF and DMARC records.
--dnsCreate the DNS zone at the provider configured under DNS Settings.
--letsencryptRequest a certificate. Certbot runs in the background, so the command returns before the certificate is issued.
--quota=MBDisk quota in MB. Ignored when quotas are off on the server.

The account is created with the server's default PHP version. Switch it later - and on Apache also choose the handler:

reqad account edit bob --php=8.3
reqad account edit bob --php=8.2:mod_php
reqad account edit bob --email=off

reqad account list prints one row per account:

┌──────┬──────┬──────────────────┬───────┬────────┬─────────────────────┐
│  UID │ USER │ DOMAIN           │ EMAIL │ STATUS │ CREATED             │
├──────┼──────┼──────────────────┼───────┼────────┼─────────────────────┤
│ 1041 │ bob  │ example.com      │ yes   │ active │ 2026-09-14 11:20:07 │
│ 1042 │ shop │ shop.example.net │ no    │ active │ 2026-09-18 09:02:55 │
└──────┴──────┴──────────────────┴───────┴────────┴─────────────────────┘

reqad account show adds the account's PHP version and handler, disk usage and quota, and its mailboxes and databases.

Delete removes everything. reqad account delete bob removes the vhost, the PHP-FPM pool, mail, certificates, the DNS zone, the home directory and every database and database user prefixed bob_. From a terminal it asks you to type the account name back; in a script pass --yes.

Databases

reqad db list   [--account=USER]
reqad db create <account> <name> [--user=NAME]
reqad db delete <database> [--yes]
reqad db passwd <dbuser>

Database and user names are prefixed with the hosting account they belong to, exactly as in the panel. create takes the short name and adds the prefix; delete and passwd take the full name:

reqad db create bob wp --generate-password    # database bob_wp, user bob_wp
reqad db create bob shop --user=shopuser      # database bob_shop, user bob_shopuser
reqad db passwd bob_wp
reqad db delete bob_shop --yes
┌──────────┬─────────────┬─────────┬─────────────────────────────────────┐
│ DATABASE │ SYSTEM USER │ SIZE_MB │ USERS                               │
├──────────┼─────────────┼─────────┼─────────────────────────────────────┤
│ bob_wp   │ bob         │   12.41 │ bob_wp@localhost, bob_wp2@localhost │
│ bob_shop │ bob         │    0.72 │ bob_shop@localhost                  │
└──────────┴─────────────┴─────────┴─────────────────────────────────────┘

The account must exist - the prefix is what ties a database to a hosting account, and is why deleting the account also deletes its databases. Deleting a database also drops the users that were granted on it, unless a user still has access to another database. A dash in the SYSTEM USER column means there is no hosting user behind the prefix - which is how a database left behind by a removed account shows up.

Mailboxes

reqad email list   [--domain=DOMAIN]
reqad email create <address>
reqad email edit   <address> [--password] [--enable|--disable]
reqad email delete <address> [--yes]

The domain must already belong to an account with mail enabled (reqad account create … --email, or reqad account edit <user> --email=on).

reqad email create sales@example.com --generate-password
reqad email edit   sales@example.com --disable
reqad email list   --domain=example.com
┌───────────────────┬─────────────┬──────────┐
│ EMAIL             │ SYSTEM USER │ STATUS   │
├───────────────────┼─────────────┼──────────┤
│ bob@example.com   │ bob         │ active   │
│ sales@example.com │ bob         │ disabled │
└───────────────────┴─────────────┴──────────┘

--disable blocks IMAP, POP3 and SMTP login for that mailbox but keeps delivering mail to it, so nothing is lost while an account is suspended; --enable allows login again. delete removes the mailbox with its messages, filters and autoresponder.

Passwords

No command takes a password as an argument - an argument would land in your shell history and in the process list, where any user on the server can read it. There are three ways to supply one:

OptionWhat it does
nothingPrompts for the password twice, without echoing it. Needs a terminal.
--password-stdinReads it from the first line of standard input. For scripts and configuration management.
--generate-passwordGenerates a strong password and prints it once with the result.
# interactive: asks twice, echoes nothing
reqad account create bob example.com

# from a secret store, a file or a pipe
pass show hosting/bob | reqad account create bob example.com --password-stdin

# let Reqad pick one and print it
reqad email create sales@example.com --generate-password

Scripting

Add --json to any command to get a machine-readable result instead of a table or a message. Colors and box drawing are dropped automatically when the output is not a terminal, so piping is safe either way.

reqad account show bob --json
{
    "ok": true,
    "message": "",
    "warnings": [],
    "error": "",
    "data": {
        "uid": 1041,
        "user": "bob",
        "domain": "example.com",
        "status": "active",
        "created_at": "2026-09-14 11:20:07",
        "email": true,
        "disk_usage": 512,
        "disk_quota": 0,
        "php": "8.3",
        "php_handler": "fpm",
        "mailboxes": [
            "sales@example.com"
        ],
        "databases": [
            "bob_wp"
        ]
    }
}

warnings is where a change that went through but not cleanly reports itself - a DNS zone that could not be created, a certificate request that did not start, a DKIM key the provider refused. The operation succeeded; something around it did not.

Exit codeMeaning
0Success.
1The operation failed (the reason is on standard error, or in error with --json).
2Wrong usage: unknown command or option, missing argument, or a delete without a terminal and without --yes.

Anything that deletes asks for confirmation when it has a terminal, and refuses to run without one. -y or --yes skips the question - which is what you want in a script and what you do not want in a shell.

Tab completion

Reqad installs bash completion for the command, so there is nothing to add to your profile. Press Tab after reqad and it completes commands, options and real values from the server - account names, databases, database users, mailboxes, mail domains and the PHP versions actually installed:

reqad account edit <TAB>              bob   shop
reqad account edit bob --php=8.<TAB>  8.2   8.3   8.4   8.5
reqad db delete bob_<TAB>            bob_wp   bob_shop
reqad email edit sa<TAB>             sales@example.com

It works behind sudo reqad too. Completion never prompts for a password: the values that need root are only offered to a shell that already is root.

Same code as the panel. The command line and the web interface call one shared implementation, so both enforce the same rules - reserved usernames, password strength, the account limit from server-software.ini, and the cleanup done on delete. Actions taken on the command line are written to the panel's request log.

Need a hand? Register for early access or contact us.