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.
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/ServerErrorcomidempotencyKey. Repita você mesmo com a mesma chave: o servidor devolve o resultado gravado.
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.
const final = await eclipta.waitForOperation(operacao, { timeoutMs: 60_000, intervalMs: 1_000 });Webhooks
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.
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étodo | Rota | Descrição |
|---|---|---|
cancelPayment() | POST /v1/payments/{id}/cancel | Cancelar cobrança no provedor (operação própria, ADR-0010) |
cancelPlan() | POST /v1/payment-plans/{id}/cancel | Cancelar plano (corta despachos futuros) |
cancelSubscription() | POST /v1/subscriptions/{id}/cancel | Cancelar assinatura |
createBeneficiary() | POST /v1/beneficiaries | Cadastrar favorecido (mesma titularidade; validação por pessoa com step-up e quarentena) |
createCheckout() | POST /v1/checkout-sessions | Criar sessão de checkout |
createCustomer() | POST /v1/customers | Criar cliente pagador |
createOrder() | POST /v1/orders | Criar pedido |
createPayment() | POST /v1/payments | Criar cobrança (intenção assíncrona) |
createPlan() | POST /v1/payment-plans | Criar Pix em parcelas ou parcelamento mensal no cartão |
createRefund() | POST /v1/payments/{id}/refunds | Estornar cobrança (total ou parcial, limitado ao elegível) |
createSubscription() | POST /v1/subscriptions | Criar assinatura SaaS |
createTwoCardGroup() | POST /v1/payment-groups | Pagamento com dois cartões |
createWebhookEndpoint() | POST /v1/webhook-endpoints | Cadastrar endpoint de webhook |
deleteWebhookEndpoint() | DELETE /v1/webhook-endpoints/{id} | Remover endpoint (cancela entregas pendentes) |
getAccount() | GET /v1/account | Conta financeira selecionada e situação do onboarding |
getBalance() | GET /v1/balance | Saldos observados, conciliados e elegíveis |
getBeneficiary() | GET /v1/beneficiaries/{id} | Consultar favorecido |
getBoleto() | GET /v1/payments/{id}/boleto | Boleto da cobrança |
getCapabilities() | GET /v1/accounts/capabilities | Capacidades 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-notifications | E-mails ao pagador: link do checkout e lembretes |
getPayment() | GET /v1/payments/{id} | Consultar cobrança |
getPixQr() | GET /v1/payments/{id}/pix | QR Code Pix da cobrança |
getPlan() | GET /v1/payment-plans/{id} | Consultar plano |
getRefund() | GET /v1/refunds/{id} | Consultar estorno |
getStatement() | GET /v1/statement | Extrato 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/beneficiaries | Listar favorecidos (destino mascarado) |
listCustomers() | GET /v1/customers | Listar clientes |
listDisputes() | GET /v1/disputes | Listar disputas |
listEvents() | GET /v1/events | Eventos dos últimos 30 dias |
listGroups() | GET /v1/payment-groups | Listar grupos de dois cartões (filtro por pedido) |
listPaymentParcels() | GET /v1/payments/{id}/parcels | Parcelas do parcelamento no cartão (status cru de cada parcela) |
listPaymentRefunds() | GET /v1/payments/{id}/refunds | Estornos da cobrança (inclui os feitos fora do Eclipta Pay) |
listPayments() | GET /v1/payments | Listar cobranças |
listPlans() | GET /v1/payment-plans | Listar planos (filtro por pedido) |
listReconciliationCases() | GET /v1/reconciliation/cases | Casos de conciliação da conta |
listSubscriptionPayments() | GET /v1/subscriptions/{id}/payments | Cobranças geradas pela assinatura |
listSubscriptions() | GET /v1/subscriptions | Listar assinaturas (com MRR) |
listTransfers() | GET /v1/transfers | Listar transferências |
listWebhookDeliveries() | GET /v1/webhook-deliveries | Listar entregas de webhook |
listWebhookEndpoints() | GET /v1/webhook-endpoints | Listar endpoints de webhook |
pauseSubscription() | POST /v1/subscriptions/{id}/pause | Pausar (para de gerar cobranças; existentes mantidas) |
quoteOrderSchedule() | GET /v1/orders/{id}/schedule-quote | Calendário de um plano para o pedido (exibir e colher o aceite) |
refundGroup() | POST /v1/payment-groups/{id}/refunds | Estornar grupo (alocação proporcional) |
replacePlanCard() | PUT /v1/payment-plans/{id}/payment-method | Trocar cartão do plano |
replayWebhookDelivery() | POST /v1/webhook-deliveries/{id}/replay | Reenviar entrega (mesmo eventId) |
requestTransfer() | POST /v1/transfers | Solicitar transferência (reserva saldo e aguarda aprovação no painel) |
resendEvent() | POST /v1/events/{id}/resend | Reenviar evento aos endpoints |
resumeSubscription() | POST /v1/subscriptions/{id}/resume | Retomar com novo vencimento |
rotateWebhookSecret() | POST /v1/webhook-endpoints/{id}/rotate-secret | Rotacionar o segredo de assinatura com sobreposição |
sendWebhookTest() | POST /v1/webhook-endpoints/{id}/test | Enviar evento de teste ao endpoint |
submitDispute() | POST /v1/disputes/{id}/submit | Enviar defesa (uma vez) |
updatePayerNotificationSettings() | PUT /v1/account/payer-notifications | Configurar 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}/evidence | Anexar evidência (PDF, JPG ou PNG até 10 MB; corpo binário, nome em X-File-Name) |