A API TopViral segue o padrão API v2 usado pelos painéis SMM. Com ela você lista os serviços, cria pedidos, consulta status, pede reposição, cancela e confere o saldo, usando os mesmos serviços, preços e saldo do painel.
Conexão
| Item | Valor |
|---|---|
| URL | https://painel.topviral.social/api/v2 |
| Método | POST |
| Formato do envio | application/x-www-form-urlencoded ou application/json |
| Resposta | JSON |
| Autenticação | parâmetro key com a sua chave de API |
| Limite | 60 requisições por minuto |
| Moeda | BRL (reais) |
Como obter a chave: crie a conta, confirme o e-mail e abra Painel → API para gerar a chave. Gerar uma nova chave invalida a anterior. Trate a chave como uma senha.
Se o seu painel aceita provedores no padrão API v2, cadastre o TopViral como provedor com a URL acima e a sua chave: serviços, pedidos e status passam a sincronizar sozinhos.
Listar serviços (services)
| Parâmetro | Valor |
|---|---|
key | sua chave |
action | services |
Resposta:
[
{
"service": 101,
"name": "Instagram Seguidores Brasileiros",
"type": "Default",
"category": "Instagram Seguidores",
"rate": "15.90",
"min": "100",
"max": "50000",
"refill": true,
"cancel": false,
"dripfeed": false
}
]
rateé o preço por 1.000 unidades (em serviços do tipoPackage, é o preço do pacote).refill,canceledripfeedindicam se o serviço aceita reposição, cancelamento e entrega em etapas.
Criar pedido (add)
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
key | sim | sua chave |
action | sim | add |
service | sim | ID do serviço |
link | sim | link público do perfil, post ou vídeo |
quantity | conforme o tipo | quantidade (não usada em Package e Custom Comments) |
comments | Custom Comments | um comentário por linha; a quantidade é o número de linhas |
runs | drip-feed | número de etapas |
interval | drip-feed | intervalo entre etapas, em minutos |
username | Comment Likes | usuário dono do comentário |
answer_number | Poll | número da opção da enquete |
Resposta de sucesso:
{ "order": 23513 }
O valor é debitado do saldo na criação. Se o fornecedor recusar o pedido na hora, a resposta é { "error": "Order rejected, amount refunded" } e o valor volta ao saldo.
Status do pedido (status)
Um pedido:
| Parâmetro | Valor |
|---|---|
key | sua chave |
action | status |
order | ID do pedido |
{
"charge": "4.50",
"start_count": "12840",
"status": "In progress",
"remains": "1850",
"currency": "BRL"
}
Vários pedidos (até 100 por chamada): envie orders com os IDs separados por vírgula.
{
"23513": { "charge": "4.50", "start_count": "12840", "status": "Completed", "remains": "0", "currency": "BRL" },
"23514": { "error": "Incorrect order ID" }
}
Valores de status:
| Status | Significado |
|---|---|
Pending | recebido, aguardando início |
In progress | em entrega |
Processing | em processamento no fornecedor |
Completed | concluído |
Partial | entregue em parte; a diferença voltou ao saldo (charge já é o valor final) |
Canceled | cancelado; o valor voltou ao saldo |
Reposição (refill e refill_status)
Para pedidos concluídos de serviços com refill: true:
| Parâmetro | Valor |
|---|---|
key | sua chave |
action | refill |
order | ID do pedido |
{ "refill": 23513 }
Para acompanhar, use action=refill_status com refill igual ao valor retornado:
{ "status": "Completed" }
Cancelar (cancel)
Para serviços com cancel: true, envie orders com até 100 IDs separados por vírgula:
[
{ "order": 23513, "cancel": 1 },
{ "order": 23514, "cancel": { "error": "Este serviço não permite cancelamento" } }
]
O estorno acontece quando o fornecedor confirma o cancelamento; acompanhe pelo status.
Saldo (balance)
{ "balance": "248.30", "currency": "BRL" }
O saldo é o mesmo do painel e é recarregado via PIX.
Erros
Os erros voltam como JSON com o campo error:
| Mensagem | Causa |
|---|---|
Invalid API key | chave errada, gerada de novo ou conta bloqueada |
Incorrect request | action ausente ou desconhecida |
Incorrect order ID | pedido inexistente ou de outra conta |
Refill not found | reposição não encontrada |
| outras mensagens | validação do pedido (link, quantidade, saldo insuficiente etc.) |
Acima do limite de requisições, a API responde com HTTP 429. Aguarde alguns segundos e tente de novo.
Exemplos
cURL:
curl -X POST https://painel.topviral.social/api/v2 \
-d key=SUA_CHAVE \
-d action=add \
-d service=101 \
-d link=https://instagram.com/perfil \
-d quantity=1000
PHP:
$ch = curl_init('https://painel.topviral.social/api/v2');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => http_build_query([
'key' => 'SUA_CHAVE',
'action' => 'status',
'order' => 23513,
]),
]);
$status = json_decode(curl_exec($ch), true);
JavaScript (Node.js 18+):
const res = await fetch('https://painel.topviral.social/api/v2', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ key: process.env.TOPVIRAL_KEY, action: 'balance' }),
});
console.log(await res.json()); // { balance: '248.30', currency: 'BRL' }
Python:
import requests
r = requests.post('https://painel.topviral.social/api/v2', data={
'key': 'SUA_CHAVE',
'action': 'services',
})
print(r.json()[:3])
Boas práticas
- Consulte o status em lote (
orders) a cada poucos minutos, em vez de um pedido por vez. - Guarde o ID do pedido retornado em
addjunto com o pedido do seu cliente. - Antes de vender um serviço, confira
min,max,refillecancelemservices. - Nunca exponha a sua chave no navegador ou em aplicativos públicos: chame a API pelo seu servidor.
Dúvidas sobre a integração? Fale com o suporte pelo WhatsApp. Veja também a página de revenda e o guia como revender seguidores.