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

Integração

SDK TypeScript

Cliente server-side tipado a partir do contrato da API, sem dependências de runtime. Cuida da Idempotency-Key, das retentativas seguras, das operações 202 e da verificação de webhooks.

Instalação

O pacote @eclipta-pay/sdk faz parte do monorepo do Eclipta Pay e exige Node.js 20 ou superior. A publicação em registro público ainda não foi feita; até lá, use o pacote do repositório (dependência workspace:*), que expõe o código-fonte TypeScript. O README.md do pacote resume instalação, idempotência, operações e webhooks; as integrações de referência mostram o SDK em serviços completos.

TYPESCRIPT
import { EcliptaPay } from "@eclipta-pay/sdk";

export const eclipta = new EcliptaPay({
  apiKey: process.env.ECLIPTA_PAY_KEY!,      // ep_test_… ou ep_live_…
  baseUrl: process.env.ECLIPTA_PAY_API!,     // origem da API, sem /v1
  accountId: process.env.ECLIPTA_PAY_ACCOUNT, // X-Account-Id padrão
  timeoutMs: 30_000,
  maxNetworkRetries: 2,
});

Idempotência e retentativas

  • Cada chamada de mutação recebe uma Idempotency-Key própria, gerada uma vez e repetida em todas as retentativas automáticas daquela chamada.
  • Leituras são repetidas em falha de rede, 429 e 5xx. Mutações só quando é seguro: conexão recusada antes do envio, 429 e 409 REQUEST_IN_PROGRESS.
  • Timeout, conexão caída depois do envio e 5xx numa mutação viram ConnectionError/ServerError com idempotencyKey. Repita você mesmo com a mesma chave: o servidor devolve o resultado gravado.
TYPESCRIPT
import { ConnectionError } from "@eclipta-pay/sdk";

const chave = `pedido-${pedido.id}-pix`; // uma chave por intenção, guardada com o pedido
try {
  await eclipta.createPayment({ orderId: pedido.id, method: "PIX", dueDate: "2026-11-20" }, { idempotencyKey: chave });
} catch (e) {
  if (e instanceof ConnectionError && e.mayHaveSucceeded) {
    // Mais tarde, a mesma chamada com a mesma chave devolve a operação original.
    await eclipta.createPayment({ orderId: pedido.id, method: "PIX", dueDate: "2026-11-20" }, { idempotencyKey: chave });
  } else throw e;
}

Operações 202

waitForOperation consulta GET /v1/operations/{id} com intervalo crescente até o fim ou até uma ação do pagador (3DS, trocar cartão). UNKNOWN continua sendo consultado; se o prazo acabar, o método lança OperationTimeoutError com o último estado. Ele nunca repete a escrita.

TYPESCRIPT
const final = await eclipta.waitForOperation(operacao, { timeoutMs: 60_000, intervalMs: 1_000 });

Webhooks

TYPESCRIPT
import { verifyWebhook } from "@eclipta-pay/sdk";

// Aceita Headers do fetch ou o objeto de headers do Node; um segredo ou uma lista (rotação).
const evento = verifyWebhook(corpoCru, headers, [segredoNovo, segredoAntigo], { toleranceSeconds: 300 });
switch (evento.type) {
  case "order.payment_completed":
    await liberarPedido(evento.aggregateId, evento.eventId);
    break;
}

Também disponível como eclipta.webhooks.verify e eclipta.webhooks.constructEvent. Para testar o seu receptor sem rede, signTestPayload(corpo, segredo) gera headers assinados.

Erros e paginação

Os erros são classes por situação (InvalidRequestError, AuthenticationError, PermissionError, NotFoundError, ConflictError, IdempotencyConflictError, BusinessRuleError, RateLimitError, ServerError, ConnectionError, TimeoutError), todas com code, requestId e fieldErrors. Veja Erros.

TYPESCRIPT
for await (const cobranca of eclipta.paginate("listPayments", { limit: 100 })) {
  console.log(cobranca.id, cobranca.status);
}

Métodos (66)

Um método por rota implementada, com o mesmo nome do operationId. Rotas ainda especificadas entram quando forem implementadas e o SDK for regenerado.

Métodos do SDK
MétodoRotaDescrição
cancelPayment()POST /v1/payments/{id}/cancelCancelar cobrança no provedor (operação própria, ADR-0010)
cancelPlan()POST /v1/payment-plans/{id}/cancelCancelar plano (corta despachos futuros)
cancelSubscription()POST /v1/subscriptions/{id}/cancelCancelar assinatura
createBeneficiary()POST /v1/beneficiariesCadastrar favorecido (mesma titularidade; validação por pessoa com step-up e quarentena)
createCheckout()POST /v1/checkout-sessionsCriar sessão de checkout
createCustomer()POST /v1/customersCriar cliente pagador
createOrder()POST /v1/ordersCriar pedido
createPayment()POST /v1/paymentsCriar cobrança (intenção assíncrona)
createPlan()POST /v1/payment-plansCriar Pix em parcelas ou parcelamento mensal no cartão
createRefund()POST /v1/payments/{id}/refundsEstornar cobrança (total ou parcial, limitado ao elegível)
createSubscription()POST /v1/subscriptionsCriar assinatura SaaS
createTwoCardGroup()POST /v1/payment-groupsPagamento com dois cartões
createWebhookEndpoint()POST /v1/webhook-endpointsCadastrar endpoint de webhook
deleteWebhookEndpoint()DELETE /v1/webhook-endpoints/{id}Remover endpoint (cancela entregas pendentes)
getAccount()GET /v1/accountConta financeira selecionada e situação do onboarding
getBalance()GET /v1/balanceSaldos observados, conciliados e elegíveis
getBeneficiary()GET /v1/beneficiaries/{id}Consultar favorecido
getBoleto()GET /v1/payments/{id}/boletoBoleto da cobrança
getCapabilities()GET /v1/accounts/capabilitiesCapacidades e restrições da conta
getCustomer()GET /v1/customers/{id}Consultar cliente
getDispute()GET /v1/disputes/{id}Consultar disputa
getEvent()GET /v1/events/{id}Consultar evento
getGroup()GET /v1/payment-groups/{id}Consultar grupo
getOperation()GET /v1/operations/{id}Consultar operação
getOrder()GET /v1/orders/{id}Consultar pedido
getPayerNotificationSettings()GET /v1/account/payer-notificationsE-mails ao pagador: link do checkout e lembretes
getPayment()GET /v1/payments/{id}Consultar cobrança
getPixQr()GET /v1/payments/{id}/pixQR Code Pix da cobrança
getPlan()GET /v1/payment-plans/{id}Consultar plano
getRefund()GET /v1/refunds/{id}Consultar estorno
getStatement()GET /v1/statementExtrato conciliado
getSubscription()GET /v1/subscriptions/{id}Consultar assinatura
getTransfer()GET /v1/transfers/{id}Consultar transferência
getWebhookDelivery()GET /v1/webhook-deliveries/{id}Consultar entrega e tentativas
getWebhookEndpoint()GET /v1/webhook-endpoints/{id}Consultar endpoint de webhook
listBeneficiaries()GET /v1/beneficiariesListar favorecidos (destino mascarado)
listCustomers()GET /v1/customersListar clientes
listDisputes()GET /v1/disputesListar disputas
listEvents()GET /v1/eventsEventos dos últimos 30 dias
listGroups()GET /v1/payment-groupsListar grupos de dois cartões (filtro por pedido)
listPaymentParcels()GET /v1/payments/{id}/parcelsParcelas do parcelamento no cartão (status cru de cada parcela)
listPaymentRefunds()GET /v1/payments/{id}/refundsEstornos da cobrança (inclui os feitos fora do Eclipta Pay)
listPayments()GET /v1/paymentsListar cobranças
listPlans()GET /v1/payment-plansListar planos (filtro por pedido)
listReconciliationCases()GET /v1/reconciliation/casesCasos de conciliação da conta
listSubscriptionPayments()GET /v1/subscriptions/{id}/paymentsCobranças geradas pela assinatura
listSubscriptions()GET /v1/subscriptionsListar assinaturas (com MRR)
listTransfers()GET /v1/transfersListar transferências
listWebhookDeliveries()GET /v1/webhook-deliveriesListar entregas de webhook
listWebhookEndpoints()GET /v1/webhook-endpointsListar endpoints de webhook
pauseSubscription()POST /v1/subscriptions/{id}/pausePausar (para de gerar cobranças; existentes mantidas)
quoteOrderSchedule()GET /v1/orders/{id}/schedule-quoteCalendário de um plano para o pedido (exibir e colher o aceite)
refundGroup()POST /v1/payment-groups/{id}/refundsEstornar grupo (alocação proporcional)
replacePlanCard()PUT /v1/payment-plans/{id}/payment-methodTrocar cartão do plano
replayWebhookDelivery()POST /v1/webhook-deliveries/{id}/replayReenviar entrega (mesmo eventId)
requestTransfer()POST /v1/transfersSolicitar transferência (reserva saldo e aguarda aprovação no painel)
resendEvent()POST /v1/events/{id}/resendReenviar evento aos endpoints
resumeSubscription()POST /v1/subscriptions/{id}/resumeRetomar com novo vencimento
rotateWebhookSecret()POST /v1/webhook-endpoints/{id}/rotate-secretRotacionar o segredo de assinatura com sobreposição
sendWebhookTest()POST /v1/webhook-endpoints/{id}/testEnviar evento de teste ao endpoint
submitDispute()POST /v1/disputes/{id}/submitEnviar defesa (uma vez)
updatePayerNotificationSettings()PUT /v1/account/payer-notificationsConfigurar os e-mails ao pagador (lembretes D-3, D0, D+1 por padrão)
updatePayment()PATCH /v1/payments/{id}Alterar valor, vencimento ou descrição de cobrança pendente (intenção assíncrona)
updateSubscription()PATCH /v1/subscriptions/{id}Alterar valor, ciclo ou vencimento (só cobranças futuras)
updateWebhookEndpoint()PATCH /v1/webhook-endpoints/{id}Atualizar, pausar ou reativar endpoint
uploadDisputeEvidence()POST /v1/disputes/{id}/evidenceAnexar evidência (PDF, JPG ou PNG até 10 MB; corpo binário, nome em X-File-Name)

Próximo: Referência da API