For the complete documentation index, see llms.txt. This page is also available as Markdown.

Shipping & Delivery

Checkout Shipping & Delivery

Configure shipping options and collect delivery preferences from your customers. These endpoints cover shipping method selection, delivery time slot selection, retail store and locker pickup, remote price calculation, delivery bags, and SMS notifications.

Authentication

These endpoints support both authenticated and anonymous sessions.

  • Authenticated users: Session cookie (sessionid) tracks checkout progress.

  • Anonymous users: Guest checkout is available when the CAN_GUEST_PURCHASE setting is enabled.

Request Format

Include the following header in all checkout requests:

  • x-requested-with: XMLHttpRequest

Dynamic Settings

The following settings are managed at runtime through the admin interface and do not require a server restart.

CHECKOUT_SHIPPING_OPTION_SELECTION_PAGE

Determines which shipping option page is active:

  • ShippingOptionSelectionPage — standard shipping options

  • DataSourceShippingOptionSelectionPage — options grouped by supplier

  • AttributeBasedShippingOptionSelectionPage — options grouped by product attribute

  • RemoteShippingOptionSelectionPage — options fetched from an external service

ATTRIBUTE_KEYS_FOR_ATTRIBUTE_BASED_SHIPPING_OPTION

Rules that determine how basket items are grouped by product attribute when the attribute-based shipping page is active. Rules are evaluated in priority order; the first matching rule determines the grouping key.

REMOTE_SHIPPING_OPTION_PROVIDER

External service configuration used when RemoteShippingOptionSelectionPage is active. Includes the service URL and authentication credentials.

REMOTE_DELIVERY_OPTION_PROVIDER

External service configuration for fetching delivery options remotely.

CHECKOUT_RETAIL_STORE_FILTERS

Filtering options for the retail store list. When by_stock is enabled, only stores with available stock for basket items are shown.

DELIVERY_BAGS_CONF

Configuration for the delivery bags step. Set is_active to true to include the delivery bags page. Controls bag SKU, minimum quantity, and whether the customer can specify a custom quantity.

REMOTE_PRICE_ATTRIBUTE_KEY

Product attribute key indicating that an item requires remote price calculation.

Static Settings

The following settings are configured in the server environment and require a restart to take effect.

AUTOSELECT_SHIPPING

When enabled, if only one shipping option is available after filtering, it is selected automatically and the shipping selection page is skipped.

CHECKOUT_LIST_RETAIL_STORES

Controls whether retail stores are listed on the store selection page. When disabled, an empty list is returned.

ORDER_BARCODE_SENT_SMS_EXPIRATION_IN_SECONDS

Minimum interval in seconds between consecutive SMS sends for the same order. Prevents repeated sends within the cooldown period. Defaults to 1800 seconds (30 minutes).

Get Shipping Option Selection Page context

get

Returns available shipping options for the selected shipping address. This is the default shipping option selection page when CHECKOUT_SHIPPING_OPTION_SELECTION_PAGE dynamic setting is set to ShippingOptionSelectionPage (default).

Preconditions:

  • Shipping address must be selected (check_address_selected)

  • Basket must not be empty

Shipping Option Rules: Shipping options are filtered based on configured rules that determine availability. Each shipping option can have multiple rules attached, and all rules must pass for the option to be available.

  • Rules are evaluated against the current checkout context (basket, address, user, etc.)

  • Common rule types include:

    • Geographic rules: Filter by country, city, township, or district

    • Basket rules: Filter by basket total amount, item count, or weight

    • Product rules: Filter by product attributes, categories, or data sources

    • User rules: Filter by user segment, membership status, or order history

    • Time-based rules: Filter by day of week, time windows, or date ranges

  • If no rules pass for any shipping option, checkout cannot proceed

  • Rule configurations are managed through the admin interface

Shipping Amount Calculators: Each shipping option has a configured calculator that determines the shipping cost dynamically.

  • Calculator Types:

    • FreeShippingCalculator: Always returns zero shipping cost

    • FixedPriceCalculator: Returns a fixed shipping amount configured on the shipping option

    • WeightBasedCalculator: Calculates cost based on total basket weight and configured weight tiers

    • PriceBasedCalculator: Calculates cost based on basket total amount and configured price tiers

    • QuantityBasedCalculator: Calculates cost based on total item quantity in basket

    • RemoteCalculator: Fetches shipping cost from an external service/API

    • DataSourceCalculator: Calculates cost per data source (vendor/supplier)

  • Calculators receive basket contents, shipping address, and currency as input

  • Calculator results are cached per request for performance

  • Custom calculators can be implemented by extending the base calculator class

Auto-selection:

  • If AUTOSELECT_SHIPPING setting is True and only one shipping option is available, it is automatically selected and the page is skipped

Configuration:

  • CHECKOUT_SHIPPING_OPTION_SELECTION_PAGE: Determines which shipping option selection page is used. Can be set to ShippingOptionSelectionPage (default), DataSourceShippingOptionSelectionPage, AttributeBasedShippingOptionSelectionPage, or RemoteShippingOptionSelectionPage.

  • AUTOSELECT_SHIPPING: When True, automatically selects the shipping option if only one is available.

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Responses
200

Shipping option selection page context retrieved

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
get/orders/checkout/?page=ShippingOptionSelectionPage
200

Shipping option selection page context retrieved

Select Shipping Option

post

Sets the selected shipping option for the order.

Validation:

  • The selected shipping option must be in the list of available shipping options

  • The shipping option's rules are re-evaluated to ensure it's still valid

  • If the shipping option has required_fields in its kwargs, those fields must be provided

Rule Re-evaluation:

  • Rules are checked again at submission time to prevent race conditions

  • If basket contents changed since page load, rules may now fail

  • If address changed since page load, geographic rules are re-evaluated

  • Failed rule validation returns an error and the user must select a different option

Shipping Amount Calculation:

  • Amount is calculated using the shipping option's configured calculator

  • Calculator receives current basket contents, shipping address, and currency

  • Available calculator types:

    • FreeShippingCalculator: Zero cost

    • FixedPriceCalculator: Fixed amount from shipping option configuration

    • WeightBasedCalculator: Cost based on basket weight tiers

    • PriceBasedCalculator: Cost based on basket amount tiers

    • QuantityBasedCalculator: Cost based on item quantity

    • RemoteCalculator: Cost from external service

    • DataSourceCalculator: Cost per vendor/supplier

  • Calculated amount is stored in pre-order and added to order total

Next Pages:

  • If sample product discounts are available: SampleProductPage

  • If retail store reservation is needed: ReservationSelectionPage

  • Otherwise: PaymentOptionSelectionPage

Cascading Invalidation:

  • Changing shipping option resets any previously selected payment option

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Body
shipping_optionintegerRequired

Primary key of the selected shipping option

Other propertiesstringOptional

Additional required fields defined in the shipping option's kwargs.required_fields. These fields vary based on the shipping option configuration and may include fields like delivery_date, time_slot, etc.

Responses
200

Shipping option selected successfully

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
post/orders/checkout/?page=ShippingOptionSelectionPage
200

Shipping option selected successfully

Get Remote Shipping Option Selection Page context

get

Returns available shipping options fetched from an external remote service. This page is used as an alternative to ShippingOptionSelectionPage when shipping option data must be sourced from a third-party API rather than the local database.

This page is used when CHECKOUT_SHIPPING_OPTION_SELECTION_PAGE dynamic setting is set to RemoteShippingOptionSelectionPage.

Preconditions:

  • Shipping address must be selected (check_address_selected)

  • Basket must not be empty

Remote Shipping Options:

  • Shipping options are fetched via RemoteShippingOptionService using the REMOTE_SHIPPING_OPTION_PROVIDER setting

  • The remote service is called with the current pre-order context (basket, address, etc.)

  • Options returned from the remote service are matched against local ShippingOption records

Configuration:

  • CHECKOUT_SHIPPING_OPTION_SELECTION_PAGE: Must be set to RemoteShippingOptionSelectionPage

  • REMOTE_SHIPPING_OPTION_PROVIDER: The remote shipping option provider configuration

Auto-selection:

  • If AUTOSELECT_SHIPPING setting is True and only one shipping option is available, it is automatically selected and the page is skipped

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Responses
200

Remote shipping option selection page context retrieved

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
get/orders/checkout/?page=RemoteShippingOptionSelectionPage
200

Remote shipping option selection page context retrieved

Select Remote Shipping Option

post

Sets the selected shipping option from the remote shipping option list.

Validation:

  • The selected shipping option must be in the list returned by the remote service

  • The remote service is queried again at submission time to ensure the option is still valid

Next Pages:

  • If sample product discounts are available: SampleProductPage

  • If retail store reservation is needed: ReservationSelectionPage

  • Otherwise: PaymentOptionSelectionPage

Cascading Invalidation:

  • Changing shipping option resets any previously selected payment option

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Body
shipping_optionintegerRequired

Primary key of the selected shipping option. Must be one of the options returned by the remote shipping service for the current checkout context.

Example: 1
Responses
200

Remote shipping option selected successfully

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
post/orders/checkout/?page=RemoteShippingOptionSelectionPage
200

Remote shipping option selected successfully

Get Data Source Shipping Option Selection Page context

get

Returns available shipping options grouped by data source (supplier/vendor). Used when products in the basket come from different data sources and each data source requires separate shipping option selection.

This page is used when CHECKOUT_SHIPPING_OPTION_SELECTION_PAGE dynamic setting is set to DataSourceShippingOptionSelectionPage.

Preconditions:

  • Shipping address must be selected (check_address_selected)

  • Basket must not be empty

Data Source Grouping:

  • Products are grouped by their data source (supplier/vendor)

  • Each data source has its own set of available shipping options

  • User must select a shipping option for each data source

Configuration:

  • CHECKOUT_SHIPPING_OPTION_SELECTION_PAGE: Must be set to DataSourceShippingOptionSelectionPage to enable this page.

Error Handling:

  • Raises NoDataSourceShippingOptionAvailable exception if no shipping options are available for the basket and shipping address combination

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Responses
200

Data source shipping option selection page context retrieved

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
get/orders/checkout/?page=DataSourceShippingOptionSelectionPage
200

Data source shipping option selection page context retrieved

Select Shipping Options per Data Source

post

Sets the shipping options for each data source in the basket. Each data source in the basket must have exactly one shipping option selected.

Input Format:

  • data_source_shipping_options: JSON-encoded array of DataSourceShippingOption primary keys

  • Each ID in the array corresponds to a shipping option selected for a specific data source

  • The array must contain exactly one shipping option ID per data source in the basket

Example: If a basket contains products from 2 data sources (Vendor A and Vendor B), and the available shipping options are:

  • Data Source "Vendor A": Standard Shipping (ID: 10), Express Shipping (ID: 11)

  • Data Source "Vendor B": Standard Shipping (ID: 20), Economy Shipping (ID: 21)

To select Standard Shipping for Vendor A and Economy Shipping for Vendor B:

data_source_shipping_options: "[10, 21]"

Validation:

  • All data sources in the basket must have a shipping option selected

  • Selected options must be available for the current basket and shipping address

  • Shipping amounts are recalculated to ensure consistency

Shipping Amount:

  • Total shipping amount is the sum of all selected data source shipping option amounts

Next Pages:

  • If sample product discounts are available: SampleProductPage

  • If retail store reservation is needed: ReservationSelectionPage

  • Otherwise: PaymentOptionSelectionPage

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Body
data_source_shipping_optionsstringRequired

JSON-encoded array of data source shipping option IDs. Each ID is the primary key of a DataSourceShippingOption model. One shipping option must be selected for each data source in the basket.

Example: [10, 20, 30]
Responses
200

Data source shipping options selected successfully

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
post/orders/checkout/?page=DataSourceShippingOptionSelectionPage
200

Data source shipping options selected successfully

Get Attribute-Based Shipping Option Selection Page context

get

Returns available shipping options grouped by product attribute values. Products are grouped based on configured attribute keys, and each group can have different shipping options available.

This page is used when CHECKOUT_SHIPPING_OPTION_SELECTION_PAGE dynamic setting is set to AttributeBasedShippingOptionSelectionPage.

Preconditions:

  • Shipping address must be selected (check_address_selected)

  • Basket must not be empty

Attribute-Based Grouping: Products are grouped by their attribute VALUES (not keys). The grouping mechanism works as follows:

  1. Rule Evaluation: The system evaluates rules from ATTRIBUTE_KEYS_FOR_ATTRIBUTE_BASED_SHIPPING_OPTION setting in sort_order priority (lower values first). Each rule is evaluated against the shipping address using location-based conditions (country, city, township, district).

  2. First Match Wins: The first rule that matches the shipping address determines which group_attribute_key is used for grouping. Remaining rules are ignored.

  3. Grouping by Attribute Value: Products are then grouped by the value of the selected attribute key. For example, if group_attribute_key is "warehouse_location":

    • Product A with warehouse_location: "istanbul" → Group: "istanbul"

    • Product B with warehouse_location: "istanbul" → Group: "istanbul" (same group)

    • Product C with warehouse_location: "ankara" → Group: "ankara"

  4. Missing Attributes: Products without the specified attribute are grouped under "None". A default shipping option (with is_default=True) typically handles these products.

  5. Multiple Attribute Keys: If group_attribute_key is a list (e.g., ["brand", "category"]), products are grouped by composite keys with semicolon separator:

    • Product with brand: "Nike", category: "shoes" → Group: "Nike;shoes"

    • Product with only brand: "Nike" → Group: "Nike;None"

Available Rules for Rule Configuration:

Rule Slug
Description
Parameters

any-rule

Always matches (fallback rule)

none

country-rule

Matches addresses in specified countries

countries: list of country IDs, exclude: boolean

city-rule

Matches addresses in specified cities

cities: list of city IDs, exclude: boolean

township-rule

Matches addresses in specified townships

townships: list of township IDs, exclude: boolean

district-rule

Matches addresses in specified districts

districts: list of district IDs, exclude: boolean

postal-code-rule

Matches addresses with specified postal codes

postal_codes: list of postal code strings, exclude: boolean

not-rule

Negates a child rule

child: child rule object

and-rule

All children must match

children: list of child rule objects

or-rule

Any child must match

children: list of child rule objects

Configuration Example:

In this example:

  • For addresses in countries 1 or 2: Products are grouped by warehouse_location

  • For addresses in city 5 (if not in countries 1, 2): Products are grouped by brand;category

  • For all other addresses: Products are grouped by supplier

Segment Support:

  • Available shipping options can vary based on user segment

  • Segment-specific pricing and availability rules are applied

Configuration:

  • CHECKOUT_SHIPPING_OPTION_SELECTION_PAGE: Must be set to AttributeBasedShippingOptionSelectionPage

  • ATTRIBUTE_KEYS_FOR_ATTRIBUTE_BASED_SHIPPING_OPTION: List of attribute key configurations that define how products are grouped

Error Handling:

  • Raises NoAttributeBasedShippingOptionAvailable exception if no shipping options are available for the basket and shipping address combination

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Responses
200

Attribute-based shipping option selection page context retrieved

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
get/orders/checkout/?page=AttributeBasedShippingOptionSelectionPage
200

Attribute-based shipping option selection page context retrieved

Select Shipping Options per Attribute Value Group

post

Sets the shipping options for each attribute value group in the basket. Each attribute value group must have exactly one shipping option selected.

Input Format:

  • attribute_based_shipping_options: JSON-encoded object mapping attribute values to shipping option IDs

  • Keys are attribute values (the group keys from the GET response, e.g., "electronics", "clothing", "Nike;shoes")

  • Values are AttributeBasedShippingOption primary keys (integers)

Example: If the GET response returns the following attribute-based shipping options:

{
  "electronics": {
    "attribute_based_shipping_options": [
      {"pk": 100, "shipping_option_name": "Standard Delivery", "shipping_amount": "5.99"},
      {"pk": 101, "shipping_option_name": "Express Delivery", "shipping_amount": "15.99"}
    ],
    "product_ids": [1001, 1002, 1003],
    "attribute_key": ["category"]
  },
  "clothing": {
    "attribute_based_shipping_options": [
      {"pk": 200, "shipping_option_name": "Economy Delivery", "shipping_amount": "3.99"},
      {"pk": 201, "shipping_option_name": "Standard Delivery", "shipping_amount": "8.99"}
    ],
    "product_ids": [2001, 2002],
    "attribute_key": ["category"]
  }
}

To select Standard Delivery (ID: 100) for electronics and Economy Delivery (ID: 200) for clothing:

Composite Group Keys: If products are grouped by multiple attributes (e.g., ["brand", "category"]), the group keys will be composite values separated by semicolons:

Validation:

  • All attribute value groups must have a shipping option selected

  • Selected options must be available for the current basket, shipping address, and segment

  • Product IDs must match the expected grouping

  • Shipping amounts are recalculated to ensure consistency

Shipping Amount:

  • Total shipping amount is the sum of all selected attribute-based shipping option amounts

Address Validation:

  • Validates that the shipping address hasn't changed since options were loaded

  • If address changed, options are recalculated

Next Pages:

  • If sample product discounts are available: SampleProductPage

  • If retail store reservation is needed: ReservationSelectionPage

  • Otherwise: PaymentOptionSelectionPage

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Body
attribute_based_shipping_optionsstringRequired

JSON-encoded object mapping attribute values to shipping option IDs. Keys are attribute values (e.g., "electronics", "clothing", "warehouse_a"). Values are primary keys of AttributeBasedShippingOption models. One shipping option must be selected for each attribute value group.

Example: {"electronics": 100, "clothing": 200}
Responses
200

Attribute-based shipping options selected successfully

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
post/orders/checkout/?page=AttributeBasedShippingOptionSelectionPage
200

Attribute-based shipping options selected successfully

Get Delivery Option Selection Page context

get

Returns available delivery options for selection. This page is automatically skipped if only one active delivery option exists.

Preconditions:

  • User email must be set

  • Basket must not be empty

Skip Conditions:

  • Page is skipped if only one active delivery option exists

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Responses
200

Delivery options retrieved

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
get/orders/checkout/?page=DeliveryOptionSelectionPage
200

Delivery options retrieved

Set Delivery Option

post

Sets the selected delivery option to the current pre-order.

Configuration:

  • CHECKOUT_DELIVERY_OPTION_SELECTION_PAGE: Determines which delivery option selection page is used. Can be set to DeliveryOptionSelectionPage or RemoteDeliveryOptionSelectionPage.

Next Pages (based on selected delivery option):

  • If scheduled delivery is active: SlotSelectionPage

  • If pickup location selected: PickupLocationSelectionPage

  • If retail store selected: RetailStoreSelectionPage

  • Otherwise: AddressSelectionPage

Cascading Invalidation:

  • Changing delivery option with clear=true resets shipping and billing addresses

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Body
delivery_optionintegerRequired

Primary key of the selected delivery option

clearbooleanOptional

If true, clears shipping and billing addresses when changing delivery option

Default: false
Responses
200

Delivery option set successfully

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
post/orders/checkout/?page=DeliveryOptionSelectionPage
200

Delivery option set successfully

Get Remote Delivery Option Selection Page context

get

Returns available delivery options fetched from a remote service. Extends DeliveryOptionSelectionPage to use RemoteDeliveryOptionService.

Configuration:

  • Requires REMOTE_DELIVERY_OPTION_PROVIDER dynamic setting to be configured

  • The provider fetches delivery options from an external service based on the configuration

  • Used when CHECKOUT_DELIVERY_OPTION_SELECTION_PAGE is set to RemoteDeliveryOptionSelectionPage

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Responses
200

Remote delivery options retrieved

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
get/orders/checkout/?page=RemoteDeliveryOptionSelectionPage
200

Remote delivery options retrieved

Set Remote Delivery Option

post

Sets the selected remote delivery option. Validates that the selected option is available from the remote service.

Configuration:

  • Requires REMOTE_DELIVERY_OPTION_PROVIDER dynamic setting to be configured

  • The provider fetches delivery options from an external service based on the configuration

  • Used when CHECKOUT_DELIVERY_OPTION_SELECTION_PAGE is set to RemoteDeliveryOptionSelectionPage

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Body
delivery_optionintegerRequired

Primary key of the selected delivery option

clearbooleanOptional

If true, clears shipping and billing addresses when changing delivery option

Default: false
Responses
200

Remote delivery option set successfully

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
post/orders/checkout/?page=RemoteDeliveryOptionSelectionPage
200

Remote delivery option set successfully

Get Remote Price Calculation Page context

get

This page appears in the checkout flow when basket items have prices that must be fetched from a remote service. It sits between the address selection step and the shipping option selection step. The page has no visible context of its own; its purpose is to trigger the remote price lookup on POST.

Preconditions:

  • Basket must not be empty

  • A shipping address must be selected (check_address_selected)

has_remote_price flag:

  • Set by AddressSelectionPage during its process_pre_order step, after the shipping address is saved.

  • Checks whether any basket item has a product attribute matching REMOTE_PRICE_ATTRIBUTE_KEY (default: "has_remote_price") with value "true".

  • If true, AddressSelectionPage.next_page() routes directly to this page instead of ShippingOptionSelectionPage.

Valid Condition (is_valid):

  • Returns true only if has_remote_price = true is set in pre_order.data.

Skip Conditions:

  • Page is skipped if are_remote_prices_set = true is already set in pre_order.data.

Page Context: (empty)

Previous Page: AddressSelectionPage

Next Pages:

  • ShippingOptionSelectionPage (or the configured shipping option selection variant)

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Responses
200

Remote Price Calculation Page context retrieved

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
get/orders/checkout/?page=RemotePriceCalculationPage
200

Remote Price Calculation Page context retrieved

Trigger remote price calculation for basket items

post

Calls BasketItemRemotePriceService.set_remote_prices() to fetch and apply remote prices for basket items that require external price resolution. No input data is required.

Required Fields: (none — submitting with an empty body is sufficient)

State Updates:

  • pre_order.data['are_remote_prices_set'] = true

Backward Navigation:

  • When navigating backward, both has_remote_price and are_remote_prices_set are removed from pre_order.data.

Next Pages:

  • ShippingOptionSelectionPage (or the configured shipping option selection variant)

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Body
objectOptional
Responses
200

Remote prices set

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
post/orders/checkout/?page=RemotePriceCalculationPage
200

Remote prices set

Get Slot Selection Page context

get

Returns the available delivery time slots for the user to choose from. Slots are generated by SlotService.generate_slots() based on configured slot day counts and the selected delivery option.

Preconditions:

  • Basket must not be empty

  • User email must be set (user_email_not_empty)

  • A shipping address must be selected (check_address_selected)

Skip Conditions:

  • Page is skipped if a delivery range has already been selected (i.e., delivery_range is set in the pre-order)

Next Pages:

  • PaymentOptionSelectionPage

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Responses
200

Slot Selection Page context retrieved

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
get/orders/checkout/?page=SlotSelectionPage
200

Slot Selection Page context retrieved

Select a delivery time slot

post

Submits the chosen delivery time window (lower and upper datetime bounds). The slot is validated to ensure it is still available. On success, the shipping option and shipping amount are calculated and stored in the pre-order, and the delivery range is recorded.

Required Fields:

  • lower: Start of the delivery time window (ISO 8601 datetime with timezone).

  • upper: End of the delivery time window (ISO 8601 datetime with timezone).

Validation:

  • The submitted range must still be available according to SlotService.is_delivery_range_available().

State Update:

  • pre_order.shipping_option is set to the first available shipping option.

  • pre_order.shipping_amount is calculated.

  • pre_order.data['delivery_range'] is set to the selected range.

  • If DELIVERY_BAGS_CONF.auto_run is enabled, DeliveryBagsPage is auto-processed.

  • For retail store delivery options, the shipping address is replaced with the retail store address.

Backward Navigation:

  • When navigating backward, delivery_range is reset, shipping_option is cleared, and shipping_amount is set to 0.00.

Next Pages:

  • PaymentOptionSelectionPage

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Body
lowerstring · date-timeRequired

Start of the selected delivery time window. Must be an ISO 8601 datetime with timezone. Must be a currently available slot according to SlotService.is_delivery_range_available().

Example: 2026-05-01T10:00:00+03:00
upperstring · date-timeRequired

End of the selected delivery time window. Must be an ISO 8601 datetime with timezone.

Example: 2026-05-01T14:00:00+03:00
Responses
200

Slot selected or validation error

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
post/orders/checkout/?page=SlotSelectionPage
200

Slot selected or validation error

Get Pickup Location Selection Page context

get

Returns context for pickup location selection. Only displayed when delivery option type is pickup location.

Preconditions:

  • Delivery option must be selected and must be pickup location type (is_pickup_location())

  • Basket must not be empty

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Responses
200

Pickup location selection page context retrieved

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
get/orders/checkout/?page=PickupLocationSelectionPage
200

Pickup location selection page context retrieved

Select Pickup Location

post

Sets the selected pickup location for the order.

Configuration:

  • DEFAULT_COUNTRY_CODE: Default country code used to populate country field in address contexts.

Pickup Location Handling:

  • Uses PickupLocationService to fetch location by remote_id

  • Creates a PickupLocationAddress object

  • Validates that the remote location exists

Next Pages:

  • Shipping option selection page

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Body
remote_idstringRequired

Remote identifier for the pickup location

billing_addressintegerRequired

Primary key of the billing address

Responses
200

Pickup location selected successfully

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
post/orders/checkout/?page=PickupLocationSelectionPage
200

Pickup location selected successfully

Get Retail Store Selection Page context

get

Returns available retail stores for click-and-collect orders. Only displayed when delivery option type is retail store.

Preconditions:

  • Delivery option must be selected and must be retail store type (is_retail_store())

  • Basket must not be empty

Retail Store Filtering:

  • If CHECKOUT_LIST_RETAIL_STORES is False, no stores are listed

  • If CHECKOUT_RETAIL_STORE_FILTERS.by_stock is True, only stores with available stock for basket items are shown

  • Otherwise, all active retail stores with click_and_collect=True are displayed

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Responses
200

Retail store selection page context retrieved

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
get/orders/checkout/?page=RetailStoreSelectionPage
200

Retail store selection page context retrieved

Select Retail Store

post

Sets the selected retail store for click-and-collect order.

Configuration:

  • CHECKOUT_LIST_RETAIL_STORES: Controls whether retail stores are listed (static setting, default: True). When False, no stores are fetched or displayed.

  • CHECKOUT_RETAIL_STORE_FILTERS: Filtering options for retail stores (default: {"by_stock": false}). When by_stock is true, only retail stores with available stock for basket items are shown. When false, all active retail stores with click_and_collect=True are displayed.

  • DEFAULT_COUNTRY_CODE: Default country code used to populate country field in address contexts.

Address Handling:

  • Creates a RetailStoreAddress object from the selected retail store

  • Uses billing address details (first name, last name) and user email

  • Sets billing_and_shipping_same to false

Next Pages:

  • Shipping option selection page

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Body
billing_addressintegerRequired

Primary key of the billing address

retail_storeintegerRequired

Primary key of the selected retail store

Responses
200

Retail store selected successfully

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
post/orders/checkout/?page=RetailStoreSelectionPage
200

Retail store selected successfully

Get Reservation Selection Page context

get

Returns available delivery time slots for retail store reservation. This is a specialised variant of SlotSelectionPage used when the selected delivery option is a retail store. The user may optionally skip the reservation by submitting skip_reservation = true.

Preconditions:

  • Basket must not be empty

  • User email must be set (user_email_not_empty)

  • A shipping address must be selected (check_address_selected)

  • A retail store must be available for reservation (check_retail_store_available)

Skip Conditions:

  • Page is skipped if a reservation has already been made (delivery_range set) or explicitly skipped (skip_reservation = true in pre-order data)

Next Pages:

  • PaymentOptionSelectionPage

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Responses
200

Reservation Selection Page context retrieved

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
get/orders/checkout/?page=ReservationSelectionPage
200

Reservation Selection Page context retrieved

Select a reservation slot or skip reservation

post

Submits a chosen retail store delivery time window, or explicitly skips reservation scheduling. If skip_reservation is true, lower and upper are not required and no delivery range is set.

Required Fields:

  • skip_reservation: Whether to skip selecting a time slot. Defaults to false.

Conditionally Required Fields (required when skip_reservation is false):

  • lower: Start of the delivery time window (ISO 8601 datetime with timezone).

  • upper: End of the delivery time window (ISO 8601 datetime with timezone).

Validation:

  • When skip_reservation is false, lower and upper are both required.

  • The submitted range must be available according to SlotService.is_delivery_range_available().

State Update:

  • pre_order.data['skip_reservation'] is set to the submitted boolean.

  • pre_order.data['delivery_range'] is set to the selected range, or null if reservation is skipped.

Backward Navigation:

  • When navigating backward, delivery_range is reset to null and skip_reservation is set to false.

Next Pages:

  • PaymentOptionSelectionPage

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Body
skip_reservationbooleanRequired

Set to true to skip reservation scheduling. When true, lower and upper are not required and no delivery range is stored. When false, both lower and upper are required.

Default: falseExample: false
lowerstring · date-timeOptional

Start of the selected reservation time window. Required when skip_reservation is false.

Example: 2026-05-01T10:00:00+03:00
upperstring · date-timeOptional

End of the selected reservation time window. Required when skip_reservation is false.

Example: 2026-05-01T12:00:00+03:00
Responses
200

Reservation selected or skipped

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
post/orders/checkout/?page=ReservationSelectionPage
200

Reservation selected or skipped

Get Delivery Bags Page context

get

Returns the delivery bags fee calculated for the current basket. This page allows users to confirm (and optionally choose the quantity of) delivery bags to include with their order. This is an independent page — submitting it does not advance the checkout flow.

Preconditions:

  • Basket must not be empty

  • DELIVERY_BAGS_CONF.is_active must be true (is_delivery_bags_active check)

Skip Conditions:

  • Page is always considered done when DELIVERY_BAGS_CONF.is_active is true (i.e., is_already_done() mirrors the is_valid() check)

Configuration: Requires DELIVERY_BAGS_CONF dynamic setting to be active. See the DELIVERY_BAGS_CONF section in Dynamic Settings above for full details.

Next Pages:

  • No further checkout page from this step (EmptyPage)

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Responses
200

Delivery Bags Page context retrieved

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
get/orders/checkout/?page=DeliveryBagsPage
200

Delivery Bags Page context retrieved

Confirm delivery bag selection

post

Accepts the delivery bag product SKU and (optionally) a quantity. Calculates the final number of bags based on the DELIVERY_BAGS_CONF settings and stores the result in pre_order.data. This is an independent page — submitting it does not advance the checkout flow.

Fields:

  • product: SKU of the bag product. Must match DELIVERY_BAGS_CONF.sku. Must be an active product with product_type = miscellaneous.

  • quantity: Number of bags requested by the user. Only applicable when DELIVERY_BAGS_CONF.is_quantity_changeable is true. Must be >= DELIVERY_BAGS_CONF.min_quantity. Defaults to 0 if omitted (falls back to min_quantity).

Quantity Calculation:

  • When is_quantity_changeable is false: quantity is auto-calculated as ceil(total_amount / per_amount), floored at min_quantity. Items with the exclude_bag_attribute_name attribute are excluded from the total amount.

  • When is_quantity_changeable is true: the submitted quantity value is used directly.

State Update:

  • pre_order.data['bags']: list of the bag product repeated bags_count times.

  • pre_order.data['bags_fee']: calculated delivery bags fee.

Backward Navigation:

  • When navigating backward, bags and bags_fee are removed from pre_order.data.

Next Pages:

  • No further checkout page (EmptyPage)

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Body
productstringRequired

SKU of the delivery bag product. Must match the SKU configured in DELIVERY_BAGS_CONF.sku. The product must be active and have product_type = miscellaneous.

Example: DELIVERY-BAG-001
quantityintegerOptional

Number of bags requested by the user. Only used when DELIVERY_BAGS_CONF.is_quantity_changeable is true. Must be greater than or equal to DELIVERY_BAGS_CONF.min_quantity. Defaults to 0 if omitted, which falls back to min_quantity. Raises a validation error if is_quantity_changeable is false and a non-zero value is submitted.

Example: 3
Responses
200

Delivery bag selection confirmed or validation error

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
post/orders/checkout/?page=DeliveryBagsPage
200

Delivery bag selection confirmed or validation error

Get Send SMS Page context (Pay on Delivery phone verification)

get

Returns the context for the phone number collection step in the pay-on-delivery flow. This page is part of the pay-on-delivery verification sequence and appears between PayOnDeliveryPaymentChoicePage and VerifySmsPage, before the user reaches PayOnDeliveryPage. The user is asked to enter their phone number to receive a one-time verification code.

Preconditions:

  • Pay-on-delivery payment option must be selected (check_pay_on_delivery_selected)

  • If the payment option has any payment_choices, one must already be selected

Skip Conditions:

  • Page is skipped when sms_verification is false in the payment option's configuration. In that case the flow proceeds directly to PayOnDeliveryPage.

Page Context:

  • verification: Whether SMS verification is enabled for this payment option. This will always be true when this page is reached (skipped otherwise).

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Responses
200

Send SMS page context retrieved

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
get/orders/checkout/?page=SendSmsPage
200

Send SMS page context retrieved

Send Pay on Delivery Verification SMS

post

Sends a one-time verification code (OTP) to the given phone number via SMS.

Required Fields:

  • phone_number: Recipient's phone number, validated against the configured phone number format (User.phone_regex).

SMS Content:

  • A 6-digit random verification code is generated and sent to the phone number.

  • If a message format is configured in the payment option's sms_config, the code is embedded in the formatted message. Otherwise the code is sent as-is.

State Changes:

  • pre_order.phone_number is set to the submitted phone number

  • pre_order.verification_code is set to the generated 6-digit code

  • pre_order.verification_sent_datetime is set to the current timestamp

Next Page: VerifySmsPage

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Body
phone_numberstringRequired

Recipient phone number for the Pay on Delivery verification SMS. Validated against the configured phone number format.

Example: +905551234567
Responses
200

Verification SMS sent successfully

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
post/orders/checkout/?page=SendSmsPage
200

Verification SMS sent successfully

Get Send Barcode SMS Page context

get

Returns the context for the barcode SMS sending step. This is an independent page — submitting it does not advance the checkout flow state.

Preconditions:

  • SMS must not have been sent within the cooldown period (check_is_sent_sms_before)

  • Request must originate from an in-store client (check_client_type_is_instore)

  • A payment option of type cash_register must be selected (check_payment_option_is_cash_register)

  • A pre-order number must have been generated (check_has_pre_order_number)

SMS Cooldown: Once an SMS is sent, the same SMS cannot be resent until the cooldown period has elapsed. The cooldown duration is configured via the ORDER_BARCODE_SENT_SMS_EXPIRATION_IN_SECONDS setting (default: 1800 seconds).

Page Context: Returns an empty page context. The only required input is the recipient phone number.

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Responses
200

Send barcode SMS page context retrieved

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
get/orders/checkout/?page=SendBarcodeSmsPage
200

Send barcode SMS page context retrieved

Send Barcode SMS to Customer

post

Sends the order barcode URL to the specified phone number via SMS. This is an independent page — it does not advance the checkout flow.

Required Fields:

  • phone_number: The recipient's phone number, validated against the configured phone number format.

SMS Content: The SMS contains a signed URL pointing to the order barcode page. The URL allows the customer to display the barcode on their own device.

Cooldown Enforcement: After a successful send, the SMS cannot be resent until the cooldown period configured by ORDER_BARCODE_SENT_SMS_EXPIRATION_IN_SECONDS has elapsed. Submitting before the cooldown expires will result in a precondition failure.

Client Type Restriction: Only in-store clients (ClientType.instore) are permitted to submit this page.

Navigation After Success: Returns to an empty (no further action) state. The checkout flow position is not changed.

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Body
phone_numberstringRequired

Recipient phone number for the barcode SMS. Validated against the configured phone number format.

Example: +905551234567
Responses
200

Barcode SMS sent successfully

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
post/orders/checkout/?page=SendBarcodeSmsPage
200

Barcode SMS sent successfully

Get Send Checkout URL SMS Page context

get

Returns the context for sending the checkout URL via SMS. This page is used when the customer does not have a QR code reader and cannot scan the barcode directly. An SMS with the checkout URL is sent instead. This is an independent page — submitting it does not advance the checkout flow.

Preconditions:

  • SMS must not have been sent within the cooldown period (check_is_sent_sms_before)

  • Request must originate from an in-store client (check_client_type_is_instore)

Difference from SendBarcodeSmsPage:

  • SendBarcodeSmsPage sends a direct link to the barcode image

  • SendCheckoutUrlSmsPage sends the checkout URL with an authentication token, allowing the customer to continue the checkout on their own device

Page Context: Returns an empty page context.

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Responses
200

Send checkout URL SMS page context retrieved

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
get/orders/checkout/?page=SendCheckoutUrlSmsPage
200

Send checkout URL SMS page context retrieved

Send Checkout URL SMS to Customer

post

Sends the checkout continuation URL to the specified phone number via SMS. This allows customers without a QR reader to open the checkout flow on their own device by tapping the link in the SMS. This is an independent page — it does not advance the checkout flow.

Required Fields:

  • phone_number: The recipient's phone number, validated against the configured phone number format.

SMS Content: The SMS contains a tokenized checkout URL. The token allows the customer to authenticate and resume the checkout session from their own device.

Cooldown Enforcement: Shares the same SMS cooldown mechanism as SendBarcodeSmsPage. The ORDER_BARCODE_SENT_SMS_EXPIRATION_IN_SECONDS setting controls the minimum interval between sends.

Client Type Restriction: Only in-store clients (ClientType.instore) are permitted to submit this page.

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Body
phone_numberstringRequired

Recipient phone number for the checkout URL SMS. Validated against the configured phone number format.

Example: +905551234567
Responses
200

Checkout URL SMS sent successfully

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
post/orders/checkout/?page=SendCheckoutUrlSmsPage
200

Checkout URL SMS sent successfully

Get Verify SMS Page context

get

Returns the context for the SMS verification step. The user enters the 6-digit code that was sent to their phone number on the SendSmsPage.

Preconditions:

  • An SMS must have been sent — pre_order.phone_number and pre_order.verification_code must both be set (check_sms_sent)

Skip Conditions:

  • Page is skipped when sms_verification is false in the payment option's configuration.

Page Context:

  • verification_sent_datetime: ISO 8601 timestamp of when the SMS was sent

  • seconds_left: Remaining seconds before the code expires (based on verify_timeout, default 180 seconds)

  • retry: Whether a verification code has been issued (always true when page is reached)

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Responses
200

Verify SMS page context retrieved

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
get/orders/checkout/?page=VerifySmsPage
200

Verify SMS page context retrieved

Submit SMS Verification Code

post

Verifies the code entered by the user against the code that was sent via SMS.

Required Fields:

  • verify_code: The 6-digit numeric code the user received via SMS. Must consist of exactly 6 digits.

Validation:

  • The entered code must match pre_order.verification_code

  • The code must be submitted before the timeout expires. Timeout is configured via verify_timeout in the payment option's config (default: 180 seconds).

  • If the timeout has elapsed, a validation error is returned and the user must go back to SendSmsPage to request a new code.

State Changes:

  • pre_order.entered_code is set to the submitted code

Next Page: PayOnDeliveryPage

Header parameters
x-requested-withstring · enumRequired

Required header for AJAX requests. Must be set to XMLHttpRequest for all checkout requests.

Default: XMLHttpRequestPossible values:
CookiestringOptional

Session cookie header (e.g. sessionid=abc123 or osessionid=<session_id>)

Body
verify_codestringRequired

The 6-digit numeric verification code sent via SMS for Pay on Delivery verification. Must consist of exactly 6 digits. The code is validated against the stored pre_order.verification_code and must be submitted before the verify_timeout (default: 180 seconds) elapses.

Example: 483921Pattern: ^\d{6}$
Responses
200

SMS verification result

application/json
errorsone of · nullableOptional
or
string[]Optional
template_namestringOptional
post/orders/checkout/?page=VerifySmsPage
200

SMS verification result

Last updated

Was this helpful?