Skip to main content
O token de upsell permite cobrar uma segunda transação no cartão que o portador acabou de usar, sem pedir os dados do cartão de novo. Ele atende checkouts que oferecem um produto adicional na tela de confirmação (order bump, upsell, downsell). A UvviPay devolve o token na resposta do pagamento aprovado. Ele vale por 15 minutos e para uma única cobrança.

Como funciona

  1. O seu backend envia POST /v1/payments com paymentMethod: credit_card e os dados abertos do cartão (card.number, card.cvv etc.).
  2. Se a adquirente aprovar (status: paid), a resposta inclui o objeto upsell com token e expiresAt.
  3. O portador aceita a oferta adicional na sua tela de confirmação.
  4. O seu backend envia um novo POST /v1/payments com card.upsellToken no lugar dos dados do cartão.
  5. A UvviPay cobra o mesmo cartão e retorna uma nova transação, com o próprio id.
O token fica vinculado à transação de origem, e não ao cartão. Se a origem for estornada, o token deixa de valer.
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)

Guarde upsell.token e upsell.expiresAt na sessão do checkout. Não grave o token em logs.

Passo 2: cobrar o upsell

Envie um novo POST /v1/payments com card.upsellToken. Não envie card.number, card.cvv, customer nem threeDSData.

Resposta (200)

A resposta é uma transação comum, com o próprio 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

O token é de uso único, e uma recusa da adquirente também o consome. Reenviar o mesmo token resulta em 409.

Erros

Formato do erro:
Veja Erros para os demais códigos HTTP.

Idempotência

Envie x-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 cardTokenId interno 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