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

Referência da API

Webhooks

Endpoints, entregas assinadas, retentativas e reenvio.

Cadastrar endpoint de webhook

POST/v1/webhook-endpointsImplementada

Chave de API (Authorization: Bearer ep_…)· escopo webhooks:write· createWebhookEndpoint

Cadastra um destino para receber eventos assinados (até 10 por conta). O segredo whsec_… aparece só nesta resposta; ele é guardado cifrado e assina cada entrega. Repetir a criação com a mesma Idempotency-Key devolve o endpoint sem o segredo. HTTPS é obrigatório em produção; endereços internos, privados, de loopback ou de metadata são recusados aqui e de novo em cada entrega, depois da resolução de DNS.

Escopo da chave: webhooks:write.

Idempotência: exige o header Idempotency-Key.

Headers de createWebhookEndpoint
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 createWebhookEndpoint
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 createWebhookEndpoint
CampoTipoDescrição
url obrigatóriotextoURL de destino. HTTPS obrigatório em produção; `http://` só no ambiente de testes. Endereços internos, privados, de loopback e de metadata são recusados. 0–2048 caracteres
events obrigatóriolista de SubscribableEventTypeTipos do catálogo que este endpoint recebe; `["*"]` recebe todos. 1–50 itens
descriptiontextoRótulo livre para identificar o endpoint no painel. 1–200 caracteres
Exemplo
curl -X POST "$ECLIPTA_PAY_API/v1/webhook-endpoints" \
  -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 '{"url":"https://loja.exemplo.com.br/webhooks/eclipta","events":["payment.confirmed","order.payment_completed"],"description":"Produção da loja"}'

Resposta 201: Recurso criado.

Campos da resposta 201 de createWebhookEndpoint
CampoTipoDescrição
id obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
url obrigatóriotexto
description obrigatóriotexto ou nulo
events obrigatóriolista de texto
status obrigatório"ACTIVE" | "DISABLED" | "AUTO_DISABLED"ACTIVE recebe; DISABLED foi pausado pelo integrador; AUTO_DISABLED foi desativado após 3 dias seguidos de falhas.
apiVersion obrigatório"2026-11-13"
secretVersion obrigatóriointeiroVersão do segredo atual; é o valor do header Eclipta-Pay-Key-Id. 1 a 9007199254740991
previousSecretVersion obrigatóriointeiro ou nulo
previousSecretExpiresAt obrigatóriodata e hora (ISO 8601) ou nuloAté quando o segredo anterior ainda assina (rotação com sobreposição).
consecutiveFailures obrigatóriointeiro 0 a 9007199254740991
failingSince obrigatóriodata e hora (ISO 8601) ou nulo
lastSuccessAt obrigatóriodata e hora (ISO 8601) ou nulo
lastFailureAt obrigatóriodata e hora (ISO 8601) ou nulo
disabledAt obrigatóriodata e hora (ISO 8601) ou nulo
disabledReason obrigatório"MANUAL" | "CONSECUTIVE_FAILURES" 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)))$
updatedAt 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)))$
secrettextoSegredo de assinatura. Exibido só na resposta da criação e da rotação; guarde-o com segurança. formato ^whsec_.*
Exemplo 201
{
  "id": "whk_01JDY9A1B2C3D4E5F6G7H8J9KF",
  "url": "https://loja.exemplo.com.br/webhooks/eclipta",
  "description": "Produção da loja",
  "events": [
    "payment.confirmed",
    "order.payment_completed"
  ],
  "status": "ACTIVE",
  "apiVersion": "2026-11-13",
  "secretVersion": 1,
  "previousSecretVersion": null,
  "previousSecretExpiresAt": null,
  "consecutiveFailures": 0,
  "failingSince": null,
  "lastSuccessAt": null,
  "lastFailureAt": null,
  "disabledAt": null,
  "disabledReason": null,
  "createdAt": "2026-11-13T13:00:00.000Z",
  "updatedAt": "2026-11-13T13:00:00.000Z",
  "secret": "whsec_Exemplo3xAm9lE0nLy7cT2vK4pQ8wZ1sB6dF5gH0jL"
}

Erros

Erros de createWebhookEndpoint
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 endpoints de webhook

GET/v1/webhook-endpointsImplementada

Chave de API (Authorization: Bearer ep_…)· escopo webhooks:write· listWebhookEndpoints

Lista os endpoints da conta (sem segredos), com filtro opcional por situação.

Escopo da chave: webhooks:write.

Headers de listWebhookEndpoints
HeaderObrigatórioDescrição
X-Account-IdsimConta permitida pelos grants do principal.
Parâmetros de listWebhookEndpoints
ParâmetroOndeTipoDescrição
cursorquerytexto0–200 caracteres
limitqueryinteiro1 a 100 · padrão 20
statusquery"ACTIVE" | "DISABLED" | "AUTO_DISABLED"
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/webhook-endpoints" \
  -H "Authorization: Bearer $ECLIPTA_PAY_KEY" \
  -H "X-Account-Id: $ECLIPTA_PAY_ACCOUNT"

Resposta 200: Sucesso.

Campos da resposta 200 de listWebhookEndpoints
CampoTipoDescrição
data obrigatóriolista de WebhookEndpoint
data[].id obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
data[].url obrigatóriotexto
data[].description obrigatóriotexto ou nulo
data[].events obrigatóriolista de texto
data[].status obrigatório"ACTIVE" | "DISABLED" | "AUTO_DISABLED"ACTIVE recebe; DISABLED foi pausado pelo integrador; AUTO_DISABLED foi desativado após 3 dias seguidos de falhas.
data[].apiVersion obrigatório"2026-11-13"
data[].secretVersion obrigatóriointeiroVersão do segredo atual; é o valor do header Eclipta-Pay-Key-Id. 1 a 9007199254740991
data[].previousSecretVersion obrigatóriointeiro ou nulo
data[].previousSecretExpiresAt obrigatóriodata e hora (ISO 8601) ou nuloAté quando o segredo anterior ainda assina (rotação com sobreposição).
data[].consecutiveFailures obrigatóriointeiro 0 a 9007199254740991
data[].failingSince obrigatóriodata e hora (ISO 8601) ou nulo
data[].lastSuccessAt obrigatóriodata e hora (ISO 8601) ou nulo
data[].lastFailureAt obrigatóriodata e hora (ISO 8601) ou nulo
data[].disabledAt obrigatóriodata e hora (ISO 8601) ou nulo
data[].disabledReason obrigatório"MANUAL" | "CONSECUTIVE_FAILURES" 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[].updatedAt 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[].secrettextoSegredo de assinatura. Exibido só na resposta da criação e da rotação; guarde-o com segurança. formato ^whsec_.*
nextCursor obrigatóriotexto ou nulo
Exemplo 200
{
  "data": [
    {
      "id": "whk_01JDY9A1B2C3D4E5F6G7H8J9KF",
      "url": "https://loja.exemplo.com.br/webhooks/eclipta",
      "description": "Produção da loja",
      "events": [
        "payment.confirmed",
        "order.payment_completed"
      ],
      "status": "ACTIVE",
      "apiVersion": "2026-11-13",
      "secretVersion": 1,
      "previousSecretVersion": null,
      "previousSecretExpiresAt": null,
      "consecutiveFailures": 0,
      "failingSince": null,
      "lastSuccessAt": null,
      "lastFailureAt": null,
      "disabledAt": null,
      "disabledReason": null,
      "createdAt": "2026-11-13T13:00:00.000Z",
      "updatedAt": "2026-11-13T13:00:00.000Z"
    }
  ],
  "nextCursor": null
}

Erros

Erros de listWebhookEndpoints
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 endpoint de webhook

GET/v1/webhook-endpoints/{id}Implementada

Chave de API (Authorization: Bearer ep_…)· escopo webhooks:write· getWebhookEndpoint

Consulta um endpoint, sua saúde (falhas seguidas, último sucesso) e a versão do segredo. O segredo nunca é devolvido aqui.

Escopo da chave: webhooks:write.

Headers de getWebhookEndpoint
HeaderObrigatórioDescrição
X-Account-IdsimConta permitida pelos grants do principal.
Parâmetros de getWebhookEndpoint
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/webhook-endpoints/{id}" \
  -H "Authorization: Bearer $ECLIPTA_PAY_KEY" \
  -H "X-Account-Id: $ECLIPTA_PAY_ACCOUNT"

Resposta 200: Sucesso.

Campos da resposta 200 de getWebhookEndpoint
CampoTipoDescrição
id obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
url obrigatóriotexto
description obrigatóriotexto ou nulo
events obrigatóriolista de texto
status obrigatório"ACTIVE" | "DISABLED" | "AUTO_DISABLED"ACTIVE recebe; DISABLED foi pausado pelo integrador; AUTO_DISABLED foi desativado após 3 dias seguidos de falhas.
apiVersion obrigatório"2026-11-13"
secretVersion obrigatóriointeiroVersão do segredo atual; é o valor do header Eclipta-Pay-Key-Id. 1 a 9007199254740991
previousSecretVersion obrigatóriointeiro ou nulo
previousSecretExpiresAt obrigatóriodata e hora (ISO 8601) ou nuloAté quando o segredo anterior ainda assina (rotação com sobreposição).
consecutiveFailures obrigatóriointeiro 0 a 9007199254740991
failingSince obrigatóriodata e hora (ISO 8601) ou nulo
lastSuccessAt obrigatóriodata e hora (ISO 8601) ou nulo
lastFailureAt obrigatóriodata e hora (ISO 8601) ou nulo
disabledAt obrigatóriodata e hora (ISO 8601) ou nulo
disabledReason obrigatório"MANUAL" | "CONSECUTIVE_FAILURES" 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)))$
updatedAt 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)))$
secrettextoSegredo de assinatura. Exibido só na resposta da criação e da rotação; guarde-o com segurança. formato ^whsec_.*
Exemplo 200
{
  "id": "whk_01JDY9A1B2C3D4E5F6G7H8J9KF",
  "url": "https://loja.exemplo.com.br/webhooks/eclipta",
  "description": "Produção da loja",
  "events": [
    "payment.confirmed",
    "order.payment_completed"
  ],
  "status": "ACTIVE",
  "apiVersion": "2026-11-13",
  "secretVersion": 1,
  "previousSecretVersion": null,
  "previousSecretExpiresAt": null,
  "consecutiveFailures": 0,
  "failingSince": null,
  "lastSuccessAt": null,
  "lastFailureAt": null,
  "disabledAt": null,
  "disabledReason": null,
  "createdAt": "2026-11-13T13:00:00.000Z",
  "updatedAt": "2026-11-13T13:00:00.000Z"
}

Erros

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

Atualizar, pausar ou reativar endpoint

PATCH/v1/webhook-endpoints/{id}Implementada

Chave de API (Authorization: Bearer ep_…)· escopo webhooks:write· updateWebhookEndpoint

Altera URL, tipos ou rótulo. enabled: false pausa as entregas; enabled: true reativa o endpoint, inclusive depois da desativação automática, zera o contador de falhas e retoma as entregas pendentes. A ação fica na trilha de auditoria.

Escopo da chave: webhooks:write.

Idempotência: exige o header Idempotency-Key.

Headers de updateWebhookEndpoint
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 updateWebhookEndpoint
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 updateWebhookEndpoint
CampoTipoDescrição
urltextoURL de destino. HTTPS obrigatório em produção; `http://` só no ambiente de testes. Endereços internos, privados, de loopback e de metadata são recusados. 0–2048 caracteres
eventslista de SubscribableEventTypeTipos do catálogo que este endpoint recebe; `["*"]` recebe todos. 1–50 itens
descriptiontexto ou nulo
enabledbooleano`false` pausa as entregas; `true` reativa (inclusive após desativação automática) e retoma as entregas pendentes.
Exemplo
curl -X PATCH "$ECLIPTA_PAY_API/v1/webhook-endpoints/{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 '{"enabled":true}'

Resposta 200: Sucesso.

Campos da resposta 200 de updateWebhookEndpoint
CampoTipoDescrição
id obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
url obrigatóriotexto
description obrigatóriotexto ou nulo
events obrigatóriolista de texto
status obrigatório"ACTIVE" | "DISABLED" | "AUTO_DISABLED"ACTIVE recebe; DISABLED foi pausado pelo integrador; AUTO_DISABLED foi desativado após 3 dias seguidos de falhas.
apiVersion obrigatório"2026-11-13"
secretVersion obrigatóriointeiroVersão do segredo atual; é o valor do header Eclipta-Pay-Key-Id. 1 a 9007199254740991
previousSecretVersion obrigatóriointeiro ou nulo
previousSecretExpiresAt obrigatóriodata e hora (ISO 8601) ou nuloAté quando o segredo anterior ainda assina (rotação com sobreposição).
consecutiveFailures obrigatóriointeiro 0 a 9007199254740991
failingSince obrigatóriodata e hora (ISO 8601) ou nulo
lastSuccessAt obrigatóriodata e hora (ISO 8601) ou nulo
lastFailureAt obrigatóriodata e hora (ISO 8601) ou nulo
disabledAt obrigatóriodata e hora (ISO 8601) ou nulo
disabledReason obrigatório"MANUAL" | "CONSECUTIVE_FAILURES" 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)))$
updatedAt 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)))$
secrettextoSegredo de assinatura. Exibido só na resposta da criação e da rotação; guarde-o com segurança. formato ^whsec_.*
Exemplo 200
{
  "id": "whk_01JDY9A1B2C3D4E5F6G7H8J9KF",
  "url": "https://loja.exemplo.com.br/webhooks/eclipta",
  "description": "Produção da loja",
  "events": [
    "payment.confirmed",
    "order.payment_completed"
  ],
  "status": "ACTIVE",
  "apiVersion": "2026-11-13",
  "secretVersion": 1,
  "previousSecretVersion": null,
  "previousSecretExpiresAt": null,
  "consecutiveFailures": 0,
  "failingSince": null,
  "lastSuccessAt": null,
  "lastFailureAt": null,
  "disabledAt": null,
  "disabledReason": null,
  "createdAt": "2026-11-13T13:00:00.000Z",
  "updatedAt": "2026-11-13T13:00:00.000Z"
}

Erros

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

Remover endpoint (cancela entregas pendentes)

DELETE/v1/webhook-endpoints/{id}Implementada

Chave de API (Authorization: Bearer ep_…)· escopo webhooks:write· deleteWebhookEndpoint

Remove o endpoint. Entregas ainda pendentes são canceladas; o histórico de entregas continua consultável pelo evento.

Escopo da chave: webhooks:write.

Idempotência: exige o header Idempotency-Key.

Headers de deleteWebhookEndpoint
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 deleteWebhookEndpoint
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 DELETE "$ECLIPTA_PAY_API/v1/webhook-endpoints/{id}" \
  -H "Authorization: Bearer $ECLIPTA_PAY_KEY" \
  -H "X-Account-Id: $ECLIPTA_PAY_ACCOUNT" \
  -H "Idempotency-Key: <uma chave por intenção>"

Resposta 204: Sem conteúdo.

Erros

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

Rotacionar o segredo de assinatura com sobreposição

POST/v1/webhook-endpoints/{id}/rotate-secretImplementada

Chave de API (Authorization: Bearer ep_…)· escopo webhooks:write· rotateWebhookSecret

Gera um novo segredo (exibido só nesta resposta). Durante a sobreposição, cada entrega leva duas assinaturas v1= no header Eclipta-Pay-Signature e as duas versões em Eclipta-Pay-Key-Id, para você trocar o segredo sem perder eventos.

Escopo da chave: webhooks:write.

Idempotência: exige o header Idempotency-Key.

Headers de rotateWebhookSecret
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 rotateWebhookSecret
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 rotateWebhookSecret
CampoTipoDescrição
overlapSecondsinteiroPor quanto tempo o segredo anterior continua assinando junto com o novo (padrão 86400 = 24 h; 0 encerra o anterior na hora). 0 a 604800
Exemplo
curl -X POST "$ECLIPTA_PAY_API/v1/webhook-endpoints/{id}/rotate-secret" \
  -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 '{"overlapSeconds":86400}'

Resposta 200: Sucesso.

Campos da resposta 200 de rotateWebhookSecret
CampoTipoDescrição
id obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
url obrigatóriotexto
description obrigatóriotexto ou nulo
events obrigatóriolista de texto
status obrigatório"ACTIVE" | "DISABLED" | "AUTO_DISABLED"ACTIVE recebe; DISABLED foi pausado pelo integrador; AUTO_DISABLED foi desativado após 3 dias seguidos de falhas.
apiVersion obrigatório"2026-11-13"
secretVersion obrigatóriointeiroVersão do segredo atual; é o valor do header Eclipta-Pay-Key-Id. 1 a 9007199254740991
previousSecretVersion obrigatóriointeiro ou nulo
previousSecretExpiresAt obrigatóriodata e hora (ISO 8601) ou nuloAté quando o segredo anterior ainda assina (rotação com sobreposição).
consecutiveFailures obrigatóriointeiro 0 a 9007199254740991
failingSince obrigatóriodata e hora (ISO 8601) ou nulo
lastSuccessAt obrigatóriodata e hora (ISO 8601) ou nulo
lastFailureAt obrigatóriodata e hora (ISO 8601) ou nulo
disabledAt obrigatóriodata e hora (ISO 8601) ou nulo
disabledReason obrigatório"MANUAL" | "CONSECUTIVE_FAILURES" 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)))$
updatedAt 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)))$
secrettextoSegredo de assinatura. Exibido só na resposta da criação e da rotação; guarde-o com segurança. formato ^whsec_.*
Exemplo 200
{
  "id": "whk_01JDY9A1B2C3D4E5F6G7H8J9KF",
  "url": "https://loja.exemplo.com.br/webhooks/eclipta",
  "description": "Produção da loja",
  "events": [
    "payment.confirmed",
    "order.payment_completed"
  ],
  "status": "ACTIVE",
  "apiVersion": "2026-11-13",
  "secretVersion": 2,
  "previousSecretVersion": 1,
  "previousSecretExpiresAt": "2026-11-14T13:00:00.000Z",
  "consecutiveFailures": 0,
  "failingSince": null,
  "lastSuccessAt": null,
  "lastFailureAt": null,
  "disabledAt": null,
  "disabledReason": null,
  "createdAt": "2026-11-13T13:00:00.000Z",
  "updatedAt": "2026-11-13T13:00:00.000Z",
  "secret": "whsec_Rotacionado9xAm9lE0nLy7cT2vK4pQ8wZ1sB6dF5"
}

Erros

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

Enviar evento de teste ao endpoint

POST/v1/webhook-endpoints/{id}/testImplementada

Chave de API (Authorization: Bearer ep_…)· escopo webhooks:write· sendWebhookTest

Enfileira um evento webhook_endpoint.test só para este endpoint, com assinatura real. Útil para validar a verificação no seu servidor. Não representa mudança financeira.

Escopo da chave: webhooks:write.

Idempotência: exige o header Idempotency-Key.

Headers de sendWebhookTest
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 sendWebhookTest
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 POST "$ECLIPTA_PAY_API/v1/webhook-endpoints/{id}/test" \
  -H "Authorization: Bearer $ECLIPTA_PAY_KEY" \
  -H "X-Account-Id: $ECLIPTA_PAY_ACCOUNT" \
  -H "Idempotency-Key: <uma chave por intenção>"

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

Campos da resposta 202 de sendWebhookTest
CampoTipoDescrição
id obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
eventId obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
eventType obrigatóriotexto
endpointId obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
state obrigatório"PENDING" | "SENDING" | "SUCCEEDED" | "FAILED" | "CANCELLED"
attempts obrigatóriointeiro 0 a 9007199254740991
maxAttempts obrigatóriointeiro 1 a 9007199254740991
nextAttemptAt obrigatóriodata e hora (ISO 8601) ou nulo
lastAttemptAt obrigatóriodata e hora (ISO 8601) ou nulo
lastHttpStatus obrigatóriointeiro ou nulo
lastErrorCode obrigatóriotexto ou nulo
replayCount obrigatóriointeiro 0 a 9007199254740991
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)))$
attemptLoglista de DeliveryAttemptTentativas registradas (só na consulta individual).
attemptLog[].sequence obrigatóriointeiro 1 a 9007199254740991
attemptLog[].trigger obrigatório"AUTOMATIC" | "REPLAY" | "TEST"
attemptLog[].startedAt 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)))$
attemptLog[].durationMs obrigatóriointeiro ou nulo
attemptLog[].outcome obrigatório"SUCCEEDED" | "HTTP_ERROR" | "REDIRECT_NOT_FOLLOWED" | "TIMEOUT" | "NETWORK_ERROR" | "DESTINATION_BLOCKED" | "RESPONSE_TOO_LARGE" | "INTERRUPTED"
attemptLog[].httpStatus obrigatóriointeiro ou nulo
attemptLog[].errorCode obrigatóriotexto ou nulo
attemptLog[].responseExcerpt obrigatóriotexto ou nuloAté 1 KB do início da resposta, com sequências que parecem documentos, cartões, e-mails ou credenciais mascaradas.
Exemplo 202
{
  "id": "whd_01JDY9B1B2C3D4E5F6G7H8J9KG",
  "eventId": "evt_01JDY9C1B2C3D4E5F6G7H8J9KH",
  "eventType": "webhook_endpoint.test",
  "endpointId": "whk_01JDY9A1B2C3D4E5F6G7H8J9KF",
  "state": "PENDING",
  "attempts": 0,
  "maxAttempts": 9,
  "nextAttemptAt": "2026-11-13T13:00:00.000Z",
  "lastAttemptAt": null,
  "lastHttpStatus": null,
  "lastErrorCode": null,
  "replayCount": 0,
  "createdAt": "2026-11-13T13:00:00.000Z"
}

Erros

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

Listar entregas de webhook

GET/v1/webhook-deliveriesImplementada

Chave de API (Authorization: Bearer ep_…)· escopo webhooks:write· listWebhookDeliveries

Lista entregas (uma por evento × endpoint), com filtros por endpoint, evento e situação.

Escopo da chave: webhooks:write.

Headers de listWebhookDeliveries
HeaderObrigatórioDescrição
X-Account-IdsimConta permitida pelos grants do principal.
Parâmetros de listWebhookDeliveries
ParâmetroOndeTipoDescrição
cursorquerytexto0–200 caracteres
limitqueryinteiro1 a 100 · padrão 20
endpointIdqueryId (texto)8–160 caracteres · formato ^[A-Za-z0-9_]+$
eventIdqueryId (texto)8–160 caracteres · formato ^[A-Za-z0-9_]+$
statequery"PENDING" | "SENDING" | "SUCCEEDED" | "FAILED" | "CANCELLED"
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/webhook-deliveries" \
  -H "Authorization: Bearer $ECLIPTA_PAY_KEY" \
  -H "X-Account-Id: $ECLIPTA_PAY_ACCOUNT"

Resposta 200: Sucesso.

Campos da resposta 200 de listWebhookDeliveries
CampoTipoDescrição
data obrigatóriolista de Delivery
data[].id obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
data[].eventId obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
data[].eventType obrigatóriotexto
data[].endpointId obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
data[].state obrigatório"PENDING" | "SENDING" | "SUCCEEDED" | "FAILED" | "CANCELLED"
data[].attempts obrigatóriointeiro 0 a 9007199254740991
data[].maxAttempts obrigatóriointeiro 1 a 9007199254740991
data[].nextAttemptAt obrigatóriodata e hora (ISO 8601) ou nulo
data[].lastAttemptAt obrigatóriodata e hora (ISO 8601) ou nulo
data[].lastHttpStatus obrigatóriointeiro ou nulo
data[].lastErrorCode obrigatóriotexto ou nulo
data[].replayCount obrigatóriointeiro 0 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)))$
data[].attemptLoglista de DeliveryAttemptTentativas registradas (só na consulta individual).
data[].attemptLog[].sequence obrigatóriointeiro 1 a 9007199254740991
data[].attemptLog[].trigger obrigatório"AUTOMATIC" | "REPLAY" | "TEST"
data[].attemptLog[].startedAt 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[].attemptLog[].durationMs obrigatóriointeiro ou nulo
data[].attemptLog[].outcome obrigatório"SUCCEEDED" | "HTTP_ERROR" | "REDIRECT_NOT_FOLLOWED" | "TIMEOUT" | "NETWORK_ERROR" | "DESTINATION_BLOCKED" | "RESPONSE_TOO_LARGE" | "INTERRUPTED"
data[].attemptLog[].httpStatus obrigatóriointeiro ou nulo
data[].attemptLog[].errorCode obrigatóriotexto ou nulo
data[].attemptLog[].responseExcerpt obrigatóriotexto ou nuloAté 1 KB do início da resposta, com sequências que parecem documentos, cartões, e-mails ou credenciais mascaradas.
nextCursor obrigatóriotexto ou nulo
Exemplo 200
{
  "data": [
    {
      "id": "whd_01JDY9B1B2C3D4E5F6G7H8J9KG",
      "eventId": "evt_01JDY9C1B2C3D4E5F6G7H8J9KH",
      "eventType": "order.payment_completed",
      "endpointId": "whk_01JDY9A1B2C3D4E5F6G7H8J9KF",
      "state": "SUCCEEDED",
      "attempts": 1,
      "maxAttempts": 9,
      "nextAttemptAt": null,
      "lastAttemptAt": "2026-11-13T13:00:00.000Z",
      "lastHttpStatus": 200,
      "lastErrorCode": null,
      "replayCount": 0,
      "createdAt": "2026-11-13T13:00:00.000Z"
    }
  ],
  "nextCursor": null
}

Erros

Erros de listWebhookDeliveries
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 entrega e tentativas

GET/v1/webhook-deliveries/{id}Implementada

Chave de API (Authorization: Bearer ep_…)· escopo webhooks:write· getWebhookDelivery

Entrega com o registro de cada tentativa: status HTTP, duração, resultado e até 1 KB do início da resposta, com dados que parecem sensíveis mascarados.

Escopo da chave: webhooks:write.

Headers de getWebhookDelivery
HeaderObrigatórioDescrição
X-Account-IdsimConta permitida pelos grants do principal.
Parâmetros de getWebhookDelivery
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/webhook-deliveries/{id}" \
  -H "Authorization: Bearer $ECLIPTA_PAY_KEY" \
  -H "X-Account-Id: $ECLIPTA_PAY_ACCOUNT"

Resposta 200: Sucesso.

Campos da resposta 200 de getWebhookDelivery
CampoTipoDescrição
id obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
eventId obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
eventType obrigatóriotexto
endpointId obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
state obrigatório"PENDING" | "SENDING" | "SUCCEEDED" | "FAILED" | "CANCELLED"
attempts obrigatóriointeiro 0 a 9007199254740991
maxAttempts obrigatóriointeiro 1 a 9007199254740991
nextAttemptAt obrigatóriodata e hora (ISO 8601) ou nulo
lastAttemptAt obrigatóriodata e hora (ISO 8601) ou nulo
lastHttpStatus obrigatóriointeiro ou nulo
lastErrorCode obrigatóriotexto ou nulo
replayCount obrigatóriointeiro 0 a 9007199254740991
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)))$
attemptLoglista de DeliveryAttemptTentativas registradas (só na consulta individual).
attemptLog[].sequence obrigatóriointeiro 1 a 9007199254740991
attemptLog[].trigger obrigatório"AUTOMATIC" | "REPLAY" | "TEST"
attemptLog[].startedAt 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)))$
attemptLog[].durationMs obrigatóriointeiro ou nulo
attemptLog[].outcome obrigatório"SUCCEEDED" | "HTTP_ERROR" | "REDIRECT_NOT_FOLLOWED" | "TIMEOUT" | "NETWORK_ERROR" | "DESTINATION_BLOCKED" | "RESPONSE_TOO_LARGE" | "INTERRUPTED"
attemptLog[].httpStatus obrigatóriointeiro ou nulo
attemptLog[].errorCode obrigatóriotexto ou nulo
attemptLog[].responseExcerpt obrigatóriotexto ou nuloAté 1 KB do início da resposta, com sequências que parecem documentos, cartões, e-mails ou credenciais mascaradas.
Exemplo 200
{
  "id": "whd_01JDY9B1B2C3D4E5F6G7H8J9KG",
  "eventId": "evt_01JDY9C1B2C3D4E5F6G7H8J9KH",
  "eventType": "order.payment_completed",
  "endpointId": "whk_01JDY9A1B2C3D4E5F6G7H8J9KF",
  "state": "SUCCEEDED",
  "attempts": 1,
  "maxAttempts": 9,
  "nextAttemptAt": null,
  "lastAttemptAt": "2026-11-13T13:00:00.000Z",
  "lastHttpStatus": 200,
  "lastErrorCode": null,
  "replayCount": 0,
  "createdAt": "2026-11-13T13:00:00.000Z",
  "attemptLog": [
    {
      "sequence": 1,
      "trigger": "AUTOMATIC",
      "startedAt": "2026-11-13T13:00:00.000Z",
      "durationMs": 182,
      "outcome": "SUCCEEDED",
      "httpStatus": 200,
      "errorCode": null,
      "responseExcerpt": "{\"received\":true}"
    }
  ]
}

Erros

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

Reenviar entrega (mesmo eventId)

POST/v1/webhook-deliveries/{id}/replayImplementada

Chave de API (Authorization: Bearer ep_…)· escopo webhooks:write· replayWebhookDelivery

Reenvia a entrega com o mesmo eventId e nova assinatura (novo timestamp). O receptor deve deduplicar por eventId e aplicar o efeito uma única vez. O reenvio é auditado e não cria outra entrega para o mesmo evento × endpoint.

Escopo da chave: webhooks:write.

Idempotência: exige o header Idempotency-Key.

Headers de replayWebhookDelivery
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 replayWebhookDelivery
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 POST "$ECLIPTA_PAY_API/v1/webhook-deliveries/{id}/replay" \
  -H "Authorization: Bearer $ECLIPTA_PAY_KEY" \
  -H "X-Account-Id: $ECLIPTA_PAY_ACCOUNT" \
  -H "Idempotency-Key: <uma chave por intenção>"

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

Campos da resposta 202 de replayWebhookDelivery
CampoTipoDescrição
id obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
eventId obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
eventType obrigatóriotexto
endpointId obrigatórioId (texto) 8–160 caracteres · formato ^[A-Za-z0-9_]+$
state obrigatório"PENDING" | "SENDING" | "SUCCEEDED" | "FAILED" | "CANCELLED"
attempts obrigatóriointeiro 0 a 9007199254740991
maxAttempts obrigatóriointeiro 1 a 9007199254740991
nextAttemptAt obrigatóriodata e hora (ISO 8601) ou nulo
lastAttemptAt obrigatóriodata e hora (ISO 8601) ou nulo
lastHttpStatus obrigatóriointeiro ou nulo
lastErrorCode obrigatóriotexto ou nulo
replayCount obrigatóriointeiro 0 a 9007199254740991
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)))$
attemptLoglista de DeliveryAttemptTentativas registradas (só na consulta individual).
attemptLog[].sequence obrigatóriointeiro 1 a 9007199254740991
attemptLog[].trigger obrigatório"AUTOMATIC" | "REPLAY" | "TEST"
attemptLog[].startedAt 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)))$
attemptLog[].durationMs obrigatóriointeiro ou nulo
attemptLog[].outcome obrigatório"SUCCEEDED" | "HTTP_ERROR" | "REDIRECT_NOT_FOLLOWED" | "TIMEOUT" | "NETWORK_ERROR" | "DESTINATION_BLOCKED" | "RESPONSE_TOO_LARGE" | "INTERRUPTED"
attemptLog[].httpStatus obrigatóriointeiro ou nulo
attemptLog[].errorCode obrigatóriotexto ou nulo
attemptLog[].responseExcerpt obrigatóriotexto ou nuloAté 1 KB do início da resposta, com sequências que parecem documentos, cartões, e-mails ou credenciais mascaradas.
Exemplo 202
{
  "id": "whd_01JDY9B1B2C3D4E5F6G7H8J9KG",
  "eventId": "evt_01JDY9C1B2C3D4E5F6G7H8J9KH",
  "eventType": "order.payment_completed",
  "endpointId": "whk_01JDY9A1B2C3D4E5F6G7H8J9KF",
  "state": "PENDING",
  "attempts": 1,
  "maxAttempts": 9,
  "nextAttemptAt": "2026-11-13T13:00:00.000Z",
  "lastAttemptAt": "2026-11-13T13:00:00.000Z",
  "lastHttpStatus": 200,
  "lastErrorCode": null,
  "replayCount": 1,
  "createdAt": "2026-11-13T13:00:00.000Z"
}

Erros

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

Todas as rotas