Allya Payments
Referência

Erros

Códigos de erro retornados pela API pública da Allya Payments, organizados por categoria.

A API retorna erros em JSON com o campo error. Esta página explica o formato, categoriza os códigos por origem (auth, payload, gateway, etc.) e mostra como tratar cada classe.

Hierarquia geral

Antes de descer nas tabelas, internalize o que cada faixa de HTTP significa na Allya:

FaixaOrigemO que fazer
400Sua chamada está malformada ou o gateway recusou antes de cobrar (validação inputada na borda).Corrija o payload. Não retentar.
401Auth: chave ausente, inválida ou revogada.Confira Authorization. Veja Autenticação.
402Billing da plataforma: a organização não está com a assinatura da Allya em dia ou atingiu a cota do plano.Regularize o billing ou faça upgrade. Não retentar antes de resolver.
404Recurso não existe no ambiente da chave.Confira id e ambiente da chave.
409Estado: o recurso existe, mas o estado atual recusa a operação. Inclui falhas de roteamento.Não retentar antes de corrigir configuração.
429Rate limit.Espere Retry-After. Veja Rate limiting.
500Bug ou indisponibilidade interna da Allya.Retentar com backoff. Investigue logs.
501Adapter do gateway atual não implementa a ação solicitada.Use outro gateway ou aceite a limitação.
502Gateway externo recusou ou falhou.Retentar com backoff. Cheque painel do gateway.

401, 404 e a maioria dos 409 não retentar: vão falhar igual. 429, 5xx (exceto 501) retentar com backoff.

Formato

{
  "error": "invalid_input",
  "issues": [
    {
      "path": ["customer", "email"],
      "message": "Invalid email"
    }
  ]
}
  • error: código curto em snake_case, estável. Use em switch no seu código.
  • message: texto livre opcional, não estável. Para logs e UI, não para lógica.
  • issues[]: quando aplicável (invalid_input), aponta cada campo problemático com path (caminho do objeto).
  • Outros campos por código: provider em erros de gateway, method em erros de roteamento, action em not_implemented.

Exemplo real com múltiplos issues:

{
  "error": "invalid_input",
  "issues": [
    {
      "path": ["amount"],
      "message": "Expected number, received string"
    },
    {
      "path": ["customer", "document"],
      "message": "CPF/CNPJ deve ter 11 ou 14 dígitos"
    }
  ]
}

Erros de autenticação

HTTPErrorQuando acontece
401unauthorizedAPI key ausente, inválida ou revogada.

Erros de payload

HTTPErrorQuando acontece
400invalid_jsonCorpo da requisição não é JSON válido.
400invalid_inputJSON válido, mas fora do schema esperado ou rejeitado pelo gateway antes da chamada (ex.: customer.phone ausente para cartão no Pagar.me, metadata grande demais ou com tipo inválido). issues[].path aponta o campo.
400invalid_idID na rota de pagamento é inválido.
400missing_queryGET /v1/payments sem ?externalId=....
400cannot_cancel_pixTentativa de cancelar pagamento Pix.

Erros de leitura

HTTPErrorQuando acontece
404not_foundPagamento não existe no ambiente da API key.

Erros de ação em pagamento

HTTPErrorQuando acontece
409cannot_cancel_paidTentativa de cancelar pagamento já confirmado.
409already_canceledPagamento já está em status final (canceled, expired ou failed). A resposta inclui status.
409cannot_cancel_statusStatus atual não permite cancelamento. A resposta inclui status.
409missing_gateway_refPagamento não tem referência do gateway para sync ou cancel.
501not_implementedGateway atual ainda não implementa a ação solicitada pela Allya.

Erros de assinatura

Específicos de POST /v1/subscriptions e POST /v1/subscriptions/:id/cancel. As demais classes (auth, payload, roteamento, billing, gateway) também se aplicam.

HTTPErrorQuando acontece
400invalid_inputInclui o caso de gateway.pagarme.planId ausente quando o roteamento resolve para Pagar.me, e atPeriodEnd=true em gateway que não suporta cancelamento agendado (Abacate Pay, Pagar.me). issues[].path aponta o campo.
409already_canceledCancelamento de assinatura já encerrada. A resposta inclui status.
409missing_gateway_refAssinatura nunca foi sincronizada com o gateway (criação falhou).
409action_not_implementedO gateway resolvido não implementa a ação de assinatura solicitada (criar ou cancelar). A resposta inclui provider e action. Diferente de not_implemented (501) de pagamento: aqui é 409.

Erros de roteamento

HTTPErrorQuando acontece
409no_routing_ruleNão há gateway configurado para o método no ambiente.
409provider_not_configuredRegra aponta para gateway não configurado.
409provider_disabledGateway configurado, mas desativado.
409method_not_supportedGateway não suporta o método solicitado.

Erros de limite

HTTPErrorQuando acontece
429rate_limit_exceededAPI key excedeu o limite por minuto. POST /v1/payments tem cota maior (default 30/min); POST /v1/payments/:id/sync e POST /v1/payments/:id/cancel têm cota separada e mais agressiva (default 10/min cada). Veja os headers Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining e X-RateLimit-Reset.

Erros de billing da plataforma

Diferente dos demais, estes erros não falam do pagamento em si, e sim do estado da sua assinatura da Allya (billing da organização). Aparecem em POST /v1/payments e POST /v1/subscriptions quando a plataforma bloqueia novas cobranças. Não retentar antes de regularizar.

HTTPErrorQuando acontece
402billing_inactiveA organização não tem assinatura ativa da Allya.
402billing_past_dueA assinatura da Allya está com pagamento em atraso.
402billing_incompleteA assinatura da Allya foi iniciada mas não foi confirmada.
402billing_canceledA assinatura da Allya foi cancelada.
402billing_expiredA assinatura da Allya expirou.
402billing_monthly_tx_limit_reachedA cota mensal de transações do plano foi atingida (apenas POST /v1/payments). A resposta inclui limit (cota do plano) e used (já consumido no ciclo). Faça upgrade ou aguarde o próximo ciclo.

Erros de gateway

HTTPErrorQuando acontece
502gateway_errorA chamada ao gateway falhou.

Erros inesperados

HTTPErrorQuando acontece
500internal_errorFalha inesperada no servidor.

Tratamento recomendado

const response = await fetch("https://payments-api.allyasolutions.com/v1/payments", options);

if (!response.ok) {
  const body = await response.json().catch(() => null);

  if (response.status === 401) {
    throw new Error("Verifique a API key");
  }

  if (response.status === 409) {
    throw new Error(`Configuração incompleta: ${body?.error}`);
  }

  throw new Error(body?.error ?? "Erro inesperado");
}

Veja também

On this page