sdk.ready
Once a page, when the campaign is in: at once from a copy saved in the last 10 minutes, else when the API answers. ready is the same event. Carries what the page shows then.
next.on('sdk.ready', (data, event) => {});Data
Present: always; optional when it may be missing; campaign once the campaign is loaded; priced once the server priced the cart.
| Field | Type | Present | |
|---|---|---|---|
campaign | EventCampaign | optional | Once the campaign has loaded. |
cart | Cart | always | |
checkout | Checkout | optional | On a checkout page, once the form is bound. |
order | Order | optional | On a page that loaded an order. |
selectors | Selector[] | always | Every bundle and offer selector on the page; toggles are in the cart. |
EventCampaign
The campaign the page runs, on every event once it has loaded.
| Field | Type | |
|---|---|---|
id | number | The campaign's id in the Campaigns API and the dashboard. |
name | string | |
currency | string | The currency the page shows: the campaign's, or the one ?currency= asked for. |
language | string | The campaign's language code, like en. |
Cart
The cart every cart.* event carries. Prices are numbers in currency, there once the server priced these lines: total = subtotal − total_discount + shipping_method.price.
| Field | Type | Present | |
|---|---|---|---|
lines | CartItem[] | always | Every line in the cart, the same package's lines merged. |
coupons | string[] | always | The codes the shopper applied, uppercase. A bundle card's own codes are not listed. |
currency | string | campaign | ISO 4217, such as USD. |
shipping_method | ShippingMethod | optional | The selected shipping method, and what shipping costs. |
subtotal | number | priced | The products before discounts, without shipping. |
total_discount | number | priced | The discounts on the products, without shipping's: the sum of discounts. |
total | number | priced | What the shopper pays. |
discounts | Discount[] | priced | The discounts on the products, one per offer. |
discount_percentage | number | priced | total_discount ÷ subtotal × 100, to two decimals; 0 without a discount. |
quantity | number | always | Units in the cart: each line's quantity. |
Checkout
The cart and what the shopper has entered so far, the same on every checkout event.
| Field | Type | Present | |
|---|---|---|---|
id | string | always | One checkout in this tab, the same across its steps, reloads and a return from a payment gateway; a new one after an order is paid. Empty until checkout.started. |
step | number | optional | The step of a multi-step checkout (data-next-checkout-step), from 1; none on a one-page checkout. |
cart | Cart | always | The same cart cart.* events carry. |
user | User | optional | The shopper, from user.created on. |
shipping_address | Address | optional | From address.entered for the shipping address on. |
billing_same_as_shipping | boolean | optional | On a checkout page: false once the shopper asks for a separate billing address. |
billing_address | Address | optional | When billing_same_as_shipping is false, from address.entered for it on. |
payment_method | string | optional | The API's code for the chosen payment method, on a checkout page: card_token, paypal, apple_pay, … |
Order
An order the store created, the same on every order.* event. Prices are numbers in currency.
| Field | Type | Present | |
|---|---|---|---|
ref_id | string | always | The order's reference: ref_id in post-purchase page URLs. |
number | string | optional | The order number customers see. |
currency | string | optional | ISO 4217, such as USD. |
test | boolean | always | true for a test order. |
paid | boolean | always | true once the order is paid; false while the shopper pays at a gateway. |
lines | OrderItem[] | always | |
coupons | string[] | always | The codes the shopper applied at checkout in this tab, uppercase. |
total_discount | number | always | The discounts on the order. |
shipping_method | Pick<ShippingMethod, "name" | "price"> & { tax?: number } | optional | The shipping method's name, its price, and the tax in that price. |
tax | number | always | The tax in the order: its lines' and shipping's. |
total | number | always | What the shopper paid. |
user | Pick<User, "first_name" | "last_name" | "email" | "phone"> | optional | |
shipping_address | Address | optional | |
billing_address | Address | optional | |
payment_method | string | optional | The API's code for the payment method, such as card_token or paypal. |
supports_upsells | boolean | always | true when upsells can be added to the order. |
status_url | string | optional | The order's status page on the store. |
Selector
A selector and the option picked in it, the same on every selector.* event.
| Field | Type | Present | |
|---|---|---|---|
price | number | priced | total ÷ quantity: one package, after discounts. |
original_price | number | priced | subtotal ÷ quantity: one package, before discounts. |
subtotal | number | priced | What it costs before discounts. |
total_discount | number | priced | subtotal − total. |
discount_percentage | number | priced | total_discount ÷ subtotal × 100, to two decimals. |
selector_id | string | always | data-next-selector-id, or toggle:<package_id> for a toggle. |
type | "bundle" | "offer" | "toggle" | always | |
option_id | string | optional | The picked option's data-next-bundle-id; none for a toggle. |
lines | CartItem[] | always | The lines the picked option puts in the cart, at its quantity; the toggle's line for a toggle. Priced once the option has a price. |
currency | string | campaign | ISO 4217, such as USD. |
total | number | priced | What the picked option costs after discounts. |
quantity | number | always | Packages the picked option adds. |
in_cart | boolean | always | true while the picked option's lines are in the cart. |
options | SelectorOption[] | optional | Every option of a bundle or offer selector; none for a toggle. |
CartItem
A line of the cart. Its prices are there once the server priced the cart.
| Field | Type | Present | |
|---|---|---|---|
package_id | number | always | The package's ref_id in the campaign. |
quantity | number | always | Package quantity. |
is_upsell | boolean | optional | true for a line added after the order. |
properties | Record<string, string> | optional | Line properties, such as a variant picked in a bundle slot. |
product_id | number | campaign | The product in the store. |
product_title | string | campaign | The product's name as customers see it, as on an order line; the package's name for a package without one. |
variant_id | number | campaign | The product variant, for a product with variants. |
variant_title | string | campaign | The variant's name, such as Black / M, for a product with variants. |
sku | string | campaign | The product's Stock Keeping Unit. |
image | string | campaign | The package's image URL. |
price | number | priced | What one package costs after discounts. |
original_price | number | priced | What one package costs before discounts; equal to price when nothing is taken off. |
total_discount | number | priced | The discount on the line. |
total | number | priced | price × quantity. |
subtotal | number | priced | The line before discounts: total = subtotal − total_discount. |
discount_percentage | number | priced | total_discount ÷ subtotal × 100, to two decimals; 0 without a discount. |
discounts | Discount[] | priced | The discounts on the line. |
subscription | Subscription | campaign | For a package billed again every interval. |
ShippingMethod
The selected shipping method, and what shipping costs.
| Field | Type | Present | |
|---|---|---|---|
id | number | always | The method's ref_id. |
code | string | campaign | Such as standard. |
name | string | priced | The method's name. |
price | number | priced | What shipping costs after discounts; 0 is free shipping. |
original_price | number | priced | What shipping costs before discounts. |
discounts | Discount[] | priced | The discounts on shipping, such as a free-shipping offer. |
Discount
A discount on the cart's products or on its shipping. Amounts are in the cart's currency.
| Field | Type | Present | |
|---|---|---|---|
name | string | always | The offer's name. |
amount | number | always | The amount taken off. |
source | "offer" | "coupon" | always | coupon for a code the shopper entered (it is in coupons); offer for an automatic offer or a bundle card's own code. |
code | string | optional | The code, for a coupon. |
offer_id | number | always | The offer that gave it. |
percentage | number | optional | The percentage the offer is set to take off, as the API reports it, such as 20. Its configured value, for a label such as “20% off”; the amount actually taken off is amount. |
User
The shopper, as the store's user on the Open Cart and the order.
| Field | Type | Present | |
|---|---|---|---|
email | string | optional | As typed, trimmed; none when data-trigger-on created the user without one. |
first_name | string | always | |
last_name | string | always | |
phone | string | optional | In E.164 once the address service read it, else the digits typed. |
accepts_marketing | boolean | always | The marketing checkbox, as sent with the Open Cart and the order. |
language | string | always | The language the store keeps for the shopper, such as en. |
ip | string | optional | The shopper's IP address, as the store recorded it with the Open Cart, else as the address service saw it; none when neither knows it. |
user_agent | string | always | As the store recorded it with the Open Cart, else the browser's. |
Address
A postal address as the shopper entered it, once every field its country requires is valid.
| Field | Type | Present | |
|---|---|---|---|
first_name | string | always | |
last_name | string | always | |
line1 | string | always | |
line2 | string | optional | |
city | string | optional | None in a country whose addresses have no city, such as Singapore. |
state | string | optional | The state or province code, in a country that has them. |
postcode | string | optional | |
country | string | always | ISO 3166-1 alpha-2. |
phone | string | optional | In E.164 once the address service read it, else the digits typed. |
OrderItem
One line of an order. Prices are numbers in the order's currency, as the shopper paid them.
| Field | Type | Present | |
|---|---|---|---|
id | string | always | The order line's id. |
product_id | number | optional | The product in the store. |
product_title | string | always | The product's name as customers see it. |
variant_id | number | optional | The product variant. |
variant_title | string | optional | The variant's name, such as Black / M. |
sku | string | optional | The product's Stock Keeping Unit. |
image | string | optional | |
quantity | number | always | |
price | number | always | What one unit cost after discounts. |
original_price | number | always | What one unit cost before discounts. |
total | number | always | What the line cost; price is total / quantity, rounded to the cent. |
tax | number | always | The tax in total; the line before tax is total − tax. |
upsell | boolean | always | true for a line an upsell added. |
SelectorOption
One option of a selector, at the quantity it would be added.
| Field | Type | Present | |
|---|---|---|---|
price | number | priced | total ÷ quantity: one package, after discounts. |
original_price | number | priced | subtotal ÷ quantity: one package, before discounts. |
subtotal | number | priced | What it costs before discounts. |
total_discount | number | priced | subtotal − total. |
discount_percentage | number | priced | total_discount ÷ subtotal × 100, to two decimals. |
option_id | string | always | The option's data-next-bundle-id, or data-next-option. |
lines | CartItem[] | always | The lines the option puts in the cart. Priced once the option has a price. |
quantity | number | always | Packages the option adds: its lines' quantities. |
selected | boolean | always | true for the selector's picked option. |
total | number | priced | What the option costs after discounts. |
original_total | number | priced | What the option costs before discounts. |
Subscription
A package billed again every interval.
| Field | Type | Present | |
|---|---|---|---|
interval | "day" | "month" | always | The unit of the renewal interval. |
interval_count | number | always | How many intervals between renewals. |
price | number | priced | What each renewal charges, after discounts. |
original_price | number | priced | What each renewal charges before discounts. |
Example
The second argument, with data inside. See Events for the envelope's fields.
{
"event_id": "3f2b8c1d9e7a4b6c8d5e2f1a0b9c8d7e",
"event_type": "sdk.ready",
"object": "sdk",
"data": {
"campaign": {
"id": 1310,
"name": "Olympus",
"currency": "USD",
"language": "en"
},
"cart": {
"lines": [
{
"package_id": 1,
"quantity": 1,
"product_id": 400,
"product_title": "Olympus Earbuds",
"variant_id": 4001,
"variant_title": "Black",
"image": "https://cdn.test/1.png"
}
],
"coupons": [],
"quantity": 1,
"currency": "USD"
},
"selectors": []
},
"created_at": "2026-11-04T08:30:00.000Z",
"session_id": "0b8f3c2d1e4a4f6b9c7d5e3f2a1b0c9d",
"sdk_version": "0.5.0"
}