curl --request POST \
--url https://api.sandbox.z2pay.com/v1/subscriptions/{id}/uncancel \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"reasonDetails": "<string>"
}
'const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({reasonDetails: '<string>'})
};
fetch('https://api.sandbox.z2pay.com/v1/subscriptions/{id}/uncancel', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.sandbox.z2pay.com/v1/subscriptions/{id}/uncancel"
payload = { "reasonDetails": "<string>" }
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "sub_hsm2kigu74htdxj3nw2z6f9xw",
"number": {
"sequence": 42
},
"referenceCode": "CONTRATO-2026-0042",
"customerId": "cust_c72q6ogr9iko0we85mqal04te",
"customerEmail": "maria.silva@example.com",
"customerName": "Maria Silva",
"customerDocument": "12345678909",
"currency": "BRL",
"status": "active",
"billingGroupId": null,
"currentPeriodStart": "2025-06-01T03:00:00.000Z",
"currentPeriodEnd": "2025-07-01T03:00:00.000Z",
"nextInvoiceAt": "2025-07-01T03:00:00.000Z",
"recurrence": {
"interval": 1,
"unit": "month",
"anchor": "day_of_month",
"anchorDay": 1,
"collectionTiming": "prepaid"
},
"collectionMethod": "charge_automatically",
"collectionTiming": "prepaid",
"invoiceGenerationMode": "just_in_time",
"cancelAtPeriodEnd": false,
"canceledAt": null,
"endedAt": null,
"cancellationReason": null,
"pausedAt": null,
"pauseResumesAt": null,
"pauseReason": null,
"trialEnd": null,
"incompleteExpiresAt": null,
"trialRemindersFired": [],
"maxCycles": null,
"issuedCycles": 1,
"completedCycles": 1,
"defaultPaymentMethodRef": {
"id": "crd_tsj66oabsygc9kwvvzt8189f9",
"type": "card"
},
"splitConfig": null,
"paymentBehavior": "allow_incomplete",
"latestInvoiceId": "inv_c3qahi4qnkc258lfc14gplupt",
"paymentUpdateToken": null,
"paymentUpdateMethods": null,
"metadata": {},
"createdAt": "2025-06-01T13:45:30.000Z",
"updatedAt": "2025-06-29T13:45:30.000Z"
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "Validation failed",
"issues": [
{
"path": "status",
"message": "Status inválido. Valores aceitos: pending, waiting_payment, paid, refused, canceled, refunded"
},
{
"path": "startDate",
"message": "Data deve ser ISO 8601 com timezone (ex.: 2026-06-24T00:00:00Z)"
}
]
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid API key"
}
}{
"error": {
"code": "NOT_FOUND",
"message": "Subscription not found"
}
}{
"error": {
"code": "CONFLICT",
"message": "No refundable payment found"
}
}{
"error": "Idempotency key already used with a different request body"
}Desfazer cancelamento agendado
Limpa um cancelamento marcado para o fim do período, enquanto ele ainda não aconteceu.
curl --request POST \
--url https://api.sandbox.z2pay.com/v1/subscriptions/{id}/uncancel \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"reasonDetails": "<string>"
}
'const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({reasonDetails: '<string>'})
};
fetch('https://api.sandbox.z2pay.com/v1/subscriptions/{id}/uncancel', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.sandbox.z2pay.com/v1/subscriptions/{id}/uncancel"
payload = { "reasonDetails": "<string>" }
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "sub_hsm2kigu74htdxj3nw2z6f9xw",
"number": {
"sequence": 42
},
"referenceCode": "CONTRATO-2026-0042",
"customerId": "cust_c72q6ogr9iko0we85mqal04te",
"customerEmail": "maria.silva@example.com",
"customerName": "Maria Silva",
"customerDocument": "12345678909",
"currency": "BRL",
"status": "active",
"billingGroupId": null,
"currentPeriodStart": "2025-06-01T03:00:00.000Z",
"currentPeriodEnd": "2025-07-01T03:00:00.000Z",
"nextInvoiceAt": "2025-07-01T03:00:00.000Z",
"recurrence": {
"interval": 1,
"unit": "month",
"anchor": "day_of_month",
"anchorDay": 1,
"collectionTiming": "prepaid"
},
"collectionMethod": "charge_automatically",
"collectionTiming": "prepaid",
"invoiceGenerationMode": "just_in_time",
"cancelAtPeriodEnd": false,
"canceledAt": null,
"endedAt": null,
"cancellationReason": null,
"pausedAt": null,
"pauseResumesAt": null,
"pauseReason": null,
"trialEnd": null,
"incompleteExpiresAt": null,
"trialRemindersFired": [],
"maxCycles": null,
"issuedCycles": 1,
"completedCycles": 1,
"defaultPaymentMethodRef": {
"id": "crd_tsj66oabsygc9kwvvzt8189f9",
"type": "card"
},
"splitConfig": null,
"paymentBehavior": "allow_incomplete",
"latestInvoiceId": "inv_c3qahi4qnkc258lfc14gplupt",
"paymentUpdateToken": null,
"paymentUpdateMethods": null,
"metadata": {},
"createdAt": "2025-06-01T13:45:30.000Z",
"updatedAt": "2025-06-29T13:45:30.000Z"
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "Validation failed",
"issues": [
{
"path": "status",
"message": "Status inválido. Valores aceitos: pending, waiting_payment, paid, refused, canceled, refunded"
},
{
"path": "startDate",
"message": "Data deve ser ISO 8601 com timezone (ex.: 2026-06-24T00:00:00Z)"
}
]
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid API key"
}
}{
"error": {
"code": "NOT_FOUND",
"message": "Subscription not found"
}
}{
"error": {
"code": "CONFLICT",
"message": "No refundable payment found"
}
}{
"error": "Idempotency key already used with a different request body"
}POST /subscriptions/:id/uncancel
Faz parte do recurso Assinaturas — o conceito e os dez estados estão lá.
Limpa o cancelAtPeriodEnd de uma assinatura que foi cancelada com
mode: "at_period_end" e ainda está dentro da janela. A assinatura
volta a renovar normalmente.
canceled, a rota responde 409 — e não há outra que reverta. Um cancelamento
immediate nunca pode ser desfeito, porque não passa por janela nenhuma.Para o cliente voltar depois disso, o caminho é uma assinatura nova.409 se não houver nada a desfazer. Chamar a rota numa assinatura sem cancelamento
agendado é erro, não operação sem efeito.reason e reasonDetails são obrigatórios. O corpo não é vazio — enviar {} responde 400.Exemplo
curl -X POST https://api.sandbox.z2pay.com/v1/subscriptions/sub_x33m4yn6brazh71en4mki6f5c/uncancel \
-H "x-api-key: SUA_CHAVE_DE_SANDBOX" \
-H "Content-Type: application/json" \
-d '{
"reason": "customer_reconsidered",
"reasonDetails": "Cliente aceitou o desconto oferecido pela retenção."
}'
{
"id": "sub_x33m4yn6brazh71en4mki6f5c",
"status": "active",
"cancelAtPeriodEnd": false,
"canceledAt": null,
"cancellationReason": null,
"currentPeriodEnd": "2026-09-10T12:00:00.000Z",
"nextInvoiceAt": "2026-09-10T12:00:00.000Z",
"updatedAt": "2026-08-10T18:20:00.000Z"
}
nextInvoiceAt, que o cancelamento agendado havia zerado, volta a apontar para a próxima
emissão.Authorizations
API Key da Credential (gerada no Backoffice)
Path Parameters
ID da assinatura
Body
Motivo de desfazer o cancelamento, para o seu histórico. Obrigatório.
customer_reconsidered, cancellation_error, renegotiation, other Justificativa em texto livre (1 a 500 caracteres). Obrigatória.
1 - 500Response
Cancelamento revertido
Identificador único do registro.
Número do endereço.
Show child attributes
Show child attributes
Código do contrato no sistema do integrador; pesquisável, sem unicidade.
ID do cliente associado ao registro.
E-mail do cliente.
Nome do cliente.
Documento do cliente (CPF ou CNPJ).
Moeda no padrão ISO 4217 (ex.: BRL).
Status atual do registro (assinatura, fatura, plano ou slip de pagamento).
incomplete, incomplete_expired, trialing, active, past_due, unpaid, paused, canceled, completed ID do grupo de cobrança ao qual o registro pertence; nulo se não agrupado.
Início do período de cobrança atual da assinatura (ISO 8601).
Fim do período de cobrança atual da assinatura (ISO 8601).
Data e hora prevista para a próxima fatura da assinatura (ISO 8601).
Regra de recorrência (intervalo, unidade e âncora do ciclo).
Show child attributes
Show child attributes
Como a fatura é cobrada. Hoje só a cobrança automática na forma de pagamento padrão.
charge_automatically Momento da cobrança do ciclo: prepaid (no início) ou postpaid (no fim).
prepaid, postpaid Modo de geração de faturas: just_in_time (a cada ciclo) ou upfront (todas antecipadas).
just_in_time, upfront Indica se a assinatura será cancelada ao fim do período atual.
Data e hora do cancelamento; nula se não cancelado (ISO 8601).
Data e hora em que a assinatura foi efetivamente encerrada; nula se ainda ativa (ISO 8601).
Motivo do cancelamento da assinatura.
Data e hora em que a assinatura foi pausada; nula se não pausada (ISO 8601).
Data e hora agendada para a retomada automática da assinatura pausada (ISO 8601).
Motivo da pausa da assinatura.
Data e hora de término do período de teste; nula se sem trial (ISO 8601).
Prazo para concluir o primeiro pagamento antes de a assinatura incompleta expirar (ISO 8601).
Lembretes de fim do período de teste já disparados para a assinatura.
Número máximo de ciclos da assinatura; nulo se não houver limite.
Número de ciclos já faturados (faturas emitidas) da assinatura.
Número de ciclos já concluídos (pagos) da assinatura.
Referência da forma de pagamento padrão usada para cobrar a assinatura.
Show child attributes
Show child attributes
Configuração de divisão (split) dos valores entre recebedores; nula se sem split.
O que fazer quando a primeira cobrança não é aprovada: allow_incomplete cria a assinatura com a fatura em aberto; error_if_incomplete cancela a assinatura.
allow_incomplete, error_if_incomplete ID da fatura mais recente gerada pela assinatura.
Token do link público para o cliente atualizar a forma de pagamento; nulo se não gerado.
Formas de pagamento permitidas no link público de troca; nula se não habilitada.
Metadados livres (pares chave-valor) para uso do integrador; não afeta o processamento.
Data e hora de criação do registro (ISO 8601).
Data e hora da última atualização do registro (ISO 8601).