Cobranças

Reemitir cobrança

Reemite uma cobrança que expirou sem pagamento. Um novo Pix ou boleto é emitido com o mesmo valor, cliente e dados da original e com o novo vencimento. A cobrança expirada continua no histórico, ligada à nova pelos campos reissuedFromChargeId e reissuedToChargeId (veja Detalhes da cobrança).

POST/v1/charges/:chargeId/reissue
Base URL Produção:https://api.validapay.com.br
Base URL Sandbox:https://sandbox.validapay.com.br

Sem dueDate, o novo vencimento é daqui a 7 dias. O prazo para pagar depois do vencimento é o mesmo da cobrança original.

O que pode ser reemitido

  • Cobrança avulsa: Pix ou boleto com status EXPIRED.
  • Cobrança de assinatura: só quando a assinatura está EXPIRED, encerrada por falta de pagamento. Vale para Pix, boleto e cartão.
  • Cada cobrança é reemitida uma vez. Se a nova também expirar, reemita a nova.

Cobrança de assinatura: a assinatura é reativada

  • Todas as cobranças Pix e boleto expiradas do mesmo ciclo são reemitidas juntas, e charges traz cada uma delas.
  • O ciclo e a fatura voltam a aguardar pagamento, com o novo vencimento.
  • Itens que tinham sido cancelados porque a cobrança expirou voltam para a assinatura e aparecem em restoredItems.
  • A assinatura volta para ACTIVE. Se a cobrança era a do primeiro ciclo, ela volta para PENDING: a assinatura ainda aguarda o primeiro pagamento.
  • São enviados os webhooks subscription.reactivated e charge.created, este para cada cobrança nova.

Cartão: nenhuma cobrança nova é criada. A fatura é reaberta e a resposta traz type CARD_COLLECTION_REQUIRED e checkoutUrl, o link para o cliente informar outro cartão e pagar.

Boleto: o boleto antigo não é cancelado. Um boleto pago no último dia pode compensar em até 3 dias úteis, por isso a resposta traz warning. Se o cliente pagar os dois, a devolução de um deles é manual. Enquanto o boleto da assinatura ainda pode ser pago, a reemissão responde 400 com CHARGE_STILL_PAYABLE.

A linha digitável do boleto (payment.boletoUrl) pode vir null e ficar pronta alguns segundos depois. Consulte Detalhes da cobrança com o chargeId novo.

Cobrança de outra conta responde 404 com CHARGE_NOT_FOUND, igual a um ID inexistente.

Case de uso: Como lojista, quero reemitir o Pix vencido de um assinante com nova data, para que ele consiga pagar e a assinatura volte a valer.

Authorizations

bearer

Authorization

string obrigatório

Cabeçalho de autenticação Bearer no formato Bearer {{token}} onde {{token}} é o seu token OAuth2.

Escopos requeridos

charges/write

Path Parameters

chargeIdstringobrigatório
ID da cobrança expirada

Body

application/json

Content-Type:application/json
JSON
{
    "dueDate": "2026-11-06" 
}

Schema

dueDatestringopcional
Novo vencimento (YYYY-MM-DD), hoje ou data futura. Padrão: hoje + 7 dias
Regra:^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
const url = 'https://sandbox.validapay.com.br/v1/charges/:chargeId/reissue';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer {{token}}',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "dueDate": "2026-11-06" 
})
};

fetch(url, options)
  .then(res => res.json())
  .then(json => console.log(json))
  .catch(err => console.error(err));

Response Examples

200Cobrança avulsa▾
JSON
{
  "chargeId": "cha_1793389356699_1vxrggeo4",
  "reissuedFromChargeId": "cha_1790102857277_lgn02g8y3",
  "status": "PENDING",
  "paymentType": "PIX",
  "amount": 100,
  "dueDate": "2026-11-06T00:00:00Z",
  "expiresAt": "2026-12-07T02:59:59.999Z",
  "payment": {
    "transactionId": 4000823176,
    "emvQrCode": "00020101021226930014br.gov.bcb.pix…",
    "dueDate": "2026-11-06"
  }
}
200Assinatura reativada▾
JSON
{
  "subscriptionId": "sub_1786116225961_dcsm8gcbd",
  "status": "ACTIVE",
  "cycleNumber": 2,
  "dueDate": "2026-11-06",
  "invoiceId": "inv_1787886170440_p1ytajkof",
  "charges": [
    {
      "chargeId": "cha_1793389487033_lqbdqsxci",
      "reissuedFromChargeId": "cha_1787886170448_9czoxnbg9",
      "status": "AWAITING_PAYMENT",
      "paymentType": "BOLETO",
      "amount": 100,
      "dueDate": "2026-11-06",
      "expiresAt": "2026-12-07T02:59:59.999Z",
      "payment": {
        "transactionId": "9b22cd56-ca19-47f6-b19e-08908158ae9c",
        "dueDate": "2026-11-06",
        "boletoUrl": "34191090081225054789529988600002216220000001000"
      },
      "warning": "Um boleto pago no último dia ainda pode compensar em até 3 dias úteis. Se o cliente pagar o antigo e o novo, o estorno de um deles é manual."
    }
  ],
  "restoredItems": []
}
200Assinatura no cartão▾
JSON
{
  "subscriptionId": "sub_1790434949828_avjk2oaco",
  "status": "PENDING",
  "cycleNumber": 1,
  "dueDate": "2026-11-06",
  "invoiceId": "inv_1790434950984_drr8jcm8h",
  "type": "CARD_COLLECTION_REQUIRED",
  "checkoutUrl": "https://app.validapay.com.br/fatura/inv_1790434950984_drr8jcm8h"
}
400Data inválida▾
JSON
{
  "error": {
    "message": "dueDate deve ser hoje ou uma data futura",
    "code": "INVALID_DATA",
    "details": [
      {
        "code": "custom",
        "message": "dueDate deve ser hoje ou uma data futura",
        "path": [
          "dueDate"
        ]
      }
    ],
    "timestamp": "2026-10-30T19:42:41.000Z"
  }
}
400Cobrança não reemitível▾
JSON
{
  "error": {
    "message": "Só é possível reemitir cobrança PIX ou boleto expirada, ou cartão de assinatura encerrada por falta de pagamento",
    "code": "CHARGE_NOT_REISSUABLE",
    "details": null,
    "timestamp": "2026-10-30T19:42:41.000Z"
  }
}
400Assinatura não expirada▾
JSON
{
  "error": {
    "message": "A assinatura desta cobrança não está expirada; para mudar o vencimento use a troca de vencimento da assinatura",
    "code": "SUBSCRIPTION_NOT_EXPIRED",
    "details": null,
    "timestamp": "2026-10-30T19:42:41.000Z"
  }
}
400Ciclo não encerrado▾
JSON
{
  "error": {
    "message": "O ciclo desta cobrança não foi encerrado por falta de pagamento",
    "code": "CYCLE_NOT_REACTIVATABLE",
    "details": null,
    "timestamp": "2026-10-30T19:42:41.000Z"
  }
}
400Boleto ainda pagável▾
JSON
{
  "error": {
    "message": "Esta cobrança ainda pode ser paga até 30/10/2026; reemita depois disso",
    "code": "CHARGE_STILL_PAYABLE",
    "details": null,
    "timestamp": "2026-10-30T19:42:41.000Z"
  }
}
404▾
JSON
{
  "error": {
    "message": "Cobrança não encontrada",
    "code": "CHARGE_NOT_FOUND",
    "details": null,
    "timestamp": "2026-10-30T19:42:41.000Z"
  }
}
409Já reemitida▾
JSON
{
  "error": {
    "message": "Esta cobrança já foi reemitida ou está sendo reemitida",
    "code": "CHARGE_ALREADY_REISSUED",
    "details": null,
    "timestamp": "2026-10-30T19:42:41.000Z"
  }
}