Desenvolvimento e bases de dados
API do cPanel (UAPI): automatizar correio, FTP e redirecionamentos a partir de SSH, cURL ou PHP
A API do cPanel (UAPI) dá acesso a quase todas as funções da sua conta: criar contas de correio, redirecionamentos, cópias de segurança, consultar estatísticas… Com ela pode automatizar tarefas repetitivas ou ligar o cPanel às suas próprias ferramentas, por exemplo para criar o correio de um novo funcionário a partir da sua intranet.
Há duas formas de a usar:
- A partir da própria conta, por SSH, com o comando
uapi. Não pede nenhuma autenticação adicional. - A partir do exterior, com chamadas HTTPS à porta 2083 do cPanel autenticadas com um token.
Todas as chamadas seguem o mesmo esquema: um módulo (Email, Mime, Ftp…), uma função (list_pops, add_redirect…) e os seus parâmetros. Procure a função de que precisa na documentação da UAPI e adapte qualquer um dos exemplos deste artigo.
Usar a API por SSH com o comando uapi
Se a automatização for executada no próprio alojamento (um script, uma tarefa cron), entre por SSH e use o comando uapi. Atua sempre sobre a sua conta, com o seu utilizador.
Criar um redirecionamento
Para redirecionar dominio1.com para https://dominio2.com com um redirecionamento permanente (301), use a função Mime add_redirect:
uapi --output=jsonpretty \ Mime \ add_redirect \ domain='dominio1.com' \ redirect='https://dominio2.com/' \ redirect_www=0 \ type='permanent'
- domain: o domínio que quer redirecionar.
- redirect: o endereço de destino.
- type:
permanent(301) outemp(302). Se estiver a testar, usetemp: os navegadores guardam os 301 e depois custa ver as alterações. - redirect_www:
0redireciona com e sem www;1só com www;2só sem www.
A resposta indica se foi criado. Repare em status: 1 e em que errors esteja vazio.
Com
--output=escolhe o formato da resposta:json,jsonprettyouyaml(o valor predefinido).
Listar as contas de correio
A função Email list_pops devolve todas as contas de correio:
uapi Email list_pops
apiversion: 3 func: list_pops module: Email result: data: - email: cuenta1@dominio.com login: cuenta1@dominio.com suspended_incoming: 0 suspended_login: 0 errors: ~ messages: ~ status: 1 warnings: ~
Para ficar apenas com os endereços, um por linha:
uapi Email list_pops | grep 'email:' | awk -F ': ' '{print $2}'
cuenta1@dominio.com cuenta2@dominio.com cuenta3@dominio.com
Se preferir trabalhar com JSON, o jq fá-lo de forma mais fiável:
uapi --output=json Email list_pops | jq -r '.result.data[].email'
Para guardar a lista num ficheiro, acrescente > correos.txt no fim do comando. Se o ficheiro existir, é substituído.
O comando uapi funciona por SSH e em tarefas cron. A partir do PHP não: no nosso alojamento, as funções que executam comandos (exec, shell_exec, system…) estão desativadas por segurança. Se precisar da API a partir de um script PHP, mesmo que esteja no mesmo alojamento, chame-a por HTTPS com um token, como se explica a seguir.
Usar a API a partir de outro servidor com um token
Criar o token
No cPanel, entre em Security > Manage API Tokens e clique em Create. Dê-lhe um nome que identifique a integração e, se for para algo temporário, uma data de expiração.

O cPanel mostra-lhe o token uma única vez: copie-o e guarde-o num local seguro. Quem tiver o token pode fazer qualquer coisa na sua conta, por isso não o coloque em código público nem em ficheiros dentro de public_html. Se deixar de ser usado ou se achar que foi divulgado, revogue-o a partir do mesmo ecrã.
Fazer chamadas com cURL
curl -H 'Authorization: cpanel USUARIO:TOKEN' \ 'https://tudominio.com:2083/execute/Modulo/funcion?parametro=valor'
- USUARIO: o seu utilizador do cPanel.
- TOKEN: o token que criou.
- tudominio.com: qualquer domínio da sua conta que aponte para o alojamento e tenha o certificado SSL ativo. Também serve o nome do servidor.
O endereço segue sempre o formato execute/Modulo/funcion?parametro=valor. Se precisar de vários parâmetros, separe-os com &.
Por exemplo, para listar as contas de correio:
curl -H 'Authorization: cpanel USUARIO:TOKEN' \ 'https://tudominio.com:2083/execute/Email/list_pops'
A resposta chega em JSON. Verifique status (deve ser 1) e errors: uma resposta HTTP 200 pode trazer um erro da API.
Esvaziar a pasta de spam
A função SpamAssassin clear_spam_box esvazia a pasta de spam de todas as contas de correio do seu alojamento:
curl -H 'Authorization: cpanel USUARIO:TOKEN' \ 'https://tudominio.com:2083/execute/SpamAssassin/clear_spam_box'
Para testar chamadas sem escrever código, é prático um cliente REST como o Insomnia ou o Postman.
A mesma chamada em PHP com cURL:
<?php $username = 'USUARIO_CPANEL'; $token = 'TOKEN'; $domain = 'tudominio.com'; $query = 'https://' . $domain . ':2083/execute/SpamAssassin/clear_spam_box'; $curl = curl_init($query); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_TIMEOUT, 30); curl_setopt($curl, CURLOPT_HTTPHEADER, [ 'Authorization: cpanel ' . $username . ':' . $token, ]); $result = curl_exec($curl); if ($result === false) { error_log('Error en la llamada a cPanel: ' . curl_error($curl)); } curl_close($curl); $data = json_decode($result, true); echo ($data['status'] ?? 0) == 1 ? "Spam vaciado\n" : "Error: " . implode(', ', $data['errors'] ?? []) . "\n";
Não desative a verificação SSL (CURLOPT_SSL_VERIFYPEER): se der erro de certificado, use um domínio com SSL válido ou o nome do servidor.
Chamadas a partir do Laravel
Se usar o Laravel ou qualquer projeto com Composer, o cliente HTTP (ou o Guzzle) simplifica as chamadas. Guarde os dados no .env e leia-os a partir de config/services.php:
// config/services.php 'cpanel' => [ 'domain' => env('CPANEL_DOMAIN'), 'username' => env('CPANEL_USERNAME'), 'token' => env('CPANEL_TOKEN'), ],
Esvaziar o spam:
use Illuminate\Support\Facades\Http; $cpanel = config('services.cpanel'); $response = Http::withToken($cpanel['username'] . ':' . $cpanel['token'], 'cpanel') ->get('https://' . $cpanel['domain'] . ':2083/execute/SpamAssassin/clear_spam_box') ->throw(); $response->json('status'); // 1 se correu bem
Listar as contas FTP
Com Ftp list_ftp só muda o endereço:
$response = Http::withToken($cpanel['username'] . ':' . $cpanel['token'], 'cpanel') ->get('https://' . $cpanel['domain'] . ':2083/execute/Ftp/list_ftp') ->throw(); $cuentas = $response->json('data');
Criar uma conta de correio
A função Email add_pop cria uma caixa de correio. Precisa, pelo menos, do endereço e da palavra-passe; com quota define o tamanho em MB (0 é ilimitado). Envie os dados por POST para que a palavra-passe não fique no URL nem nos registos do servidor:
$response = Http::withToken($cpanel['username'] . ':' . $cpanel['token'], 'cpanel') ->asForm() ->post('https://' . $cpanel['domain'] . ':2083/execute/Email/add_pop', [ 'email' => 'nuevo@tudominio.com', 'password' => 'ContraseñaLarga-y-Segura', 'quota' => 2048, ]) ->throw(); if ($response->json('status') != 1) { throw new RuntimeException(implode(', ', $response->json('errors') ?? [])); }
Se a palavra-passe for fraca, o cPanel rejeita a conta e explica-o em errors.
Com estas peças pode encadear chamadas e montar fluxos completos: criação de contas de funcionários, limpeza periódica, relatórios… Se uma chamada que modifica dados for interrompida por tempo de espera esgotado, verifique o estado antes de a repetir: pode ter sido aplicada na mesma.
Também lhe pode ser útil
- Gerar relatórios CSV de correio e cron a partir do cPanel Gere relatórios CSV com PHP e UAPI para inventariar caixas de correio, reencaminhamentos, respostas...
- Configurar URLs amigáveis e regras de mod_rewrite Ative o mod_rewrite a partir do .htaccess e aplique as regras que cada aplicação fornece para reescr...
- Criar e executar tarefas cron (Cron Jobs) no cPanel Configure tarefas cron no cPanel, defina intervalos e comandos, gira avisos, execute URLs com cURL,...
- Eliminar emails antigos automaticamente no cPanel Apague todos os dias os emails com mais de X dias de uma conta, de todas as contas de um domínio ou...
Algo não bate certo ou mudou? Diga-nos e revemos.