---
title: Resellers (white-label)
description: Permita que parceiros revendam sua nuvem com a marca e o domínio deles — crie um revendedor, defina domínios, DNS, preços de atacado e padrões.
url: https://nexcmp.com/pt/docs/customers/resellers/
applies_to: NexCMP 1.6.1
updated: 2026-11-02
---

# Resellers (white-label) {#resellers-white-label}

> **Onde no admin:** Customers › Resellers › List (`/resellers`), Domains & SSL (`/resellers/domains`), Permissions & wholesale (`/resellers/entitlements`), Defaults (`/resellers/settings`). Vagas de revendedores: System › Admin › License & updates (`/license`).

## O que faz {#what-it-does}

Um **revendedor** obtém uma cópia com marca própria do portal do cliente no **seu próprio domínio**, com seus próprios clientes, carteira, preços e (opcionalmente) canais de pagamento. Eles compram de você a preço de atacado e vendem pelo próprio preço. Os clientes deles nunca veem a sua marca, e o domínio do revendedor nunca pode abrir o seu console administrativo. O revendedor gerencia seu negócio pelo **console de parceiros** em `https://partner.<your-domain>`.

## Requisitos {#requirements}

| Item | Requisito |
|---|---|
| Licença | Uma **vaga de domínio de revendedor** na sua licença para cada domínio de revendedor personalizado. A página de licença exibe `used/max` vagas e um link para comprar mais. Sem uma vaga livre, adicionar um domínio falhará com a mensagem "Out of license reseller domain slots". |
| DNS | Cada domínio de revendedor deve apontar para o seu servidor (consulte abaixo). |
| Servidor web e TLS | O nome do host deve alcançar o painel do NexCMP por meio do seu proxy reverso com um certificado válido para esse nome. |
| E-mail | SMTP configurado para os e-mails de convite e notificação. |
| Chave principal | **Reseller settings › General › `rs_enabled`** está ativado por padrão. |

## Preparar a infraestrutura {#prepare-the-infrastructure}

1. Defina o endereço público do servidor: seu endereço IPv4 e, se preferir CNAMEs, um nome de host que aponte para ele (por exemplo, `sites.cloud.example.com`).
2. Abra **Customers › Resellers › Defaults** (`/resellers/settings`), no grupo **Domains & SSL**, e defina:

   | Chave | Significado |
   |---|---|
   | `rs_server_ipv4` | O IPv4 público para o qual os registros A dos revendedores devem apontar. |
   | `rs_cname_target` | O nome de host para o qual os registros CNAME dos revendedores devem apontar. |
   | `rs_master_hosts` | Nomes de host que pertencem ao seu próprio site principal (não podem ser fornecidos a revendedores). |
   | `rs_platform_domain` | Domínio pai opcional para **subdomínios da plataforma** (por exemplo, `partners.cloud.example.com` para fornecer `acme.partners.cloud.example.com` aos revendedores). Deixar vazio desativa a opção. |
   | `rs_sites_stale_minutes` | Minutos antes de o serviço de certificado ser considerado desatualizado (padrão 15). |
   | `rs_ssl_fail_hours` | Horas de tentativas falhas antes de um erro ser disparado (padrão 48). |

   ::: warning Verifique estes valores antes de enviar as instruções
   `rs_server_ipv4`, `rs_cname_target` e `rs_master_hosts` vêm preenchidos com valores de exemplo. Substitua-os pelo seu próprio servidor e domínio **antes** de fornecer as instruções de DNS a um revendedor; caso contrário, as instruções na tela apontarão para o lugar errado.
   :::

3. Clique em **Save** (será solicitada uma justificativa).
4. Certifique-se de que seu proxy reverso encaminhe os nomes de host dos revendedores para o painel do NexCMP e sirva um certificado para cada um deles. O instalador configura o nginx e o Let's Encrypt apenas para o domínio principal (e para os nomes `admin.` e `partner.` que resolvem). Se você usar a Cloudflare, faça o proxy do nome de host e use o modo Full SSL.

## Conectar no NexCMP {#connect-in-nexcmp}

### Criar o revendedor {#create-the-reseller}

1. Abra **Customers › Resellers › List** e clique em **New reseller**. O assistente possui 8 etapas e provisiona tudo no final; cada etapa pode ser repetida com segurança.

   | Etapa | Preencher |
   |---|---|
   | **Reseller** | Nome legal ou comercial, **slug** (4 a 31 caracteres de a–z, 0–9 ou `-`, começando com uma letra; também é o prefixo da fatura), nome de contato, e-mail e telefone, idioma padrão, detalhes de faturamento do revendedor (como comprador de recargas de saldo). |
   | **Console account** | Nome de usuário, e-mail da conta, nome completo; **Send a one-time invite link by e-mail** (válido por 72 horas, recomendado) ou exibir uma senha temporária uma única vez. |
   | **Brand** | Nome da marca, nome curto, slogans, cores primárias, e-mail e telefone de suporte, nome do vendedor impresso nas faturas dos clientes, logotipos (fundo claro e escuro), ícone quadrado e favicon: PNG, JPEG, WEBP ou ICO de até 256 KB, **sem SVG**. |
   | **Domains** | O(s) domínio(s) do cliente **também com www**, qual deles é o principal, um **domínio de teste** (sslip.io) e a opção de **dry-run**, ou um subdomínio da plataforma. O assistente exibe **DNS OK / DNS not ready** e os registros a criar. |
   | **Pricing & wallet** | Desconto de atacado (%), piso de varejo (% da tabela), margem padrão (%), limite de crédito, saldo inicial, alerta de saldo baixo, limites de clientes, VMs e domínios, recursos do site (cadastro de clientes, proteção DDoS, tickets de suporte, plano personalizado, redimensionamento, Auto Scaling). |
   | **Payment channels** | Quem coleta os pagamentos dos clientes (veja abaixo) e o PayPal próprio e transferência bancária do Vietnã opcionais. |
   | **Email** | Nome do remetente e Reply-To. O endereço From permanece o endereço da plataforma até que o DKIM seja configurado para o domínio do revendedor. |
   | **Review** | Verifique tudo e clique em **Provision everything**, ou **Save draft (provision later)**. |

2. O provisionamento continua em segundo plano (a cada 30 segundos). Abra o revendedor para ver o progresso e use **Continue provisioning** ou **Retry** se alguma etapa falhar.

![Novo assistente de revendedor na primeira etapa com valores de exemplo](https://nexcmp.com/pt/docs/images/customers/resellers-01-wizard.webp)

### Apontar o DNS (o revendedor faz isso) {#point-dns-the-reseller-does-this}

O revendedor (ou você) cria os registros exibidos na aba **Domains & SSL**:

| Registro | Name | Valor |
|---|---|---|
| TXT (propriedade, apenas na primeira vez) | `_site-verify.<domain>` | `sv=<token>` exibido na tela |
| A (domínio raiz como `shop.example.net`) | o domínio | seu `rs_server_ipv4` |
| CNAME (subdomínio como `cloud.example.net`) | o domínio | seu `rs_cname_target` (ou um registro A para `rs_server_ipv4`) |
| CNAME (opcional) | `www.<domain>` | seu `rs_cname_target` |

Além disso:

- Remova qualquer registro **AAAA** (IPv6), a menos que seu servidor responda nesse endereço IPv6.
- Desative o proxy da CDN (**off**, nuvem cinza) enquanto o domínio estiver sendo verificado.
- Se o domínio tiver registros **CAA**, permita `letsencrypt.org`.

O token no registro TXT é diferente para cada domínio; copie-o da tela. O sistema verifica novamente o DNS a cada 5 minutos nas primeiras 48 horas, depois a cada hora, e libera um nome cujo registro TXT ainda esteja ausente após 72 horas.

### Estados do domínio {#domain-states}

Em **Customers › Resellers › Domains & SSL** (todos os revendedores) e na aba **Domains & SSL** de um revendedor:

| Estado | Significado |
|---|---|
| `pending_verify` | Aguardando o registro TXT. |
| `pending_dns` / `verifying` | Aguardando o A ou CNAME apontar para você. |
| `issuing` | Certificado sendo emitido. |
| `active` | Atendendo ao site do revendedor. |
| `cert_expiring` | Certificado próximo da expiração; renovação esperada. |
| `dns_lost` | O DNS parou de apontar para você; após 30 dias, o domínio é removido. |
| `error` | Veja o código de erro; **Retry** após corrigir. |
| `removing` / `removed` | Sendo removido; o slot de licença é devolvido. |

Ações da linha: **Check now**, **Retry**, **Make primary**, **Test mode** (para um domínio de teste), **Remove**.


## Permissões e atacado {#permissions-wholesale}

**Customers › Resellers › Permissions & wholesale** (`/resellers/entitlements`) é uma matriz: uma linha por revendedor, com o **desconto** e a **margem** de atacado e um botão de alternância por serviço (por exemplo, DDoS Shield e VPN). Um botão pode ser editado quando o recurso global da plataforma estiver ativado; caso contrário, a célula é somente leitura e aponta para a configuração. A sub-aba **Top-up codes** define quantos códigos cada revendedor pode emitir por mês (consulte [Promotions](https://nexcmp.com/pt/docs/billing/promotions/)).

Regras de preços:

- Preço de atacado = preço de tabela x (1 - desconto), podendo ser substituído por plano e por ciclo de cobrança na aba **Wholesale pricing** do revendedor.
- O revendedor define os preços de varejo e não pode ficar abaixo do **floor** (percentual da tabela).
- A **carteira** do revendedor paga o preço de atacado quando os clientes dele compram. A carteira possui limite de crédito, período de carência e teto de saldo devedor (consulte Defaults).

## Padrões {#defaults}

**Customers › Resellers › Defaults** (`/resellers/settings`) são as chaves `rs_*` que se aplicam a todos os revendedores. Cada alteração solicita um motivo e é auditada.

| Grupo | Chave | Padrão | Significado |
|---|---|---|---|
| Geral | `rs_enabled` | 1 | Programa de revendedores ativado. |
| | `rs_platform_collect_enabled` | 0 | Permite que a plataforma colete pagamentos de clientes para revendedores. **Ative apenas após revisão jurídica.** |
| | `rs_totp_required` | 1 | As contas do console de revendedor devem usar autenticação de dois fatores. |
| | `rs_agreement_version` | 1 | Versão do contrato de revenda que eles devem aceitar. |
| Preços padrão | `rs_default_discount_bp` | 2000 (20 %) | Desconto de atacado para novos revendedores (pontos-base, de 0 a 9000). |
| | `rs_default_markup_bp` | 2500 (25 %) | Margem padrão (de 0 a 50000). |
| | `rs_default_floor_bp` | 9000 (90 %) | Piso de varejo (de 0 a 20000). |
| | `rs_default_max_domains` | 3 | Domínios permitidos por revendedor. |
| Carteira e pagamentos | `rs_grace_hours` | 72 | Carência antes que os serviços dos clientes sejam afetados por uma carteira de revendedor vazia. |
| | `rs_overdraft_cap_cents` | 5000 | Saldo devedor permitido na carteira. |
| | `rs_retention_days` | 14 | Dias antes que as VMs de um revendedor encerrado sejam destruídas. |
| | `rs_payout_hold_days` | 30 | Dias em que uma comissão fica retida antes de poder ser sacada. |
| | `rs_payout_min_cents` | 5000 | Menor saque. |
| | `rs_topup_min_cents` | 2000 | Menor recarga de carteira por um revendedor. |
| Pagamentos e e-mail | `rs_webhook_base` | vazio | URL base pública para webhooks de gateway de revendedor (vazio = usar a URL do site). |
| | `rs_mail_from` | vazio | Endereço do remetente para e-mails de revendedores. |
| | `rs_invoice_show_processor` | 1 | Exibir o processador de pagamentos nas faturas. |
| | `rs_gw_stripe_enabled`, `rs_gw_usdt_enabled` | 1 | Se os revendedores podem configurar seu próprio Stripe ou USDT. |

## Quem coleta os pagamentos dos clientes {#who-collects-customer-payments}

| Modo | Significado |
|---|---|
| **O revendedor coleta (canais próprios)** — padrão | O revendedor conecta sua própria conta do Stripe, PayPal, USDT ou conta bancária. Os webhooks deles são `https://<reseller-domain>/v1/billing/<gateway>/webhook/r/<id>`. Cartões salvos e o recurso [auto top-up](https://nexcmp.com/pt/docs/billing/auto-top-up/) não estão disponíveis para esses sites. |
| **A plataforma coleta** | Seus canais são exibidos no site do revendedor. Bloqueado até `rs_platform_collect_enabled = 1`. |
| **Misto** | Uma combinação escolhida por canal. |

## O que o revendedor vê {#what-the-reseller-sees}

O console de parceiro em `https://partner.<your-domain>` possui Visão geral, Relatórios, Clientes, VMs, Tickets, Pedidos, Pagamentos, Preços, Marca, Landing & legal, Domínios e SSL, E-mail, Carteira e Canais de pagamento. As contas do console possuem a função *reseller* (completa) ou *staff* (somente leitura). Para conferir você mesmo, abra o revendedor e clique em **Sign in to partner console**: você entra por 60 minutos, cada gravação é registrada com seu nome tanto no log do admin quanto no log do revendedor, e as operações financeiras exigem uma segunda confirmação.

## Verificar {#verify}

1. Após o provisionamento, a linha da lista do revendedor exibe *active* e uma coluna **Provisioning** verde.
2. Abra o domínio do revendedor em um navegador: a própria página de login do revendedor aparece com sua marca. `https://<reseller-domain>/admin` retorna 404.
3. Cadastre um cliente de teste nesse domínio: o cliente aparece em **Customers › List** com o revendedor na coluna **Site**.
4. A página de licença mostra um slot usado a mais.

## Limites e notas {#limits-notes}

- Um slot de licença por domínio personalizado ou de teste; subdomínios da plataforma não usam slot.
- Suspender um revendedor mantém os dados; **Close reseller** devolve todos os slots de domínio, e a exclusão da VM só é permitida após o período de retenção.
- Os clientes dos revendedores aparecem na sua lista de clientes e podem ser acessados por impersonação como qualquer outro (o link abre no domínio do revendedor).
- Os revendedores não podem ver nem alterar seus canais de pagamento, padrões de cotas ou outros revendedores.

## Resolução de problemas {#troubleshooting}

| Sintoma | Causa | Correção |
|---|---|---|
| Out of license reseller domain slots | Todos os slots usados | Libere um slot (remova um domínio) ou compre mais na página de licença. |
| Domínio travado em `pending_verify` | Registro TXT ausente | Crie o registro TXT exatamente como mostrado; use **Check now**. |
| Domínio travado em `pending_dns` | A/CNAME não aponta para você, um registro AAAA ou o proxy do CDN está ativado | Corrija o DNS, desative o proxy e clique em **Check now**. |
| Estado `error` | Consulte o código na linha (por exemplo, CAA bloqueando o Let's Encrypt, limite de taxa) | Corrija e clique em **Retry**. |
| O navegador diz que o host é desconhecido ou "421" | O nome do host não está na licença ou não está roteado para o painel | Adicione o domínio por meio do revendedor (consome um slot) e corrija o proxy reverso. |
| As instruções mostram um IP ou host incorreto | `rs_server_ipv4` / `rs_cname_target` ainda contêm os valores de exemplo | Defina-os em Defaults. |
| O revendedor não pode ativar a cobrança da plataforma | Bloqueado | Defina `rs_platform_collect_enabled` após análise jurídica. |


