Skip to main content

Order Bumps

Time: ~5 minutes | Difficulty: Beginner Use the Node SDK to define order bumps — optional add-ons shown on the checkout page before payment. They lift average order value without changing your main line item.
Order bumps vs upsells: Order bumps appear before the customer pays (same checkout session). Upsell / post-purchase offers run after payment on dedicated offer steps. See Upsell & Downsell Funnel for post-checkout flows.

Prerequisites

RequirementNotes
Node.js 18+
@tagadapay/node-sdknpm install @tagadapay/node-sdk
API keyDashboard → Settings → API Keys
Store + processorMerchant Quick Start
import Tagada from '@tagadapay/node-sdk';

const tagada = new Tagada('your-api-key');
const STORE_ID = 'store_...';

1. What order bumps are

  • Shown on checkout while the cart and payment form are visible.
  • Customer can opt in (or you can pre-check the bump).
  • Controlled by triggers (when to show) and optional rules (cart conditions).

2. Create an order bump product

Create a normal product with variant(s) and prices — the bump sells that SKU.
const bumpProduct = await tagada.products.create({
  storeId: STORE_ID,
  name: 'Extended Warranty',
  active: true,
  isShippable: false,
  isTaxable: false,
  variants: [{
    name: 'Default',
    sku: 'BUMP-WARRANTY',
    grams: null,
    active: true,
    default: true,
    price: null,
    compareAtPrice: null,
    prices: [{
      currencyOptions: { USD: { amount: 999 } },
      recurring: false,
      billingTiming: 'usage',
      interval: null,
      intervalCount: 1,
      default: true,
    }],
  }],
});

const v0 = bumpProduct.variants[0];

3. Create an order bump offer

const bump = await tagada.offers.create({
  storeId: STORE_ID,
  offerTitle: 'Extended Warranty',
  enabled: true,
  type: 'orderbump',
  triggers: [{ type: 'any', productId: null }],
  offers: [],
  orderBumpOffers: [{
    productId: bumpProduct.id,
    variantId: v0.id,
    priceId: v0.prices[0].id,
    type: 'primary',
    precheck: false,
    quantity: 1,
    titleTrans: { en: 'Add extended warranty' },
    descriptionTrans: { en: '2 years of coverage — only $9.99' },
    overrideImageUrl: null,
    displayPrice: true,
    displayCompareAtPrice: false,
  }],
});

const bumpId = bump.id;

4. Bump types (orderBumpOffers[].type)

TypeRole
primaryMain bump slot — highest visibility
secondaryAdditional bump row
vipPremium positioning / styling in checkout UI
non_interactiveShown without a toggle (informational / fixed presentation)

5. Trigger types (triggers[])

typeBehavior
anyShow for all checkouts (productId: null)
productShow when the cart matches a specific product (productId: 'prod_...')
triggers: [{ type: 'product', productId: 'prod_main_line_item' }],

6. Attach to a funnel (checkout step)

On checkout nodes, set stepConfig.orderBumps:
stepConfig: {
  orderBumps: { mode: 'custom', enabledOfferIds: [bumpId] },
}
modeMeaning
customOnly bumps listed in enabledOfferIds apply on this step
inheritUse the store / default bump configuration (Step config)

7. List, retrieve, update, delete

// List (response uses `upsells` array for all offer types)
const { upsells, total } = await tagada.offers.list({ storeId: STORE_ID, type: 'orderbump' });

const one = await tagada.offers.retrieve(bumpId);

await tagada.offers.update({
  id: bumpId,
  data: {
    offerTitle: 'Extended Warranty — pre-checked',
    enabled: true,
    type: 'orderbump',
    triggers: [{ type: 'any', productId: null }],
    offers: [],
    orderBumpOffers: [/* same shape as create */],
  },
});

await tagada.offers.del([bumpId]);

8. Order bump rules (optional)

Per bump line, rules restrict when that line is eligible (evaluated against the current cart).
Rule typeTypical fields
CartContainsProductproductId
CartTotalAboveminimumAmount (per-currency structure from API)
CartTotalBelowminimumAmount
CartItemCountAboveitemCount
CartItemCountBelowitemCount
orderBumpOffers: [{
  // ...productId, variantId, priceId, type, titleTrans, etc.
  rules: [
    { type: 'CartContainsProduct', productId: 'prod_xxx' },
    { type: 'CartItemCountAbove', itemCount: 1 },
  ],
}],

9. SDK methods reference

MethodDescription
tagada.offers.create(params)Create upsell or order bump (type: 'orderbump')
tagada.offers.list({ storeId, type: 'orderbump' })Paginate / filter bumps
tagada.offers.retrieve(id)Fetch one offer
tagada.offers.update({ id, data })Replace offer fields (omit storeId in data)
tagada.offers.del([ids])Delete one or more offers
tagada.products.create / updateManage bump SKUs and prices
tagada.funnels.create / updateSet stepConfig.orderBumps on checkout steps

10. Next steps

Step config (pixels & bumps)

orderBumps, scripts, pixels, and payment setup per funnel step

Upsell & downsell funnel

Post-payment offers with conditional routing

Custom checkout & pages

Native, HTML, or Plugin SDK checkout surfaces

Merchant quick start

End-to-end store and processor setup