{
    "fonte": "https://www.virtualizor.com/docs/enduser-api/",
    "conferido_em": "07/10/2026",
    "porta": 4083,
    "endpoints": [
        {
            "id": "cloud-resources",
            "titulo": "Ver a cota e o uso da conta Cloud",
            "act": "cloudres",
            "metodo": "GET",
            "cloud": true,
            "artigo": "conta-cloud",
            "grupo": "Conta Cloud",
            "resumo": "Mostra os recursos que a sua conta de revenda tem direito a usar e quanto já está em uso. É a primeira chamada a fazer antes de criar uma VPS: se a cota acabou, a criação falha.",
            "params": [],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=cloudres&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('cloudres');\nprint_r($r);",
                "python": "r = virt_api(\"cloudres\")\nprint(r)",
                "node": "const r = await virtApi('cloudres');\nconsole.log(r);"
            }
        },
        {
            "id": "cloud-billing",
            "titulo": "Ver saldo, faturas e consumo (cobrança do Virtualizor)",
            "act": "billing",
            "metodo": "GET",
            "cloud": true,
            "artigo": "conta-cloud",
            "grupo": "Conta Cloud",
            "resumo": "Devolve o saldo, as faturas, as transações e o consumo por hora da conta, quando a cobrança interna do próprio Virtualizor está ligada.",
            "params": [],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=billing&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('billing');\nprint_r($r);",
                "python": "r = virt_api(\"billing\")\nprint(r)",
                "node": "const r = await virtApi('billing');\nconsole.log(r);"
            }
        },
        {
            "id": "profile",
            "titulo": "Alterar nome e sobrenome do perfil",
            "act": "profile",
            "metodo": "POST",
            "cloud": false,
            "artigo": "conta-cloud",
            "grupo": "Conta Cloud",
            "resumo": "Atualiza o nome e o sobrenome da conta que está chamando a API.",
            "params": [
                {
                    "nome": "savedetails",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma a gravação. Sem ele, a chamada só lê o perfil."
                },
                {
                    "nome": "fname",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "Maria",
                    "desc": "Nome."
                },
                {
                    "nome": "lname",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "Souza",
                    "desc": "Sobrenome."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=profile&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'savedetails=1' \\\n  --data-urlencode 'fname=Maria' \\\n  --data-urlencode 'lname=Souza'",
                "php": "$r = virt_api('profile', [], [\n    'savedetails' => '1',\n    'fname' => 'Maria',\n    'lname' => 'Souza',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"profile\", post={\n    \"savedetails\": \"1\",\n    \"fname\": \"Maria\",\n    \"lname\": \"Souza\",\n})\nprint(r)",
                "node": "const r = await virtApi('profile', {}, {\n  savedetails: '1',\n  fname: 'Maria',\n  lname: 'Souza',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "user-settings",
            "titulo": "Alterar idioma, tema e fuso horário do painel",
            "act": "usersettings",
            "metodo": "POST",
            "cloud": false,
            "artigo": "conta-cloud",
            "grupo": "Conta Cloud",
            "resumo": "Muda as preferências do painel da conta: idioma, tema (skin) e fuso horário. Sem `editsettings`, a chamada devolve as opções disponíveis.",
            "params": [
                {
                    "nome": "editsettings",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma a gravação."
                },
                {
                    "nome": "language",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "english",
                    "desc": "Idioma do painel, pelo nome do pacote de idioma (por exemplo `english`). A lista sai em `languages` na resposta de leitura."
                },
                {
                    "nome": "skins",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "default",
                    "desc": "Tema do painel. `default` é o padrão; um tema próprio é o nome da pasta dele."
                },
                {
                    "nome": "timezone",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "-3",
                    "desc": "Diferença em horas para o GMT, de `-12` a `12`, com meia hora onde existe (`-3.5`, `5.5`). Para o horário de Brasília, `-3`."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=usersettings&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'editsettings=1' \\\n  --data-urlencode 'language=english' \\\n  --data-urlencode 'skins=default' \\\n  --data-urlencode 'timezone=-3'",
                "php": "$r = virt_api('usersettings', [], [\n    'editsettings' => '1',\n    'language' => 'english',\n    'skins' => 'default',\n    'timezone' => '-3',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"usersettings\", post={\n    \"editsettings\": \"1\",\n    \"language\": \"english\",\n    \"skins\": \"default\",\n    \"timezone\": \"-3\",\n})\nprint(r)",
                "node": "const r = await virtApi('usersettings', {}, {\n  editsettings: '1',\n  language: 'english',\n  skins: 'default',\n  timezone: '-3',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "account-password",
            "titulo": "Trocar a senha da conta",
            "act": "userpassword",
            "metodo": "POST",
            "cloud": false,
            "artigo": "conta-cloud",
            "grupo": "Conta Cloud",
            "resumo": "Troca a senha de acesso ao painel da conta que está chamando a API. Não mexe na senha de root de nenhuma VPS.",
            "params": [
                {
                    "nome": "changepass",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma a troca."
                },
                {
                    "nome": "newpass",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "Nova-Senha-Forte-2026",
                    "desc": "Senha nova."
                },
                {
                    "nome": "conf",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "Nova-Senha-Forte-2026",
                    "desc": "A mesma senha, para confirmar."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=userpassword&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'changepass=1' \\\n  --data-urlencode 'newpass=Nova-Senha-Forte-2026' \\\n  --data-urlencode 'conf=Nova-Senha-Forte-2026'",
                "php": "$r = virt_api('userpassword', [], [\n    'changepass' => '1',\n    'newpass' => 'Nova-Senha-Forte-2026',\n    'conf' => 'Nova-Senha-Forte-2026',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"userpassword\", post={\n    \"changepass\": \"1\",\n    \"newpass\": \"Nova-Senha-Forte-2026\",\n    \"conf\": \"Nova-Senha-Forte-2026\",\n})\nprint(r)",
                "node": "const r = await virtApi('userpassword', {}, {\n  changepass: '1',\n  newpass: 'Nova-Senha-Forte-2026',\n  conf: 'Nova-Senha-Forte-2026',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "system-alerts",
            "titulo": "Ver os alertas de uma VPS",
            "act": "system_alerts",
            "metodo": "GET",
            "cloud": false,
            "artigo": "conta-cloud",
            "grupo": "Conta Cloud",
            "resumo": "Lista os alertas registrados para uma VPS, com os valores de CPU, RAM e disco no momento de cada um.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=system_alerts&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('system_alerts', [\n    'svs' => '101',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"system_alerts\", get={\n    \"svs\": \"101\",\n})\nprint(r)",
                "node": "const r = await virtApi('system_alerts', {\n  svs: '101',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "list-user",
            "titulo": "Listar os clientes da conta",
            "act": "users",
            "metodo": "POST",
            "cloud": true,
            "artigo": "clientes",
            "grupo": "Clientes",
            "resumo": "Lista os usuários criados debaixo da sua conta Cloud, com a cota de cada um.",
            "params": [
                {
                    "nome": "subuserid",
                    "onde": "post",
                    "tipo": "lista de números",
                    "obrig": false,
                    "exemplo": "25,26",
                    "desc": "Filtra pelos ids informados, separados por vírgula. Sem ele, vêm todos."
                },
                {
                    "nome": "uid",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Id do usuário cujos subusuários serão listados. A tabela oficial o marca como obrigatório, mas nenhum exemplo oficial o envia."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=users&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'subuserid=25,26'",
                "php": "$r = virt_api('users', [], [\n    'subuserid' => '25,26',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"users\", post={\n    \"subuserid\": \"25,26\",\n})\nprint(r)",
                "node": "const r = await virtApi('users', {}, {\n  subuserid: '25,26',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "enduser-add-user",
            "titulo": "Criar um cliente",
            "act": "adduser",
            "metodo": "POST",
            "cloud": true,
            "artigo": "clientes",
            "grupo": "Clientes",
            "resumo": "Cria um usuário do painel debaixo da sua conta. É o cliente que depois recebe VPS e acessa o painel com a sua marca.",
            "params": [
                {
                    "nome": "adduser",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma a criação."
                },
                {
                    "nome": "user_email",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "cliente@exemplo.com.br",
                    "desc": "E-mail do cliente; é o login dele no painel."
                },
                {
                    "nome": "user_password",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "Senha-Do-Cliente-2026",
                    "desc": "Senha de acesso do cliente ao painel."
                },
                {
                    "nome": "pid",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Id de um usuário existente, para criar o novo debaixo dele."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=adduser&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'adduser=1' \\\n  --data-urlencode 'user_email=cliente@exemplo.com.br' \\\n  --data-urlencode 'user_password=Senha-Do-Cliente-2026'",
                "php": "$r = virt_api('adduser', [], [\n    'adduser' => '1',\n    'user_email' => 'cliente@exemplo.com.br',\n    'user_password' => 'Senha-Do-Cliente-2026',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"adduser\", post={\n    \"adduser\": \"1\",\n    \"user_email\": \"cliente@exemplo.com.br\",\n    \"user_password\": \"Senha-Do-Cliente-2026\",\n})\nprint(r)",
                "node": "const r = await virtApi('adduser', {}, {\n  adduser: '1',\n  user_email: 'cliente@exemplo.com.br',\n  user_password: 'Senha-Do-Cliente-2026',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "enduser-edit-user",
            "titulo": "Alterar e-mail ou senha de um cliente",
            "act": "edituser",
            "metodo": "POST",
            "cloud": true,
            "artigo": "clientes",
            "grupo": "Clientes",
            "resumo": "Muda o e-mail de login e a senha de um cliente da sua conta.",
            "params": [
                {
                    "nome": "uid",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "25",
                    "desc": "Id do cliente."
                },
                {
                    "nome": "edituser",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma a alteração."
                },
                {
                    "nome": "user_email",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "cliente@exemplo.com.br",
                    "desc": "E-mail de login."
                },
                {
                    "nome": "user_password",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "Outra-Senha-2026",
                    "desc": "Senha nova."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=edituser&uid=25&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'edituser=1' \\\n  --data-urlencode 'user_email=cliente@exemplo.com.br' \\\n  --data-urlencode 'user_password=Outra-Senha-2026'",
                "php": "$r = virt_api('edituser', [\n    'uid' => '25',\n], [\n    'edituser' => '1',\n    'user_email' => 'cliente@exemplo.com.br',\n    'user_password' => 'Outra-Senha-2026',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"edituser\", get={\n    \"uid\": \"25\",\n}, post={\n    \"edituser\": \"1\",\n    \"user_email\": \"cliente@exemplo.com.br\",\n    \"user_password\": \"Outra-Senha-2026\",\n})\nprint(r)",
                "node": "const r = await virtApi('edituser', {\n  uid: '25',\n}, {\n  edituser: '1',\n  user_email: 'cliente@exemplo.com.br',\n  user_password: 'Outra-Senha-2026',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "enduser-delete-user",
            "titulo": "Apagar um cliente",
            "act": "users",
            "metodo": "GET",
            "cloud": true,
            "artigo": "clientes",
            "grupo": "Clientes",
            "resumo": "Remove um cliente da sua conta.",
            "params": [
                {
                    "nome": "delete",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "25",
                    "desc": "Id do cliente a apagar."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=users&delete=25&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('users', [\n    'delete' => '25',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"users\", get={\n    \"delete\": \"25\",\n})\nprint(r)",
                "node": "const r = await virtApi('users', {\n  delete: '25',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "single-sign-on-sso",
            "titulo": "Gerar link de acesso sem senha (SSO)",
            "act": "sso",
            "metodo": "GET",
            "cloud": false,
            "artigo": "clientes",
            "grupo": "Clientes",
            "resumo": "Gera um link que abre o painel de uma VPS já autenticado. Serve para pôr um botão \"Gerenciar servidor\" na sua área do cliente, sem o cliente digitar senha.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=sso&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('sso', [\n    'svs' => '101',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"sso\", get={\n    \"svs\": \"101\",\n})\nprint(r)",
                "node": "const r = await virtApi('sso', {\n  svs: '101',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "list-vps",
            "titulo": "Listar as VPS",
            "act": "listvs",
            "metodo": "GET",
            "cloud": false,
            "artigo": "vps",
            "grupo": "VPS",
            "resumo": "Lista as VPS que a conta enxerga, com os recursos e o estado de cada uma.",
            "params": [],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=listvs&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('listvs');\nprint_r($r);",
                "python": "r = virt_api(\"listvs\")\nprint(r)",
                "node": "const r = await virtApi('listvs');\nconsole.log(r);"
            }
        },
        {
            "id": "vps-info",
            "titulo": "Ver os detalhes de uma VPS",
            "act": "vpsmanage",
            "metodo": "GET",
            "cloud": false,
            "artigo": "vps",
            "grupo": "VPS",
            "resumo": "Devolve o estado e os detalhes de uma VPS: se está ligada, há quanto tempo, IPs, sistema e consumo de banda.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=vpsmanage&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('vpsmanage', [\n    'svs' => '101',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"vpsmanage\", get={\n    \"svs\": \"101\",\n})\nprint(r)",
                "node": "const r = await virtApi('vpsmanage', {\n  svs: '101',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "create-vm",
            "titulo": "Criar uma VPS",
            "act": "create",
            "metodo": "POST",
            "cloud": true,
            "artigo": "vps",
            "grupo": "VPS",
            "resumo": "Cria uma VPS para um cliente, descontando os recursos da cota da sua conta Cloud. Sem `addvs`, nada é criado: a resposta traz os dados da tela de criação, como a cota livre e a lista de sistemas.",
            "params": [
                {
                    "nome": "addvs",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma a criação."
                },
                {
                    "nome": "virt",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "kvm",
                    "desc": "Virtualização. As permitidas para a sua conta vêm em `allowed_virts` na cota."
                },
                {
                    "nome": "uid",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "25",
                    "desc": "Id do cliente que vai ser dono da VPS."
                },
                {
                    "nome": "hostname",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "vps1.exemplo.com.br",
                    "desc": "Hostname da VPS."
                },
                {
                    "nome": "rootpass",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "Senha-Root-Forte-2026",
                    "desc": "Senha do root."
                },
                {
                    "nome": "osid",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "ID_DO_SISTEMA",
                    "desc": "Id do sistema operacional. A lista com os ids vem em `ostemplates` na resposta desta mesma ação."
                },
                {
                    "nome": "space",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "20",
                    "desc": "Disco, na mesma unidade da cota (`resources.space`)."
                },
                {
                    "nome": "ram",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "2048",
                    "desc": "RAM, em MB."
                },
                {
                    "nome": "cores",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "2",
                    "desc": "Núcleos de CPU."
                },
                {
                    "nome": "ips",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Quantos IPv4 a VPS recebe."
                },
                {
                    "nome": "bandwidth",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "0",
                    "desc": "Banda mensal; `0` é ilimitada (segundo a documentação da API de administrador)."
                },
                {
                    "nome": "swapram",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Swap, em MB. Só KVM e Xen."
                },
                {
                    "nome": "sgid",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Grupo de servidores onde a VPS será criada."
                },
                {
                    "nome": "ipv6",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Quantos IPv6 a VPS recebe."
                },
                {
                    "nome": "ipv6_subnet",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Quantas sub-redes IPv6 a VPS recebe."
                },
                {
                    "nome": "ips_int",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Quantos IPs internos a VPS recebe."
                },
                {
                    "nome": "cpu",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Peso de CPU da VPS em relação às outras."
                },
                {
                    "nome": "cpu_percent",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Fatia de CPU, em porcentagem."
                },
                {
                    "nome": "vnc",
                    "onde": "post",
                    "tipo": "0 ou 1",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "`1` liga o console VNC."
                },
                {
                    "nome": "vncpass",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Senha do VNC."
                },
                {
                    "nome": "band_suspend",
                    "onde": "post",
                    "tipo": "0 ou 1",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "`1` suspende a VPS quando ela passa da banda."
                },
                {
                    "nome": "osreinstall_limit",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Quantas reinstalações de sistema o cliente pode fazer."
                },
                {
                    "nome": "iso",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Criar a partir de uma ISO do servidor, em vez de um sistema pronto."
                },
                {
                    "nome": "boot",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Ordem de boot."
                },
                {
                    "nome": "bios",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "`seabios` (padrão) ou `uefi`. Só KVM, e só vale no boot por ISO."
                },
                {
                    "nome": "nic",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Tipo da placa de rede virtual."
                },
                {
                    "nome": "mg",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Grupo de mídia, para filtrar os sistemas oferecidos."
                },
                {
                    "nome": "ssh_options",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Como pôr chave SSH na VPS: `add_ssh_keys` (manda a chave em `sshkey`), `generate_keys` (manda o par gerado em `sshkey` e `private_key`) ou `use_ssh_keys` (usa chaves já guardadas, em `existing_key[]`)."
                },
                {
                    "nome": "sshkey",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Chave pública SSH."
                },
                {
                    "nome": "private_key",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Chave privada; obrigatória com `generate_keys`."
                },
                {
                    "nome": "existing_key[]",
                    "onde": "post",
                    "tipo": "lista de textos",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Chaves públicas já guardadas na conta; obrigatória com `use_ssh_keys`. Repita o campo para cada chave."
                },
                {
                    "nome": "shadow",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Memória shadow. Só Xen HVM."
                },
                {
                    "nome": "burst",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "RAM de burst. Só OpenVZ."
                },
                {
                    "nome": "tuntap",
                    "onde": "post",
                    "tipo": "0 ou 1",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Liga TUN/TAP. Só OpenVZ."
                },
                {
                    "nome": "io",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Prioridade de disco. Só OpenVZ."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=create&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'addvs=1' \\\n  --data-urlencode 'virt=kvm' \\\n  --data-urlencode 'uid=25' \\\n  --data-urlencode 'hostname=vps1.exemplo.com.br' \\\n  --data-urlencode 'rootpass=Senha-Root-Forte-2026' \\\n  --data-urlencode 'osid=ID_DO_SISTEMA' \\\n  --data-urlencode 'space=20' \\\n  --data-urlencode 'ram=2048' \\\n  --data-urlencode 'cores=2' \\\n  --data-urlencode 'ips=1' \\\n  --data-urlencode 'bandwidth=0'",
                "php": "$r = virt_api('create', [], [\n    'addvs' => '1',\n    'virt' => 'kvm',\n    'uid' => '25',\n    'hostname' => 'vps1.exemplo.com.br',\n    'rootpass' => 'Senha-Root-Forte-2026',\n    'osid' => 'ID_DO_SISTEMA',\n    'space' => '20',\n    'ram' => '2048',\n    'cores' => '2',\n    'ips' => '1',\n    'bandwidth' => '0',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"create\", post={\n    \"addvs\": \"1\",\n    \"virt\": \"kvm\",\n    \"uid\": \"25\",\n    \"hostname\": \"vps1.exemplo.com.br\",\n    \"rootpass\": \"Senha-Root-Forte-2026\",\n    \"osid\": \"ID_DO_SISTEMA\",\n    \"space\": \"20\",\n    \"ram\": \"2048\",\n    \"cores\": \"2\",\n    \"ips\": \"1\",\n    \"bandwidth\": \"0\",\n})\nprint(r)",
                "node": "const r = await virtApi('create', {}, {\n  addvs: '1',\n  virt: 'kvm',\n  uid: '25',\n  hostname: 'vps1.exemplo.com.br',\n  rootpass: 'Senha-Root-Forte-2026',\n  osid: 'ID_DO_SISTEMA',\n  space: '20',\n  ram: '2048',\n  cores: '2',\n  ips: '1',\n  bandwidth: '0',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "edit-vm",
            "titulo": "Mudar os recursos de uma VPS",
            "act": "editvm",
            "metodo": "POST",
            "cloud": true,
            "artigo": "vps",
            "grupo": "VPS",
            "resumo": "Altera hostname, disco, RAM, núcleos, banda, IPs e VNC de uma VPS da conta. A diferença entra ou sai da cota.",
            "params": [
                {
                    "nome": "vid",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "editvm",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma a alteração."
                },
                {
                    "nome": "uid",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "25",
                    "desc": "Id do cliente dono da VPS."
                },
                {
                    "nome": "hostname",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "vps1.exemplo.com.br",
                    "desc": "Hostname."
                },
                {
                    "nome": "space",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "40",
                    "desc": "Disco, na mesma unidade da cota."
                },
                {
                    "nome": "ram",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "4096",
                    "desc": "RAM, em MB."
                },
                {
                    "nome": "cores",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "4",
                    "desc": "Núcleos de CPU."
                },
                {
                    "nome": "bandwidth",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "0",
                    "desc": "Banda mensal; `0` é ilimitada."
                },
                {
                    "nome": "swapram",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "1024",
                    "desc": "Swap, em MB."
                },
                {
                    "nome": "vnc",
                    "onde": "post",
                    "tipo": "0 ou 1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "`1` mantém o console VNC ligado."
                },
                {
                    "nome": "ips",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Quantos IPv4."
                },
                {
                    "nome": "rootpass",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Senha nova do root, se quiser trocar junto."
                },
                {
                    "nome": "ips_int",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Quantos IPs internos."
                },
                {
                    "nome": "ipv6",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Quantos IPv6."
                },
                {
                    "nome": "ipv6_subnet",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Quantas sub-redes IPv6."
                },
                {
                    "nome": "burst",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "RAM de burst. Só OpenVZ."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=editvm&vid=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'editvm=1' \\\n  --data-urlencode 'uid=25' \\\n  --data-urlencode 'hostname=vps1.exemplo.com.br' \\\n  --data-urlencode 'space=40' \\\n  --data-urlencode 'ram=4096' \\\n  --data-urlencode 'cores=4' \\\n  --data-urlencode 'bandwidth=0' \\\n  --data-urlencode 'swapram=1024' \\\n  --data-urlencode 'vnc=1' \\\n  --data-urlencode 'ips=1'",
                "php": "$r = virt_api('editvm', [\n    'vid' => '101',\n], [\n    'editvm' => '1',\n    'uid' => '25',\n    'hostname' => 'vps1.exemplo.com.br',\n    'space' => '40',\n    'ram' => '4096',\n    'cores' => '4',\n    'bandwidth' => '0',\n    'swapram' => '1024',\n    'vnc' => '1',\n    'ips' => '1',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"editvm\", get={\n    \"vid\": \"101\",\n}, post={\n    \"editvm\": \"1\",\n    \"uid\": \"25\",\n    \"hostname\": \"vps1.exemplo.com.br\",\n    \"space\": \"40\",\n    \"ram\": \"4096\",\n    \"cores\": \"4\",\n    \"bandwidth\": \"0\",\n    \"swapram\": \"1024\",\n    \"vnc\": \"1\",\n    \"ips\": \"1\",\n})\nprint(r)",
                "node": "const r = await virtApi('editvm', {\n  vid: '101',\n}, {\n  editvm: '1',\n  uid: '25',\n  hostname: 'vps1.exemplo.com.br',\n  space: '40',\n  ram: '4096',\n  cores: '4',\n  bandwidth: '0',\n  swapram: '1024',\n  vnc: '1',\n  ips: '1',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "delete-vm",
            "titulo": "Apagar uma VPS",
            "act": "listvs",
            "metodo": "GET",
            "cloud": true,
            "artigo": "vps",
            "grupo": "VPS",
            "resumo": "Apaga uma VPS de vez, com o disco, e devolve os recursos dela à cota.",
            "params": [
                {
                    "nome": "delvs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS a apagar."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=listvs&delvs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('listvs', [\n    'delvs' => '101',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"listvs\", get={\n    \"delvs\": \"101\",\n})\nprint(r)",
                "node": "const r = await virtApi('listvs', {\n  delvs: '101',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "vertical-scaling-data",
            "titulo": "Configurar o escalonamento vertical",
            "act": "vpsmanage",
            "metodo": "POST",
            "cloud": false,
            "artigo": "vps",
            "grupo": "VPS",
            "resumo": "Define de quanto em quanto a RAM e os núcleos da VPS sobem ou descem quando o escalonamento vertical age. Disponível a partir do Virtualizor 3.1.3.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "save_ver_data",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma a gravação."
                },
                {
                    "nome": "vs_ver_ram_inc_by",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "2",
                    "desc": "Passo da RAM, em GB."
                },
                {
                    "nome": "vs_ver_cpu_inc_by",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Passo da CPU, em núcleos."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=vpsmanage&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'save_ver_data=1' \\\n  --data-urlencode 'vs_ver_ram_inc_by=2' \\\n  --data-urlencode 'vs_ver_cpu_inc_by=1'",
                "php": "$r = virt_api('vpsmanage', [\n    'svs' => '101',\n], [\n    'save_ver_data' => '1',\n    'vs_ver_ram_inc_by' => '2',\n    'vs_ver_cpu_inc_by' => '1',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"vpsmanage\", get={\n    \"svs\": \"101\",\n}, post={\n    \"save_ver_data\": \"1\",\n    \"vs_ver_ram_inc_by\": \"2\",\n    \"vs_ver_cpu_inc_by\": \"1\",\n})\nprint(r)",
                "node": "const r = await virtApi('vpsmanage', {\n  svs: '101',\n}, {\n  save_ver_data: '1',\n  vs_ver_ram_inc_by: '2',\n  vs_ver_cpu_inc_by: '1',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "start-vm",
            "titulo": "Ligar uma VPS",
            "act": "start",
            "metodo": "GET",
            "cloud": false,
            "artigo": "energia",
            "grupo": "Energia e suspensão",
            "resumo": "Liga uma VPS que está desligada.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "do",
                    "onde": "get",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma a operação. Sem ele, nada acontece."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=start&svs=101&do=1&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('start', [\n    'svs' => '101',\n    'do' => '1',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"start\", get={\n    \"svs\": \"101\",\n    \"do\": \"1\",\n})\nprint(r)",
                "node": "const r = await virtApi('start', {\n  svs: '101',\n  do: '1',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "stop-vm",
            "titulo": "Desligar uma VPS",
            "act": "stop",
            "metodo": "GET",
            "cloud": false,
            "artigo": "energia",
            "grupo": "Energia e suspensão",
            "resumo": "Pede o desligamento da VPS.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "do",
                    "onde": "get",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma a operação. Sem ele, nada acontece."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=stop&svs=101&do=1&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('stop', [\n    'svs' => '101',\n    'do' => '1',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"stop\", get={\n    \"svs\": \"101\",\n    \"do\": \"1\",\n})\nprint(r)",
                "node": "const r = await virtApi('stop', {\n  svs: '101',\n  do: '1',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "restart-vm",
            "titulo": "Reiniciar uma VPS",
            "act": "restart",
            "metodo": "GET",
            "cloud": false,
            "artigo": "energia",
            "grupo": "Energia e suspensão",
            "resumo": "Reinicia a VPS.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "do",
                    "onde": "get",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma a operação. Sem ele, nada acontece."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=restart&svs=101&do=1&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('restart', [\n    'svs' => '101',\n    'do' => '1',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"restart\", get={\n    \"svs\": \"101\",\n    \"do\": \"1\",\n})\nprint(r)",
                "node": "const r = await virtApi('restart', {\n  svs: '101',\n  do: '1',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "poweroff-vm",
            "titulo": "Forçar o desligamento de uma VPS",
            "act": "poweroff",
            "metodo": "GET",
            "cloud": false,
            "artigo": "energia",
            "grupo": "Energia e suspensão",
            "resumo": "Corta a energia da VPS, sem esperar o sistema fechar: o equivalente a tirar da tomada. Para quando o desligamento normal não responde.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "do",
                    "onde": "get",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma a operação. Sem ele, nada acontece."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=poweroff&svs=101&do=1&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('poweroff', [\n    'svs' => '101',\n    'do' => '1',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"poweroff\", get={\n    \"svs\": \"101\",\n    \"do\": \"1\",\n})\nprint(r)",
                "node": "const r = await virtApi('poweroff', {\n  svs: '101',\n  do: '1',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "suspend-vm",
            "titulo": "Suspender uma VPS",
            "act": "listvs",
            "metodo": "GET",
            "cloud": false,
            "artigo": "energia",
            "grupo": "Energia e suspensão",
            "resumo": "Suspende a VPS: ela para e o cliente não consegue ligá-la. É o que se usa em inadimplência.",
            "params": [
                {
                    "nome": "suspend",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS a suspender."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=listvs&suspend=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('listvs', [\n    'suspend' => '101',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"listvs\", get={\n    \"suspend\": \"101\",\n})\nprint(r)",
                "node": "const r = await virtApi('listvs', {\n  suspend: '101',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "unsuspend-vm",
            "titulo": "Reativar uma VPS suspensa",
            "act": "listvs",
            "metodo": "GET",
            "cloud": false,
            "artigo": "energia",
            "grupo": "Energia e suspensão",
            "resumo": "Tira a suspensão de uma VPS.",
            "params": [
                {
                    "nome": "unsuspend",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS a reativar."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=listvs&unsuspend=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('listvs', [\n    'unsuspend' => '101',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"listvs\", get={\n    \"unsuspend\": \"101\",\n})\nprint(r)",
                "node": "const r = await virtApi('listvs', {\n  unsuspend: '101',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "enduser-network-suspend",
            "titulo": "Suspender só a rede de uma VPS",
            "act": "listvs",
            "metodo": "GET",
            "cloud": false,
            "artigo": "energia",
            "grupo": "Energia e suspensão",
            "resumo": "Corta a rede da VPS sem desligá-la. Útil para conter um servidor que está atacando ou mandando spam, sem desligá-lo.",
            "params": [
                {
                    "nome": "suspend_net",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=listvs&suspend_net=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('listvs', [\n    'suspend_net' => '101',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"listvs\", get={\n    \"suspend_net\": \"101\",\n})\nprint(r)",
                "node": "const r = await virtApi('listvs', {\n  suspend_net: '101',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "network-unsuspend",
            "titulo": "Reativar a rede de uma VPS",
            "act": "listvs",
            "metodo": "GET",
            "cloud": false,
            "artigo": "energia",
            "grupo": "Energia e suspensão",
            "resumo": "Devolve a rede a uma VPS que teve a rede suspensa.",
            "params": [
                {
                    "nome": "unsuspend_net",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=listvs&unsuspend_net=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('listvs', [\n    'unsuspend_net' => '101',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"listvs\", get={\n    \"unsuspend_net\": \"101\",\n})\nprint(r)",
                "node": "const r = await virtApi('listvs', {\n  unsuspend_net: '101',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "start-self-shutdown",
            "titulo": "Agendar ligar, desligar ou reiniciar",
            "act": "self_shutdown",
            "metodo": "POST",
            "cloud": false,
            "artigo": "energia",
            "grupo": "Energia e suspensão",
            "resumo": "Agenda uma ação de energia para data e hora marcadas: ligar, desligar, reiniciar ou forçar o desligamento.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "selfshutdown",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma o agendamento."
                },
                {
                    "nome": "shutdown_action",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "2",
                    "desc": "O que fazer: `0` ligar, `1` desligar, `2` reiniciar, `3` forçar o desligamento."
                },
                {
                    "nome": "shutdown_date",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "12/31/2026",
                    "desc": "Data no formato americano: mês/dia/ano."
                },
                {
                    "nome": "shutdown_hrs",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "03",
                    "desc": "Hora, de 00 a 23."
                },
                {
                    "nome": "shutdown_min",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "30",
                    "desc": "Minuto, de 00 a 59."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=self_shutdown&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'selfshutdown=1' \\\n  --data-urlencode 'shutdown_action=2' \\\n  --data-urlencode 'shutdown_date=12/31/2026' \\\n  --data-urlencode 'shutdown_hrs=03' \\\n  --data-urlencode 'shutdown_min=30'",
                "php": "$r = virt_api('self_shutdown', [\n    'svs' => '101',\n], [\n    'selfshutdown' => '1',\n    'shutdown_action' => '2',\n    'shutdown_date' => '12/31/2026',\n    'shutdown_hrs' => '03',\n    'shutdown_min' => '30',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"self_shutdown\", get={\n    \"svs\": \"101\",\n}, post={\n    \"selfshutdown\": \"1\",\n    \"shutdown_action\": \"2\",\n    \"shutdown_date\": \"12/31/2026\",\n    \"shutdown_hrs\": \"03\",\n    \"shutdown_min\": \"30\",\n})\nprint(r)",
                "node": "const r = await virtApi('self_shutdown', {\n  svs: '101',\n}, {\n  selfshutdown: '1',\n  shutdown_action: '2',\n  shutdown_date: '12/31/2026',\n  shutdown_hrs: '03',\n  shutdown_min: '30',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "delete-self-shutdown",
            "titulo": "Cancelar um agendamento",
            "act": "self_shutdown",
            "metodo": "POST",
            "cloud": false,
            "artigo": "energia",
            "grupo": "Energia e suspensão",
            "resumo": "Apaga uma ação de energia agendada.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "selfshutdown",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma a operação."
                },
                {
                    "nome": "delete_timer",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "9",
                    "desc": "Id do agendamento, que vem em `self_shutdown` na resposta do agendamento."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=self_shutdown&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'selfshutdown=1' \\\n  --data-urlencode 'delete_timer=9'",
                "php": "$r = virt_api('self_shutdown', [\n    'svs' => '101',\n], [\n    'selfshutdown' => '1',\n    'delete_timer' => '9',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"self_shutdown\", get={\n    \"svs\": \"101\",\n}, post={\n    \"selfshutdown\": \"1\",\n    \"delete_timer\": \"9\",\n})\nprint(r)",
                "node": "const r = await virtApi('self_shutdown', {\n  svs: '101',\n}, {\n  selfshutdown: '1',\n  delete_timer: '9',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "change-hostname",
            "titulo": "Trocar o hostname",
            "act": "hostname",
            "metodo": "POST",
            "cloud": false,
            "artigo": "configuracao",
            "grupo": "Configuração da VPS",
            "resumo": "Muda o hostname da VPS.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "changehost",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma a troca."
                },
                {
                    "nome": "newhost",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "vps1.exemplo.com.br",
                    "desc": "Hostname novo."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=hostname&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'changehost=1' \\\n  --data-urlencode 'newhost=vps1.exemplo.com.br'",
                "php": "$r = virt_api('hostname', [\n    'svs' => '101',\n], [\n    'changehost' => '1',\n    'newhost' => 'vps1.exemplo.com.br',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"hostname\", get={\n    \"svs\": \"101\",\n}, post={\n    \"changehost\": \"1\",\n    \"newhost\": \"vps1.exemplo.com.br\",\n})\nprint(r)",
                "node": "const r = await virtApi('hostname', {\n  svs: '101',\n}, {\n  changehost: '1',\n  newhost: 'vps1.exemplo.com.br',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "change-password",
            "titulo": "Trocar a senha do root",
            "act": "changepassword",
            "metodo": "POST",
            "cloud": false,
            "artigo": "configuracao",
            "grupo": "Configuração da VPS",
            "resumo": "Troca a senha do root dentro da VPS.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "changepass",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma a troca."
                },
                {
                    "nome": "newpass",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "Nova-Senha-Root-2026",
                    "desc": "Senha nova."
                },
                {
                    "nome": "conf",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "Nova-Senha-Root-2026",
                    "desc": "A mesma senha, para confirmar."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=changepassword&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'changepass=1' \\\n  --data-urlencode 'newpass=Nova-Senha-Root-2026' \\\n  --data-urlencode 'conf=Nova-Senha-Root-2026'",
                "php": "$r = virt_api('changepassword', [\n    'svs' => '101',\n], [\n    'changepass' => '1',\n    'newpass' => 'Nova-Senha-Root-2026',\n    'conf' => 'Nova-Senha-Root-2026',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"changepassword\", get={\n    \"svs\": \"101\",\n}, post={\n    \"changepass\": \"1\",\n    \"newpass\": \"Nova-Senha-Root-2026\",\n    \"conf\": \"Nova-Senha-Root-2026\",\n})\nprint(r)",
                "node": "const r = await virtApi('changepassword', {\n  svs: '101',\n}, {\n  changepass: '1',\n  newpass: 'Nova-Senha-Root-2026',\n  conf: 'Nova-Senha-Root-2026',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "vps-configuration",
            "titulo": "Alterar ordem de boot, placa de rede e opções da VM",
            "act": "hvmsettings",
            "metodo": "POST",
            "cloud": false,
            "artigo": "configuracao",
            "grupo": "Configuração da VPS",
            "resumo": "Ajusta a máquina virtual: ordem de boot, ISO montada, modelo da placa de rede, teclado do VNC e opções como ACPI e aceleração de vídeo. Sem `hvmsettings`, a chamada devolve as opções aceitas.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "hvmsettings",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma a gravação."
                },
                {
                    "nome": "boot",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "cd",
                    "desc": "Ordem de boot em letras: `c` é o disco e `d` a ISO (CD-ROM). `cd` dá boot pelo disco primeiro; `dc`, pela ISO."
                },
                {
                    "nome": "nic_type",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "e1000",
                    "desc": "Modelo da placa de rede. Os aceitos vêm em `nictypes` na resposta."
                },
                {
                    "nome": "hvm_vnc_keymap",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": false,
                    "exemplo": "pt-br",
                    "desc": "Layout de teclado do console VNC, como `pt-br` ou `en-us`. Os aceitos vêm em `vnckeymaps`."
                },
                {
                    "nome": "acpi",
                    "onde": "post",
                    "tipo": "0 ou 1",
                    "obrig": false,
                    "exemplo": "1",
                    "desc": "Liga o ACPI, que permite o desligamento normal pelo painel."
                },
                {
                    "nome": "apic",
                    "onde": "post",
                    "tipo": "0 ou 1",
                    "obrig": false,
                    "exemplo": "1",
                    "desc": "Liga o APIC."
                },
                {
                    "nome": "vnc",
                    "onde": "post",
                    "tipo": "0 ou 1",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Liga ou desliga o console VNC."
                },
                {
                    "nome": "kvm_vga",
                    "onde": "post",
                    "tipo": "0 ou 1",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Liga a placa de vídeo VGA (KVM)."
                },
                {
                    "nome": "acceleration",
                    "onde": "post",
                    "tipo": "0 ou 1",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Liga a aceleração de vídeo 2D e 3D."
                },
                {
                    "nome": "isos",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Nome da ISO a montar, da lista em `isos`."
                },
                {
                    "nome": "sec_iso",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Segunda ISO."
                },
                {
                    "nome": "tuntap_enable",
                    "onde": "post",
                    "tipo": "0 ou 1",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Liga TUN/TAP. Só OpenVZ."
                },
                {
                    "nome": "ppp_enable",
                    "onde": "post",
                    "tipo": "0 ou 1",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Liga PPP. Só OpenVZ."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=hvmsettings&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'hvmsettings=1' \\\n  --data-urlencode 'boot=cd' \\\n  --data-urlencode 'nic_type=e1000' \\\n  --data-urlencode 'hvm_vnc_keymap=pt-br' \\\n  --data-urlencode 'acpi=1' \\\n  --data-urlencode 'apic=1'",
                "php": "$r = virt_api('hvmsettings', [\n    'svs' => '101',\n], [\n    'hvmsettings' => '1',\n    'boot' => 'cd',\n    'nic_type' => 'e1000',\n    'hvm_vnc_keymap' => 'pt-br',\n    'acpi' => '1',\n    'apic' => '1',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"hvmsettings\", get={\n    \"svs\": \"101\",\n}, post={\n    \"hvmsettings\": \"1\",\n    \"boot\": \"cd\",\n    \"nic_type\": \"e1000\",\n    \"hvm_vnc_keymap\": \"pt-br\",\n    \"acpi\": \"1\",\n    \"apic\": \"1\",\n})\nprint(r)",
                "node": "const r = await virtApi('hvmsettings', {\n  svs: '101',\n}, {\n  hvmsettings: '1',\n  boot: 'cd',\n  nic_type: 'e1000',\n  hvm_vnc_keymap: 'pt-br',\n  acpi: '1',\n  apic: '1',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "os-reinstall",
            "titulo": "Reinstalar o sistema operacional",
            "act": "ostemplate",
            "metodo": "POST",
            "cloud": false,
            "artigo": "configuracao",
            "grupo": "Configuração da VPS",
            "resumo": "Reinstala a VPS com o mesmo sistema ou com outro. Sem `reinsos`, a chamada devolve a lista de sistemas disponíveis.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "reinsos",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma a reinstalação."
                },
                {
                    "nome": "newos",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "ID_DO_SISTEMA",
                    "desc": "Id do sistema (`osid`), da lista em `oslist`."
                },
                {
                    "nome": "newpass",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "Senha-Root-Nova-2026",
                    "desc": "Senha do root da instalação nova."
                },
                {
                    "nome": "conf",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "Senha-Root-Nova-2026",
                    "desc": "A mesma senha, para confirmar."
                },
                {
                    "nome": "rebuild_sshkey",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Chave pública SSH a instalar no sistema novo."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=ostemplate&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'reinsos=1' \\\n  --data-urlencode 'newos=ID_DO_SISTEMA' \\\n  --data-urlencode 'newpass=Senha-Root-Nova-2026' \\\n  --data-urlencode 'conf=Senha-Root-Nova-2026'",
                "php": "$r = virt_api('ostemplate', [\n    'svs' => '101',\n], [\n    'reinsos' => '1',\n    'newos' => 'ID_DO_SISTEMA',\n    'newpass' => 'Senha-Root-Nova-2026',\n    'conf' => 'Senha-Root-Nova-2026',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"ostemplate\", get={\n    \"svs\": \"101\",\n}, post={\n    \"reinsos\": \"1\",\n    \"newos\": \"ID_DO_SISTEMA\",\n    \"newpass\": \"Senha-Root-Nova-2026\",\n    \"conf\": \"Senha-Root-Nova-2026\",\n})\nprint(r)",
                "node": "const r = await virtApi('ostemplate', {\n  svs: '101',\n}, {\n  reinsos: '1',\n  newos: 'ID_DO_SISTEMA',\n  newpass: 'Senha-Root-Nova-2026',\n  conf: 'Senha-Root-Nova-2026',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "control-panel",
            "titulo": "Instalar um painel de controle",
            "act": "controlpanel",
            "metodo": "POST",
            "cloud": false,
            "artigo": "configuracao",
            "grupo": "Configuração da VPS",
            "resumo": "Instala um painel de hospedagem dentro da VPS.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "ins",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "plesk",
                    "desc": "Painel a instalar. A documentação oficial não lista os valores aceitos; o exemplo dela usa `plesk`."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=controlpanel&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'ins=plesk'",
                "php": "$r = virt_api('controlpanel', [\n    'svs' => '101',\n], [\n    'ins' => 'plesk',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"controlpanel\", get={\n    \"svs\": \"101\",\n}, post={\n    \"ins\": \"plesk\",\n})\nprint(r)",
                "node": "const r = await virtApi('controlpanel', {\n  svs: '101',\n}, {\n  ins: 'plesk',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "webuzo-scripts",
            "titulo": "Listar as aplicações do Webuzo",
            "act": "webuzo",
            "metodo": "GET",
            "cloud": false,
            "artigo": "configuracao",
            "grupo": "Configuração da VPS",
            "resumo": "Lista as aplicações que o Webuzo instala na VPS e se o Webuzo está liberado para ela.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=webuzo&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('webuzo', [\n    'svs' => '101',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"webuzo\", get={\n    \"svs\": \"101\",\n})\nprint(r)",
                "node": "const r = await virtApi('webuzo', {\n  svs: '101',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "enduser-list-recipes",
            "titulo": "Listar as receitas",
            "act": "listrecipes",
            "metodo": "GET",
            "cloud": false,
            "artigo": "configuracao",
            "grupo": "Configuração da VPS",
            "resumo": "Lista as receitas disponíveis para a VPS. Receita é um script que o Virtualizor roda dentro da VPS — para instalar um painel, configurar o firewall ou subir uma aplicação.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=listrecipes&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('listrecipes', [\n    'svs' => '101',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"listrecipes\", get={\n    \"svs\": \"101\",\n})\nprint(r)",
                "node": "const r = await virtApi('listrecipes', {\n  svs: '101',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "execute-recipe",
            "titulo": "Executar uma receita",
            "act": "listrecipes",
            "metodo": "POST",
            "cloud": false,
            "artigo": "configuracao",
            "grupo": "Configuração da VPS",
            "resumo": "Executa uma ou mais receitas dentro da VPS.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "rid",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "9",
                    "desc": "Id da receita."
                },
                {
                    "nome": "exec_recipe",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma a execução."
                },
                {
                    "nome": "exec_rid",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "9",
                    "desc": "Id da receita, de novo, no corpo."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=listrecipes&svs=101&rid=9&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'exec_recipe=1' \\\n  --data-urlencode 'exec_rid=9'",
                "php": "$r = virt_api('listrecipes', [\n    'svs' => '101',\n    'rid' => '9',\n], [\n    'exec_recipe' => '1',\n    'exec_rid' => '9',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"listrecipes\", get={\n    \"svs\": \"101\",\n    \"rid\": \"9\",\n}, post={\n    \"exec_recipe\": \"1\",\n    \"exec_rid\": \"9\",\n})\nprint(r)",
                "node": "const r = await virtApi('listrecipes', {\n  svs: '101',\n  rid: '9',\n}, {\n  exec_recipe: '1',\n  exec_rid: '9',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "enduser-vnc-info",
            "titulo": "Ver os dados de acesso ao VNC",
            "act": "vnc",
            "metodo": "GET",
            "cloud": false,
            "artigo": "emergencia",
            "grupo": "Acesso de emergência",
            "resumo": "Devolve o endereço, a porta e a senha do console VNC da VPS: a tela dela, acessível mesmo quando a rede ou o SSH caíram.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "novnc",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS, de novo. A documentação oficial pede o id nos dois campos."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=vnc&svs=101&novnc=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('vnc', [\n    'svs' => '101',\n    'novnc' => '101',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"vnc\", get={\n    \"svs\": \"101\",\n    \"novnc\": \"101\",\n})\nprint(r)",
                "node": "const r = await virtApi('vnc', {\n  svs: '101',\n  novnc: '101',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "vnc-password",
            "titulo": "Trocar a senha do VNC",
            "act": "vncpass",
            "metodo": "POST",
            "cloud": false,
            "artigo": "emergencia",
            "grupo": "Acesso de emergência",
            "resumo": "Define uma senha nova para o console VNC da VPS. Só KVM.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "vncpass",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma a troca."
                },
                {
                    "nome": "newpass",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "Vnc-Senha-2026",
                    "desc": "Senha nova do VNC."
                },
                {
                    "nome": "conf",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "Vnc-Senha-2026",
                    "desc": "A mesma senha, para confirmar."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=vncpass&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'vncpass=1' \\\n  --data-urlencode 'newpass=Vnc-Senha-2026' \\\n  --data-urlencode 'conf=Vnc-Senha-2026'",
                "php": "$r = virt_api('vncpass', [\n    'svs' => '101',\n], [\n    'vncpass' => '1',\n    'newpass' => 'Vnc-Senha-2026',\n    'conf' => 'Vnc-Senha-2026',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"vncpass\", get={\n    \"svs\": \"101\",\n}, post={\n    \"vncpass\": \"1\",\n    \"newpass\": \"Vnc-Senha-2026\",\n    \"conf\": \"Vnc-Senha-2026\",\n})\nprint(r)",
                "node": "const r = await virtApi('vncpass', {\n  svs: '101',\n}, {\n  vncpass: '1',\n  newpass: 'Vnc-Senha-2026',\n  conf: 'Vnc-Senha-2026',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "enable-rescue",
            "titulo": "Ligar o modo de resgate",
            "act": "rescue",
            "metodo": "POST",
            "cloud": false,
            "artigo": "emergencia",
            "grupo": "Acesso de emergência",
            "resumo": "Dá boot na VPS por um sistema de resgate, com o disco dela disponível para consertar: senha perdida, fstab errado, sistema que não sobe.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "enablerescue",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma."
                },
                {
                    "nome": "password",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "Senha-Resgate-2026",
                    "desc": "Senha do root do sistema de resgate."
                },
                {
                    "nome": "conf_password",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "Senha-Resgate-2026",
                    "desc": "A mesma senha, para confirmar."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=rescue&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'enablerescue=1' \\\n  --data-urlencode 'password=Senha-Resgate-2026' \\\n  --data-urlencode 'conf_password=Senha-Resgate-2026'",
                "php": "$r = virt_api('rescue', [\n    'svs' => '101',\n], [\n    'enablerescue' => '1',\n    'password' => 'Senha-Resgate-2026',\n    'conf_password' => 'Senha-Resgate-2026',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"rescue\", get={\n    \"svs\": \"101\",\n}, post={\n    \"enablerescue\": \"1\",\n    \"password\": \"Senha-Resgate-2026\",\n    \"conf_password\": \"Senha-Resgate-2026\",\n})\nprint(r)",
                "node": "const r = await virtApi('rescue', {\n  svs: '101',\n}, {\n  enablerescue: '1',\n  password: 'Senha-Resgate-2026',\n  conf_password: 'Senha-Resgate-2026',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "disable-rescue",
            "titulo": "Desligar o modo de resgate",
            "act": "rescue",
            "metodo": "POST",
            "cloud": false,
            "artigo": "emergencia",
            "grupo": "Acesso de emergência",
            "resumo": "Volta a VPS a dar boot pelo próprio disco.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "disablerescue",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=rescue&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'disablerescue=1'",
                "php": "$r = virt_api('rescue', [\n    'svs' => '101',\n], [\n    'disablerescue' => '1',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"rescue\", get={\n    \"svs\": \"101\",\n}, post={\n    \"disablerescue\": \"1\",\n})\nprint(r)",
                "node": "const r = await virtApi('rescue', {\n  svs: '101',\n}, {\n  disablerescue: '1',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "enduser-list-iso",
            "titulo": "Listar as ISOs",
            "act": "euiso",
            "metodo": "GET",
            "cloud": false,
            "artigo": "emergencia",
            "grupo": "Acesso de emergência",
            "resumo": "Lista as imagens ISO que o usuário enviou e que podem ser montadas na VPS.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=euiso&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('euiso', [\n    'svs' => '101',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"euiso\", get={\n    \"svs\": \"101\",\n})\nprint(r)",
                "node": "const r = await virtApi('euiso', {\n  svs: '101',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "enduser-add-iso",
            "titulo": "Adicionar uma ISO por URL",
            "act": "addiso",
            "metodo": "POST",
            "cloud": false,
            "artigo": "emergencia",
            "grupo": "Acesso de emergência",
            "resumo": "Baixa uma imagem ISO de uma URL para o servidor, para depois montá-la na VPS.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "addiso",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma."
                },
                {
                    "nome": "filename",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "debian-netinst.iso",
                    "desc": "Nome do arquivo da ISO."
                },
                {
                    "nome": "iso_url",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "https://exemplo.com.br/imagens/debian-netinst.iso",
                    "desc": "Endereço de onde baixar a ISO."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=addiso&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'addiso=1' \\\n  --data-urlencode 'filename=debian-netinst.iso' \\\n  --data-urlencode 'iso_url=https://exemplo.com.br/imagens/debian-netinst.iso'",
                "php": "$r = virt_api('addiso', [\n    'svs' => '101',\n], [\n    'addiso' => '1',\n    'filename' => 'debian-netinst.iso',\n    'iso_url' => 'https://exemplo.com.br/imagens/debian-netinst.iso',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"addiso\", get={\n    \"svs\": \"101\",\n}, post={\n    \"addiso\": \"1\",\n    \"filename\": \"debian-netinst.iso\",\n    \"iso_url\": \"https://exemplo.com.br/imagens/debian-netinst.iso\",\n})\nprint(r)",
                "node": "const r = await virtApi('addiso', {\n  svs: '101',\n}, {\n  addiso: '1',\n  filename: 'debian-netinst.iso',\n  iso_url: 'https://exemplo.com.br/imagens/debian-netinst.iso',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "enduser-delete-iso",
            "titulo": "Apagar uma ISO",
            "act": "euiso",
            "metodo": "POST",
            "cloud": false,
            "artigo": "emergencia",
            "grupo": "Acesso de emergência",
            "resumo": "Remove uma ISO enviada pelo usuário.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "del",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "ID_DA_ISO",
                    "desc": "Id da ISO, da lista em Listar as ISOs."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=euiso&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'del=ID_DA_ISO'",
                "php": "$r = virt_api('euiso', [\n    'svs' => '101',\n], [\n    'del' => 'ID_DA_ISO',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"euiso\", get={\n    \"svs\": \"101\",\n}, post={\n    \"del\": \"ID_DA_ISO\",\n})\nprint(r)",
                "node": "const r = await virtApi('euiso', {\n  svs: '101',\n}, {\n  del: 'ID_DA_ISO',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "ip",
            "titulo": "Ver os IPs de uma VPS",
            "act": "ips",
            "metodo": "GET",
            "cloud": false,
            "artigo": "rede",
            "grupo": "Rede",
            "resumo": "Lista os endereços IPv4 e IPv6 atribuídos à VPS.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=ips&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('ips', [\n    'svs' => '101',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"ips\", get={\n    \"svs\": \"101\",\n})\nprint(r)",
                "node": "const r = await virtApi('ips', {\n  svs: '101',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "manage-subnets",
            "titulo": "Ver as sub-redes IPv6 de uma VPS",
            "act": "managesubnets",
            "metodo": "GET",
            "cloud": false,
            "artigo": "rede",
            "grupo": "Rede",
            "resumo": "Mostra as sub-redes IPv6 atribuídas à VPS.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=managesubnets&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('managesubnets', [\n    'svs' => '101',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"managesubnets\", get={\n    \"svs\": \"101\",\n})\nprint(r)",
                "node": "const r = await virtApi('managesubnets', {\n  svs: '101',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "list-reverse-dns",
            "titulo": "Listar o DNS reverso",
            "act": "rdns",
            "metodo": "GET",
            "cloud": false,
            "artigo": "rede",
            "grupo": "Rede",
            "resumo": "Lista os registros de DNS reverso (PTR) da conta: qual nome responde quando alguém consulta um IP seu.",
            "params": [],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=rdns&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('rdns');\nprint_r($r);",
                "python": "r = virt_api(\"rdns\")\nprint(r)",
                "node": "const r = await virtApi('rdns');\nconsole.log(r);"
            }
        },
        {
            "id": "add-reverse-dns",
            "titulo": "Criar DNS reverso para um IP",
            "act": "rdns",
            "metodo": "POST",
            "cloud": false,
            "artigo": "rede",
            "grupo": "Rede",
            "resumo": "Define o nome que um IP da conta devolve na consulta reversa (registro PTR).",
            "params": [
                {
                    "nome": "rdns",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma a criação."
                },
                {
                    "nome": "rdns_ip",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "203.0.113.10",
                    "desc": "IP da conta; tem de estar em `allowed_ip`."
                },
                {
                    "nome": "rdns_domain",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "vps1.exemplo.com.br",
                    "desc": "Nome que o IP vai devolver."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=rdns&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'rdns=1' \\\n  --data-urlencode 'rdns_ip=203.0.113.10' \\\n  --data-urlencode 'rdns_domain=vps1.exemplo.com.br'",
                "php": "$r = virt_api('rdns', [], [\n    'rdns' => '1',\n    'rdns_ip' => '203.0.113.10',\n    'rdns_domain' => 'vps1.exemplo.com.br',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"rdns\", post={\n    \"rdns\": \"1\",\n    \"rdns_ip\": \"203.0.113.10\",\n    \"rdns_domain\": \"vps1.exemplo.com.br\",\n})\nprint(r)",
                "node": "const r = await virtApi('rdns', {}, {\n  rdns: '1',\n  rdns_ip: '203.0.113.10',\n  rdns_domain: 'vps1.exemplo.com.br',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "delete-reverse-dns",
            "titulo": "Apagar um DNS reverso",
            "act": "rdns",
            "metodo": "GET",
            "cloud": false,
            "artigo": "rede",
            "grupo": "Rede",
            "resumo": "Remove um registro de DNS reverso.",
            "params": [
                {
                    "nome": "delete",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "23",
                    "desc": "Id do registro, da lista em `rdns_records`."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=rdns&delete=23&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('rdns', [\n    'delete' => '23',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"rdns\", get={\n    \"delete\": \"23\",\n})\nprint(r)",
                "node": "const r = await virtApi('rdns', {\n  delete: '23',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "list-domain-forwarding",
            "titulo": "Listar os redirecionamentos de domínio",
            "act": "managevdf",
            "metodo": "GET",
            "cloud": false,
            "artigo": "rede",
            "grupo": "Rede",
            "resumo": "Lista os redirecionamentos de domínio da VPS. No redirecionamento, o servidor recebe o acesso a um hostname e porta e o repassa para um IP e porta da VPS — útil para publicar um site em VPS sem IP público próprio.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=managevdf&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('managevdf', [\n    'svs' => '101',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"managevdf\", get={\n    \"svs\": \"101\",\n})\nprint(r)",
                "node": "const r = await virtApi('managevdf', {\n  svs: '101',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "add-domain-forwarding",
            "titulo": "Criar um redirecionamento de domínio",
            "act": "managevdf",
            "metodo": "POST",
            "cloud": false,
            "artigo": "rede",
            "grupo": "Rede",
            "resumo": "Cria um redirecionamento de um hostname e porta de entrada para um IP e porta da VPS.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "vdf_action",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "addvdf",
                    "desc": "Sempre `addvdf` para criar."
                },
                {
                    "nome": "protocol",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "HTTP",
                    "desc": "Protocolo, da lista em `supported_protocols`."
                },
                {
                    "nome": "src_hostname",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "loja.exemplo.com.br",
                    "desc": "Hostname pelo qual o visitante chega."
                },
                {
                    "nome": "src_port",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "80",
                    "desc": "Porta de entrada."
                },
                {
                    "nome": "dest_ip",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "10.0.0.15",
                    "desc": "IP da VPS que recebe o acesso."
                },
                {
                    "nome": "dest_port",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "8080",
                    "desc": "Porta da VPS que recebe o acesso."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=managevdf&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'vdf_action=addvdf' \\\n  --data-urlencode 'protocol=HTTP' \\\n  --data-urlencode 'src_hostname=loja.exemplo.com.br' \\\n  --data-urlencode 'src_port=80' \\\n  --data-urlencode 'dest_ip=10.0.0.15' \\\n  --data-urlencode 'dest_port=8080'",
                "php": "$r = virt_api('managevdf', [\n    'svs' => '101',\n], [\n    'vdf_action' => 'addvdf',\n    'protocol' => 'HTTP',\n    'src_hostname' => 'loja.exemplo.com.br',\n    'src_port' => '80',\n    'dest_ip' => '10.0.0.15',\n    'dest_port' => '8080',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"managevdf\", get={\n    \"svs\": \"101\",\n}, post={\n    \"vdf_action\": \"addvdf\",\n    \"protocol\": \"HTTP\",\n    \"src_hostname\": \"loja.exemplo.com.br\",\n    \"src_port\": \"80\",\n    \"dest_ip\": \"10.0.0.15\",\n    \"dest_port\": \"8080\",\n})\nprint(r)",
                "node": "const r = await virtApi('managevdf', {\n  svs: '101',\n}, {\n  vdf_action: 'addvdf',\n  protocol: 'HTTP',\n  src_hostname: 'loja.exemplo.com.br',\n  src_port: '80',\n  dest_ip: '10.0.0.15',\n  dest_port: '8080',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "edit-domain-forwarding",
            "titulo": "Alterar um redirecionamento de domínio",
            "act": "managevdf",
            "metodo": "POST",
            "cloud": false,
            "artigo": "rede",
            "grupo": "Rede",
            "resumo": "Altera um redirecionamento existente. Mande todos os campos, não só os que mudam.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "vdf_action",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "editvdf",
                    "desc": "Sempre `editvdf` para alterar."
                },
                {
                    "nome": "vdfid",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "313",
                    "desc": "Id do redirecionamento, da lista."
                },
                {
                    "nome": "protocol",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "HTTP",
                    "desc": "Protocolo."
                },
                {
                    "nome": "src_hostname",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "loja.exemplo.com.br",
                    "desc": "Hostname de entrada."
                },
                {
                    "nome": "src_port",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "80",
                    "desc": "Porta de entrada."
                },
                {
                    "nome": "dest_ip",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "10.0.0.15",
                    "desc": "IP da VPS."
                },
                {
                    "nome": "dest_port",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "8081",
                    "desc": "Porta da VPS."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=managevdf&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'vdf_action=editvdf' \\\n  --data-urlencode 'vdfid=313' \\\n  --data-urlencode 'protocol=HTTP' \\\n  --data-urlencode 'src_hostname=loja.exemplo.com.br' \\\n  --data-urlencode 'src_port=80' \\\n  --data-urlencode 'dest_ip=10.0.0.15' \\\n  --data-urlencode 'dest_port=8081'",
                "php": "$r = virt_api('managevdf', [\n    'svs' => '101',\n], [\n    'vdf_action' => 'editvdf',\n    'vdfid' => '313',\n    'protocol' => 'HTTP',\n    'src_hostname' => 'loja.exemplo.com.br',\n    'src_port' => '80',\n    'dest_ip' => '10.0.0.15',\n    'dest_port' => '8081',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"managevdf\", get={\n    \"svs\": \"101\",\n}, post={\n    \"vdf_action\": \"editvdf\",\n    \"vdfid\": \"313\",\n    \"protocol\": \"HTTP\",\n    \"src_hostname\": \"loja.exemplo.com.br\",\n    \"src_port\": \"80\",\n    \"dest_ip\": \"10.0.0.15\",\n    \"dest_port\": \"8081\",\n})\nprint(r)",
                "node": "const r = await virtApi('managevdf', {\n  svs: '101',\n}, {\n  vdf_action: 'editvdf',\n  vdfid: '313',\n  protocol: 'HTTP',\n  src_hostname: 'loja.exemplo.com.br',\n  src_port: '80',\n  dest_ip: '10.0.0.15',\n  dest_port: '8081',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "delete-domain-forwarding",
            "titulo": "Apagar redirecionamentos de domínio",
            "act": "managevdf",
            "metodo": "POST",
            "cloud": false,
            "artigo": "rede",
            "grupo": "Rede",
            "resumo": "Apaga um ou mais redirecionamentos de uma vez.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "vdf_action",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "delvdf",
                    "desc": "Sempre `delvdf` para apagar."
                },
                {
                    "nome": "ids",
                    "onde": "post",
                    "tipo": "lista de números",
                    "obrig": true,
                    "exemplo": "313,314",
                    "desc": "Ids dos redirecionamentos, separados por vírgula."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=managevdf&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'vdf_action=delvdf' \\\n  --data-urlencode 'ids=313,314'",
                "php": "$r = virt_api('managevdf', [\n    'svs' => '101',\n], [\n    'vdf_action' => 'delvdf',\n    'ids' => '313,314',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"managevdf\", get={\n    \"svs\": \"101\",\n}, post={\n    \"vdf_action\": \"delvdf\",\n    \"ids\": \"313,314\",\n})\nprint(r)",
                "node": "const r = await virtApi('managevdf', {\n  svs: '101',\n}, {\n  vdf_action: 'delvdf',\n  ids: '313,314',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "list-dns-server",
            "titulo": "Listar as zonas de DNS",
            "act": "pdns",
            "metodo": "GET",
            "cloud": false,
            "artigo": "dns",
            "grupo": "DNS",
            "resumo": "Lista as zonas de DNS (os domínios) que a conta mantém no servidor de DNS do painel. A documentação oficial chama isto de \"DNS Server\".",
            "params": [],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=pdns&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('pdns');\nprint_r($r);",
                "python": "r = virt_api(\"pdns\")\nprint(r)",
                "node": "const r = await virtApi('pdns');\nconsole.log(r);"
            }
        },
        {
            "id": "add-dns-server",
            "titulo": "Criar uma zona de DNS",
            "act": "pdns",
            "metodo": "POST",
            "cloud": false,
            "artigo": "dns",
            "grupo": "DNS",
            "resumo": "Cria a zona de um domínio, onde depois entram os registros.",
            "params": [
                {
                    "nome": "addzone",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma a criação."
                },
                {
                    "nome": "zone_name",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "exemplo.com.br",
                    "desc": "O domínio."
                },
                {
                    "nome": "pdns_server",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": null,
                    "desc": "Id do servidor de DNS onde a zona será criada. A tabela oficial o pede; o exemplo dela não o envia."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=pdns&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'addzone=1' \\\n  --data-urlencode 'zone_name=exemplo.com.br'",
                "php": "$r = virt_api('pdns', [], [\n    'addzone' => '1',\n    'zone_name' => 'exemplo.com.br',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"pdns\", post={\n    \"addzone\": \"1\",\n    \"zone_name\": \"exemplo.com.br\",\n})\nprint(r)",
                "node": "const r = await virtApi('pdns', {}, {\n  addzone: '1',\n  zone_name: 'exemplo.com.br',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "delete-dns",
            "titulo": "Apagar uma zona de DNS",
            "act": "pdns",
            "metodo": "POST",
            "cloud": false,
            "artigo": "dns",
            "grupo": "DNS",
            "resumo": "Apaga a zona de um domínio, com todos os registros dela.",
            "params": [
                {
                    "nome": "del",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "7",
                    "desc": "Id da zona."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=pdns&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'del=7'",
                "php": "$r = virt_api('pdns', [], [\n    'del' => '7',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"pdns\", post={\n    \"del\": \"7\",\n})\nprint(r)",
                "node": "const r = await virtApi('pdns', {}, {\n  del: '7',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "zone-info",
            "titulo": "Ver os registros de uma zona",
            "act": "managezone",
            "metodo": "GET",
            "cloud": false,
            "artigo": "dns",
            "grupo": "DNS",
            "resumo": "Lista os registros de uma zona de DNS.",
            "params": [
                {
                    "nome": "domainid",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "7",
                    "desc": "Id da zona, da lista em Listar as zonas de DNS."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=managezone&domainid=7&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('managezone', [\n    'domainid' => '7',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"managezone\", get={\n    \"domainid\": \"7\",\n})\nprint(r)",
                "node": "const r = await virtApi('managezone', {\n  domainid: '7',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "add-dns-record",
            "titulo": "Criar um registro de DNS",
            "act": "managezone",
            "metodo": "POST",
            "cloud": false,
            "artigo": "dns",
            "grupo": "DNS",
            "resumo": "Cria um registro (A, AAAA, CNAME, MX, TXT…) numa zona.",
            "params": [
                {
                    "nome": "domainid",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "7",
                    "desc": "Id da zona, da lista em Listar as zonas de DNS."
                },
                {
                    "nome": "add",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma a criação."
                },
                {
                    "nome": "name",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "www",
                    "desc": "Nome do registro."
                },
                {
                    "nome": "type",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "A",
                    "desc": "Tipo: `A`, `AAAA`, `CNAME`, `MX`, `TXT` e os demais."
                },
                {
                    "nome": "content",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "203.0.113.10",
                    "desc": "Conteúdo: o IP num registro A, o destino num CNAME, o texto num TXT."
                },
                {
                    "nome": "prio",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "0",
                    "desc": "Prioridade; só tem efeito em MX e SRV."
                },
                {
                    "nome": "ttl",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "3600",
                    "desc": "Tempo de cache, em segundos."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=managezone&domainid=7&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'add=1' \\\n  --data-urlencode 'name=www' \\\n  --data-urlencode 'type=A' \\\n  --data-urlencode 'content=203.0.113.10' \\\n  --data-urlencode 'prio=0' \\\n  --data-urlencode 'ttl=3600'",
                "php": "$r = virt_api('managezone', [\n    'domainid' => '7',\n], [\n    'add' => '1',\n    'name' => 'www',\n    'type' => 'A',\n    'content' => '203.0.113.10',\n    'prio' => '0',\n    'ttl' => '3600',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"managezone\", get={\n    \"domainid\": \"7\",\n}, post={\n    \"add\": \"1\",\n    \"name\": \"www\",\n    \"type\": \"A\",\n    \"content\": \"203.0.113.10\",\n    \"prio\": \"0\",\n    \"ttl\": \"3600\",\n})\nprint(r)",
                "node": "const r = await virtApi('managezone', {\n  domainid: '7',\n}, {\n  add: '1',\n  name: 'www',\n  type: 'A',\n  content: '203.0.113.10',\n  prio: '0',\n  ttl: '3600',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "edit-dns-record",
            "titulo": "Alterar um registro de DNS",
            "act": "managezone",
            "metodo": "POST",
            "cloud": false,
            "artigo": "dns",
            "grupo": "DNS",
            "resumo": "Altera um registro existente. Mande todos os campos, não só os que mudam.",
            "params": [
                {
                    "nome": "domainid",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "7",
                    "desc": "Id da zona, da lista em Listar as zonas de DNS."
                },
                {
                    "nome": "edit",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma a alteração."
                },
                {
                    "nome": "id",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "21",
                    "desc": "Id do registro."
                },
                {
                    "nome": "name",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "www",
                    "desc": "Nome do registro."
                },
                {
                    "nome": "type",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "A",
                    "desc": "Tipo."
                },
                {
                    "nome": "content",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "203.0.113.11",
                    "desc": "Conteúdo novo."
                },
                {
                    "nome": "prio",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "0",
                    "desc": "Prioridade."
                },
                {
                    "nome": "ttl",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "3600",
                    "desc": "Tempo de cache, em segundos."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=managezone&domainid=7&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'edit=1' \\\n  --data-urlencode 'id=21' \\\n  --data-urlencode 'name=www' \\\n  --data-urlencode 'type=A' \\\n  --data-urlencode 'content=203.0.113.11' \\\n  --data-urlencode 'prio=0' \\\n  --data-urlencode 'ttl=3600'",
                "php": "$r = virt_api('managezone', [\n    'domainid' => '7',\n], [\n    'edit' => '1',\n    'id' => '21',\n    'name' => 'www',\n    'type' => 'A',\n    'content' => '203.0.113.11',\n    'prio' => '0',\n    'ttl' => '3600',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"managezone\", get={\n    \"domainid\": \"7\",\n}, post={\n    \"edit\": \"1\",\n    \"id\": \"21\",\n    \"name\": \"www\",\n    \"type\": \"A\",\n    \"content\": \"203.0.113.11\",\n    \"prio\": \"0\",\n    \"ttl\": \"3600\",\n})\nprint(r)",
                "node": "const r = await virtApi('managezone', {\n  domainid: '7',\n}, {\n  edit: '1',\n  id: '21',\n  name: 'www',\n  type: 'A',\n  content: '203.0.113.11',\n  prio: '0',\n  ttl: '3600',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "delete-dns-record",
            "titulo": "Apagar um registro de DNS",
            "act": "managezone",
            "metodo": "POST",
            "cloud": false,
            "artigo": "dns",
            "grupo": "DNS",
            "resumo": "Apaga um registro de uma zona.",
            "params": [
                {
                    "nome": "domainid",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "7",
                    "desc": "Id da zona, da lista em Listar as zonas de DNS."
                },
                {
                    "nome": "delete",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "19",
                    "desc": "Id do registro."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=managezone&domainid=7&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'delete=19'",
                "php": "$r = virt_api('managezone', [\n    'domainid' => '7',\n], [\n    'delete' => '19',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"managezone\", get={\n    \"domainid\": \"7\",\n}, post={\n    \"delete\": \"19\",\n})\nprint(r)",
                "node": "const r = await virtApi('managezone', {\n  domainid: '7',\n}, {\n  delete: '19',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "list-ssh-keys",
            "titulo": "Listar as chaves SSH guardadas",
            "act": "sshkeys",
            "metodo": "GET",
            "cloud": false,
            "artigo": "seguranca",
            "grupo": "Segurança",
            "resumo": "Lista as chaves públicas SSH guardadas na conta, prontas para aplicar em VPS.",
            "params": [],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=sshkeys&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('sshkeys');\nprint_r($r);",
                "python": "r = virt_api(\"sshkeys\")\nprint(r)",
                "node": "const r = await virtApi('sshkeys');\nconsole.log(r);"
            }
        },
        {
            "id": "add-ssh-key",
            "titulo": "Guardar uma chave SSH",
            "act": "addsshkey",
            "metodo": "POST",
            "cloud": false,
            "artigo": "seguranca",
            "grupo": "Segurança",
            "resumo": "Guarda uma chave pública SSH na conta. Guardar não instala a chave em nenhuma VPS — para isso, use Aplicar chaves SSH numa VPS.",
            "params": [
                {
                    "nome": "add",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma."
                },
                {
                    "nome": "name",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "notebook-maria",
                    "desc": "Nome para reconhecer a chave."
                },
                {
                    "nome": "value",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExemploDeChavePublica maria@notebook",
                    "desc": "A chave pública, inteira, numa linha."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=addsshkey&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'add=1' \\\n  --data-urlencode 'name=notebook-maria' \\\n  --data-urlencode 'value=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExemploDeChavePublica maria@notebook'",
                "php": "$r = virt_api('addsshkey', [], [\n    'add' => '1',\n    'name' => 'notebook-maria',\n    'value' => 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExemploDeChavePublica maria@notebook',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"addsshkey\", post={\n    \"add\": \"1\",\n    \"name\": \"notebook-maria\",\n    \"value\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExemploDeChavePublica maria@notebook\",\n})\nprint(r)",
                "node": "const r = await virtApi('addsshkey', {}, {\n  add: '1',\n  name: 'notebook-maria',\n  value: 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExemploDeChavePublica maria@notebook',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "edit-ssh-key",
            "titulo": "Alterar uma chave SSH guardada",
            "act": "editsshkey",
            "metodo": "POST",
            "cloud": false,
            "artigo": "seguranca",
            "grupo": "Segurança",
            "resumo": "Troca o nome ou a chave pública de uma chave guardada.",
            "params": [
                {
                    "nome": "keyid",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "3",
                    "desc": "Id da chave."
                },
                {
                    "nome": "edit",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma."
                },
                {
                    "nome": "name",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "notebook-maria",
                    "desc": "Nome."
                },
                {
                    "nome": "value",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExemploDeChavePublica maria@notebook",
                    "desc": "Chave pública."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=editsshkey&keyid=3&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'edit=1' \\\n  --data-urlencode 'name=notebook-maria' \\\n  --data-urlencode 'value=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExemploDeChavePublica maria@notebook'",
                "php": "$r = virt_api('editsshkey', [\n    'keyid' => '3',\n], [\n    'edit' => '1',\n    'name' => 'notebook-maria',\n    'value' => 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExemploDeChavePublica maria@notebook',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"editsshkey\", get={\n    \"keyid\": \"3\",\n}, post={\n    \"edit\": \"1\",\n    \"name\": \"notebook-maria\",\n    \"value\": \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExemploDeChavePublica maria@notebook\",\n})\nprint(r)",
                "node": "const r = await virtApi('editsshkey', {\n  keyid: '3',\n}, {\n  edit: '1',\n  name: 'notebook-maria',\n  value: 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExemploDeChavePublica maria@notebook',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "delete-ssh-key",
            "titulo": "Apagar chaves SSH guardadas",
            "act": "sshkeys",
            "metodo": "POST",
            "cloud": false,
            "artigo": "seguranca",
            "grupo": "Segurança",
            "resumo": "Apaga uma ou mais chaves guardadas na conta.",
            "params": [
                {
                    "nome": "delete",
                    "onde": "post",
                    "tipo": "lista de números",
                    "obrig": true,
                    "exemplo": "4",
                    "desc": "Ids das chaves, separados por vírgula."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=sshkeys&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'delete=4'",
                "php": "$r = virt_api('sshkeys', [], [\n    'delete' => '4',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"sshkeys\", post={\n    \"delete\": \"4\",\n})\nprint(r)",
                "node": "const r = await virtApi('sshkeys', {}, {\n  delete: '4',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "apply-ssh-key",
            "titulo": "Aplicar chaves SSH numa VPS",
            "act": "sshkeys",
            "metodo": "POST",
            "cloud": false,
            "artigo": "seguranca",
            "grupo": "Segurança",
            "resumo": "Instala chaves guardadas na conta dentro de uma VPS, para acesso por chave em vez de senha.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "addkeyvps",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma."
                },
                {
                    "nome": "ssh_keys[]",
                    "onde": "post",
                    "tipo": "lista de números",
                    "obrig": true,
                    "exemplo": [
                        "5"
                    ],
                    "desc": "Ids das chaves. Repita o campo para cada chave."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=sshkeys&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'addkeyvps=1' \\\n  --data-urlencode 'ssh_keys[]=5'",
                "php": "$r = virt_api('sshkeys', [\n    'svs' => '101',\n], [\n    'addkeyvps' => '1',\n    'ssh_keys' => ['5'],\n]);\nprint_r($r);",
                "python": "r = virt_api(\"sshkeys\", get={\n    \"svs\": \"101\",\n}, post={\n    \"addkeyvps\": \"1\",\n    \"ssh_keys[]\": [\"5\"],\n})\nprint(r)",
                "node": "const r = await virtApi('sshkeys', {\n  svs: '101',\n}, {\n  addkeyvps: '1',\n  ssh_keys: ['5'],\n});\nconsole.log(r);"
            }
        },
        {
            "id": "generate-keys",
            "titulo": "Gerar um par de chaves SSH",
            "act": "create",
            "metodo": "GET",
            "cloud": false,
            "artigo": "seguranca",
            "grupo": "Segurança",
            "resumo": "Gera um par de chaves SSH no servidor. O par serve para criar uma VPS com `ssh_options=generate_keys` (veja Criar uma VPS).",
            "params": [
                {
                    "nome": "generate_keys",
                    "onde": "get",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Pede o par de chaves. Sem ele, a ação `create` é a de criar VPS."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=create&generate_keys=1&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('create', [\n    'generate_keys' => '1',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"create\", get={\n    \"generate_keys\": \"1\",\n})\nprint(r)",
                "node": "const r = await virtApi('create', {\n  generate_keys: '1',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "list-firewall-plan",
            "titulo": "Listar os planos de firewall",
            "act": null,
            "metodo": "GET",
            "cloud": false,
            "artigo": "seguranca",
            "grupo": "Segurança",
            "resumo": "Lista os planos de firewall criados pelo usuário e as regras de cada um.",
            "params": [],
            "exemplos": null
        },
        {
            "id": "add-firewall-plan",
            "titulo": "Criar um plano de firewall",
            "act": null,
            "metodo": "POST",
            "cloud": false,
            "artigo": "seguranca",
            "grupo": "Segurança",
            "resumo": "Cria um plano de firewall com uma política padrão e regras de exceção.",
            "params": [
                {
                    "nome": "fwp_name",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": null,
                    "desc": "Nome do plano."
                },
                {
                    "nome": "default_policy",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": null,
                    "desc": "O que fazer com o tráfego que nenhuma regra cobre: `DROP` (descartar) ou `ACCEPT` (aceitar)."
                },
                {
                    "nome": "fwp_note",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Observação livre."
                },
                {
                    "nome": "api_firewall_rules",
                    "onde": "post",
                    "tipo": "lista de regras",
                    "obrig": true,
                    "exemplo": null,
                    "desc": "Cada regra é uma lista, na ordem do exemplo oficial: versão do IP (`4`), direção (`IN`), ação (`ACCEPT`), protocolo (`TCP`), portas (`22`, `22,567` ou `ALL`) e origem (um IP ou uma faixa, como `0.0.0.0/0`)."
                }
            ],
            "exemplos": null
        },
        {
            "id": "edit-firewall-plan",
            "titulo": "Alterar um plano de firewall",
            "act": null,
            "metodo": "POST",
            "cloud": false,
            "artigo": "seguranca",
            "grupo": "Segurança",
            "resumo": "Altera o nome, a política padrão, a observação e as regras de um plano. Os campos de edição levam o prefixo `edit_`.",
            "params": [
                {
                    "nome": "fwpid",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": null,
                    "desc": "Id do plano."
                },
                {
                    "nome": "edit_fwp_name",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": null,
                    "desc": "Nome."
                },
                {
                    "nome": "edit_default_policy",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": null,
                    "desc": "`DROP` ou `ACCEPT`."
                },
                {
                    "nome": "edit_fwp_note",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Observação."
                },
                {
                    "nome": "api_firewall_rules",
                    "onde": "post",
                    "tipo": "lista de regras",
                    "obrig": true,
                    "exemplo": null,
                    "desc": "Cada regra é uma lista, na ordem do exemplo oficial: versão do IP (`4`), direção (`IN`), ação (`ACCEPT`), protocolo (`TCP`), portas (`22`, `22,567` ou `ALL`) e origem (um IP ou uma faixa, como `0.0.0.0/0`)."
                }
            ],
            "exemplos": null
        },
        {
            "id": "delete-firewall-plan",
            "titulo": "Apagar planos de firewall",
            "act": null,
            "metodo": "POST",
            "cloud": false,
            "artigo": "seguranca",
            "grupo": "Segurança",
            "resumo": "Apaga um ou mais planos de firewall.",
            "params": [
                {
                    "nome": "delete_fwids",
                    "onde": "post",
                    "tipo": "lista de números",
                    "obrig": true,
                    "exemplo": null,
                    "desc": "Ids dos planos."
                }
            ],
            "exemplos": null
        },
        {
            "id": "list-api-key",
            "titulo": "Listar as chaves de API",
            "act": "apikey",
            "metodo": "GET",
            "cloud": false,
            "artigo": "seguranca",
            "grupo": "Segurança",
            "resumo": "Lista as chaves de API da conta.",
            "params": [],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=apikey&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('apikey');\nprint_r($r);",
                "python": "r = virt_api(\"apikey\")\nprint(r)",
                "node": "const r = await virtApi('apikey');\nconsole.log(r);"
            }
        },
        {
            "id": "add-api-key",
            "titulo": "Criar uma chave de API",
            "act": "apikey",
            "metodo": "GET",
            "cloud": false,
            "artigo": "seguranca",
            "grupo": "Segurança",
            "resumo": "Cria uma chave de API nova. A primeira chave se cria pelo painel (veja Primeiros passos); daí em diante, dá para criar outras pela própria API — uma por sistema que acessa, por exemplo.",
            "params": [
                {
                    "nome": "do",
                    "onde": "get",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "add",
                    "desc": "Sempre `add`."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=apikey&do=add&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('apikey', [\n    'do' => 'add',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"apikey\", get={\n    \"do\": \"add\",\n})\nprint(r)",
                "node": "const r = await virtApi('apikey', {\n  do: 'add',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "delete-api-key",
            "titulo": "Apagar uma chave de API",
            "act": "apikey",
            "metodo": "POST",
            "cloud": false,
            "artigo": "seguranca",
            "grupo": "Segurança",
            "resumo": "Revoga uma chave de API. Use quando um sistema deixa de acessar o painel ou quando a chave pode ter vazado.",
            "params": [
                {
                    "nome": "del",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "36",
                    "desc": "Id da chave, da lista."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=apikey&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'del=36'",
                "php": "$r = virt_api('apikey', [], [\n    'del' => '36',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"apikey\", post={\n    \"del\": \"36\",\n})\nprint(r)",
                "node": "const r = await virtApi('apikey', {}, {\n  del: '36',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "list-backup",
            "titulo": "Listar os backups de uma VPS",
            "act": "backup2",
            "metodo": "GET",
            "cloud": false,
            "artigo": "backups-volumes",
            "grupo": "Backups e volumes",
            "resumo": "Lista os backups de uma VPS e mostra quantos backups e restaurações ainda cabem no período.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=backup2&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('backup2', [\n    'svs' => '101',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"backup2\", get={\n    \"svs\": \"101\",\n})\nprint(r)",
                "node": "const r = await virtApi('backup2', {\n  svs: '101',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "create-backup",
            "titulo": "Fazer um backup agora",
            "act": "backup2",
            "metodo": "POST",
            "cloud": false,
            "artigo": "backups-volumes",
            "grupo": "Backups e volumes",
            "resumo": "Inicia um backup da VPS fora do agendamento.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "cbackup",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Inicia o backup."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=backup2&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'cbackup=1'",
                "php": "$r = virt_api('backup2', [\n    'svs' => '101',\n], [\n    'cbackup' => '1',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"backup2\", get={\n    \"svs\": \"101\",\n}, post={\n    \"cbackup\": \"1\",\n})\nprint(r)",
                "node": "const r = await virtApi('backup2', {\n  svs: '101',\n}, {\n  cbackup: '1',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "restoring-backup",
            "titulo": "Restaurar um backup",
            "act": "backup",
            "metodo": "POST",
            "cloud": false,
            "artigo": "backups-volumes",
            "grupo": "Backups e volumes",
            "resumo": "Restaura a VPS a partir de um backup. O processo roda em segundo plano e leva alguns minutos.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "restore",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Restaura um backup comum."
                },
                {
                    "nome": "bkid",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "3",
                    "desc": "Id do backup."
                },
                {
                    "nome": "backuply_restore",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Use no lugar de `restore` quando o backup for do Backuply."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=backup&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'restore=1' \\\n  --data-urlencode 'bkid=3'",
                "php": "$r = virt_api('backup', [\n    'svs' => '101',\n], [\n    'restore' => '1',\n    'bkid' => '3',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"backup\", get={\n    \"svs\": \"101\",\n}, post={\n    \"restore\": \"1\",\n    \"bkid\": \"3\",\n})\nprint(r)",
                "node": "const r = await virtApi('backup', {\n  svs: '101',\n}, {\n  restore: '1',\n  bkid: '3',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "delete-backup",
            "titulo": "Apagar um backup",
            "act": "backup",
            "metodo": "POST",
            "cloud": false,
            "artigo": "backups-volumes",
            "grupo": "Backups e volumes",
            "resumo": "Apaga um backup da VPS.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "delete",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Apaga um backup comum."
                },
                {
                    "nome": "bkid",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "3",
                    "desc": "Id do backup."
                },
                {
                    "nome": "backuply_delete",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": false,
                    "exemplo": null,
                    "desc": "Use no lugar de `delete` quando o backup for do Backuply."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=backup&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'delete=1' \\\n  --data-urlencode 'bkid=3'",
                "php": "$r = virt_api('backup', [\n    'svs' => '101',\n], [\n    'delete' => '1',\n    'bkid' => '3',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"backup\", get={\n    \"svs\": \"101\",\n}, post={\n    \"delete\": \"1\",\n    \"bkid\": \"3\",\n})\nprint(r)",
                "node": "const r = await virtApi('backup', {\n  svs: '101',\n}, {\n  delete: '1',\n  bkid: '3',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "list-volumes",
            "titulo": "Listar os volumes",
            "act": "volume",
            "metodo": "GET",
            "cloud": true,
            "artigo": "backups-volumes",
            "grupo": "Backups e volumes",
            "resumo": "Lista os volumes da conta Cloud: discos adicionais que se criam à parte e se ligam a uma VPS.",
            "params": [],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=volume&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('volume');\nprint_r($r);",
                "python": "r = virt_api(\"volume\")\nprint(r)",
                "node": "const r = await virtApi('volume');\nconsole.log(r);"
            }
        },
        {
            "id": "add-volume",
            "titulo": "Criar um volume",
            "act": "volume",
            "metodo": "POST",
            "cloud": true,
            "artigo": "backups-volumes",
            "grupo": "Backups e volumes",
            "resumo": "Cria um volume e, se pedido, já o liga e monta numa VPS.",
            "params": [
                {
                    "nome": "addvolume",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma a criação."
                },
                {
                    "nome": "volname",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "dados",
                    "desc": "Nome do volume."
                },
                {
                    "nome": "vps_sel",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "vol_size",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "20",
                    "desc": "Tamanho, em GB."
                },
                {
                    "nome": "format",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": true,
                    "exemplo": "ext4",
                    "desc": "Sistema de arquivos: `ext4` ou `xfs`."
                },
                {
                    "nome": "attach_vol",
                    "onde": "post",
                    "tipo": "0 ou 1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "`1` cria e liga à VPS; `0` só cria."
                },
                {
                    "nome": "mntpoint",
                    "onde": "post",
                    "tipo": "texto",
                    "obrig": false,
                    "exemplo": "/mnt/dados",
                    "desc": "Onde montar dentro da VPS."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=volume&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'addvolume=1' \\\n  --data-urlencode 'volname=dados' \\\n  --data-urlencode 'vps_sel=101' \\\n  --data-urlencode 'vol_size=20' \\\n  --data-urlencode 'format=ext4' \\\n  --data-urlencode 'attach_vol=1' \\\n  --data-urlencode 'mntpoint=/mnt/dados'",
                "php": "$r = virt_api('volume', [], [\n    'addvolume' => '1',\n    'volname' => 'dados',\n    'vps_sel' => '101',\n    'vol_size' => '20',\n    'format' => 'ext4',\n    'attach_vol' => '1',\n    'mntpoint' => '/mnt/dados',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"volume\", post={\n    \"addvolume\": \"1\",\n    \"volname\": \"dados\",\n    \"vps_sel\": \"101\",\n    \"vol_size\": \"20\",\n    \"format\": \"ext4\",\n    \"attach_vol\": \"1\",\n    \"mntpoint\": \"/mnt/dados\",\n})\nprint(r)",
                "node": "const r = await virtApi('volume', {}, {\n  addvolume: '1',\n  volname: 'dados',\n  vps_sel: '101',\n  vol_size: '20',\n  format: 'ext4',\n  attach_vol: '1',\n  mntpoint: '/mnt/dados',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "edit-volume",
            "titulo": "Ligar, desligar ou aumentar um volume",
            "act": "volume",
            "metodo": "POST",
            "cloud": true,
            "artigo": "backups-volumes",
            "grupo": "Backups e volumes",
            "resumo": "Liga um volume a uma VPS, tira de uma VPS ou muda o tamanho dele.",
            "params": [
                {
                    "nome": "perform_action",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "3",
                    "desc": "O que fazer: `1` ligar à VPS, `2` desligar da VPS, `3` mudar o tamanho."
                },
                {
                    "nome": "e_vol_did",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "249",
                    "desc": "Id do volume."
                },
                {
                    "nome": "vpsid_vol",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "vol_size",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": false,
                    "exemplo": "40",
                    "desc": "Tamanho novo, em GB; só para `perform_action=3`."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=volume&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'perform_action=3' \\\n  --data-urlencode 'e_vol_did=249' \\\n  --data-urlencode 'vpsid_vol=101' \\\n  --data-urlencode 'vol_size=40'",
                "php": "$r = virt_api('volume', [], [\n    'perform_action' => '3',\n    'e_vol_did' => '249',\n    'vpsid_vol' => '101',\n    'vol_size' => '40',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"volume\", post={\n    \"perform_action\": \"3\",\n    \"e_vol_did\": \"249\",\n    \"vpsid_vol\": \"101\",\n    \"vol_size\": \"40\",\n})\nprint(r)",
                "node": "const r = await virtApi('volume', {}, {\n  perform_action: '3',\n  e_vol_did: '249',\n  vpsid_vol: '101',\n  vol_size: '40',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "delete-volume",
            "titulo": "Apagar um volume",
            "act": "volume",
            "metodo": "POST",
            "cloud": true,
            "artigo": "backups-volumes",
            "grupo": "Backups e volumes",
            "resumo": "Apaga um volume, com os dados dele.",
            "params": [
                {
                    "nome": "delvol",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "249",
                    "desc": "Id do volume."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=volume&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'delvol=249'",
                "php": "$r = virt_api('volume', [], [\n    'delvol' => '249',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"volume\", post={\n    \"delvol\": \"249\",\n})\nprint(r)",
                "node": "const r = await virtApi('volume', {}, {\n  delvol: '249',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "enduser-ram",
            "titulo": "Ver o uso de RAM",
            "act": "ram",
            "metodo": "GET",
            "cloud": false,
            "artigo": "monitoramento",
            "grupo": "Monitoramento",
            "resumo": "Mostra o uso de memória da VPS.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=ram&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('ram', [\n    'svs' => '101',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"ram\", get={\n    \"svs\": \"101\",\n})\nprint(r)",
                "node": "const r = await virtApi('ram', {\n  svs: '101',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "enduser-cpu",
            "titulo": "Ver o uso de CPU",
            "act": "cpu",
            "metodo": "GET",
            "cloud": false,
            "artigo": "monitoramento",
            "grupo": "Monitoramento",
            "resumo": "Mostra o uso de processador da VPS.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=cpu&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('cpu', [\n    'svs' => '101',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"cpu\", get={\n    \"svs\": \"101\",\n})\nprint(r)",
                "node": "const r = await virtApi('cpu', {\n  svs: '101',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "enduser-disk",
            "titulo": "Ver o uso de disco",
            "act": "disk",
            "metodo": "GET",
            "cloud": false,
            "artigo": "monitoramento",
            "grupo": "Monitoramento",
            "resumo": "Mostra o uso de disco da VPS, em espaço e em inodes.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=disk&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('disk', [\n    'svs' => '101',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"disk\", get={\n    \"svs\": \"101\",\n})\nprint(r)",
                "node": "const r = await virtApi('disk', {\n  svs: '101',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "enduser-bandwidth",
            "titulo": "Ver o consumo de banda",
            "act": "bandwidth",
            "metodo": "POST",
            "cloud": false,
            "artigo": "monitoramento",
            "grupo": "Monitoramento",
            "resumo": "Mostra o tráfego da VPS no mês, dia a dia. Sem `show`, vem o mês atual.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "show",
                    "onde": "post",
                    "tipo": "número",
                    "obrig": false,
                    "exemplo": "202609",
                    "desc": "Mês a consultar, no formato AAAAMM: setembro de 2026 é `202609`."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=bandwidth&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'show=202609'",
                "php": "$r = virt_api('bandwidth', [\n    'svs' => '101',\n], [\n    'show' => '202609',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"bandwidth\", get={\n    \"svs\": \"101\",\n}, post={\n    \"show\": \"202609\",\n})\nprint(r)",
                "node": "const r = await virtApi('bandwidth', {\n  svs: '101',\n}, {\n  show: '202609',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "monitor",
            "titulo": "Ver o histórico de uso da VPS",
            "act": "monitor",
            "metodo": "GET",
            "cloud": false,
            "artigo": "monitoramento",
            "grupo": "Monitoramento",
            "resumo": "Devolve o histórico de CPU, RAM e disco da VPS, para gráficos. Com `show`, o histórico de um mês.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "show",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": false,
                    "exemplo": "202609",
                    "desc": "Mês, no formato AAAAMM."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=monitor&svs=101&show=202609&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('monitor', [\n    'svs' => '101',\n    'show' => '202609',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"monitor\", get={\n    \"svs\": \"101\",\n    \"show\": \"202609\",\n})\nprint(r)",
                "node": "const r = await virtApi('monitor', {\n  svs: '101',\n  show: '202609',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "status-logs",
            "titulo": "Ver o histórico de estado da VPS",
            "act": "statuslogs",
            "metodo": "GET",
            "cloud": false,
            "artigo": "monitoramento",
            "grupo": "Monitoramento",
            "resumo": "Lista os registros de estado da VPS ao longo do tempo.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=statuslogs&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('statuslogs', [\n    'svs' => '101',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"statuslogs\", get={\n    \"svs\": \"101\",\n})\nprint(r)",
                "node": "const r = await virtApi('statuslogs', {\n  svs: '101',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "logs",
            "titulo": "Ver os logs da VPS",
            "act": "logs",
            "metodo": "GET",
            "cloud": false,
            "artigo": "monitoramento",
            "grupo": "Monitoramento",
            "resumo": "Lista os logs de ações da VPS.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=logs&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('logs', [\n    'svs' => '101',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"logs\", get={\n    \"svs\": \"101\",\n})\nprint(r)",
                "node": "const r = await virtApi('logs', {\n  svs: '101',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "tasks",
            "titulo": "Ver as tarefas da VPS",
            "act": "ctasks",
            "metodo": "GET",
            "cloud": false,
            "artigo": "monitoramento",
            "grupo": "Monitoramento",
            "resumo": "Lista, com detalhes, as tarefas executadas na VPS. Útil para conferir se uma operação que a API só iniciou, como reinstalação ou backup, já terminou.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=ctasks&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('ctasks', [\n    'svs' => '101',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"ctasks\", get={\n    \"svs\": \"101\",\n})\nprint(r)",
                "node": "const r = await virtApi('ctasks', {\n  svs: '101',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "enduser-list-processes",
            "titulo": "Listar os processos da VPS",
            "act": "processes",
            "metodo": "GET",
            "cloud": false,
            "artigo": "monitoramento",
            "grupo": "Monitoramento",
            "resumo": "Lista os processos que rodam dentro da VPS.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=processes&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('processes', [\n    'svs' => '101',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"processes\", get={\n    \"svs\": \"101\",\n})\nprint(r)",
                "node": "const r = await virtApi('processes', {\n  svs: '101',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "enduser-kill-processes",
            "titulo": "Encerrar processos da VPS",
            "act": "processes",
            "metodo": "POST",
            "cloud": false,
            "artigo": "monitoramento",
            "grupo": "Monitoramento",
            "resumo": "Encerra um ou mais processos dentro da VPS, pelo PID.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "sel_proc[]",
                    "onde": "post",
                    "tipo": "lista de números",
                    "obrig": true,
                    "exemplo": [
                        "144",
                        "7270"
                    ],
                    "desc": "PIDs dos processos. Repita o campo para cada um."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=processes&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'sel_proc[]=144' \\\n  --data-urlencode 'sel_proc[]=7270'",
                "php": "$r = virt_api('processes', [\n    'svs' => '101',\n], [\n    'sel_proc' => ['144', '7270'],\n]);\nprint_r($r);",
                "python": "r = virt_api(\"processes\", get={\n    \"svs\": \"101\",\n}, post={\n    \"sel_proc[]\": [\"144\", \"7270\"],\n})\nprint(r)",
                "node": "const r = await virtApi('processes', {\n  svs: '101',\n}, {\n  sel_proc: ['144', '7270'],\n});\nconsole.log(r);"
            }
        },
        {
            "id": "enduser-list-services",
            "titulo": "Listar os serviços da VPS",
            "act": "services",
            "metodo": "GET",
            "cloud": false,
            "artigo": "monitoramento",
            "grupo": "Monitoramento",
            "resumo": "Lista os serviços da VPS e diz quais estão rodando e quais sobem no boot.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=services&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\"",
                "php": "$r = virt_api('services', [\n    'svs' => '101',\n]);\nprint_r($r);",
                "python": "r = virt_api(\"services\", get={\n    \"svs\": \"101\",\n})\nprint(r)",
                "node": "const r = await virtApi('services', {\n  svs: '101',\n});\nconsole.log(r);"
            }
        },
        {
            "id": "start-service",
            "titulo": "Iniciar serviços",
            "act": "services",
            "metodo": "POST",
            "cloud": false,
            "artigo": "monitoramento",
            "grupo": "Monitoramento",
            "resumo": "Inicia um ou mais serviços dentro da VPS.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "start_x",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma."
                },
                {
                    "nome": "sel_serv[]",
                    "onde": "post",
                    "tipo": "lista de textos",
                    "obrig": true,
                    "exemplo": [
                        "nginx"
                    ],
                    "desc": "Nomes dos serviços. Repita o campo para cada um."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=services&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'start_x=1' \\\n  --data-urlencode 'sel_serv[]=nginx'",
                "php": "$r = virt_api('services', [\n    'svs' => '101',\n], [\n    'start_x' => '1',\n    'sel_serv' => ['nginx'],\n]);\nprint_r($r);",
                "python": "r = virt_api(\"services\", get={\n    \"svs\": \"101\",\n}, post={\n    \"start_x\": \"1\",\n    \"sel_serv[]\": [\"nginx\"],\n})\nprint(r)",
                "node": "const r = await virtApi('services', {\n  svs: '101',\n}, {\n  start_x: '1',\n  sel_serv: ['nginx'],\n});\nconsole.log(r);"
            }
        },
        {
            "id": "stop-services",
            "titulo": "Parar serviços",
            "act": "services",
            "metodo": "POST",
            "cloud": false,
            "artigo": "monitoramento",
            "grupo": "Monitoramento",
            "resumo": "Para um ou mais serviços dentro da VPS.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "stop_x",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma."
                },
                {
                    "nome": "sel_serv[]",
                    "onde": "post",
                    "tipo": "lista de textos",
                    "obrig": true,
                    "exemplo": [
                        "nginx"
                    ],
                    "desc": "Nomes dos serviços. Repita o campo para cada um."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=services&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'stop_x=1' \\\n  --data-urlencode 'sel_serv[]=nginx'",
                "php": "$r = virt_api('services', [\n    'svs' => '101',\n], [\n    'stop_x' => '1',\n    'sel_serv' => ['nginx'],\n]);\nprint_r($r);",
                "python": "r = virt_api(\"services\", get={\n    \"svs\": \"101\",\n}, post={\n    \"stop_x\": \"1\",\n    \"sel_serv[]\": [\"nginx\"],\n})\nprint(r)",
                "node": "const r = await virtApi('services', {\n  svs: '101',\n}, {\n  stop_x: '1',\n  sel_serv: ['nginx'],\n});\nconsole.log(r);"
            }
        },
        {
            "id": "enduser-restart-services",
            "titulo": "Reiniciar serviços",
            "act": "services",
            "metodo": "POST",
            "cloud": false,
            "artigo": "monitoramento",
            "grupo": "Monitoramento",
            "resumo": "Reinicia um ou mais serviços dentro da VPS.",
            "params": [
                {
                    "nome": "svs",
                    "onde": "get",
                    "tipo": "número",
                    "obrig": true,
                    "exemplo": "101",
                    "desc": "Id da VPS."
                },
                {
                    "nome": "restart_x",
                    "onde": "post",
                    "tipo": "1",
                    "obrig": true,
                    "exemplo": "1",
                    "desc": "Confirma."
                },
                {
                    "nome": "sel_serv[]",
                    "onde": "post",
                    "tipo": "lista de textos",
                    "obrig": true,
                    "exemplo": [
                        "nginx"
                    ],
                    "desc": "Nomes dos serviços. Repita o campo para cada um."
                }
            ],
            "exemplos": {
                "curl": "curl -sS \"https://$VIRT_HOST:4083/index.php?act=services&svs=101&api=json&apikey=$VIRT_KEY&apipass=$VIRT_PASS\" \\\n  --data-urlencode 'restart_x=1' \\\n  --data-urlencode 'sel_serv[]=nginx'",
                "php": "$r = virt_api('services', [\n    'svs' => '101',\n], [\n    'restart_x' => '1',\n    'sel_serv' => ['nginx'],\n]);\nprint_r($r);",
                "python": "r = virt_api(\"services\", get={\n    \"svs\": \"101\",\n}, post={\n    \"restart_x\": \"1\",\n    \"sel_serv[]\": [\"nginx\"],\n})\nprint(r)",
                "node": "const r = await virtApi('services', {\n  svs: '101',\n}, {\n  restart_x: '1',\n  sel_serv: ['nginx'],\n});\nconsole.log(r);"
            }
        }
    ]
}