API

Tudo o que o painel faz está disponível por meio de duas APIs separadas. As duas usam a mesma conta, o mesmo saldo e o mesmo catálogo; o que muda é o formato e o que cada uma consegue fazer.

Tudo o que o painel faz está disponível por meio de duas APIs separadas. As duas usam a mesma conta, o mesmo saldo e o mesmo catálogo; o que muda é o formato e o que cada uma consegue fazer.

Por que existem duas APIs?

A API clássica de revenda (v2), usada pelo setor inteiro, envia um formulário para um único endpoint e sempre responde HTTP 200. Esse é exatamente o formato que os softwares de painel prontos esperam, então ele continua igual. Já quem escreve o próprio sistema vivia esbarrando nas limitações desse formato: não dava para distinguir os erros, o catálogo chegava em uma peça só e o status do pedido precisava ser consultado sem parar. A v3 foi escrita para esse público.

A API legacy não será desligada. Não existe data de encerramento; você nunca vai precisar mexer em uma integração que já funciona.

Comparação

RecursoLegacy (v2)Nova (v3)
FormatoUm único endpoint, envio de formulário, parâmetro actionREST orientado a recursos, corpo em JSON
Código HTTPSempre 200, mesmo quando falhaCódigos reais (400, 401, 402, 404, 409, 429, 502)
ErrosTexto livretype + code estável + mensagem localizada + param + doc_url
Status do pedidoSomente texto localizadoValor de máquina estável mais um rótulo de exibição separado
Descrição do serviçoNão temDescrição em 10 idiomas, tempo médio, plataforma, categoria
Campos do pedidoDeduzidos pelo nome do tipoCada serviço publica o próprio esquema de campos
Unidade de preçoNão informada (fonte de erro de 1000x nos pacotes)Informada explicitamente como per_1000 ou per_order
CatálogoTodos os serviços em uma única respostaFiltros mais paginação por cursor
Proteção contra duplicidadeNão temIdempotency-Key
Aviso de statusConsulta contínuaWebhooks assinados ou stream de eventos
EsquemaNão temOpenAPI 3.1
IdiomasInglês e turco (endereços separados)10 idiomas (por cabeçalho ou por parâmetro)

Qual das duas eu devo usar?

Legacy (v2)

Escolha a API legacy se você usa um software de painel pronto, um bot ou um painel de revenda. A maioria pede apenas que você troque o endereço da API e a chave, e começa a funcionar em poucos minutos.

Nova API (v3)

Escolha a v3 se você está escrevendo o seu próprio aplicativo, a sua loja ou a sua automação. Tratamento de erros, proteção contra duplicidade e notificações já vêm prontos, e você consegue gerar o formulário de pedido direto do esquema do serviço.

Primeiros passos

  1. 1Crie uma chave de API na aba Chaves.
  2. 2Baixe a lista de serviços e veja o id e o esquema de campos do serviço que você vai usar.
  3. 3Valide o pedido primeiro com preview e só depois crie de fato.
  4. 4Cadastre um webhook, ou leia o stream de eventos, para acompanhar as mudanças de status.

Erros (48)

CódigoStatusDescrição
missing_api_key401Nenhuma chave de API foi enviada. Envie em 'Authorization: Bearer <key>'.
invalid_api_key401A chave de API que você enviou não é válida.
revoked_api_key401Esta chave de API foi revogada e não pode mais ser usada.
account_banned403Esta conta está banida.
account_suspended403Esta conta está suspensa.
insufficient_scope403Esta chave de API não tem permissão para este endpoint.
invalid_json400O corpo da requisição não é um JSON válido.
unsupported_content_type415Content-Type não suportado. Use application/json ou application/x-www-form-urlencoded.
method_not_allowed405Este método HTTP não é permitido neste endpoint.
payload_too_large413O corpo da requisição é grande demais.
missing_parameter400Um parâmetro obrigatório está faltando.
invalid_parameter400Um parâmetro tem um valor inválido.
invalid_quantity400A quantidade não é um número inteiro positivo válido.
quantity_out_of_range400A quantidade está fora da faixa permitida por este serviço.
invalid_comments400O campo de comentários está vazio ou tem linhas demais.
invalid_username400O nome de usuário não é válido para este serviço.
invalid_subscription400Os parâmetros da assinatura não são válidos.
invalid_runs400O valor de 'runs' não é válido para o envio gradual.
invalid_interval400O valor de 'interval' não é válido para o envio gradual.
dripfeed_not_supported400Este serviço não suporta envio gradual.
missing_required_field400Um campo exigido por este tipo de serviço está faltando ou é inválido.
service_inactive400Este serviço não está disponível para pedidos no momento.
invalid_cursor400O cursor de paginação não é válido.
invalid_limit400O parâmetro 'limit' está fora da faixa permitida.
invalid_webhook_url400A URL do webhook precisa ser um endereço https:// público.
invalid_events400Um ou mais tipos de evento solicitados são desconhecidos.
batch_too_large400Itens demais em uma única requisição em lote.
cancel_not_supported400Este serviço não suporta cancelamento.
refill_not_supported400Este serviço não oferece reposição.
unknown_endpoint404Endpoint desconhecido. As rotas disponíveis estão na referência da API.
service_not_found404Não existe nenhum serviço com este id.
order_not_found404Não existe nenhum pedido com este id na sua conta.
refill_not_found404Não existe nenhuma reposição com este id na sua conta.
webhook_not_found404Não existe nenhum endpoint de webhook com este id na sua conta.
order_not_cancelable409Este pedido não pode mais ser cancelado por causa do status atual.
cancel_rejected409O fornecedor recusou a solicitação de cancelamento.
order_not_completed409A reposição só pode ser solicitada para um pedido concluído.
idempotency_key_reuse409Esta Idempotency-Key já foi usada com outro corpo de requisição.
idempotency_in_progress409Ainda estamos processando a requisição com esta Idempotency-Key. Tente em breve.
webhook_limit_reached409Você atingiu o número máximo de endpoints de webhook.
insufficient_balance402Seu saldo não é suficiente para este pedido.
rate_limit_exceeded429Limite de requisições excedido. Consulte o cabeçalho de resposta Retry-After.
provider_error502O fornecedor retornou um erro. Tente de novo.
refill_failed502A solicitação de reposição foi recusada pelo fornecedor.
service_temporarily_unavailable503Este serviço está temporariamente indisponível. Tente de novo mais tarde.
internal_error500Ocorreu um erro inesperado do nosso lado.