# Trocar dia de vencimento

**Área:** Pagamento

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-date`

**Base URL Produção:** `https://api.validapay.com.br`  
**Base URL Sandbox:** `https://sandbox.validapay.com.br`

**Scopes necessários:** `subscriptions/write`

- **`applyFrom: CURRENT_CYCLE` e `prorata: 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_CYCLE` e `prorata: false`** — a cobrança atual é reemitida na nova data, com o mesmo valor.
- **`applyFrom: NEXT_CYCLE` e `prorata: true`** — a cobrança atual não muda; a diferença de dias entra na próxima cobrança.
- **`applyFrom: NEXT_CYCLE` e `prorata: 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: true` para ver as datas e os valores sem alterar nada.

### Path parameters

| Campo | Obrigatório | Descrição |
|---|---|---|
| `subscriptionId` | **sim** | ID da assinatura (ex: sub_xxx) - required |

### Request body

```json
{
    "billingDay": 20, 
    "applyFrom": "NEXT_CYCLE", 
    "prorata": true, 
    "currentChargeDueDate": "2026-09-30", 
    "cancelOpenBoleto": false, 
    "reason": "Pedido do cliente", 
    "dryRun": false 
}
```

### Campos do body

**Obrigatórios:** `billingDay`

| Campo | Descrição |
|---|---|
| `billingDay` | Novo dia de vencimento (1 a 31) |

**Opcionais**

| Campo | Descrição |
|---|---|
| `applyFrom` | CURRENT_CYCLE: reemite a cobrança atual. NEXT_CYCLE: a cobrança atual não muda (padrão CURRENT_CYCLE) (valores: CURRENT_CYCLE, NEXT_CYCLE) |
| `prorata` | true: cobra ou desconta a diferença de dias. false: só muda a data (padrão true) |
| `currentChargeDueDate` | Novo vencimento da cobrança atual (YYYY-MM-DD). Só com CURRENT_CYCLE |
| `cancelOpenBoleto` | true: cancela o boleto em aberto ao reemitir. Só com CURRENT_CYCLE |
| `reason` | Motivo, gravado no histórico |
| `dryRun` | true: só simula |

### Resposta 200: 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

| Campo | Descrição |
|---|---|
| `success` | true quando o vencimento foi alterado |
| `type` | DUE_DATE_CHANGED: alterado. NO_CHANGE: nada mudou. PREVIEW: simulação (dryRun) (valores: DUE_DATE_CHANGED, NO_CHANGE, PREVIEW) |
| `subscriptionId` | ID da assinatura |
| `currentBillingDay` | Dia de vencimento anterior |
| `newBillingDay` | Dia de vencimento novo |
| `currentNextDueDate` | Data da próxima cobrança antes da troca (formato: date) |
| `newNextDueDate` | Data da próxima cobrança depois da troca (formato: date) |
| `currentChargeDueDate` | Vencimento da cobrança atual antes da troca (formato: date) |
| `newChargeDueDate` | Vencimento da cobrança atual depois da troca (formato: date) |
| `deltaDays` | Diferença de dias: positiva ao adiar, negativa ao antecipar |
| `daysInCycle` | Dias considerados em um ciclo para o cálculo |
| `dailyRate` | Valor de um dia do plano, em reais |
| `recurringAmount` | Valor recorrente da assinatura, em reais |
| `prorataAmount` | Diferença cobrada (positiva) ou descontada (negativa), em reais. 0 com prorata false |
| `prorataApplied` | false quando a diferença de dias não foi cobrada nem descontada |
| `prorataWindow` | Dias que geraram a diferença |
| `currentAmount` | Valor da cobrança atual antes da troca, em reais |
| `newChargeAmount` | Valor da cobrança atual depois da troca, em reais |
| `adjustmentTarget` | Onde entra a diferença (valores: CURRENT_CYCLE, NEXT_CYCLE, NONE) |
| `adjustments` | Ajustes lançados em cada ciclo, em reais |
| `issuesImmediately` | true quando a próxima cobrança já entra na janela de emissão e sai agora |
| `reissue` | Reemissão da cobrança atual |
| `reissue.willReissue` | true quando a cobrança atual é reemitida |
| `reissue.skipReason` | Por que não foi reemitida (valores: NOT_REQUESTED, NO_OPEN_CHARGE, CYCLE_ALREADY_PAID, UNSUPPORTED_PAYMENT_METHOD, PIX_AUTOMATICO_INSTRUCTED) |
| `reissue.paymentType` | Forma de pagamento da cobrança atual |
| `reissue.openChargeId` | Cobrança em aberto que seria reemitida |
| `warnings` | Avisos, como boleto antigo que continua pagável |
| `updatedCycles` | Ciclos agendados que mudaram de data |
| `issuedCycles` | Ciclos cuja cobrança foi emitida por causa da nova data |
| `reissued` | Cobrança reemitida na nova data, com CURRENT_CYCLE |
| `restoredStatus` | ACTIVE quando a troca tirou a assinatura da inadimplência |

### Resposta 400: 400 dia inválido

```json
{
    "error": {
        "message": "billingDay deve estar entre 1 e 31",
        "code": "INVALID_DATA",
        "details": null,
        "timestamp": "2026-09-24T12:00:00.000Z"
    }
}
```


---

Página: https://docs.validapay.com.br/referencia/put-trocar-dia-de-vencimento  
Contrato OpenAPI: https://docs.validapay.com.br/openapi.json