Ir para o conteúdo
DocsAPI 2026-11-13

Conceitos

Erros

Todo erro tem o mesmo formato, com um código estável para o seu programa e uma mensagem em português para pessoas.

Formato

400 Bad Request
{
  "code": "INVALID_REQUEST",
  "message": "Requisição inválida.",
  "requestId": "req_01JDY9D1B2C3D4E5F6G7H8J9KN",
  "fieldErrors": [
    {
      "field": "amountCents",
      "code": "INVALID_FORMAT"
    }
  ]
}
Campos do erro
CampoDescrição
codeCódigo estável em MAIÚSCULAS_COM_SUBLINHADO. Programe contra ele, nunca contra a mensagem.
messageTexto em português para exibir ou registrar. Pode mudar.
requestIdIdentificador da requisição (também no header x-request-id). Informe ao suporte.
fieldErrorsOpcional. Lista de { field, code } com o caminho do campo inválido (ex.: events.0).

Erros do provedor de pagamentos nunca são repassados crus: a API traduz para códigos próprios e nunca devolve dados de cartão.

Códigos frequentes

Códigos de erro
HTTPcodeQuando
400INVALID_REQUESTCorpo, parâmetro ou header inválido. fieldErrors aponta cada campo.
400IDEMPOTENCY_KEY_REQUIREDMutação sem Idempotency-Key.
401INVALID_API_KEYChave ausente, malformada, desconhecida ou de outro ambiente.
401API_KEY_REVOKED / API_KEY_EXPIREDChave revogada ou expirada.
403SCOPE_MISSINGA chave não tem o escopo da rota.
403ACCOUNT_NOT_ALLOWEDX-Account-Id ausente ou não permitido para a chave.
403ACCOUNT_SUSPENDEDNovas operações suspensas para a conta; consultas continuam.
404RESOURCE_NOT_FOUNDNão existe nesta conta (inclusive recurso de outra conta).
409IDEMPOTENCY_CONFLICTA Idempotency-Key já foi usada com outro conteúdo.
409REQUEST_IN_PROGRESSA primeira requisição com a mesma chave ainda está em andamento.
409CUSTOMER_REFERENCE_CONFLICT / ORDER_REFERENCE_CONFLICTJá existe cliente ou pedido com a mesma referência externa e outro conteúdo.
409PAYMENT_ALREADY_OPENJá existe cobrança em aberto ou em processamento para o pedido.
409VERSION_CONFLICTexpectedVersion não é a versão atual do recurso: consulte de novo e decida.
409SCHEDULE_CHANGED / TERMS_CHANGEDO calendário ou os termos aceitos não são os exibidos agora: mostre de novo e colha novo aceite.
409PAYMENT_NOT_READYQR Pix ainda não disponível: a operação não concluiu.
409WEBHOOK_ENDPOINT_NOT_ACTIVEEndpoint pausado ou desativado: reative antes de reenviar ou testar.
422CAPABILITY_UNAVAILABLEMeio de pagamento indisponível para a conta (veja /v1/accounts/capabilities).
422MODE_NOT_AVAILABLEModalidade pedida na sessão de checkout indisponível para a conta.
422REFUND_EXCEEDS_ELIGIBLEEstorno acima do elegível (pago − devolvido − reservado).
422INSUFFICIENT_AVAILABLE_BALANCEEstorno de cobrança recebida acima do saldo disponível conciliado.
422PAYMENT_NOT_REFUNDABLECobrança pendente, em disputa ou já estornada por inteiro.
422TRANSFER_EXCEEDS_ELIGIBLETransferência acima do saldo que pode sair agora.
422FEE_EXCEEDS_NET_AMOUNTA tarifa da plataforma ultrapassa o líquido estimado da cobrança.
422WEBHOOK_ENDPOINT_LIMITA conta já tem 10 endpoints de webhook.
429TOO_MANY_REQUESTSLimite de requisições. Aguarde e repita com a mesma Idempotency-Key.
500INTERNAL_ERRORErro interno. Numa mutação, o resultado é incerto: repita com a mesma chave.

Como tratar

  • 4xx é conclusivo: a requisição não teve efeito. Corrija e tente de novo.
  • 409 REQUEST_IN_PROGRESS, 429 e 5xx pedem repetição com a mesma Idempotency-Key.
  • Uma operação FAILED traz error.code e a próxima ação (nextAction).
SDK: erros tipados
import { BusinessRuleError, ConnectionError, IdempotencyConflictError, InvalidRequestError } from "@eclipta-pay/sdk";

try {
  await eclipta.createPayment(dados, { idempotencyKey: chaveDaIntencao });
} catch (e) {
  if (e instanceof InvalidRequestError) mostrarCampos(e.fieldErrors);
  else if (e instanceof BusinessRuleError) avisar(e.code, e.message);
  else if (e instanceof IdempotencyConflictError) registrarBug(e.requestId);
  else if (e instanceof ConnectionError && e.mayHaveSucceeded) agendarRepeticao(e.idempotencyKey);
  else throw e;
}

Limite de requisições

Cada chave tem um balde de 100 requisições que se repõe a 100 por segundo (6.000 por minuto). Toda resposta traz RateLimit-Limit, RateLimit-Remaining e RateLimit-Reset (segundos até o balde encher). Acima do limite a resposta é 429 TOO_MANY_REQUESTS com Retry-After: espere esse tempo e repita com a mesma Idempotency-Key. O SDK faz isso sozinho.

Próximo: Checkout e cartão transparente