API v2
Faça pedidos pelo seu próprio sistema. A API segue o padrão dos painéis SMM (v2), então integrações prontas para esse padrão funcionam trocando só o endereço e a chave.
Endereço: https://followhub.club/api/v2
Método: POST, com os campos em application/x-www-form-urlencoded.
Chave: gere no painel, aba API, e envie no campo key. Gerar uma chave nova desativa a anterior na hora.
Todos os valores são em reais (BRL). Os números e valores voltam como texto ("10.00"), como no padrão v2.
Ações
services: lista de serviços
key=SUA_CHAVE&action=services
[
{
"service": 154,
"name": "TikTok - Seguidores Mundiais (Rápido)",
"type": "Default",
"category": "TikTok - Seguidores",
"rate": "30.00",
"min": "10",
"max": "1000000000",
"refill": false,
"cancel": false
}
]
rate é o preço por 1.000 unidades. refill diz se o serviço tem reposição. O prazo da reposição aparece no nome (por exemplo, "Reposição 30 dias").
O número do serviço (service) não muda. Se um serviço sair do catálogo, o número dele fica reservado e nunca passa para outro serviço. Pedidos para ele recebem o erro service_unavailable. Se o serviço voltar, volta com o mesmo número.
add: novo pedido
key=SUA_CHAVE&action=add&service=154&link=https://www.tiktok.com/@perfil&quantity=1000&idempotency_key=pedido-8841
{"order": 123}
O valor sai do saldo no momento do pedido. Se o pedido for recusado na criação, nada é cobrado e a resposta é um erro.
idempotency_key é opcional e recomendado (veja Pedido sem duplicar). Quando a chamada repete uma chave já usada, a resposta traz o mesmo pedido e o campo "existing": true.
status: andamento do pedido
key=SUA_CHAVE&action=status&order=123
{"charge": "30.00", "start_count": "815", "status": "In progress", "remains": "163", "currency": "BRL"}
Vários pedidos de uma vez, até 100 por chamada:
key=SUA_CHAVE&action=status&orders=123,124,999
{
"123": {"charge": "30.00", "start_count": "815", "status": "Completed", "remains": "0", "currency": "BRL"},
"124": {"charge": "3.00", "start_count": "0", "status": "Pending", "remains": "100", "currency": "BRL"},
"999": {"error": "Incorrect order ID", "error_code": "order_not_found"}
}
balance: saldo
key=SUA_CHAVE&action=balance
{"balance": "170.00", "currency": "BRL"}
refill: pedir reposição
key=SUA_CHAVE&action=refill&order=123
{"refill": "45"}
A reposição pode ser pedida a partir de 15 dias depois da conclusão do pedido, dentro do prazo do serviço. Fora dessas condições, a resposta é o erro refill_not_allowed, com a data no texto quando houver.
refill_status: andamento da reposição
key=SUA_CHAVE&action=refill_status&refill=45
{"status": "Pending"}
Valores: Pending (solicitada), In progress (em andamento) e Completed (concluída).
Status do pedido e efeito no saldo
| Status | O que significa | Saldo |
|---|---|---|
| Pending | Recebido, aguardando início. Também aparece enquanto um pedido está em conferência do nosso lado. | Já cobrado |
| Processing | Sendo preparado para começar. | Já cobrado |
| In progress | Em entrega. remains mostra quanto falta. | Já cobrado |
| Completed | Entregue por completo. | Nada volta |
| Partial | Entregue em parte e encerrado. | A parte não entregue volta como saldo: valor × remains ÷ quantidade |
| Canceled | Cancelado sem entrega, ou recusado depois de criado. | O valor inteiro volta como saldo |
O saldo devolvido entra automaticamente, em poucos minutos, sem precisar pedir. start_count é a contagem do perfil quando a entrega começou.
Formato do link
- Link completo, começando com
https://, até 300 caracteres, sem espaços. Parâmetros como?lang=ptsão aceitos. - Ou só o usuário:
@perfilouperfil(letras, números, ponto e sublinhado, de 2 a 40 caracteres). - O link completo precisa ser da mesma rede do serviço. Um link do TikTok num serviço de Instagram dá o erro
wrong_network, sem cobrança. - O perfil precisa estar público durante toda a entrega. Perfil privado não dá para conferir no momento do pedido: o pedido segue e pode terminar como
PartialouCanceled, com o saldo devolvido conforme a tabela acima.
Um pedido por vez no mesmo perfil
Enquanto um pedido está pendente, processando ou em andamento, um novo pedido para o mesmo perfil ou a mesma publicação no mesmo serviço é recusado com active_order_exists, sem cobrança. Dois pedidos simultâneos no mesmo alvo seriam cancelados na entrega. Faça o próximo quando o anterior terminar (Completed, Partial ou Canceled).
- O perfil é reconhecido em qualquer formato: com ou sem
https://ewww, maiúsculas, barra no fim, parâmetros como?lang=pt, ou só o@perfil. - Serviços diferentes no mesmo perfil, publicações diferentes do mesmo perfil e perfis diferentes não se bloqueiam.
Pedido sem duplicar
Se a conexão cair antes da resposta do add, você não sabe se o pedido foi criado. Envie idempotency_key com um código único seu para cada pedido (por exemplo, o número do pedido no seu sistema) e repita a chamada com a mesma chave sem risco:
- Mesma chave e mesmos dados: volta o mesmo pedido, com
"existing": true, sem cobrar de novo. Vale também para chamadas simultâneas. - Mesma chave com serviço, link ou quantidade diferentes: erro
duplicate_key_mismatch. - Chave de um pedido que foi recusado: o erro se repete. Use uma chave nova para tentar de novo.
- De 1 a 64 caracteres: letras, números, ponto, hífen, sublinhado e dois-pontos. A chave vale só para a sua conta.
Erros
Os erros voltam com status HTTP 200, como no padrão v2, num JSON com o texto em error e um código fixo em error_code. Use o código no seu sistema, porque o texto pode mudar.
{"error": "Serviço 211 não existe. Consulte a lista de serviços.", "error_code": "service_not_found"}
| error_code | Quando |
|---|---|
| invalid_key | Chave ausente, errada ou substituída por uma nova. |
| invalid_action | Ação desconhecida. |
| service_not_found | Esse número de serviço nunca existiu. |
| service_unavailable | O serviço saiu do catálogo. |
| invalid_link | Link vazio ou fora do formato aceito. |
| wrong_network | O link é de outra rede social. |
| quantity_out_of_range | Quantidade fora do mínimo e do máximo do serviço. |
| active_order_exists | Já existe um pedido em andamento para o mesmo perfil ou publicação neste serviço (HTTP 200 na API, 409 no painel). |
| insufficient_balance | Saldo menor que o valor do pedido. |
| supplier_rejected | O pedido não pôde ser criado. Nada foi cobrado. |
| invalid_idempotency_key | idempotency_key fora do formato. |
| duplicate_key_mismatch | idempotency_key já usada com outros dados. |
| order_not_found | Pedido inexistente ou de outra conta. |
| refill_not_found | Reposição inexistente ou de outra conta. |
| refill_not_allowed | Serviço sem reposição, pedido não concluído, antes do prazo ou depois do prazo. |
| refill_already_requested | Já existe uma reposição recente para o pedido. |
| rate_limited | Limite de chamadas passado (HTTP 429). |
| internal_error | Falha temporária. Tente de novo em instantes. No add, repita com a mesma idempotency_key. |
Limite de chamadas
Até 120 chamadas por minuto por IP. Acima disso, a resposta é HTTP 429 com error_code rate_limited, até a janela de 1 minuto liberar. Para acompanhar muitos pedidos, use orders= com até 100 números por chamada.
Histórico de mudanças
06/11/2026
- Campo
error_codeem todos os erros. "Serviço inexistente" e "link inválido" agora são erros separados. idempotency_keyopcional noadd.- Os números dos serviços passam a ser fixos. Serviço retirado do catálogo dá
service_unavailable. - Esta página de documentação.
- Um pedido ativo por perfil e serviço: erro
active_order_exists.
Mudanças na API entram neste histórico com a data.
