Plano e itens
Adicionar item
Adiciona um produto à assinatura: um adicional cobrado todo ciclo (RECURRING) ou uma cobrança única (ONE_TIME).
POST
/v1/subscriptions/:subscriptionId/itemsBase URL Produção:
https://api.validapay.com.brBase URL Sandbox:
https://sandbox.validapay.com.brO que acontece com a cobrança:
- Item recorrente: cobra agora a proporção dos dias que faltam no ciclo (pró-rata). No cartão a cobrança é imediata; no Pix e no boleto é emitida com vencimento. O item passa a valer quando a pró-rata é paga.
- Item único: cobra o valor cheio agora.
- Sem pró-rata (
prorata.enabled: false): nada é cobrado agora; o item entra a partir da próxima cobrança. - Pró-rata na próxima cobrança (
prorata.mergeWithNextCycle: true): a proporção é somada à próxima cobrança. - Pix Automático: a pró-rata de item recorrente nunca gera Pix avulso; entra no próximo débito automático. Se o débito do próximo ciclo já foi enviado ao banco do pagador, o item só é cobrado a partir do ciclo seguinte, sem pró-rata (
mode: AFTER_INSTRUCTED_CYCLE). Item único (ONE_TIME) continua cobrado na hora. Em autorização de valor fixo, adicionar item recorrente é recusado comPIX_AUTOMATICO_FIXED_AMOUNT.
Envie
dryRun: truepara ver 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
{
"priceId": "price_addon",
"quantity": 1,
"type": "RECURRING",
"prorata": {
"enabled": true,
"mergeWithNextCycle": false,
"dueDate": "2026-09-27"
},
"boletoInstructions": {
"fine": 2.0,
"interest": 1.0
},
"expirationAfterDueDate": 30,
"dryRun": false
}Schema
priceIdstringobrigatórioPlano do item que será adicionado
quantitynumberopcionalQuantidade (padrão 1)
typestringopcionalRECURRING: cobrado todo ciclo. ONE_TIME: cobrado uma vez (padrão RECURRING)
Valores aceitos:
RECURRINGONE_TIMEprorataobjectopcionalComo cobrar a diferença dos dias restantes
boletoInstructionsobjectopcionalMulta, juros e desconto do boleto da pró-rata
expirationAfterDueDatenumberopcionalDias depois do vencimento em que o boleto ou Pix ainda pode ser pago (0 a 60)
Regra:
0 a 60dryRunbooleanopcionaltrue: só simula e não altera nada
const url = 'https://sandbox.validapay.com.br/v1/subscriptions/:subscriptionId/items';
const options = {
method: 'POST',
headers: {
'Authorization': 'Bearer {{token}}',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"priceId": "price_addon",
"quantity": 1,
"type": "RECURRING",
"prorata": {
"enabled": true,
"mergeWithNextCycle": false,
"dueDate": "2026-09-27"
},
"boletoInstructions": {
"fine": 2.0,
"interest": 1.0
},
"expirationAfterDueDate": 30,
"dryRun": false
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));Response Examples
200item adicionado▾
JSON
{
"success": true,
"intent": "ADD",
"mode": "PRORATA_NOW",
"settlement": "AWAITING_PAYMENT",
"item": {
"itemId": "item_yyy",
"priceId": "price_yyy",
"quantity": 1,
"amount": 149.9,
"status": "PENDING_UPGRADE"
},
"replacedItemId": null,
"adjustmentItemId": null,
"amounts": {
"delta": 50.0,
"prorata": 25.0,
"recurringTotal": 149.9,
"chargeTotal": 25.0
},
"prorataPeriod": {
"startDate": "2026-09-24",
"endDate": "2026-10-09",
"days": 15,
"factor": 0.5,
"prorataAmount": 25.0
},
"effectiveAt": "2026-10-10T00:00:00.000Z",
"invoiceId": "inv_yyy",
"charge": {
"chargeId": "cha_yyy",
"status": "AWAITING_PAYMENT",
"paymentType": "PIX",
"dueDate": "2026-09-27"
},
"payment": {
"method": "PIX",
"pix": {
"emv": "00020126...",
"qrCode": "data:image/png;base64,iVBOR...",
"transactionId": "tx_xxx"
},
"boleto": null,
"dueDate": "2026-09-27"
},
"type": "DEFERRED_UPGRADE",
"chargeId": "cha_yyy",
"prorataAmount": 25.0,
"newAmount": 149.9,
"recurringTotal": 149.9,
"amount": 25.0,
"paymentMethod": "PIX",
"pix": { "emv": "00020126...", "qrCode": "data:image/png;base64,iVBOR...", "transactionId": "tx_xxx" },
"dueDate": "2026-09-27"
}Campos da resposta
successbooleantrue quando a alteração foi registrada
intentstringADD: item adicionado. REPLACE: item trocado
Valores aceitos:
ADDREPLACEmodestringComo a diferença de valor foi tratada
Valores aceitos:
PRORATA_NOWNO_PRORATAPRORATA_NEXT_CYCLESCHEDULED_DOWNGRADERECURRENCE_CHANGEPENDING_REWRITEAFTER_INSTRUCTED_CYCLEsettlementstringSituação da cobrança da diferença. PAID: paga no cartão. AWAITING_PAYMENT: Pix ou boleto emitido. NEXT_CYCLE_ENGINE: entra na próxima cobrança. CREDITED: virou crédito. RESCHEDULED: próxima cobrança remarcada. NONE: nada a cobrar
Valores aceitos:
PAIDAWAITING_PAYMENTNONENEXT_CYCLE_ENGINEMERGED_INTO_OPEN_CHARGEMERGED_INTO_CHECKOUTCREDITEDRESCHEDULEDitemobjectItem criado ou alterado, no mesmo formato de items[] em Ver uma assinatura
replacedItemIdobjectItem substituído. Só na troca
adjustmentItemIdobjectAjuste de pró-rata lançado na próxima cobrança
amountsobjectValores da alteração, em reais
prorataPeriodobjectDias considerados na pró-rata
effectiveAtstringQuando o valor novo passa a valer nas cobranças
invoiceIdstringFatura da cobrança da diferença
chargeobjectCobrança da diferença
paymentobjectComo pagar a cobrança da diferença
typestringResultado no formato antigo. Use mode e settlement
chargeIdstringUse charge.chargeId
prorataAmountnumberUse amounts.prorata
newAmountnumberValor novo do item. Use item.amount
recurringTotalnumberUse amounts.recurringTotal
amountnumberUse amounts.chargeTotal
paymentMethodstringUse payment.method
Valores aceitos:
pixcreditcardboletopix_automaticopixobjectUse payment.pix
dueDatestringUse charge.dueDate
Regra:
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$400pagamento recusado▾
JSON
{
"error": {
"message": "Cartão recusado por saldo insuficiente",
"code": "PAYMENT_DECLINED",
"details": { "declinedCode": "insufficient_funds" },
"timestamp": "2026-09-24T12:00:00.000Z"
}
}