Pagamento
Trocar dia de vencimento
Muda o dia do mês em que a assinatura vence. O dia novo sempre vale para as próximas cobranças; você escolhe o que acontece com a cobrança atual e com a diferença de dias.
PUT
/v1/subscriptions/:subscriptionId/due-dateBase URL Produção:
https://api.validapay.com.brBase URL Sandbox:
https://sandbox.validapay.com.brapplyFrom: CURRENT_CYCLEeprorata: true— a cobrança atual é reemitida na nova data, com a diferença de dias (a mais ao adiar, a menos ao antecipar).applyFrom: CURRENT_CYCLEeprorata: false— a cobrança atual é reemitida na nova data, com o mesmo valor.applyFrom: NEXT_CYCLEeprorata: true— a cobrança atual não muda; a diferença de dias entra na próxima cobrança.applyFrom: NEXT_CYCLEeprorata: false— só muda o dia a partir da próxima cobrança, sem diferença de valor.
Diferença de dias (pró-rata): adiar o vencimento aumenta o período coberto, então o cliente paga pelos dias a mais; antecipar reduz o período, e os dias a menos viram desconto.
Boleto em aberto não é cancelado ao reemitir, a menos que você envie
cancelOpenBoleto: true. No cartão a cobrança não é reemitida; o dia novo vale a partir das próximas.
Envie
dryRun: truepara ver as datas e os valores sem alterar nada.
Authorizations
bearer
Authorization
string obrigatório
Cabeçalho de autenticação Bearer no formato Bearer {{token}} onde {{token}} é o seu token OAuth2.
Escopos requeridos
subscriptions/write
Path Parameters
subscriptionIdstringobrigatórioID da assinatura (ex: sub_xxx) - required
Body
application/json
Content-Type:application/json
JSON
{
"billingDay": 20,
"applyFrom": "NEXT_CYCLE",
"prorata": true,
"currentChargeDueDate": "2026-09-30",
"cancelOpenBoleto": false,
"reason": "Pedido do cliente",
"dryRun": false
}Schema
billingDaynumberobrigatórioNovo dia de vencimento (1 a 31)
Regra:
1 a 31applyFromstringopcionalCURRENT_CYCLE: reemite a cobrança atual. NEXT_CYCLE: a cobrança atual não muda (padrão CURRENT_CYCLE)
Valores aceitos:
CURRENT_CYCLENEXT_CYCLEproratabooleanopcionaltrue: cobra ou desconta a diferença de dias. false: só muda a data (padrão true)
currentChargeDueDatestringopcionalNovo vencimento da cobrança atual (YYYY-MM-DD). Só com CURRENT_CYCLE
cancelOpenBoletobooleanopcionaltrue: cancela o boleto em aberto ao reemitir. Só com CURRENT_CYCLE
reasonstringopcionalMotivo, gravado no histórico
dryRunbooleanopcionaltrue: só simula
const url = 'https://sandbox.validapay.com.br/v1/subscriptions/:subscriptionId/due-date';
const options = {
method: 'PUT',
headers: {
'Authorization': 'Bearer {{token}}',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"billingDay": 20,
"applyFrom": "NEXT_CYCLE",
"prorata": true,
"currentChargeDueDate": "2026-09-30",
"cancelOpenBoleto": false,
"reason": "Pedido do cliente",
"dryRun": false
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));Response Examples
200▾
JSON
{
"success": true,
"type": "DUE_DATE_CHANGED",
"subscriptionId": "sub_xxx",
"currentBillingDay": 10,
"newBillingDay": 20,
"currentNextDueDate": "2026-10-10",
"newNextDueDate": "2026-10-20",
"currentChargeDueDate": "2026-09-30",
"newChargeDueDate": "2026-09-30",
"deltaDays": 10,
"daysInCycle": 30,
"dailyRate": 3.33,
"recurringAmount": 99.9,
"prorataAmount": 33.3,
"prorataApplied": true,
"prorataWindow": { "startDate": "2026-10-10", "endDate": "2026-10-19" },
"currentAmount": 99.9,
"newChargeAmount": 99.9,
"adjustmentTarget": "NEXT_CYCLE",
"adjustments": [ { "cycleNumber": 3, "amount": 33.3 } ],
"issuesImmediately": false,
"reissue": {
"willReissue": false,
"skipReason": "NOT_REQUESTED",
"paymentType": "BOLETO",
"openChargeId": null
},
"warnings": [],
"updatedCycles": [ { "cycleNumber": 3, "chargeDate": "2026-10-20", "previousChargeDate": "2026-10-10" } ],
"issuedCycles": [],
"reissued": null,
"restoredStatus": null
}Campos da resposta
successbooleantrue quando o vencimento foi alterado
typestringDUE_DATE_CHANGED: alterado. NO_CHANGE: nada mudou. PREVIEW: simulação (dryRun)
Valores aceitos:
DUE_DATE_CHANGEDNO_CHANGEPREVIEWsubscriptionIdstringID da assinatura
currentBillingDaynumberDia de vencimento anterior
newBillingDaynumberDia de vencimento novo
currentNextDueDatestringData da próxima cobrança antes da troca
Regra:
datenewNextDueDatestringData da próxima cobrança depois da troca
Regra:
datecurrentChargeDueDatestringVencimento da cobrança atual antes da troca
Regra:
datenewChargeDueDatestringVencimento da cobrança atual depois da troca
Regra:
datedeltaDaysnumberDiferença de dias: positiva ao adiar, negativa ao antecipar
daysInCyclenumberDias considerados em um ciclo para o cálculo
dailyRatenumberValor de um dia do plano, em reais
recurringAmountnumberValor recorrente da assinatura, em reais
prorataAmountnumberDiferença cobrada (positiva) ou descontada (negativa), em reais. 0 com prorata false
prorataAppliedbooleanfalse quando a diferença de dias não foi cobrada nem descontada
prorataWindowobjectDias que geraram a diferença
currentAmountnumberValor da cobrança atual antes da troca, em reais
newChargeAmountnumberValor da cobrança atual depois da troca, em reais
adjustmentTargetstringOnde entra a diferença
Valores aceitos:
CURRENT_CYCLENEXT_CYCLENONEadjustmentsarray[1]Ajustes lançados em cada ciclo, em reais
issuesImmediatelybooleantrue quando a próxima cobrança já entra na janela de emissão e sai agora
reissueobjectReemissão da cobrança atual
warningsarray[0]Avisos, como boleto antigo que continua pagável
updatedCyclesarray[1]Ciclos agendados que mudaram de data
issuedCyclesarray[0]Ciclos cuja cobrança foi emitida por causa da nova data
reissuedobjectCobrança reemitida na nova data, com CURRENT_CYCLE
restoredStatusobjectACTIVE quando a troca tirou a assinatura da inadimplência
400dia inválido▾
JSON
{
"error": {
"message": "billingDay deve estar entre 1 e 31",
"code": "INVALID_DATA",
"details": null,
"timestamp": "2026-09-24T12:00:00.000Z"
}
}