Como funciona
- O seu backend envia
POST /v1/paymentscompaymentMethod: credit_carde os dados abertos do cartão (card.number,card.cvvetc.). - Se a adquirente aprovar (
status: paid), a resposta inclui o objetoupsellcomtokeneexpiresAt. - O portador aceita a oferta adicional na sua tela de confirmação.
- O seu backend envia um novo
POST /v1/paymentscomcard.upsellTokenno lugar dos dados do cartão. - A UvviPay cobra o mesmo cartão e retorna uma nova transação, com o próprio
id.
Não existe flag de ativação. Toda transação aprovada com cartão aberto retorna o objeto
upsell. Se o seu checkout não oferece upsell, basta ignorar o objeto.Pré-requisitos
1
Cartão aberto na transação de origem
O token só é emitido quando a origem usa
card.number + card.cvv. Cobranças com card.cardTokenId ou com card.upsellToken não emitem token.2
Transação aprovada
O token só é emitido quando a origem retorna
status: paid. Transações refused ou in_analysis não retornam upsell.3
Credenciais de API
Use
client-id e client-secret no backend. Veja Autenticação.Passo 1: criar a transação de origem
Envie o pagamento como de costume; não há campo novo para preencher.Resposta (200)
upsell.token e upsell.expiresAt na sessão do checkout. Não grave o token em logs.
Passo 2: cobrar o upsell
Envie um novoPOST /v1/payments com card.upsellToken. Não envie card.number, card.cvv, customer nem threeDSData.
Resposta (200)
id. Consulte, estorne e receba webhooks dessa transação como faz com qualquer outra. Ela não traz um novo objeto upsell, então não é possível encadear uma terceira cobrança a partir dela.
Regras do payload de upsell
Ciclo de vida do token
Erros
Formato do erro:
Idempotência
Enviex-idempotency-key nos dois requests.
Sem
x-idempotency-key, um retry do upsell após timeout pode responder 409 UPSELL_TOKEN_USED. Nesse caso, localize a transação de upsell pelo externalId antes de pedir o cartão de novo.
Segurança
- O token é opaco e não contém dados do cartão.
- Trate o token como credencial: não grave em logs nem exponha em URLs.
- O token só vale para a conta que criou a origem. Um token de outra conta responde
404. - A cobrança de upsell usa o cartão guardado no Cofre da UvviPay. O
cardTokenIdinterno não é exposto ao integrador.
Próximos passos
Criar pagamento
Referência completa de POST /v1/payments
Cofre
Guarde o cartão para cobranças futuras fora da janela de 15 minutos
Idempotência
Retry seguro com x-idempotency-key
Webhooks
Receba o status da transação de upsell

