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

Referência da API

Checkout

Checkout hospedado e captura de cartão transparente.

Criar sessão de checkout

POST/v1/checkout-sessionsImplementada

Chave de API (Authorization: Bearer ep_…)· escopo checkout:write· createCheckout

Cria a sessão de checkout hospedado (pay.) para um pedido. O link carrega um token de alta entropia; a página usa um token efêmero escopado à sessão, nunca a sua chave de API. Validações: formas de pagamento sem repetição, returnUrl HTTPS, expiração de 10 minutos a 7 dias e itens do pedido somando o total (422 ORDER_ITEMS_TOTAL_MISMATCH). Com notifyPayer (padrão), o pagador recebe o link e os lembretes por e-mail. Expirar é local: só com cancelPendingOnExpiry as cobranças Pix/boleto pendentes recebem pedido de cancelamento. Com subscription, a sessão cria a assinatura e a 1ª cobrança é paga pelo método escolhido.

Escopo da chave: checkout:write.

Idempotência: exige o header Idempotency-Key.

Headers de createCheckout
HeaderObrigatórioDescrição
X-Account-IdsimConta permitida pelos grants do principal.
Idempotency-KeysimChave única por intenção (16 a 128 caracteres visíveis). Ao refazer a mesma chamada, repita a mesma chave: o resultado gravado é devolvido. Mesma chave com outro conteúdo responde 409 IDEMPOTENCY_CONFLICT.
Parâmetros de createCheckout
ParâmetroOndeTipoDescrição
Eclipta-Pay-Versionheader"2026-11-13"Versão de data do contrato. Opcional; a resposta sempre informa a versão usada. Valor desconhecido responde 400 UNSUPPORTED_API_VERSION.

Corpo da requisição

Campos do corpo de createCheckout
CampoTipoDescrição
orderId obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
allowedModes obrigatóriolista de "PIX" | "BOLETO" | "CARD_INSTALLMENTS" | "TWO_CARDS" | "PIX_SCHEDULE" | "CARD_MONTHLY_PLAN" | "PIX_FINANCED"PIX_FINANCED responde 422 CAPABILITY_UNAVAILABLE (sem provedor de crédito). 1–∞ itens
returnUrl obrigatóriotextoHTTPS obrigatório (no Sandbox também http://localhost para desenvolvimento).
expiresInSecondsinteiroEntre 10 minutos e 7 dias (padrão 1 hora). Expirar é local: não cancela cobranças já emitidas. 600 a 604800
notifyPayerbooleanoEnvia ao pagador (e-mail do cliente) o link e os lembretes configurados na conta. Padrão: true.
cancelPendingOnExpirybooleanoPolítica explícita: ao expirar, pede o cancelamento (operação própria) das cobranças Pix/boleto pendentes da sessão. Padrão: false.
subscriptionCheckoutSubscriptionModo assinatura: a sessão cria a assinatura e a 1ª cobrança é paga pelo método escolhido.
subscription.cycle obrigatório"WEEKLY" | "BIWEEKLY" | "MONTHLY" | "BIMONTHLY" | "QUARTERLY" | "SEMIANNUALLY" | "YEARLY"
subscription.endDatetexto formato ^\d{4}-\d{2}-\d{2}$
subscription.maxPaymentsinteiro 1 a 1000
subscription.descriptiontexto 0–500 caracteres
Exemplo
curl -X POST "$ECLIPTA_PAY_API/v1/checkout-sessions" \
  -H "Authorization: Bearer $ECLIPTA_PAY_KEY" \
  -H "X-Account-Id: $ECLIPTA_PAY_ACCOUNT" \
  -H "Idempotency-Key: <uma chave por intenção>" \
  -H "Content-Type: application/json" \
  -d '{"orderId":"ord_01JDY8B1B2C3D4E5F6G7H8J9KB","allowedModes":["PIX","BOLETO","CARD_INSTALLMENTS"],"returnUrl":"https://loja.exemplo.com.br/obrigado","expiresInSeconds":86400,"notifyPayer":true}'

Resposta 201: Recurso criado.

Campos da resposta 201 de createCheckout
CampoTipoDescrição
id obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
url obrigatóriotexto
expiresAt obrigatóriodata e hora (ISO 8601) formato ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
orderId obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
Exemplo 201
{
  "id": "chk_01JDY8E1B2C3D4E5F6G7H8J9KE",
  "url": "https://pay.exemplo.test/c/chk_01JDY8E1B2C3D4E5F6G7H8J9KE#t=token-efemero",
  "expiresAt": "2026-11-14T13:00:00.000Z",
  "orderId": "ord_01JDY8B1B2C3D4E5F6G7H8J9KB"
}

Erros

Erros de createCheckout
HTTPExemplo de codeQuando
400INVALID_REQUESTRequisição inválida: fieldErrors aponta cada campo.
401INVALID_API_KEYChave de API ausente, inválida, expirada ou revogada.
403SCOPE_MISSINGEscopo ausente, conta não permitida em X-Account-Id, IP fora da lista ou conta suspensa.
409IDEMPOTENCY_CONFLICTConflito de idempotência (IDEMPOTENCY_CONFLICT), requisição em andamento com a mesma chave (REQUEST_IN_PROGRESS) ou estado do recurso.
422CAPABILITY_UNAVAILABLERegra de negócio ou capacidade indisponível para a conta.
429TOO_MANY_REQUESTSLimite de requisições da chave atingido (rajada de 100 e 6.000 por minuto). Toda resposta traz RateLimit-Limit, RateLimit-Remaining e RateLimit-Reset; o 429 traz Retry-After em segundos. Aguarde e repita com a mesma Idempotency-Key.

Visão pública da sessão

GET/v1/checkout/sessions/{id}Implementada

Token efêmero da sessão de checkout (usado pela página de pagamento)· getCheckoutSession

Visão pública e redigida da sessão, usada pela página de checkout com o CheckoutToken. Não é chamada pelo servidor do integrador.

Parâmetros de getCheckoutSession
ParâmetroOndeTipoDescrição
id obrigatóriocaminhoId (texto)8–160 caracteres · formato ^[A-Za-z0-9_]+$
Exemplo
curl -X GET "$ECLIPTA_PAY_API/v1/checkout/sessions/{id}"

Resposta 200: Sucesso.

Campos da resposta 200 de getCheckoutSession
CampoTipoDescrição
orderId obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
merchantName obrigatóriotexto
environment obrigatórioEnvironmentEm sandbox a página mostra que nenhum valor real é cobrado.
returnUrl obrigatóriotexto
totalCents obrigatórioPositiveCents (texto) formato ^[1-9][0-9]{0,14}$
items obrigatóriolista de objeto
items[].name obrigatóriotexto 1–120 caracteres
items[].quantity obrigatóriointeiro 1 a 10000
items[].unitAmountCents obrigatórioPositiveCents (texto) formato ^[1-9][0-9]{0,14}$
allowedModes obrigatóriolista de texto
status obrigatóriotexto
disclosure obrigatóriotexto
quoteVersion obrigatóriointeiro 1 a 9007199254740991
expiresAt obrigatóriodata e hora (ISO 8601) formato ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
asOf obrigatóriodata e hora (ISO 8601) formato ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
payment obrigatórioobjeto ou nuloÚltima tentativa do pedido. 'Recebido' só após o provedor; callback do navegador não prova pagamento.
modalities obrigatórioCheckoutModalitiesSó as modalidades liberadas para a conta e oferecidas na sessão.
modalities.twoCards obrigatórioobjeto ou nulo
modalities.pixSchedule obrigatórioobjeto ou nulo
modalities.cardMonthlyPlan obrigatórioobjeto ou nulo
group obrigatórioPaymentGroup ou nuloPagamento com dois cartões em andamento ou concluído.
plan obrigatórioCheckoutPlan ou nuloPix em parcelas ou cartão mensal: calendário, parcela atual e progresso.
merchantLogo obrigatóriotexto ou nuloLogo do lojista (data: URI de imagem); null = monograma.
subscription obrigatórioobjeto ou nuloModo assinatura: termos e situação da assinatura criada na sessão.
maxInstallments obrigatóriointeiro ou nuloTeto de parcelas no cartão definido pela oferta; null = padrão do checkout.
offer obrigatórioobjeto ou nuloSessão aberta pelo link de uma oferta.
Exemplo 200
{
  "orderId": "ord_01JDY8B1B2C3D4E5F6G7H8J9KB",
  "merchantName": "Loja Exemplo",
  "environment": "sandbox",
  "returnUrl": "https://loja.exemplo.com.br/obrigado",
  "totalCents": "14970",
  "items": [
    {
      "name": "Plano anual",
      "quantity": 1,
      "unitAmountCents": "14970"
    }
  ],
  "allowedModes": [
    "PIX",
    "CARD_INSTALLMENTS"
  ],
  "status": "OPEN",
  "disclosure": "Pagamento processado por instituição parceira.",
  "quoteVersion": 1,
  "expiresAt": "2026-11-14T13:00:00.000Z",
  "asOf": "2026-11-13T13:00:00.000Z",
  "payment": null,
  "modalities": {
    "twoCards": null,
    "pixSchedule": {
      "termsVersion": "pix-parcelas-2026-11-14",
      "counts": [
        2,
        3,
        4,
        6
      ],
      "notice": "Cada parcela precisa ser paga até o vencimento. Não é financiamento."
    },
    "cardMonthlyPlan": null
  },
  "group": null,
  "plan": null,
  "merchantLogo": null,
  "subscription": null,
  "maxInstallments": null,
  "offer": null
}

Erros

Erros de getCheckoutSession
HTTPExemplo de codeQuando
400INVALID_REQUESTRequisição inválida: fieldErrors aponta cada campo.
401INVALID_API_KEYChave de API ausente, inválida, expirada ou revogada.
403SCOPE_MISSINGEscopo ausente, conta não permitida em X-Account-Id, IP fora da lista ou conta suspensa.
404RESOURCE_NOT_FOUNDRecurso inexistente nesta conta (inclusive recurso de outra conta ou de outro tenant).
429TOO_MANY_REQUESTSLimite de requisições da chave atingido (rajada de 100 e 6.000 por minuto). Toda resposta traz RateLimit-Limit, RateLimit-Remaining e RateLimit-Reset; o 429 traz Retry-After em segundos. Aguarde e repita com a mesma Idempotency-Key.

Confirmar pagamento na sessão

POST/v1/checkout/sessions/{id}/confirmImplementada

Token efêmero da sessão de checkout (usado pela página de pagamento)· confirmCheckout

Confirma a modalidade escolhida na página de checkout. Valor, conta e cliente vêm da sessão no servidor. Responde 202 + Operation.

Idempotência: exige o header Idempotency-Key.

Headers de confirmCheckout
HeaderObrigatórioDescrição
Idempotency-KeysimChave única por intenção (16 a 128 caracteres visíveis). Ao refazer a mesma chamada, repita a mesma chave: o resultado gravado é devolvido. Mesma chave com outro conteúdo responde 409 IDEMPOTENCY_CONFLICT.
Parâmetros de confirmCheckout
ParâmetroOndeTipoDescrição
id obrigatóriocaminhoId (texto)8–160 caracteres · formato ^[A-Za-z0-9_]+$

Corpo da requisição

Campos do corpo de confirmCheckout
CampoTipoDescrição
mode obrigatório"PIX" | "BOLETO" | "CARD_INSTALLMENTS" | "TWO_CARDS" | "PIX_SCHEDULE" | "CARD_MONTHLY_PLAN" | "PIX_FINANCED"
paymentMethodIdId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
installmentsinteiro 1 a 21
legslista de PaymentLegInput 2–2 itens
legs[].clientLegReference obrigatóriotexto 1–60 caracteres
legs[].amountCents obrigatórioPositiveCents (texto) formato ^[1-9][0-9]{0,14}$
legs[].paymentMethodId obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
legs[].installments obrigatóriointeiro 1 a 21
countinteiro 2 a 180
consentConsent
consent.termsVersion obrigatóriotexto 1–∞ caracteres
consent.accepted obrigatóriotrue
consent.displayedScheduleHash obrigatóriotexto formato ^[a-f0-9]{64}$
quoteVersion obrigatóriointeiro 1 a 9007199254740991
payerobjeto
payer.name obrigatóriotexto 2–150 caracteres
payer.taxId obrigatóriotexto formato ^([0-9]{11}|[0-9]{14})$
payer.email obrigatóriotexto formato ^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
subscriptionConsentSubscriptionConsentS8: modo assinatura com cartão. Aceite dos termos exibidos (hash conferido no servidor).
subscriptionConsent.termsVersion obrigatóriotexto 1–∞ caracteres
subscriptionConsent.accepted obrigatóriotrue
subscriptionConsent.displayedTermsHash obrigatóriotextoSHA-256 dos termos exibidos (método, valor, ciclo, datas), conferido no servidor. formato ^[a-f0-9]{64}$
Exemplo
curl -X POST "$ECLIPTA_PAY_API/v1/checkout/sessions/{id}/confirm" \
  -H "Idempotency-Key: <uma chave por intenção>" \
  -H "Content-Type: application/json" \
  -d '{"mode":"PIX","quoteVersion":1,"payer":{"name":"Maria Sintética","taxId":"52998224725","email":"[email protected]"}}'

Resposta 202: Aceito: a intenção foi registrada; acompanhe o resultado (não é transação concluída).

Campos da resposta 202 de confirmCheckout
CampoTipoDescrição
id obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
status obrigatório"ACCEPTED" | "DISPATCHING" | "UNKNOWN" | "SUCCEEDED" | "FAILED" | "MANUAL_REVIEW"
kind obrigatóriotexto
resourceIdId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
statusUrl obrigatóriotexto
nextAction obrigatório"WAIT" | "UPDATE_PAYMENT_METHOD" | "COMPLETE_3DS" | "CONTACT_SUPPORT" | "NONE"
challengeUrltextoSomente URL obtida do provedor e validada.
errorError
error.code obrigatóriotextoCódigo estável em UPPER_SNAKE.
error.message obrigatóriotexto
error.requestId obrigatóriotexto
error.fieldErrorslista de objeto
error.fieldErrors[].field obrigatóriotexto
error.fieldErrors[].code obrigatóriotexto
createdAt obrigatóriodata e hora (ISO 8601) formato ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
Exemplo 202
{
  "id": "op_01JDY8D1B2C3D4E5F6G7H8J9KD",
  "status": "ACCEPTED",
  "kind": "CREATE_PAYMENT",
  "resourceId": "pay_01JDY8C1B2C3D4E5F6G7H8J9KC",
  "statusUrl": "/v1/operations/op_01JDY8D1B2C3D4E5F6G7H8J9KD",
  "nextAction": "WAIT",
  "createdAt": "2026-11-13T13:00:00.000Z"
}

Erros

Erros de confirmCheckout
HTTPExemplo de codeQuando
400INVALID_REQUESTRequisição inválida: fieldErrors aponta cada campo.
401INVALID_API_KEYChave de API ausente, inválida, expirada ou revogada.
403SCOPE_MISSINGEscopo ausente, conta não permitida em X-Account-Id, IP fora da lista ou conta suspensa.
404RESOURCE_NOT_FOUNDRecurso inexistente nesta conta (inclusive recurso de outra conta ou de outro tenant).
409IDEMPOTENCY_CONFLICTConflito de idempotência (IDEMPOTENCY_CONFLICT), requisição em andamento com a mesma chave (REQUEST_IN_PROGRESS) ou estado do recurso.
422CAPABILITY_UNAVAILABLERegra de negócio ou capacidade indisponível para a conta.
429TOO_MANY_REQUESTSLimite de requisições da chave atingido (rajada de 100 e 6.000 por minuto). Toda resposta traz RateLimit-Limit, RateLimit-Remaining e RateLimit-Reset; o 429 traz Retry-After em segundos. Aguarde e repita com a mesma Idempotency-Key.

Contexto efêmero de captura de cartão

POST/v1/checkout/sessions/{id}/capture-sessionsImplementada

Token efêmero da sessão de checkout (usado pela página de pagamento)· createCaptureContext

Emite o contexto efêmero para o formulário de cartão enviar os dados direto ao card-edge. A API pública nunca recebe número nem código de segurança do cartão.

Idempotência: exige o header Idempotency-Key.

Headers de createCaptureContext
HeaderObrigatórioDescrição
Idempotency-KeysimChave única por intenção (16 a 128 caracteres visíveis). Ao refazer a mesma chamada, repita a mesma chave: o resultado gravado é devolvido. Mesma chave com outro conteúdo responde 409 IDEMPOTENCY_CONFLICT.
Parâmetros de createCaptureContext
ParâmetroOndeTipoDescrição
id obrigatóriocaminhoId (texto)8–160 caracteres · formato ^[A-Za-z0-9_]+$

Corpo da requisição

Campos do corpo de createCaptureContext
CampoTipoDescrição
legReferencetexto 0–60 caracteres
usage obrigatório"SINGLE" | "FINITE_MONTHLY" | "SUBSCRIPTION"
consentConsent
consent.termsVersion obrigatóriotexto 1–∞ caracteres
consent.accepted obrigatóriotrue
consent.displayedScheduleHash obrigatóriotexto formato ^[a-f0-9]{64}$
Exemplo
curl -X POST "$ECLIPTA_PAY_API/v1/checkout/sessions/{id}/capture-sessions" \
  -H "Idempotency-Key: <uma chave por intenção>" \
  -H "Content-Type: application/json" \
  -d '{"usage":"SINGLE"}'

Resposta 201: Recurso criado.

Campos da resposta 201 de createCaptureContext
CampoTipoDescrição
captureSessionId obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
captureToken obrigatóriotexto 32–∞ caracteres
expiresAt obrigatóriodata e hora (ISO 8601) formato ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
captureUrl obrigatóriotexto
Exemplo 201
{
  "captureSessionId": "cap_01JDY8F1B2C3D4E5F6G7H8J9KJ",
  "captureToken": "cap-token-efemero-com-mais-de-32-caracteres",
  "expiresAt": "2026-11-13T13:15:00.000Z",
  "captureUrl": "https://card.exemplo.test/capture"
}

Erros

Erros de createCaptureContext
HTTPExemplo de codeQuando
400INVALID_REQUESTRequisição inválida: fieldErrors aponta cada campo.
401INVALID_API_KEYChave de API ausente, inválida, expirada ou revogada.
403SCOPE_MISSINGEscopo ausente, conta não permitida em X-Account-Id, IP fora da lista ou conta suspensa.
404RESOURCE_NOT_FOUNDRecurso inexistente nesta conta (inclusive recurso de outra conta ou de outro tenant).
409IDEMPOTENCY_CONFLICTConflito de idempotência (IDEMPOTENCY_CONFLICT), requisição em andamento com a mesma chave (REQUEST_IN_PROGRESS) ou estado do recurso.
422CAPABILITY_UNAVAILABLERegra de negócio ou capacidade indisponível para a conta.
429TOO_MANY_REQUESTSLimite de requisições da chave atingido (rajada de 100 e 6.000 por minuto). Toda resposta traz RateLimit-Limit, RateLimit-Remaining e RateLimit-Reset; o 429 traz Retry-After em segundos. Aguarde e repita com a mesma Idempotency-Key.

Calendário de Pix em parcelas ou cartão mensal para exibir e aceitar

GET/v1/checkout/sessions/{id}/schedule-quoteImplementada

Token efêmero da sessão de checkout (usado pela página de pagamento)· getCheckoutScheduleQuote

Mesmo calendário, para a página de checkout (autenticada pelo token da sessão). O valor vem do pedido no servidor, nunca do navegador.

Parâmetros de getCheckoutScheduleQuote
ParâmetroOndeTipoDescrição
id obrigatóriocaminhoId (texto)8–160 caracteres · formato ^[A-Za-z0-9_]+$
mode obrigatórioquery"PIX_SCHEDULE" | "CARD_MONTHLY_PLAN" | "PIX_FINANCED"
count obrigatórioqueryinteiro2 a 180
firstDueDatequerytextoformato ^\d{4}-\d{2}-\d{2}$
Exemplo
curl -X GET "$ECLIPTA_PAY_API/v1/checkout/sessions/{id}/schedule-quote"

Resposta 200: Sucesso.

Campos da resposta 200 de getCheckoutScheduleQuote
CampoTipoDescrição
mode obrigatório"PIX_SCHEDULE" | "CARD_MONTHLY_PLAN"
count obrigatóriointeiro 2 a 9007199254740991
totalCents obrigatórioPositiveCents (texto) formato ^[1-9][0-9]{0,14}$
firstDueDate obrigatóriotexto formato ^\d{4}-\d{2}-\d{2}$
anchorDay obrigatóriointeiro 1 a 31
timezone obrigatóriotexto
termsVersion obrigatóriotexto
installments obrigatóriolista de objeto
installments[].index obrigatóriointeiro 1 a 9007199254740991
installments[].dueDate obrigatóriotexto formato ^\d{4}-\d{2}-\d{2}$
installments[].amountCents obrigatórioPositiveCents (texto) formato ^[1-9][0-9]{0,14}$
scheduleHash obrigatóriotextosha256 do calendário canônico (modo, total, parcelas). formato ^[a-f0-9]{64}$
notice obrigatóriotexto
dunningPolicy obrigatórioobjeto ou nulo
Exemplo 200
{
  "mode": "PIX_SCHEDULE",
  "count": 3,
  "totalCents": "30000",
  "firstDueDate": "2026-11-20",
  "anchorDay": 20,
  "timezone": "America/Sao_Paulo",
  "termsVersion": "pix-parcelas-2026-11-14",
  "installments": [
    {
      "index": 1,
      "dueDate": "2026-11-20",
      "amountCents": "10000"
    },
    {
      "index": 2,
      "dueDate": "2026-12-20",
      "amountCents": "10000"
    },
    {
      "index": 3,
      "dueDate": "2027-01-20",
      "amountCents": "10000"
    }
  ],
  "scheduleHash": "3b1f6c0e9a2d4b7c8e5f1a0d2c4b6e8f0a1c3e5b7d9f2a4c6e8b0d1f3a5c7e9b",
  "notice": "Cada parcela precisa ser paga até o vencimento. Não é financiamento: o pedido é liberado quando todas forem pagas.",
  "dunningPolicy": null
}

Erros

Erros de getCheckoutScheduleQuote
HTTPExemplo de codeQuando
400INVALID_REQUESTRequisição inválida: fieldErrors aponta cada campo.
401INVALID_API_KEYChave de API ausente, inválida, expirada ou revogada.
403SCOPE_MISSINGEscopo ausente, conta não permitida em X-Account-Id, IP fora da lista ou conta suspensa.
404RESOURCE_NOT_FOUNDRecurso inexistente nesta conta (inclusive recurso de outra conta ou de outro tenant).
429TOO_MANY_REQUESTSLimite de requisições da chave atingido (rajada de 100 e 6.000 por minuto). Toda resposta traz RateLimit-Limit, RateLimit-Remaining e RateLimit-Reset; o 429 traz Retry-After em segundos. Aguarde e repita com a mesma Idempotency-Key.

Oferta pública pelo código do link

GET/v1/checkout/offers/{code}Implementada

Sem autenticação· getPublicOffer

Dados públicos da oferta para a página pay./o/<código>: nome e logo da loja, produto, nome, tipo, preço e formas de pagamento. Sem autenticação e com limite por IP. Oferta desativada ou produto arquivado responde 410 OFFER_UNAVAILABLE; código inexistente, 404 OFFER_NOT_FOUND.

Parâmetros de getPublicOffer
ParâmetroOndeTipoDescrição
code obrigatóriocaminhotexto8–40 caracteres · formato ^[a-z0-9]+$
Exemplo
curl -X GET "$ECLIPTA_PAY_API/v1/checkout/offers/{code}"

Resposta 200: Sucesso.

Campos da resposta 200 de getPublicOffer
CampoTipoDescrição
code obrigatóriotexto
environment obrigatórioEnvironmentEm sandbox a página mostra que nenhum valor real é cobrado.
merchantName obrigatóriotexto
merchantLogo obrigatóriotexto ou nuloLogo do lojista (data: URI de imagem); null = monograma.
product obrigatórioobjeto
product.name obrigatóriotexto
product.description obrigatóriotexto ou nulo
offer obrigatórioobjeto
offer.name obrigatóriotexto
offer.kind obrigatório"ONE_TIME" | "SUBSCRIPTION" | "PIX_SCHEDULE" | "CARD_MONTHLY_PLAN"Pagamento único, assinatura, Pix parcelado ou cartão mensal.
offer.priceCents obrigatórioPositiveCents (texto) formato ^[1-9][0-9]{0,14}$
offer.methods obrigatóriolista de texto
offer.maxInstallments obrigatóriointeiro ou nulo
offer.subscriptionCycle obrigatório"WEEKLY" | "BIWEEKLY" | "MONTHLY" | "BIMONTHLY" | "QUARTERLY" | "SEMIANNUALLY" | "YEARLY" ou nulo
disclosure obrigatóriotexto
Exemplo 200
{
  "code": "k7m2xq9prt4hwd",
  "environment": "sandbox",
  "merchantName": "Loja Exemplo",
  "merchantLogo": null,
  "product": {
    "name": "Curso de fotografia",
    "description": "Aulas gravadas e material de apoio."
  },
  "offer": {
    "name": "À vista",
    "kind": "ONE_TIME",
    "priceCents": "29700",
    "methods": [
      "PIX",
      "CARD_INSTALLMENTS"
    ],
    "maxInstallments": 6,
    "subscriptionCycle": null
  },
  "disclosure": "Serviços de pagamento prestados por Asaas Gestão Financeira S.A."
}

Erros

Erros de getPublicOffer
HTTPExemplo de codeQuando
400INVALID_REQUESTRequisição inválida: fieldErrors aponta cada campo.
404RESOURCE_NOT_FOUNDRecurso inexistente nesta conta (inclusive recurso de outra conta ou de outro tenant).
429TOO_MANY_REQUESTSLimite de requisições da chave atingido (rajada de 100 e 6.000 por minuto). Toda resposta traz RateLimit-Limit, RateLimit-Remaining e RateLimit-Reset; o 429 traz Retry-After em segundos. Aguarde e repita com a mesma Idempotency-Key.

Abrir o checkout da oferta com os dados do comprador

POST/v1/checkout/offers/{code}/sessionsImplementada

Sem autenticação· startOfferCheckout

Abre o checkout de uma oferta para o comprador: confere nome, CPF ou CNPJ (dígitos verificadores), e-mail e telefone opcional, cria ou reaproveita o cliente da conta (mesmo documento e e-mail), cria o pedido com o preço da oferta e a sessão de checkout. Sem autenticação, com limite por IP e Idempotency-Key obrigatória: repetir o envio devolve a mesma sessão, sem segundo pedido.

Idempotência: exige o header Idempotency-Key.

Headers de startOfferCheckout
HeaderObrigatórioDescrição
Idempotency-KeysimChave única por intenção (16 a 128 caracteres visíveis). Ao refazer a mesma chamada, repita a mesma chave: o resultado gravado é devolvido. Mesma chave com outro conteúdo responde 409 IDEMPOTENCY_CONFLICT.
Parâmetros de startOfferCheckout
ParâmetroOndeTipoDescrição
code obrigatóriocaminhotexto8–40 caracteres · formato ^[a-z0-9]+$

Corpo da requisição

Campos do corpo de startOfferCheckout
CampoTipoDescrição
name obrigatóriotexto 2–150 caracteres
taxId obrigatóriotextoCPF ou CNPJ, só números (dígitos verificadores conferidos). formato ^([0-9]{11}|[0-9]{14})$
email obrigatóriotexto 0–254 caracteres · formato ^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
phonetextoCom DDD, só números. formato ^[0-9]{10,11}$
Exemplo
curl -X POST "$ECLIPTA_PAY_API/v1/checkout/offers/{code}/sessions" \
  -H "Idempotency-Key: <uma chave por intenção>" \
  -H "Content-Type: application/json" \
  -d '{"name":"Maria Sintética","taxId":"52998224725","email":"[email protected]","phone":"11987654321"}'

Resposta 201: Recurso criado.

Campos da resposta 201 de startOfferCheckout
CampoTipoDescrição
checkoutSessionId obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
url obrigatóriotextoSessão de checkout com o token no fragmento (#t=…): mostrado só ao comprador.
expiresAt obrigatóriodata e hora (ISO 8601) formato ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
Exemplo 201
{
  "checkoutSessionId": "chk_01JDY8E1B2C3D4E5F6G7H8J9KE",
  "url": "https://pay.exemplo.test/c/chk_01JDY8E1B2C3D4E5F6G7H8J9KE#t=token-efemero",
  "expiresAt": "2026-11-14T13:00:00.000Z"
}

Erros

Erros de startOfferCheckout
HTTPExemplo de codeQuando
400INVALID_REQUESTRequisição inválida: fieldErrors aponta cada campo.
404RESOURCE_NOT_FOUNDRecurso inexistente nesta conta (inclusive recurso de outra conta ou de outro tenant).
409IDEMPOTENCY_CONFLICTConflito de idempotência (IDEMPOTENCY_CONFLICT), requisição em andamento com a mesma chave (REQUEST_IN_PROGRESS) ou estado do recurso.
422CAPABILITY_UNAVAILABLERegra de negócio ou capacidade indisponível para a conta.
429TOO_MANY_REQUESTSLimite de requisições da chave atingido (rajada de 100 e 6.000 por minuto). Toda resposta traz RateLimit-Limit, RateLimit-Remaining e RateLimit-Reset; o 429 traz Retry-After em segundos. Aguarde e repita com a mesma Idempotency-Key.

Todas as rotas