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

Referência da API

Assinaturas

Recorrência SaaS.

Criar assinatura SaaS

POST/v1/subscriptionsImplementada

Chave de API (Authorization: Bearer ep_…)· escopo subscriptions:write· createSubscription

Cria uma assinatura recorrente do seu cliente sobre a recorrência do provedor. A assinatura é a fonte única das cobranças que gera: cada cobrança é vinculada uma só vez, mesmo com webhook repetido ou fora de ordem. Cartão exige captura pelo card-edge com uso SUBSCRIPTION e consentimento.

Escopo da chave: subscriptions:write.

Idempotência: exige o header Idempotency-Key.

Headers de createSubscription
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 createSubscription
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 createSubscription
CampoTipoDescrição
customerId obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
method"CREDIT_CARD" | "PIX" | "BOLETO" padrão "CREDIT_CARD"
paymentMethodIdId (texto)Obrigatório no cartão: handle do card-edge com uso SUBSCRIPTION. 8–160 caracteres · formato ^[A-Za-z0-9_]+$
amountCents obrigatórioPositiveCents (texto) formato ^[1-9][0-9]{0,14}$
cycle obrigatório"WEEKLY" | "BIWEEKLY" | "MONTHLY" | "BIMONTHLY" | "QUARTERLY" | "SEMIANNUALLY" | "YEARLY"
nextDueDate obrigatóriotexto formato ^\d{4}-\d{2}-\d{2}$
endDatetexto formato ^\d{4}-\d{2}-\d{2}$
maxPaymentsinteiro 1 a 1000
descriptiontexto 0–500 caracteres
externalReferencetexto 1–100 caracteres
consentSubscriptionConsentObrigatório no cartão (recorrência autorizada pelo pagador).
consent.termsVersion obrigatóriotexto 1–∞ caracteres
consent.accepted obrigatóriotrue
consent.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/subscriptions" \
  -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 '{"customerId":"cus_01JDY8A1B2C3D4E5F6G7H8J9KA","method":"PIX","amountCents":"9900","cycle":"MONTHLY","nextDueDate":"2026-12-10","description":"Plano Órbita Pro","externalReference":"assinatura-42"}'

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

Campos da resposta 202 de createSubscription
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_SUBSCRIPTION",
  "resourceId": "sub_01JDYA41B2C3D4E5F6G7H8J9KD",
  "statusUrl": "/v1/operations/op_01JDY8D1B2C3D4E5F6G7H8J9KD",
  "nextAction": "WAIT",
  "createdAt": "2026-11-13T13:00:00.000Z"
}

Erros

Erros de createSubscription
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.

Listar assinaturas (com MRR)

GET/v1/subscriptionsImplementada

Chave de API (Authorization: Bearer ep_…)· escopo payments:read· listSubscriptions

Lista as assinaturas da conta com situação, próximo vencimento e receita recorrente mensal (MRR) calculada só com assinaturas ativas.

Escopo da chave: payments:read.

Headers de listSubscriptions
HeaderObrigatórioDescrição
X-Account-IdsimConta permitida pelos grants do principal.
Parâmetros de listSubscriptions
ParâmetroOndeTipoDescrição
cursorquerytexto0–200 caracteres
limitqueryinteiro1 a 100 · padrão 20
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.
Exemplo
curl -X GET "$ECLIPTA_PAY_API/v1/subscriptions" \
  -H "Authorization: Bearer $ECLIPTA_PAY_KEY" \
  -H "X-Account-Id: $ECLIPTA_PAY_ACCOUNT"

Resposta 200: Sucesso.

Campos da resposta 200 de listSubscriptions
CampoTipoDescrição
data obrigatóriolista de Subscription
data[].id obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
data[].customerId obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
data[].method obrigatóriotexto
data[].status obrigatório"PENDING" | "ACTIVE" | "PAUSED" | "INACTIVE" | "EXPIRED" | "BLOCKED_SPLIT" | "CANCELLED" | "FAILED"
data[].display obrigatórioobjeto
data[].display.label obrigatóriotexto
data[].display.variant obrigatório"info" | "warn" | "accent" | "ok" | "bad" | "neutral"
data[].amountCents obrigatórioPositiveCents (texto) formato ^[1-9][0-9]{0,14}$
data[].mrrCents obrigatórioCents (texto)Valor normalizado para 30 dias (painel). formato ^(0|[1-9][0-9]{0,14})$
data[].cycle obrigatório"WEEKLY" | "BIWEEKLY" | "MONTHLY" | "BIMONTHLY" | "QUARTERLY" | "SEMIANNUALLY" | "YEARLY"
data[].nextDueDate obrigatóriotexto ou nulo
data[].endDate obrigatóriotexto ou nulo
data[].maxPayments obrigatóriointeiro ou nulo
data[].description obrigatóriotexto ou nulo
data[].externalReference obrigatóriotexto ou nulo
data[].operationId obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
data[].feePolicyVersion obrigatóriointeiroVersão congelada no template (SUB-002). -9007199254740991 a 9007199254740991
data[].templateVersion obrigatóriointeiro 1 a 9007199254740991
data[].splitDisabled obrigatóriobooleano
data[].chargesCount obrigatóriointeiro 0 a 9007199254740991
data[].cancelledAt obrigatóriodata e hora (ISO 8601) ou nulo
data[].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)))$
data[].version obrigatóriointeiro 1 a 9007199254740991
nextCursor obrigatóriotexto ou nulo
Exemplo 200
{
  "data": [
    {
      "id": "sub_01JDYA41B2C3D4E5F6G7H8J9KD",
      "customerId": "cus_01JDY8A1B2C3D4E5F6G7H8J9KA",
      "method": "PIX",
      "status": "ACTIVE",
      "display": {
        "label": "Ativa",
        "variant": "ok"
      },
      "amountCents": "9900",
      "mrrCents": "9900",
      "cycle": "MONTHLY",
      "nextDueDate": "2026-12-10",
      "endDate": null,
      "maxPayments": null,
      "description": "Plano Órbita Pro",
      "externalReference": "assinatura-42",
      "operationId": "op_01JDY8D1B2C3D4E5F6G7H8J9KD",
      "feePolicyVersion": 1,
      "templateVersion": 1,
      "splitDisabled": false,
      "chargesCount": 3,
      "cancelledAt": null,
      "createdAt": "2026-11-13T13:00:00.000Z",
      "version": 4
    }
  ],
  "nextCursor": null
}

Erros

Erros de listSubscriptions
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.
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.

Consultar assinatura

GET/v1/subscriptions/{id}Implementada

Chave de API (Authorization: Bearer ep_…)· escopo payments:read· getSubscription

Consulta uma assinatura: valor, ciclo, próximo vencimento, método e situação no provedor.

Escopo da chave: payments:read.

Headers de getSubscription
HeaderObrigatórioDescrição
X-Account-IdsimConta permitida pelos grants do principal.
Parâmetros de getSubscription
ParâmetroOndeTipoDescrição
id obrigatóriocaminhoId (texto)8–160 caracteres · formato ^[A-Za-z0-9_]+$
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.
Exemplo
curl -X GET "$ECLIPTA_PAY_API/v1/subscriptions/{id}" \
  -H "Authorization: Bearer $ECLIPTA_PAY_KEY" \
  -H "X-Account-Id: $ECLIPTA_PAY_ACCOUNT"

Resposta 200: Sucesso.

Campos da resposta 200 de getSubscription
CampoTipoDescrição
id obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
customerId obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
method obrigatóriotexto
status obrigatório"PENDING" | "ACTIVE" | "PAUSED" | "INACTIVE" | "EXPIRED" | "BLOCKED_SPLIT" | "CANCELLED" | "FAILED"
display obrigatórioobjeto
display.label obrigatóriotexto
display.variant obrigatório"info" | "warn" | "accent" | "ok" | "bad" | "neutral"
amountCents obrigatórioPositiveCents (texto) formato ^[1-9][0-9]{0,14}$
mrrCents obrigatórioCents (texto)Valor normalizado para 30 dias (painel). formato ^(0|[1-9][0-9]{0,14})$
cycle obrigatório"WEEKLY" | "BIWEEKLY" | "MONTHLY" | "BIMONTHLY" | "QUARTERLY" | "SEMIANNUALLY" | "YEARLY"
nextDueDate obrigatóriotexto ou nulo
endDate obrigatóriotexto ou nulo
maxPayments obrigatóriointeiro ou nulo
description obrigatóriotexto ou nulo
externalReference obrigatóriotexto ou nulo
operationId obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
feePolicyVersion obrigatóriointeiroVersão congelada no template (SUB-002). -9007199254740991 a 9007199254740991
templateVersion obrigatóriointeiro 1 a 9007199254740991
splitDisabled obrigatóriobooleano
chargesCount obrigatóriointeiro 0 a 9007199254740991
cancelledAt obrigatóriodata e hora (ISO 8601) ou nulo
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)))$
version obrigatóriointeiro 1 a 9007199254740991
Exemplo 200
{
  "id": "sub_01JDYA41B2C3D4E5F6G7H8J9KD",
  "customerId": "cus_01JDY8A1B2C3D4E5F6G7H8J9KA",
  "method": "PIX",
  "status": "ACTIVE",
  "display": {
    "label": "Ativa",
    "variant": "ok"
  },
  "amountCents": "9900",
  "mrrCents": "9900",
  "cycle": "MONTHLY",
  "nextDueDate": "2026-12-10",
  "endDate": null,
  "maxPayments": null,
  "description": "Plano Órbita Pro",
  "externalReference": "assinatura-42",
  "operationId": "op_01JDY8D1B2C3D4E5F6G7H8J9KD",
  "feePolicyVersion": 1,
  "templateVersion": 1,
  "splitDisabled": false,
  "chargesCount": 3,
  "cancelledAt": null,
  "createdAt": "2026-11-13T13:00:00.000Z",
  "version": 4
}

Erros

Erros de getSubscription
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.

Alterar valor, ciclo ou vencimento (só cobranças futuras)

PATCH/v1/subscriptions/{id}Implementada

Chave de API (Authorization: Bearer ep_…)· escopo subscriptions:write· updateSubscription

Altera valor, ciclo ou próximo vencimento. A mudança vale só para cobranças futuras; as já geradas não mudam. Responde 202 com a operação.

Escopo da chave: subscriptions:write.

Idempotência: exige o header Idempotency-Key.

Headers de updateSubscription
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 updateSubscription
ParâmetroOndeTipoDescrição
id obrigatóriocaminhoId (texto)8–160 caracteres · formato ^[A-Za-z0-9_]+$
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 updateSubscription
CampoTipoDescrição
amountCentsPositiveCents (texto) formato ^[1-9][0-9]{0,14}$
cycle"WEEKLY" | "BIWEEKLY" | "MONTHLY" | "BIMONTHLY" | "QUARTERLY" | "SEMIANNUALLY" | "YEARLY"
nextDueDatetexto formato ^\d{4}-\d{2}-\d{2}$
descriptiontexto ou nulo
refreshFeePolicybooleanoAplica a política de tarifa vigente às próximas cobranças (auditado; as já geradas não mudam).
expectedVersion obrigatóriointeiro 1 a 9007199254740991
Exemplo
curl -X PATCH "$ECLIPTA_PAY_API/v1/subscriptions/{id}" \
  -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 '{"amountCents":"11900","expectedVersion":4}'

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

Campos da resposta 202 de updateSubscription
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": "UPDATE_SUBSCRIPTION",
  "resourceId": "sub_01JDYA41B2C3D4E5F6G7H8J9KD",
  "statusUrl": "/v1/operations/op_01JDY8D1B2C3D4E5F6G7H8J9KD",
  "nextAction": "WAIT",
  "createdAt": "2026-11-13T13:00:00.000Z"
}

Erros

Erros de updateSubscription
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.

Cancelar assinatura

POST/v1/subscriptions/{id}/cancelImplementada

Chave de API (Authorization: Bearer ep_…)· escopo subscriptions:write· cancelSubscription

Cancela a assinatura no provedor. Cobranças já geradas não são canceladas automaticamente. Responde 202 com a operação.

Escopo da chave: subscriptions:write.

Idempotência: exige o header Idempotency-Key.

Headers de cancelSubscription
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 cancelSubscription
ParâmetroOndeTipoDescrição
id obrigatóriocaminhoId (texto)8–160 caracteres · formato ^[A-Za-z0-9_]+$
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 cancelSubscription
CampoTipoDescrição
reason obrigatóriotexto 10–500 caracteres
expectedVersion obrigatóriointeiro 1 a 9007199254740991
Exemplo
curl -X POST "$ECLIPTA_PAY_API/v1/subscriptions/{id}/cancel" \
  -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 '{"reason":"Cliente encerrou o contrato.","expectedVersion":4}'

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

Campos da resposta 202 de cancelSubscription
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": "CANCEL_SUBSCRIPTION",
  "resourceId": "sub_01JDYA41B2C3D4E5F6G7H8J9KD",
  "statusUrl": "/v1/operations/op_01JDY8D1B2C3D4E5F6G7H8J9KD",
  "nextAction": "WAIT",
  "createdAt": "2026-11-13T13:00:00.000Z"
}

Erros

Erros de cancelSubscription
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.

Pausar (para de gerar cobranças; existentes mantidas)

POST/v1/subscriptions/{id}/pauseImplementada

Chave de API (Authorization: Bearer ep_…)· escopo subscriptions:write· pauseSubscription

Pausa a assinatura: novas cobranças deixam de ser geradas e as existentes continuam valendo. Responde 202 com a operação.

Escopo da chave: subscriptions:write.

Idempotência: exige o header Idempotency-Key.

Headers de pauseSubscription
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 pauseSubscription
ParâmetroOndeTipoDescrição
id obrigatóriocaminhoId (texto)8–160 caracteres · formato ^[A-Za-z0-9_]+$
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 pauseSubscription
CampoTipoDescrição
reason obrigatóriotexto 10–500 caracteres
expectedVersion obrigatóriointeiro 1 a 9007199254740991
Exemplo
curl -X POST "$ECLIPTA_PAY_API/v1/subscriptions/{id}/pause" \
  -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 '{"reason":"Cliente pediu pausa de dois meses.","expectedVersion":4}'

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

Campos da resposta 202 de pauseSubscription
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": "UPDATE_SUBSCRIPTION",
  "resourceId": "sub_01JDYA41B2C3D4E5F6G7H8J9KD",
  "statusUrl": "/v1/operations/op_01JDY8D1B2C3D4E5F6G7H8J9KD",
  "nextAction": "WAIT",
  "createdAt": "2026-11-13T13:00:00.000Z"
}

Erros

Erros de pauseSubscription
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.

Retomar com novo vencimento

POST/v1/subscriptions/{id}/resumeImplementada

Chave de API (Authorization: Bearer ep_…)· escopo subscriptions:write· resumeSubscription

Retoma uma assinatura pausada a partir de um novo vencimento. Responde 202 com a operação.

Escopo da chave: subscriptions:write.

Idempotência: exige o header Idempotency-Key.

Headers de resumeSubscription
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 resumeSubscription
ParâmetroOndeTipoDescrição
id obrigatóriocaminhoId (texto)8–160 caracteres · formato ^[A-Za-z0-9_]+$
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 resumeSubscription
CampoTipoDescrição
nextDueDate obrigatóriotexto formato ^\d{4}-\d{2}-\d{2}$
expectedVersion obrigatóriointeiro 1 a 9007199254740991
Exemplo
curl -X POST "$ECLIPTA_PAY_API/v1/subscriptions/{id}/resume" \
  -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 '{"nextDueDate":"2027-02-10","expectedVersion":5}'

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

Campos da resposta 202 de resumeSubscription
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": "UPDATE_SUBSCRIPTION",
  "resourceId": "sub_01JDYA41B2C3D4E5F6G7H8J9KD",
  "statusUrl": "/v1/operations/op_01JDY8D1B2C3D4E5F6G7H8J9KD",
  "nextAction": "WAIT",
  "createdAt": "2026-11-13T13:00:00.000Z"
}

Erros

Erros de resumeSubscription
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.

Cobranças geradas pela assinatura

GET/v1/subscriptions/{id}/paymentsImplementada

Chave de API (Authorization: Bearer ep_…)· escopo payments:read· listSubscriptionPayments

Lista as cobranças geradas pela assinatura, na ordem de vencimento.

Escopo da chave: payments:read.

Headers de listSubscriptionPayments
HeaderObrigatórioDescrição
X-Account-IdsimConta permitida pelos grants do principal.
Parâmetros de listSubscriptionPayments
ParâmetroOndeTipoDescrição
id obrigatóriocaminhoId (texto)8–160 caracteres · formato ^[A-Za-z0-9_]+$
cursorquerytexto0–200 caracteres
limitqueryinteiro1 a 100 · padrão 20
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.
Exemplo
curl -X GET "$ECLIPTA_PAY_API/v1/subscriptions/{id}/payments" \
  -H "Authorization: Bearer $ECLIPTA_PAY_KEY" \
  -H "X-Account-Id: $ECLIPTA_PAY_ACCOUNT"

Resposta 200: Sucesso.

Campos da resposta 200 de listSubscriptionPayments
CampoTipoDescrição
data obrigatóriolista de SubscriptionCharge
data[].paymentId obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
data[].orderId obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
data[].status obrigatóriotexto
data[].reversalStatus obrigatóriotexto
data[].amountCents obrigatórioPositiveCents (texto) formato ^[1-9][0-9]{0,14}$
data[].dueDate obrigatóriotexto formato ^\d{4}-\d{2}-\d{2}$
data[].feePolicyVersion obrigatóriointeiro -9007199254740991 a 9007199254740991
data[].templateVersion obrigatóriointeiro -9007199254740991 a 9007199254740991
data[].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)))$
nextCursor obrigatóriotexto ou nulo
Exemplo 200
{
  "data": [
    {
      "paymentId": "pay_01JDY8C1B2C3D4E5F6G7H8J9KC",
      "orderId": "ord_01JDY8B1B2C3D4E5F6G7H8J9KB",
      "status": "RECEIVED",
      "reversalStatus": "NONE",
      "amountCents": "9900",
      "dueDate": "2026-11-10",
      "feePolicyVersion": 1,
      "templateVersion": 1,
      "createdAt": "2026-11-13T13:00:00.000Z"
    }
  ],
  "nextCursor": null
}

Erros

Erros de listSubscriptionPayments
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.

Todas as rotas