OneProvider

Autenticação e limites da API de revenda

Tokens Bearer, escopos, IPs permitidos, limite de requisições, códigos de erro, idempotência e paginação da API de revenda da OneProvider. Com exemplos.

Tokens Bearer, permissões, lista de IPs permitidos, limite de requisições, códigos de erro, chaves de idempotência e paginação da API de revendedores.

Todos os modelos, recursos e preços Índice da documentação para agentes de IA: https://oneprovider.dev/docs/llms.txt

Tokens

Um token tem o formato rsk_ seguido de 40 caracteres. Crie-o no painel (aba Revendedor, “API e configurações”); o valor é exibido uma única vez, e guardamos apenas um hash e os últimos 4 caracteres. Você pode ter até 10 tokens ativos e revogar qualquer um a qualquer momento. Ao criar um token, é possível definir um prazo de validade (de 1 a 365 dias): depois dele o token responde 401 token_expired, e expires_at em GET /me informa quando isso acontece (null: sem validade).

http
Authorization: Bearer rsk_...
Somente no servidor O CORS está desativado. Nunca embuta um token em um bundle de navegador nem em um app de celular: chame a API do seu backend. Se um revendedor perder o acesso, todos os tokens dele respondem 403 reseller_disabled.

Permissões

Um token carrega um conjunto de permissões. As permissões são independentes: keys não implica read. GET /me funciona com qualquer token válido. Sem a permissão necessária, a resposta é 403 forbidden_scope.

Permissões do token
ScopeO que ela libera
readLeitura: saldo e transações, preços, modelos, clientes, chaves e o consumo delas, pedidos, planos, estatísticas, as configurações da loja GET /settings, o registro de ações GET /audit (todo GET, exceto códigos, webhooks, bots, formas de pagamento e o status do pagamento das recargas).
keysEscrita: clientes (inclusive o bloqueio), emitir, editar, pausar, recarregar, reemitir e excluir chaves, POST /orders, as configurações da loja PATCH /settings (elas definem como as chaves emitidas aparecem).
codesLotes de códigos e os próprios códigos (ler, criar, revogar, resgatar). Os códigos são segredos, por isso há uma permissão separada.
plansCriar, editar e excluir planos (para ler os planos é preciso read).
billingRecargas do saldo de revendedor: POST /balance/topups e o status do pagamento.
webhooksGerenciar webhooks, enviar um teste, ler o registro de entregas.
supportReservada para os futuros endpoints de suporte.
botLer o estado dos bots e das formas de pagamento: GET /bot e GET /payment-providers (sem tokens nas respostas). Os bots só são conectados no painel.

A permissão de cada método está listada na referência .

Lista de IPs permitidos

Um token pode ser limitado a uma lista de endereços IPv4/IPv6 ou faixas CIDR (até 20). Uma requisição vinda de outro endereço recebe 403 ip_not_allowed. A lista é definida na criação do token.

Limite de requisições

20 requisições por segundo por token e 100 por segundo por endereço IP de origem. Ao exceder: 429 rate_limited e o cabeçalho Retry-After. Aguarde esse número de segundos e tente de novo.

Erros

Todo erro tem o mesmo formato. O mesmo id é enviado no cabeçalho X-Request-Id: informe-o ao suporte.

json
{
"error": {
"code": "insufficient_balance",
"message": "Not enough free reseller balance for this key.",
"request_id": "req_..."
}
}

Trate o erro por error.code, não pelo texto da mensagem.

Códigos de erro
HTTPcodeSignificado
400invalidFalta um campo ou ele está fora do intervalo.
400bad_requestNão foi possível interpretar a requisição.
400idempotency_key_requiredO cabeçalho Idempotency-Key está ausente em um método que gasta dinheiro.
400invalid_urlA URL do webhook não passou na validação (somente https, sem IPs literais nem redes privadas).
400limit_below_spentO novo limite da chave é menor do que a chave já gastou.
400currency_requiredPOST /balance/topups: a forma de pagamento aceita várias moedas, envie currency (as permitidas estão em topup_providers).
400method_unavailablePOST /balance/topups: essa forma de pagamento não existe em topup_providers (bad_currency, bad_email e email_required respondem do mesmo jeito para a moeda e o e-mail).
401unauthorizedO token está ausente, é desconhecido ou foi revogado.
401token_expiredO token venceu (expires_at em GET /me): crie um novo.
403forbidden_scopeO token não tem a permissão necessária.
403ip_not_allowedO IP da requisição não está na lista de IPs permitidos do token.
403reseller_disabledO revendedor perdeu o acesso; todos os tokens respondem assim.
403bannedA conta está banida.
404not_foundO objeto não existe ou pertence a outro revendedor.
404key_not_foundA chave não existe.
409insufficient_balanceO valor não cabe em Disponível (Free, available_usd), veja a regra do dinheiro.
409idempotency_key_reusedO mesmo Idempotency-Key já foi usado com outro corpo de requisição: use um Idempotency-Key novo.
409fund_firstRecarregue primeiro o saldo de revendedor.
409not_activatedO painel de revendedor ainda não foi ativado.
409name_takenJá existe uma chave com este nome.
409key_limitO número máximo de chaves foi atingido.
409plan_limitO número máximo de planos (20) foi atingido.
409customer_limitO número máximo de clientes (10.000) foi atingido.
409plan_in_useO plano não pode ser excluído, ficar mais caro nem mudar de moeda enquanto uma fatura recente não paga ou uma compra paga, mas não entregue, no bot o estiver usando.
409key_exhaustedReemitir: a chave não tem mais nada a transferir, o restante é 0.
409key_expiredReemitir: a chave venceu, prorrogue-a antes.
409action_failedA ação na chave falhou por outro motivo; tente de novo ou verifique a chave.
409code_usedO código já foi resgatado.
409code_revokedO código foi revogado.
409code_busyO código está sendo processado ou não pode ser resgatado agora.
409external_order_id_conflictO external_order_id já foi usado com outros parâmetros.
409customer_existsJá existe um cliente com este external_id.
409customer_blockedO cliente está bloqueado: chaves, pedidos e resgates para ele são recusados.
409token_limitO número máximo de tokens ativos (10) foi atingido.
409webhook_limitO número máximo de webhooks (5) foi atingido.
429rate_limitedMais de 20 requisições por segundo por token (ou 100 por segundo por endereço IP); aguarde Retry-After segundos.
429too_many_invoicesPOST /balance/topups: muitas faturas não pagas seguidas; pague as abertas ou tente de novo em um minuto.
501sandbox_not_implementedO sandbox (rsk_test_...) ainda não foi implementado.
503provider_unavailableUm provedor de pagamento ou de modelos está temporariamente indisponível: tente mais tarde.

Idempotência

Os métodos que gastam dinheiro exigem o cabeçalho Idempotency-Key (de 1 a 128 caracteres imprimíveis); sem ele (ou com um inadequado) a resposta é 400 idempotency_key_required. Eles estão marcados na referência. Repetir uma requisição com o mesmo Idempotency-Key e o mesmo corpo (por revendedor) nunca gasta duas vezes e retorna o mesmo objeto, inclusive o segredo da chave criada por aquela chamada: uma resposta perdida no caminho pode ser recuperada repetindo a chamada. O mesmo Idempotency-Key com outro corpo dá 409 idempotency_key_reused. Use um Idempotency-Key novo para cada pagamento ou pedido novo; em POST /orders a identidade é external_order_id. O cabeçalho é opcional (e respeitado, se enviado) em PATCH /keys/{id} (um extend_days/extend_hours repetido prorroga uma só vez), POST /plans e POST /webhooks (uma repetição retorna o mesmo objeto; o segredo de um webhook não é exibido de novo).

bash
curl -s -X POST https://app.oneprovider.dev/partner/v1/keys \
-H "Authorization: Bearer $OP_PARTNER_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"name":"client-1","limit_usd":"10.00"}'

Guarde a chave de idempotência junto com o registro do seu próprio pedido, para que, depois de um erro de rede, você repita exatamente a mesma requisição.

Paginação

Os endpoints de listagem aceitam ?limit=1..100 (padrão 50) e &cursor=. A resposta é {"items": [...], "next": "<cursor>"}; next é null na última página. O cursor é opaco: devolva-o como está.

bash
curl -s "https://app.oneprovider.dev/partner/v1/keys?limit=100&cursor=<next from the previous page>" \
-H "Authorization: Bearer $OP_PARTNER_TOKEN"

Sandbox

Os tokens de teste rsk_test_... chegam em breve. Por enquanto, esse token recebe 501 sandbox_not_implemented.

Última atualização: 2026-11-08 Encontrou um erro? @Oneproviderhelpbot