Preço de atacado por 1.000 Recarga por Pix a partir de R$ 1,00 Tabela pública, sem cadastro
Painel de RevendaPainel SMM de atacado
Guia para quem revende

API SMM: como integrar ao seu sistema ou painel

Por Equipe Painel de Revenda · operado pela Social Monster · · 8 min de leitura

Uma API SMM é uma interface HTTP em que o seu sistema manda um POST com a chave e uma ação (services, add, status, balance) e recebe JSON. Para integrar, gere a chave na conta, leia o catálogo, crie pedidos e consulte o status em lote. A chave fica em variável de ambiente.

Se você tem um site, um bot ou um painel próprio e quer vender seguidores, curtidas e visualizações sem digitar pedido por pedido, a api smm é o caminho. É o mesmo padrão que os painéis do mercado usam entre si: um endereço, um POST com a sua chave e uma ação, e a resposta volta em JSON. Este texto mostra como integrar, com código em PHP e em Python, e como tratar o que dá errado.

O que é uma API SMM e como ela funciona

A referência completa de campos e erros está na documentação da API SMM; aqui o foco é o fluxo de trabalho.

Uma API SMM deixa o seu sistema fazer o que você faria na tela do painel: ver o catálogo, criar pedido, acompanhar o andamento, pedir reposição e conferir o saldo. Tudo passa por uma única URL. Neste painel ela é:

https://painelderevenda.net/api/v2

Toda requisição é um POST com key (a sua chave) e action (o que você quer fazer). O corpo pode ser application/x-www-form-urlencoded ou JSON. A chave vai no corpo, nunca na URL.

As ações disponíveis:

actionPara que serveParâmetros
servicesLista o catálogonenhum
addCria um pedidoservice, link, quantity
statusSituação de um ou vários pedidosorder ou orders
refillPede reposiçãoorder
refill_statusSituação da reposiçãorefill
cancelTenta cancelarorder ou orders
balanceSaldo da contanenhum

Passo a passo para integrar a API SMM

  1. Crie a conta e gere a chave em Conta > API. Ela é guardada com hash no servidor e pode ser revogada.
  2. Salve a chave em uma variável de ambiente, por exemplo PR_API_KEY.
  3. Chame balance e services. As duas só leem, então não gastam nada.
  4. Sincronize o catálogo no seu banco de dados.
  5. Crie um pedido pequeno com add para validar o fluxo inteiro.
  6. Monte a rotina que consulta o status em lote.
  7. Trate os erros e o limite de requisições.

Não existe chave de teste. O add cria pedido de verdade, então o primeiro teste com ele deve ser pequeno, respeitando o mínimo do pacote.

API SMM em PHP: balance e services

Em PHP, o jeito mais direto é o cURL. Um detalhe importante: erros vêm com status HTTP 4xx e um JSON no corpo. O cURL entrega esse corpo normalmente, a menos que você ligue CURLOPT_FAILONERROR. Deixe desligado para poder ler a mensagem.

<?php
function chamar_api(array $params): array
{
    $params['key'] = getenv('PR_API_KEY');

    $ch = curl_init('https://painelderevenda.net/api/v2');
    curl_setopt_array($ch, [
        CURLOPT_POST           => true,
        CURLOPT_POSTFIELDS     => http_build_query($params),
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT        => 30,
    ]);
    $corpo  = curl_exec($ch);
    $codigo = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    $json = json_decode((string) $corpo, true);
    if (!is_array($json)) {
        throw new RuntimeException("Resposta inválida (HTTP $codigo)");
    }
    if ($codigo === 429) {
        throw new RuntimeException('Limite de requisições. Tente no próximo minuto.');
    }
    if (isset($json['error'])) {
        throw new RuntimeException($json['error'] . " (HTTP $codigo)");
    }
    return $json;
}

$saldo    = chamar_api(['action' => 'balance']);   // balance e currency (BRL)
$catalogo = chamar_api(['action' => 'services']);  // lista de serviços

A função concentra a chave, o tempo limite e o tratamento de erro. O resto do seu código só chama chamar_api.

Sincronizar o catálogo com a ação services

Cada item de services traz service, name, category, rate, min, max e refill. O rate é o preço por 1.000 unidades, em reais. O preço acompanha o fornecedor e pode mudar, então não copie o catálogo uma vez e esqueça.

O fluxo que funciona bem:

  1. Rode a sincronização em horário fixo, por exemplo uma vez por dia, e também antes de gerar a tabela de preços do cliente.
  2. Grave service, name, category, rate, min, max e refill em uma tabela sua.
  3. Compare com a versão anterior. Se o rate mudou, recalcule o preço que você cobra.
  4. Se um serviço sumiu da lista, esconda-o da sua vitrine em vez de apagar. Pedidos antigos continuam precisando do registro.
  5. No momento do pedido, valide quantity contra min e max antes de chamar a API. Isso evita o erro Incorrect quantity.

Seu preço de venda é rate mais a sua margem, proporcional à quantidade. Um exemplo: se o rate de um pacote fosse R$ 11,82 por mil e você pedisse 500 unidades, o custo seria R$ 5,91. É uma conta de exemplo com o preço da tabela de 13/10/2026; o valor real é o que services devolve no momento.

Criar pedidos com a ação add

O add recebe service (o id do catálogo), link e quantity. A resposta traz o número do pedido, como {"order": 12345}. Guarde esse número junto do cliente, do link e da data: ele é a sua referência para status, reposição e atendimento.

Em Python, com a biblioteca requests:

import os
import requests

URL = "https://painelderevenda.net/api/v2"


def chamar(**params):
    params["key"] = os.environ["PR_API_KEY"]
    r = requests.post(URL, data=params, timeout=30)
    if r.status_code == 429:
        raise RuntimeError("Limite de requisições. Tente no próximo minuto.")
    dados = r.json()
    if isinstance(dados, dict) and "error" in dados:
        raise RuntimeError(f"{dados['error']} (HTTP {r.status_code})")
    return dados


pedido = chamar(
    action="add",
    service=1,  # id vindo de services
    link="https://www.instagram.com/perfil-do-cliente/",
    quantity=1000,
)
print(pedido["order"])

Status em lote: consultar vários pedidos de uma vez

Consultar pedido por pedido gasta o limite de 120 requisições por minuto à toa. A ação status aceita orders com ids separados por vírgula, então uma requisição cobre dezenas de pedidos.

Para cada pedido o retorno traz charge, start_count, status e remains. O status assume um destes valores: Pending, In progress, Completed, Partial ou Canceled. Neste painel, a resposta em lote vem indexada pelo id do pedido e cada chamada aceita até 100 pedidos; acima disso, divida a lista. Pedido que não pertence à sua conta não aparece na resposta.

ABERTOS = ("Pending", "In progress")


def atualizar_status(ids):
    resposta = chamar(action="status", orders=",".join(str(i) for i in ids))
    for pedido_id, info in resposta.items():
        if isinstance(info, dict) and "status" in info:
            print(pedido_id, info["status"], info.get("remains"))

A rotina de acompanhamento fica assim:

  1. Liste no seu banco os pedidos com status aberto.
  2. Envie os ids em blocos, por exemplo de 50 em 50.
  3. Atualize o status local e avise o cliente quando virar Completed.
  4. Trate Partial e Canceled como casos para o atendimento: o saldo da parte não entregue é um assunto a resolver com o cliente.
  5. Rode a rotina em intervalo razoável. Consultar a cada poucos segundos só consome limite.

Se o pacote tem reposição, a ação refill recebe o order e devolve o id da reposição, que você acompanha com refill_status (Pending, Completed ou Rejected). Nem todo pacote tem reposição; o campo refill do catálogo diz quais têm.

Erros e limite: como tratar

Os erros vêm como {"error": "mensagem"} com status HTTP 4xx. Os mais comuns:

HTTPerrorO que fazer
401Invalid API keyConferir a variável de ambiente; se a chave foi revogada, gerar outra
400Incorrect requestAção desconhecida ou parâmetro faltando
400Not enough fundsRecarregar o saldo e repetir o pedido
400Incorrect quantityAjustar para o mínimo e máximo do serviço
404Incorrect order IDO pedido não pertence à conta
429Too many requestsEsperar o minuto virar e agrupar consultas

O limite é de 120 requisições por minuto por chave. Há também um limite de 30 tentativas com chave errada por minuto por IP, o que vale lembrar se um script em loop estiver usando uma chave antiga.

Para o 429, a regra é simples: não insista em loop. Faça uma pausa, reduza a frequência e use o status em lote. Para o Not enough funds, vale checar o balance antes de processar uma fila grande e parar a fila quando o saldo acabar.

Segurança da chave e limites do que a API faz

A chave dá acesso ao seu saldo, então trate como senha:

  • Guarde em variável de ambiente ou cofre de segredos. Nunca no código, nunca no repositório.
  • Não envie a chave para o navegador do cliente. Chame a API sempre do seu servidor.
  • Se suspeitar de vazamento, revogue em Conta > API. A chave antiga deixa de funcionar assim que for revogada.

E fique atento aos limites do serviço em si. A API entrega o pedido ao fornecedor; ela não controla o que a rede social faz depois. As plataformas podem remover números a qualquer momento, e uma queda depois da entrega não é um erro da integração. Deixe isso claro nos termos que você apresenta ao seu cliente e não prometa resultado de vendas, alcance ou engajamento.

Para quem esta integração faz sentido

A API serve a quem já tem um sistema de pedidos: loja própria, bot de atendimento, ou um painel SMM próprio que precisa de um fornecedor por trás. Para quem tem painel e procura fornecedor, veja a página para donos de painel e a de fornecedor SMM. Quem ainda não tem sistema pode começar pelo próprio painel, com pedido em massa, e deixar a API para quando o volume pedir.

Perguntas frequentes

O que é uma API SMM?

É a porta de entrada que um painel SMM abre para outros sistemas. Em vez de clicar no site, o seu código manda requisições POST com uma chave e uma ação, e o painel responde em JSON.

Como testar a integração sem gastar saldo?

Não há chave de teste. Use as ações services e balance, que só leem dados. A ação add cria pedido de verdade e debita o saldo.

O que fazer quando a API responde 429?

Você passou de 120 requisições por minuto na mesma chave. Espere o minuto virar e volte a chamar, de preferência agrupando consultas de status em uma só requisição.

Posso consultar vários pedidos de uma vez?

Sim. A ação status aceita o campo orders com os ids separados por vírgula. Isso economiza requisições e evita bater no limite.

Onde guardo a chave da API?

Em variável de ambiente ou no cofre de segredos do servidor, nunca no código nem no repositório. Se vazar, revogue em Conta > API e gere outra.

Comece a revender com preço de atacado

Crie a conta e faça a primeira recarga por Pix ou PayPal, a partir de R$ 1,00. Não há plano nem mínimo mensal.