Skip to main content

Order Bumps

An order bump is an add-to-your-order offer shown on a product's hosted checkout before the buyer pays. It points at another one-time variant — possibly from the same product.

Path {productId} is the owner checkout product. product_id and variant_id on the resource are the offered product and variant. The owner id is not on the object.

Product GET does not embed order bumps — they are read and written only through the endpoints below.

Order bumps are not variant upsells (same-product upgrades on a variant, no own routes) and not cross-sells (after-purchase offers on the thank-you page).

Overview

Each write has a live form and a draft twin. Live list, create, and reorder are nested under the owner product. Live get, update, and delete use the flat /order-bumps/{id} path. Draft twins are fully nested under /products/{productId}/draft/order-bumps.

Live writes while a draft exists

When the owner product has has_draft: true, live nested and flat writes return 409 and change nothing. Edit the overlay instead (/products/{productId}/draft/order-bumps). See Live writes while a draft exists.

Draft writes require draft_version from Get Product Draft. Create, update, and reorder on the overlay also return a fresh preview_url. Overlay delete returns 204 with no body.

Amount and currency

amount is a nullable override in minor units (e.g. cents). null means inherit the offered variant's amount — it is not free. PATCH with amount: null clears an override.

currency is always the offered variant's ISO-3 code, even when amount is null. It is GET-only — sending it on create or update returns 422.

Cap and uniqueness

A product may have at most 10 order bumps, counting inactive ones. A duplicate offered product + variant pair on the same owner returns 422. The same offered product with different variants is allowed. Offering the owner product itself is allowed.

Display type

display_type is one of large_thumbnail, compact, or countdown. Omit it on create to store large_thumbnail. countdown requires validity_minutes of at least 1.

Active

active is the writable on/off toggle. Omit it on create to store true. false hides the bump at checkout but still occupies a slot in the 10-cap. Lists include inactive bumps.

Display order

The order bump object has no order field — array order of list is display order. Rewrite it with Reorder Order Bumps. Create appends at the end.

Offered variant rules

Create and update return 422 when the offered variant is recurring, when delivery is enabled on the offered product or variant, when the variant does not belong to product_id, or when the offered currency is not among the owner's published currencies. Address collection (has_shipping) is not that delivery check.

Live writes also return 422 when the owner product is not on Stripe. Draft writes are accepted either way, but publishing a draft while the product is still not on Stripe does not carry the bumps over to the live product.

Incomplete items

Every order bump this API returns has an offered product and variant. A bump still being set up in the dashboard, with either one unset, is not returned by list or get and is not counted in total. Create requires both product_id and variant_id.

Order Bump Object

FieldTypeNullableDescription
idstringNoServer-minted UUID.
product_idstringNoOffered product UUID — not the owner.
variant_idstringNoOffered one-time variant UUID.
namestringYesMerchant-internal label. Checkout does not show it. Max 255.
titlestringYesCheckout headline. Max 255. Checkout may fall back to the offered product name at runtime.
descriptionstringYesCheckout body. Checkout may fall back to the offered product description at runtime.
amountintegerYesPrice override in minor units (e.g. cents). null inherits the offered variant. Minimum 1 when set.
currencystringNoISO-3 lowercase. Always the offered variant's currency. GET-only.
display_typestringNoOne of large_thumbnail, compact, countdown.
validity_minutesintegerYesCountdown duration in minutes. Required and ≥ 1 when display_type is countdown.
activebooleanNoWritable on/off. Inactive bumps still count toward the 10-cap.

Draft create, update, and the reorder envelope add:

FieldTypeNullableDescription
draft_versionintegerNoNew overlay version after the write. Minimum 1.
preview_urlstringNoTemporary signed checkout preview. Expires after about one hour. See Draft preview.