API

Tudo o que o painel faz está disponível através de duas APIs distintas. Ambas utilizam a mesma conta, o mesmo saldo e o mesmo catálogo; diferem no formato e nas capacidades.

Tudo o que o painel faz está disponível através de duas APIs distintas. Ambas utilizam a mesma conta, o mesmo saldo e o mesmo catálogo; diferem no formato e nas capacidades.

Porquê duas APIs?

A API clássica de revenda (v2) que todo o setor utiliza envia um formulário para um único endpoint e responde sempre HTTP 200. É exatamente este o formato que o software de painel já feito espera, por isso mantém-se tal como está. Quem escreve o seu próprio sistema, esse, esbarrava constantemente nos limites deste formato: os erros não se distinguiam, o catálogo chegava numa só peça e o estado da encomenda tinha de ser consultado sem fim. A v3 foi escrita para esses casos.

A API legacy não vai ser desligada. Não existe data de fim; nunca terá de alterar uma integração que já funciona.

Comparação

FuncionalidadeLegacy (v2)Nova (v3)
FormatoUm único endpoint, envio de formulário, parâmetro actionREST orientado a recursos, corpo em JSON
Código HTTPSempre 200, mesmo em caso de falhaCódigos reais (400, 401, 402, 404, 409, 429, 502)
ErrosTexto livretype + code estável + mensagem localizada + param + doc_url
Estado da encomendaApenas texto localizadoValor de máquina estável e ainda uma etiqueta de apresentação à parte
Descrição do serviçoNão existeDescrição em 10 idiomas, tempo médio, plataforma, categoria
Campos da encomendaDeduzidos a partir do nome do tipoCada serviço publica o seu próprio esquema de campos
Unidade de preçoNão indicada (fonte de erros de 1000x nos pacotes)Indicada explicitamente como per_1000 ou per_order
CatálogoTodos os serviços numa só respostaFiltros e paginação por cursor
Proteção contra duplicadosNão existeIdempotency-Key
Aviso de estadoSondagem constanteWebhooks assinados ou fluxo de eventos
EsquemaNão existeOpenAPI 3.1
IdiomasInglês e turco (endereços separados)10 idiomas (por cabeçalho ou por parâmetro)

Qual devo escolher?

Legacy (v2)

Escolha a API legacy se utiliza software de painel já feito, um bot ou um painel de revenda. A maioria pede-lhe apenas que altere o endereço da API e a chave, e fica a funcionar em minutos.

Nova API (v3)

Escolha a v3 se está a escrever a sua própria aplicação, loja ou automatização. O tratamento de erros, a proteção contra duplicados e as notificações vêm já incluídos, e pode gerar o formulário de encomenda diretamente a partir do esquema do serviço.

Primeiros passos

  1. 1Crie uma chave de API no separador Chaves.
  2. 2Obtenha a lista de serviços e veja o id e o esquema de campos do serviço que vai utilizar.
  3. 3Valide a encomenda primeiro com preview e só depois a crie.
  4. 4Registe um webhook, ou leia o fluxo de eventos, para acompanhar as mudanças de estado.

Erros (48)

CódigoEstadoDescrição
missing_api_key401Não foi enviada nenhuma chave de API. Envie-a em 'Authorization: Bearer <key>'.
invalid_api_key401A chave de API que enviou não é válida.
revoked_api_key401Esta chave de API foi revogada e já não pode ser utilizada.
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 do pedido não é JSON válido.
unsupported_content_type415Content-Type não suportado. Utilize application/json ou application/x-www-form-urlencoded.
method_not_allowed405Este método HTTP não é permitido neste endpoint.
payload_too_large413O corpo do pedido é demasiado grande.
missing_parameter400Falta um parâmetro obrigatório.
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 do intervalo permitido por este serviço.
invalid_comments400O campo de comentários está vazio ou tem demasiadas linhas.
invalid_username400O nome de utilizador não é válido para este serviço.
invalid_subscription400Os parâmetros da subscrição não são válidos.
invalid_runs400O valor de 'runs' não é válido para a entrega faseada.
invalid_interval400O valor de 'interval' não é válido para a entrega faseada.
dripfeed_not_supported400Este serviço não suporta entrega faseada.
missing_required_field400Falta um campo exigido por este tipo de serviço ou o valor é inválido.
service_inactive400Este serviço não está disponível para encomendas de momento.
invalid_cursor400O cursor de paginação não é válido.
invalid_limit400O parâmetro 'limit' está fora do intervalo permitido.
invalid_webhook_url400O URL do webhook tem de ser um endereço https:// público.
invalid_events400Um ou mais dos tipos de evento pedidos são desconhecidos.
batch_too_large400Demasiados itens num único pedido 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 constam da referência da API.
service_not_found404Não existe nenhum serviço com este id.
order_not_found404Não existe nenhuma encomenda 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_cancelable409Esta encomenda já não pode ser cancelada devido ao seu estado atual.
cancel_rejected409O fornecedor recusou o pedido de cancelamento.
order_not_completed409A reposição só pode ser pedida para uma encomenda concluída.
idempotency_key_reuse409Esta Idempotency-Key já foi utilizada com um corpo de pedido diferente.
idempotency_in_progress409Um pedido com esta Idempotency-Key ainda está a ser processado. Tente em breve.
webhook_limit_reached409Atingiu o número máximo de endpoints de webhook.
insufficient_balance402O seu saldo não é suficiente para esta encomenda.
rate_limit_exceeded429Limite de pedidos excedido. Consulte o cabeçalho de resposta Retry-After.
provider_error502O fornecedor devolveu um erro. Tente novamente.
refill_failed502O pedido de reposição foi recusado pelo fornecedor.
service_temporarily_unavailable503Este serviço está temporariamente indisponível. Tente mais tarde.
internal_error500Ocorreu um erro inesperado do nosso lado.