Cada upsell, um aviso
A compra e o upsell chegam em dois checkout.completed do mesmo checkout. O do upsell vem com isUpSell: true.
Upsell depois do pagamento
Logo depois do pagamento, a tela de sucesso oferece mais um produto. No cartão, o cliente aceita com um clique e paga sem digitar nada; no Pix e no boleto, a cobrança nova sai na hora.
O upsell é cobrado no meio de pagamento que o cliente acabou de usar. É uma cobrança à parte, no preço do produto, e a compra que ele já pagou fica como está.
Pagou no cartão
À vista, sem o cliente digitar o cartão de novo e sem passar pelo 3DS outra vez: o banco já confirmou que era ele na compra.
Pagou no Pix
O checkout mostra o QR Code e o copia e cola do valor do upsell. Pagou, o dinheiro cai na hora, como em qualquer Pix.
Pagou no boleto
Sai um boleto do valor do upsell, com o QR Code do Pix impresso nele pra quem quiser pagar na hora.
O que oferecer
O upsell que mais vende completa a compra: o material de apoio do curso, a garantia do produto, a hora a mais com você. Qualquer produto avulso do seu catálogo vira a oferta.
Pela API
Você não monta tela nenhuma. Escolhe o produto ao criar o checkout, e a AbacatePay mostra a oferta, cobra e avisa o seu servidor.
POST /v2/checkouts/create, com o id ou o externalId do produto. Pelo MCP, o createCheckout aceita o mesmo campo.completionUrl, ela espera o cliente tocar em Continuar.checkout.completed do mesmo checkout, com isUpSell: true e só o produto da oferta.curl -X POST https://api.abacatepay.com/v2/checkouts/create \
-H "Authorization: Bearer $ABACATEPAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"items": [{ "id": "prod_curso_foto", "quantity": 1 }],
"methods": ["PIX", "CARD"],
"upSellProductId": "presets-de-edicao"
}'const res = await fetch("https://api.abacatepay.com/v2/checkouts/create", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.ABACATEPAY_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
items: [{ id: "prod_curso_foto", quantity: 1 }],
methods: ["PIX", "CARD"],
// o produto da oferta, pelo id ou pelo externalId
upSellProductId: "presets-de-edicao",
}),
});
const { data, error } = await res.json();
if (error) throw new Error(error);
console.log(data.url); // o checkout, já com o upsellimport os
import requests
res = requests.post(
"https://api.abacatepay.com/v2/checkouts/create",
headers={"Authorization": f"Bearer {os.environ['ABACATEPAY_API_KEY']}"},
json={
"items": [{"id": "prod_curso_foto", "quantity": 1}],
"methods": ["PIX", "CARD"],
"upSellProductId": "presets-de-edicao",
},
)
body = res.json()
if body["error"]:
raise Exception(body["error"])
print(body["data"]["url"])<?php
$ch = curl_init("https://api.abacatepay.com/v2/checkouts/create");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("ABACATEPAY_API_KEY"),
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode([
"items" => [["id" => "prod_curso_foto", "quantity" => 1]],
"methods" => ["PIX", "CARD"],
"upSellProductId" => "presets-de-edicao",
]),
]);
$body = json_decode(curl_exec($ch), true);
echo $body["data"]["url"];{
"id": "log_7Hq2mX9pL4vR1nK8",
"event": "checkout.completed",
"data": {
"checkout": {
"id": "bill_abc123xyz",
"isUpSell": true,
"amount": 4700,
"paidAmount": 24400,
"items": [{ "id": "prod_presets", "quantity": 1 }]
}
}
}A compra paga fica como está. O upsell é uma cobrança à parte, com aviso próprio, e você libera o que ele comprou.
A compra e o upsell chegam em dois checkout.completed do mesmo checkout. O do upsell vem com isUpSell: true.
Qualquer produto avulso e ativo vira a oferta, com o nome, a imagem e o preço que você cadastrou.
O upsell chega no seu servidor com isUpSell: true e só o produto dele nos itens.
Com completionUrl, a tela de sucesso só leva o cliente pro seu site quando ele toca em Continuar.
Peça pro seu agente criar o checkout com o upsell: o createCheckout já tem o campo.
No cartão, ele toca em “Aproveitar a oferta” e pronto: sem digitar o cartão, sem 3DS de novo.
Qual usar?
Os dois aumentam o ticket, em momentos diferentes da compra. Dá pra usar os dois na mesma venda.
Meios de pagamento e recursos na mesma conta do seu upsell, com as mesmas taxas e o mesmo suporte.
O que mais perguntam os lojistas antes de ligar a oferta depois do pagamento.
É a oferta de mais um produto logo depois do pagamento, na tela de sucesso do checkout. O cliente acabou de confiar na sua loja e já pagou: é a hora em que ele mais aceita levar mais um.
O order bump aparece no checkout, antes de pagar, e entra no mesmo pedido, numa cobrança só. O upsell aparece depois do pagamento aprovado e é uma cobrança à parte: a compra que o cliente já pagou não muda.
Pela API: no POST /v2/checkouts/create, passe o upSellProductId com o id ou o externalId de um produto do seu catálogo. A tela de sucesso mostra a oferta sozinha, sem você montar nada. Pelo MCP, o createCheckout aceita o mesmo campo.
Qualquer produto ativo e avulso do seu catálogo, sem ciclo de assinatura: um e-book, uma aula bônus, uma garantia, uma sessão extra. Preencha a descrição e a imagem, porque é isso que o cliente vê na oferta. Vale um upsell por checkout.
Não. Se ele pagou no cartão, o upsell é cobrado na hora, à vista, no mesmo cartão e sem passar pelo 3DS outra vez. Se pagou no Pix, a tela mostra um Pix novo do valor do upsell; no boleto, sai um boleto novo, com o Pix impresso nele.
Quando o upsell é pago, chega outro checkout.completed, com o mesmo id do checkout, isUpSell: true e só o produto do upsell nos itens. O paidAmount soma a compra e o upsell. Trate a duplicidade pelo id do evento, não pelo id do checkout, pra não descartar o upsell.
Não. O upsell é cobrado pelo preço do produto que você cadastrou. Quer dar um preço especial na oferta? Cadastre o produto do upsell com esse preço.
Com completionUrl, a tela de sucesso só leva o cliente pra sua página quando ele toca em Continuar, pra dar tempo de ver a oferta.
Nada a mais. O upsell vem com a conta: você paga só a taxa da cobrança dele, a mesma de qualquer venda. R$ 0,80 no Pix, R$ 2,50 no boleto pago e 5,42% + R$ 0,60 no cartão à vista, recebendo em D+1. Sem mensalidade e sem adesão.
Sim. Por enquanto a AbacatePay é só pra CNPJ. MEI serve.
Sem mensalidade e sem adesão.
Crie a conta, cadastre o produto da oferta e passe o upSellProductId no próximo checkout.
Sem mensalidade. Aprovação não leva semanas.
