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

Basket

Basket stores the items that the user wants to purchase. Users can have multiple active baskets with different segment_remote_id. Users can not add products to the basket other than its own division.

After finishing the shopping, the user can name and save the basket in order to create a quotation later. Upon saving the basket, the status of the basket changes to draft. Users can load the basket any time and continue shopping.

The basket becomes submitted when the user issues a quotation request.

Add Product to Basket

Increase quantity if product is already in the basket, otherwise query commerce api over product_remote_id to get product details and add it.

Example Request

curl --request POST --location 'https://{COMMERCE_URL}/b2b/basket/' \
--header 'Content-Type: application/json' \
--header 'Authorization: Token {token}' \
--data '{
    "product_remote_id": 1,
    "division": 10,
    "quantity": 3
}'

Basket items are grouped by product_remote_id which is the id information of the product in the Commerce app. divisions list contains the divisions that the product is added for. total_amount in the first level is the total amount of the basket item. total_amount in basket_items is the total amount of the product of all divisions.

Example Response (200 OK)

{
  "id": 7,
  "total_amount": "81.65",
  "total_quantity": 6,
  "basket_items": [
    {
      "total_amount": "31.65",
      "price": "10.55",
      "quantity": 3,
      "divisions": [
        {
          "id": 11,
          "name": "sub",
          "erp_code": "ERP02",
          "quantity": 2
        },
        {
          "id": 10,
          "name": "main",
          "erp_code": "ERP01",
          "quantity": 1
        }
      ],
      "product": {
        "sku": "SKU01"
      },
      "product_remote_id": 1
    },
    {
      "total_amount": "40.00",
      "price": "20.00",
      "quantity": 2,
      "divisions": [
        {
          "id": 11,
          "name": "sub",
          "erp_code": "ERP02",
          "quantity": 2
        }
      ],
      "product": {
        "sku": "SKU02"
      },
      "product_remote_id": 2
    },
    {
      "total_amount": "10.00",
      "price": "10.00",
      "quantity": 1,
      "divisions": [
        {
          "id": 10,
          "name": "main",
          "erp_code": "ERP01",
          "quantity": 1
        }
      ],
      "product": {
        "sku": "SKU03",
        "name": "product name",
        "price": "10.00",
        "currency": "try",
        "variants": {
          "color": "red"
        },
        "product_image": "http://example.com/image.jpg"
      },
      "product_remote_id": 3
    }
  ],
  "segment_remote_id": null
}

Remove/Update Product From Basket

Remove or update the product in the basket. If quantity is set to 0, the product is removed from the basket.

Example Request

Example Response (200 OK)

List Basket

List active basket of the user.

The listing can be narrowed down to the items carrying certain product attributes. Any attribute the storefront exposes as a filter can be used as a query parameter, and the values are the attribute codes returned by Basket Filter Attributes.

Repeating a parameter matches any of its values, while different parameters must all match. The request below therefore returns the items that are winter or summer and black:

Filtering is not persisted, so the parameters have to be sent again on every request that should stay filtered. Only basket_items is narrowed; total_amount and total_quantity keep describing the whole basket. A value that no longer exists simply matches nothing, and a parameter that is not a filterable attribute is ignored.

Example Request

Example Request (filtered)

Example Response (200 OK)

Basket Filter Attributes

Break the basket down by the product attributes the storefront exposes as filters, such as season, colour or product hierarchy.

Every attribute is returned with the choices a client can offer, and every choice carries how much of the basket it covers. Choices the basket holds come first with their quantity and amount, and the remaining choices follow with zero, so that a filter panel can be rendered from a single response. The value of a choice is what List Basket expects as a filter value, while label is the text to display.

Labels are resolved in the language of the storefront session, so switching the language relabels the same choices. The value of a choice never changes with the language, which is why a filter built from it keeps working across languages. A basket can also hold a value the storefront no longer offers, for example a season that has since left the catalogue; such a choice is still listed and can still be filtered by, but its label falls back to the raw value.

Send attributes to limit the response to certain attributes, as a comma separated list of attribute keys. Each attribute costs a separate aggregate query, so requesting only the ones being rendered keeps the response cheaper. Omitting the parameter returns every filterable attribute.

The same attribute filters accepted by List Basket can be sent here as well, in which case the quantities describe the filtered items. The attribute being filtered on keeps all of its choices, but the choices it does not match drop to zero, which is why a filter panel is better built from an unfiltered request.

Items that carry no value for an attribute are left out, as there is nothing to select for them. Their quantities are therefore missing from that attribute's totals.

Requesting an attribute the storefront does not expose as a filter returns 406 with the baskets_113 error code.

Which attributes are filterable is read from the storefront. While the storefront cannot be reached, this endpoint responds with an empty object, requesting a specific attribute returns 406, and the attribute filters on List Basket are ignored rather than applied.

Example Request

Example Response (200 OK)

Example Response (406 Not Acceptable)

Delete Basket Item

Delete the basket items that match the given product_remote_id from the basket.

Example Request

Example Response (200 OK)

List Draft Baskets

List draft baskets of the user.

Example Request

Example Response (200 OK)

Save Basket

Save the basket with the given name. Saved baskets are changed to draft status.

Example Request

Load Basket

Load the basket with the given id. Loaded baskets are changed to active status.

Example Request

Import Basket

Allows bulk addition of products to the basket by uploading a file.

Example Request

Example Response (200 OK)

File Fields

Field
Description

product__sku

The SKU information of the product to be added to the basket.

quantity

The quantity of the product to be added to the basket.

division__erp_code

The ERP code information of the division.

Export Basket

Exports products added to the basket as a file. Returns a cache key to track the export status.

Request Parameters

Parameter
Description

fields

Specifies the fields to be included in the export file. Available fields: product__sku, division, division__erp_code, division__name, price, quantity, product_remote_id

format

Specifies the file format for the export. Acceptable values are csv and xls. The default is xls.

status_cache_key

A query parameter to track the status of the file export using the cache key returned from the initial request.

Example Request

Example Response (200 OK)

Export File Status

Checks the status of an export file using the cache key obtained from the export request. Provides information on whether the file is ready for download.

Example Request

Example Response

Response Parameters

Field
Description

is_ready

Indicates whether the file is ready for download (true or false).

url

The URL to download the exported file once it is ready.

status

Provides the current status of the export process (e.g., waiting, completed).

Last updated

Was this helpful?