Dashboard
Visão geral do seu sistema IPTV premium
📄 Documentos mais recentes
| Funcionalidade | Nome | Canais | Atualizado |
|---|
Canais D1
| Funcionalidade | Canal | Categoria | URL | Documento de origem | Ações |
|---|
Criador de canais
Crie canais com várias fontes — se uma cair, troca automaticamente · opção de excluir sozinho se ficar offline
| Canal | Fontes | Fonte ativa | Consumo | Criado | Ações |
|---|
Nenhum canal criado ainda. Clique em + Novo canal.
Categorias
Crie categorias e arraste os canais criados para dentro delas
🎬 Canais criados
Arraste para uma categoria ou use + (categoria ativa)
Nenhum canal criado. Crie canais no Criador de canais.
Pacotes
Agrupe categorias e distribua para os clientes
| Pacote | Categorias | Canais | Criado | Ações |
|---|
Nenhum pacote ainda.
Clientes
Cada cliente tem uma URL registrada · 0 conexões = ilimitado · o link da lista usa o domínio atual do painel
| Cliente | URL registrada | Pacotes | Conexões | Validade | Status | Lista M3U | Ações |
|---|
Nenhum cliente ainda.
Usuários Online
Quem está assistindo agora — cliente, IP, canal e início da sessão · atualiza a cada 5s
| Cliente | IP | Provedor / País | Canal assistindo | Início da sessão | Duração | Dispositivo |
|---|
Bitrate por canal
Consumo real de cada canal servido pelo painel ou pelos balances · atualiza a cada 5s
| Canal | Origem | Assistindo | Bitrate | Consumo | Última atividade |
|---|
Balance
Servidores que executam os streams · sem balance, tudo roda no painel principal · fan-out por balance
Nenhum balance ainda. Clique em + Novo balance para cadastrar o IP, usuário (root) e senha — o sistema instala o agente e os canais passam a ser servidos por ele.
Logs de acesso
Quem consultou as listas e quem foi bloqueado (URL, validade, limite de conexões)
| Quando | Cliente | Tipo | Status | IP | Host usado | Canal |
|---|
Guia de Programação (EPG)
Adicione fontes XMLTV — o sistema baixa, junta e gera o XML por cliente · a lista M3U já vem com o link embutido
➕ Adicionar fonte EPG
✨ Sugestões brasileiras (funcionando) — clique para preencher:
📺 Fontes cadastradas
Link do XML gerado (o mesmo que a lista embute): …
| Fonte | URL | Status | Canais no XML | Usado por | Atualizado | Ações |
|---|
Nenhuma fonte adicionada ainda. Adicione o link de um XMLTV acima (ou use uma sugestão) e depois, no Criador de canais, escolha a fonte EPG de cada canal e selecione o canal da grade.
Filmes e Séries
Adicione a URL da sua lista — o painel NÃO baixa nada · os links do cliente redirecionam para o servidor de filmes
➕ Adicionar lista de filmes e séries
🎬 Como funciona (100% leve): o painel guarda só a URL e lê a lista (texto, poucos KB) para montar a M3U do cliente. Na lista que o cliente baixa, os filmes/séries aparecem com link deste sistema (/vod/{{token}}/{{lista}}/{{nº}}) e o sistema faz redirect (302) para o servidor de filmes — sem proxy: o vídeo e a capa são carregados direto do servidor de filmes. Nada pesa onde o painel roda.
🎬 Listas cadastradas
| Lista | URL | Status | Itens | Ativa | Atualizado | Ações |
|---|
Nenhuma lista adicionada. Cole a URL da sua lista de filmes/séries (M3U) acima — o painel lê o índice e os clientes veem tudo na M3U deles.
API Xtream
Conversor para apps com suporte a Xtream Codes · hospede os arquivos PHP em qualquer host · nada muda nas listas e canais atuais
🔑 Token da API
O token é embutido nos arquivos baixados — só quem tem os arquivos consegue falar com o painel. Se você regenerar, os arquivos baixados antes param de funcionar (baixe de novo).
…
🔐 Acesso ao painel externo (API Master)
Escolha qual grupo de usuários tem acesso à API Master — o painel externo (ex.: PainelMaster) que gerencia revendas, clientes e pacotes por URL + token. Com um grupo escolhido, as chamadas da API Master passam a exigir também as credenciais de um usuário do painel desse grupo (via ?usuario=&senha= ou headers X-Revenda-Usuario/X-Revenda-Senha) — sem elas, 401. “Todos os grupos” mantém o comportamento atual (só o token).
📦 Arquivos para download
Baixe os 4 arquivos e hospede juntos em qualquer lugar com PHP (cPanel, Hostinger, XAMPP, VPS…). Eles já vêm com a URL atual do painel e o token embutidos.
🚀 Como usar
- Baixe os 4 arquivos acima e envie para o mesmo diretório do seu host PHP (ex.: public_html/ ou htdocs/).
- No app com suporte a Xtream (TiviMate, Smarters, IBO Player, XCIPTV…), adicione a conta:
- URL: o endereço de onde você hospedou (ex.: https://seusite.com)
- Usuário/Senha: as credenciais do cliente (aba ◉ Clientes — cada cliente tem usuário e senha, automáticos ou manuais)
- Pronto — o app conversa com o seu painel como se fosse um Xtream UI, mas a lista e os canais continuam no formato atual (/playlist/{token}.m3u e /stream/{token}/{canal}), com failover, fan-out, EPG, bloqueio por domínio e validade valendo normalmente.
💡 Se o host não tiver mod_rewrite (Apache), os streams ainda funcionam pelo app chamando a URL completa player_api.php?username=U&password=P&action=stream&stream_id=N — mas a maioria dos apps usa o padrão live/…, então prefira Apache com mod_rewrite.
Documento
Painel de revenda — todas as chamadas da API usando o conversor Xtream · validação por token + DNS do site onde o PHP fica
🏷️ Como funciona a revenda
Você baixa os 4 arquivos PHP (aba 🔌 API Xtream) e hospeda no site do revendedor. A validação tem duas partes:
- 🔑 Token — embutido nos arquivos baixados. Só quem tem os arquivos consegue falar com o seu painel. Se regenerar, os arquivos antigos param de funcionar.
- 🌐 DNS — o endereço do site onde o PHP está hospedado (ex.: revenda.com). É essa URL que o revendedor passa para os clientes: revenda.com/player_api.php?username=…&password=…
O cliente usa as credenciais dele (aba ◉ Clientes) com a URL do site da revenda. A lista e os canais continuam no formato atual do painel — failover, fan-out, EPG, bloqueio por domínio e validade valendo normalmente.
🧩 Integrar outro painel (tipo Master — URL + token)
Um painel de revenda (ex.: PainelMaster, CloudPanel etc.) pode se conectar a este sistema como um servidor do tipo Master usando apenas URL + token — sem access code, sem credenciais XUI.
- Na aba 🔌 API Xtream deste painel, copie o token da API (ou regenere um novo).
- No outro painel, crie um servidor do tipo Master e informe: URL = endereço deste painel (ex.: https://meusistema.com) e Token = o token copiado.
- O outro painel valida a conexão chamando {URL}/api/xtream/{token}/autenticar: 200 = token válido, 401 = token inválido (ou URL errada).
- Depois de conectado, o outro painel pode testar a conexão, ver o status (online/offline) e acompanhar que o RangePorts responde.
Importante: as listas e os canais continuam saindo deste painel (/playlist/{token}.m3u e /stream/{token}/{id}), sempre com o domínio de quem acessa. O outro painel não substitui este sistema — ele só valida a conexão (URL + token) e usa a API de ponte Xtream para apps. Para funcionar de verdade, o domínio do cliente continua precisando estar cadastrado aqui (ou ser o domínio deste painel).
🔄 Integração real (API Master) — revendas, clientes e pacotes
Além de validar a conexão, um painel externo (ex.: PainelMaster) pode gerenciar de verdade este sistema com o mesmo token — usuário do RangePorts (função revenda) = revenda no PainelMaster, cliente do RangePorts = cliente do PainelMaster, e os pacotes são puxados daqui. A duração dos pacotes e os testes são definidos no PainelMaster (admin) — este painel apenas registra o cliente com a validade/limite que o outro painel calculou.
- Pacotes — GET {URL}/api/xtream/{token}/pacotes → lista com id, nome, categorias e listas de filmes/séries. O PainelMaster importa e o admin ajusta duração/teste/valor lá.
- Clientes — GET/POST /api/xtream/{token}/clientes (lista/cria), PUT /api/xtream/{token}/clientes/{id} (edita parcial), POST /api/xtream/{token}/clientes/{id}/bloqueio (bloqueia/desbloqueia) e DELETE /api/xtream/{token}/clientes/{id} (exclui). Ao criar, devolve id, token (a playlist do cliente é /playlist/{token}.m3u), username e senha.
- Revendas — POST /api/xtream/{token}/usuarios cria (ou devolve existente) o usuário revenda; GET /api/xtream/{token}/usuarios lista. O PainelMaster cria a revenda aqui e passa o revendaId ao criar clientes — assim os clientes da revenda do PainelMaster ficam vinculados à revenda do RangePorts.
- Regras valendo — bloqueio, validade, limite de conexões, domínio cadastrado e vídeos (informativo/vencido/limite) continuam funcionando normalmente, pois o cliente é registrado neste painel.
🗂️ Grupos de usuários e acesso ao painel externo
Como os usuários do painel são revendas, você pode organizá-los em grupos (aba ♛ Usuários — criar/renomear/excluir grupos e encaixar cada usuário em um) e escolher qual grupo tem acesso ao painel externo (aba 🔌 API Xtream → “Acesso ao painel externo”).
- Sem restrição (padrão) — “Todos os grupos”: a API Master funciona só com o token, como sempre.
- Com um grupo escolhido — além do token, cada chamada da API Master exige as credenciais de um usuário do painel do grupo escolhido (função revenda): ?usuario=REV&senha=SENHA ou headers X-Revenda-Usuario/X-Revenda-Senha. Sem as credenciais → 401; usuário de outro grupo → 403.
- Revendas criadas pelo painel externo — POST /api/xtream/{token}/usuarios aceita grupoId no body; sem ele, a revenda entra automaticamente no grupo com acesso ao painel externo (se houver um configurado).
- Grupos na resposta — GET /api/xtream/{token}/usuarios devolve grupo_id e grupo (nome) em cada usuário.
👁 Usuários online — endpoint de monitoramento
Consulte em tempo real quem está assistindo agora (sessões de stream no painel e nos balances, atualizadas a cada 5s na aba 👁 Usuários Online). Requer sessão autenticada do painel.
{painel}/api/sistema/online?search={nome_ou_canal}&page=1&pageSize=50
{
"items": [
{ "clienteId": 37, "nome": "João Silva", "ip": "189.10.20.30",
"provedor": "Vivo Fibra", "pais": "Brazil",
"canalId": 12, "canal": "CANAL X",
"userAgent": "VLC/3.0.20 LibVLC/3.0.20",
"iniciadoEm": "2026-08-12T14:03:22.000Z" }
],
"total": 1, "page": 1, "pageSize": 50
}
O mesmo dado aparece na aba 👁 Usuários Online com nome, IP (IPv4), provedor e país (GeoIP via ip-api.com, cache de 24h por IP — preenche em 2º plano nas atualizações seguintes), canal assistido, início/duração da sessão e o dispositivo (User-Agent do player). Canais servidos por balances entram na lista via heartbeat do agente (o balance precisa ter sido instalado/reinstalado com esta versão do agente).
📊 Bitrate por canal — endpoint de consumo real
Consumo real (kbps suavizado) de cada canal sendo assistido — servido pelo painel ou por um balance (chega via heartbeat do agente). Requer sessão autenticada do painel.
{painel}/api/sistema/bitrates?search={canal_ou_balance}&page=1&pageSize=20
{
"items": [
{ "canalId": 12, "canal": "CANAL X", "onde": "balance",
"ondeNome": "Balance SP 10G", "viewers": 8,
"kbps": 4320, "updatedAt": "2026-08-12T14:03:22.000Z" }
],
"total": 1, "page": 1, "pageSize": 20,
"totalKbps": 4320, "viewersTotal": 8
}
kbps é a média suavizada dos últimos ~5s (para converter em Mbps, divida por 1000). O mesmo dado aparece na aba 📊 Bitrate, com barra visual, viewers e origem (◈ painel ou ⚖ balance). Sem dados por 45s o canal some da lista (ninguém assistindo).
📘 Manual da revenda — passo a passo detalhado
1 · Criar o usuário da revenda
- Entre como administrador e abra a aba ♛ Usuários (Administração).
- Preencha o nome de usuário e a senha (mín. 6) e escolha a função “🔁 Revenda — cria e gerencia os clientes dela”.
- Clique em + Adicionar. Pronto — está criado o login do revendedor.
- O revendedor entra no painel com esse usuário e vê apenas a gestão de clientes (◉ Clientes e ⌘ Minha conta): ele cria, edita, bloqueia e exclui os clientes dele, mas não vê canais, pacotes, configurações nem os clientes de outros revendedores.
- O administrador continua vendo e gerenciando todos os clientes (os da revenda inclusive).
💡 Se a revenda precisar limitar quantos clientes ela pode criar, o controle é feito pelo pacote/validade de cada cliente — o admin acompanha tudo nos logs e nas conexões.
2 · Criar clientes (campo a campo)
Na aba ◉ Clientes, clique em + Novo cliente. O formulário em 2 colunas tem tudo:
- Nome — identificação (ex.: “João Silva”).
- URL registrada — o domínio do cliente (ex.: minhadns.com). A lista só funciona nesse domínio (ou nos domínios adicionais); domínio de fora → vídeo.
- Usuário / Senha — credenciais usadas nos apps Xtream (aba 🔌 API Xtream). Vazio = automático (usuário do nome + senha aleatória); botão 🎲 gera na hora; na edição, senha vazia mantém a atual.
- Conexões — quantos streams simultâneos; 0 = ilimitado.
- Validade — data final (vazio = sem validade). Vencido → vídeo de vencido + link de renovação no texto da playlist.
- Bloqueado — trava o cliente na hora (vídeo informativo).
- Pacotes — o que o cliente recebe (categorias de canais + listas de filmes/séries); pode marcar mais de um.
- Domínios adicionais — franquias/domínios extras do cliente (a lista funciona em todos).
- IPs permitidos — anti-roubo: se preencher, só aceita de IPs/CIDR cadastrados; vazio = aceita qualquer IP.
- Vídeos — pré-visualização de qual vídeo o cliente recebe quando bloqueado/vencido/sem URL (definidos em ⚙ Configurações).
Depois de salvar, aparecem o link da lista ({painel}/playlist/{token}.m3u) e os botões 📋 copiar / ⬇ baixar / ↗ abrir. Troque o token do cliente pelo link de cada um.
3 · Como os pacotes aparecem
O cliente recebe a união do que estiver marcado nos pacotes dele:
| Marcado no pacote | O cliente recebe |
|---|---|
| Categoria de canais + lista de filmes/séries | Canais + Filmes e Séries |
| Só categorias de canais | Só canais |
| Só listas de filmes/séries | Só filmes e séries |
| Nada marcado | Nada (cliente vazio) |
Com vários pacotes, é a união de todos (ex.: pacote A só canais + pacote B só filmes → o cliente tem canais e filmes). Onde aparece:
- Playlist M3U (/playlist/{token}.m3u) — os canais das categorias + os filmes/séries das listas marcadas, com links do painel.
- Ponte Xtream (PHP na revenda) — get_live_categories/streams mostram os canais e get_vod/series mostram filmes/séries; live/…, movie/… e series/… redirecionam para o stream real.
- EPG — se o canal tiver fonte EPG, a playlist já vem com url-tvg e o XML gerado aparece no player.
Valem as regras de sempre: domínio cadastrado ou do painel funciona; domínio de fora, cliente bloqueado, vencido ou acima do limite de conexões → o vídeo correspondente (informativo / vencido / limite, conforme ⚙ Configurações).
🌐 Dados da revenda
Deixe vazio para usar o endereço atual do painel. As chamadas abaixo são geradas com esse DNS.
☎️ Todas as chamadas da API
Cada chamada com botão de copiar. Troque {usuario}/{senha} pelas credenciais do cliente e os ids pelos valores reais.
🛠️ Exemplo de resposta (autenticação)
🚀 Passo a passo da revenda
- Na aba 🔌 API Xtream, baixe os 4 arquivos (player_api.php, get.php, xmltv.php, .htaccess).
- Envie os 4 para o mesmo diretório do site do revendedor (ex.: public_html/ ou htdocs/).
- Anote o DNS do site (ex.: https://revenda.com) — é a URL que você informa aqui em cima.
- Crie o cliente na aba ◉ Clientes (usuário e senha automáticos ou manuais, com pacote, validade e conexões).
- Passe para o revendedor: URL = DNS do site, Usuário/Senha = credenciais do cliente.
- No app com suporte a Xtream (TiviMate, Smarters, IBO, XCIPTV…), o cliente entra e vê exatamente os canais/filmes do pacote dele — com failover, fan-out e EPG.
Configurações
Vídeo informativo exibido para acesso não autorizado
🏷️ Identidade do painel
🎬 Vídeo informativo
Quando alguém usa a lista com uma URL não cadastrada, com o cliente bloqueado, expirado ou acima do limite de conexões, recebe este vídeo no lugar dos canais.
Quando um cliente está com a validade vencida, recebe este vídeo no lugar do vídeo informativo. Se deixar vazio, usa o vídeo informativo padrão.
Quando o cliente atinge o limite de conexões simultâneas, recebe este vídeo no lugar do informativo. Se deixar vazio, usa o vídeo informativo padrão.
Quando o cliente está vencido, este link entra no texto da playlist (comentário + nome do canal de aviso), além do vídeo — o cliente vê onde renovar.
Com fan-out, quem assiste o mesmo canal divide uma busca na origem (economiza banda de entrada). A banda de saída para cada cliente continua individual. Clientes muito lentos são desconectados para não travar o grupo.
Quando uma fonte falha 3 vezes seguidas (erro de conexão, HTTP 4xx/5xx ou sem dados por 10s), ela é removida automaticamente do canal — sobram só as online. O cliente nem percebe: o failover já trocou para a próxima fonte antes da remoção. A última fonte nunca é removida (o canal precisa de pelo menos uma).
Documentos M3U
Backup na nuvem (Cloudflare D1)
| Funcionalidade | Nome | Canais | Atualizado | Ações |
|---|
Nenhum documento encontrado.
Documento
| # | Nome do canal | Categoria | URL do canal | Ações |
|---|
Usuários do painel
Gerencie quem acessa este painel · os usuários são as revendas — organize-as em grupos
🗂️ Grupos de usuários
Como os usuários do painel são revendas, os grupos organizam as revendas (ex.: Bronze, Ouro, VIP) e controlam qual grupo tem acesso ao painel externo (a API Master — aba 🔌 API Xtream). Um usuário pertence a um grupo; sem grupo = “Sem grupo”.
| ID | Usuário | Nível | Grupo | Criado | Ações |
|---|
Minha conta
Troque sua senha de acesso
Trocar minha senha
Todo usuário do painel pode trocar a própria senha — só precisa informar a senha atual. (Os clientes da lista IPTV não entram aqui: eles usam o token da lista, não têm login no painel.)