# BigCommerce

> Run a BigCommerce store from a workflow: search and edit the catalogue and the categories it is filed under, read the variants shoppers actually buy, manage customer accounts, and place, read and progress orders. Works with any BigCommerce store, sandbox or live.

App · E-Commerce · 20 actions. Web page: https://docs.lodol.com/docs/integrations/bigcommerce

## Actions

### Create category

Add a category to the catalogue. Give it a parent to nest it under an existing category, or a tree to put it at the top level - 'List categories' reports both for every category the store already has. Names are capped at 50 characters and categories can be nested eight deep.

**Inputs**

- Name (`name`, text, required): The category's name, as shoppers see it. BigCommerce caps it at 50 characters.
- Parent category (`parent_id`, text): The category to nest this one under. Leave blank and give a tree ID instead to create a top-level category.
- Tree ID (`tree_id`, text): The tree to put a top-level category in. Read it from 'List categories' rather than assuming: it is 1 on most single-storefront stores but not guaranteed to be.
- Description (`description`, text): The text shown at the top of the category's own page.
- Visible in the storefront (`is_visible`, true/false): Whether the category appears in the store's navigation and can be browsed.
- Sort order (`sort_order`, number): Where the category sits among its siblings. Lower comes first.
- URL path (`url_path`, text): The category's own web address, such as '/summer-sale/'. BigCommerce needs it to be unique: if it is already taken the category is still saved but keeps its generated address.
- Image URL (`image_url`, text): A publicly reachable image to show for the category. BigCommerce downloads it into the store.
- Default product order (`default_product_sort`, text): How products are ordered on the category's own page. One of: `use_store_settings` (Use the store's setting), `featured` (Featured products first), `newest` (Newest first), `best_selling` (Best selling first), `alpha_asc` (Name, A to Z), `alpha_desc` (Name, Z to A), `avg_customer_review` (Highest rated first), `price_asc` (Price, low to high), `price_desc` (Price, high to low).
- Page title (`page_title`, text): The title of the category's page, for search engines.
- Meta description (`meta_description`, text): The summary search engines show under the page title.

**Outputs**

- `category_id` (number)
- `category_uuid` (text)
- `default_product_sort` (text)
- `description` (text)
- `image_url` (text)
- `is_visible` (true/false)
- `layout_file` (text)
- `meta_description` (text)
- `meta_keywords` (list)
- `name` (text)
- `page_title` (text)
- `parent_id` (number)
- `search_keywords` (text)
- `sort_order` (number)
- `tree_id` (number)
- `url` (object)
- `views` (number)

**Example output**

```json
{
  "category_id": 23,
  "category_uuid": "0f6c6d1a-6c3e-4f2e-9c58-6a1b2c3d4e5f",
  "default_product_sort": "use_store_settings",
  "description": "<p>Everything for the kitchen table.</p>",
  "image_url": "",
  "is_visible": true,
  "meta_description": "Mugs, plates and bowls.",
  "meta_keywords": [],
  "name": "Kitchen",
  "page_title": "Kitchen",
  "parent_id": 0,
  "search_keywords": "",
  "sort_order": 2,
  "tree_id": 1,
  "url": {
    "is_customized": false,
    "path": "/kitchen/"
  },
  "views": 0
}
```

### Create customer

Add a customer account to the store, optionally with a saved address. The email address is their sign-in and has to be unique across the store. A saved address needs a street, a city and a two-letter country code together, or none of them at all.

**Inputs**

- Email (`email`, text, required): The customer's email address, which BigCommerce uses as their sign-in and requires to be unique across the store.
- First name (`first_name`, text, required): The customer's first name.
- Last name (`last_name`, text, required): The customer's last name.
- Company (`company`, text): The company the customer buys for.
- Phone (`phone`, text): The customer's phone number.
- Notes (`notes`, text): A private note about the customer, seen only in admin.
- Customer group ID (`customer_group_id`, text): The numeric ID of the customer group to put them in, which decides the pricing and discounts they see.
- Tax exempt category (`tax_exempt_category`, text): The store's own code for this customer's tax exemption, if they have one.
- Accepts review and abandoned-cart emails (`accepts_marketing`, true/false): Whether BigCommerce may email the customer product review requests and abandoned cart reminders.
- Street address (`address_line_1`, text): The first line of the customer's saved address. Needs the city and country below with it.
- Street address line 2 (`address_line_2`, text): Apartment, suite or unit.
- City (`city`, text): City on the saved address.
- State or province (`state_or_province`, text): State, province or region on the saved address.
- Postal code (`postal_code`, text): Postal or ZIP code on the saved address.
- Country code (`country_code`, text): Country on the saved address, as a two-letter ISO 3166-1 code such as US, GB or DE.
- Address phone (`address_phone`, text): A phone number for this address.
- Address type (`address_type`, text): Whether the address is a home or a business. One of: `residential`, `commercial`.

**Outputs**

- `accepts_product_review_abandoned_cart_emails` (true/false)
- `addresses` (list)
- `attributes` (list)
- `authentication` (object)
- `channel_ids` (list)
- `company` (text)
- `customer_group_id` (number)
- `date_created` (text)
- `date_modified` (text)
- `email` (text)
- `first_name` (text)
- `form_fields` (list)
- `id` (number)
- `last_name` (text)
- `notes` (text)
- `origin_channel_id` (number)
- `phone` (text)
- `registration_ip_address` (text)
- `segment_ids` (list)
- `shopper_profile_id` (text)
- `store_credit_amounts` (list)
- `tax_exempt_category` (text)

**Example output**

```json
{
  "accepts_product_review_abandoned_cart_emails": true,
  "addresses": [
    {
      "address1": "12 Bridge Street",
      "address_type": "residential",
      "city": "Cambridge",
      "country": "United Kingdom",
      "country_code": "GB",
      "customer_id": 27,
      "first_name": "Ada",
      "id": 44,
      "last_name": "Lovelace",
      "postal_code": "CB2 1UJ",
      "state_or_province": "Cambridgeshire"
    }
  ],
  "channel_ids": [
    1
  ],
  "company": "Analytical Engines",
  "customer_group_id": 0,
  "date_created": "2026-05-02T14:31:07+00:00",
  "date_modified": "2026-09-01T08:22:19+00:00",
  "email": "ada@example.com",
  "first_name": "Ada",
  "id": 27,
  "last_name": "Lovelace",
  "notes": "",
  "origin_channel_id": 1,
  "phone": "+44 1223 000000",
  "registration_ip_address": "",
  "tax_exempt_category": ""
}
```

### Create order

Place an order in the store for one catalogue product or one custom item, with a billing address and an optional status. Leave the customer blank for a guest order, which is what a checkout by someone without an account produces. The postcode is the only part of the address BigCommerce insists on.

**Inputs**

- Product ID (`product_id`, text): The catalogue product to order. Leave blank to order a custom item instead, using the two fields below.
- Quantity (`quantity`, number): How many to order. One when left blank. At least 1.
- Custom item name (`item_name`, text): Order something that is not in the catalogue, by naming it here instead of giving a product ID.
- Custom item price (`item_price`, text): What to charge for the custom item, per unit, as a plain number in the store's own currency. Required with a custom item, since BigCommerce has no price to look up.
- Customer ID (`customer_id`, text): Whose order this is. Leave blank to record it as a guest order.
- Status (`status_id`, text): What state to create the order in. BigCommerce uses 'Incomplete' when left blank, which keeps the order out of the store's own order list until it is moved on.
- Billing postcode (`billing_zip`, text, required): The postal or ZIP code on the billing address. This is the one part of the address BigCommerce insists on, and it must be two characters or more.
- Billing first name (`billing_first_name`, text): First name on the billing address.
- Billing last name (`billing_last_name`, text): Last name on the billing address.
- Billing company (`billing_company`, text): Company name on the billing address.
- Billing street address (`billing_street_1`, text): Street address on the billing address.
- Billing street address line 2 (`billing_street_2`, text): Apartment, suite or unit on the billing address.
- Billing city (`billing_city`, text): City on the billing address.
- Billing state (`billing_state`, text): State or province on the billing address.
- Billing country code (`billing_country_iso2`, text): Country on the billing address, as a two-letter ISO 3166-1 code such as US, GB or DE.
- Billing email (`billing_email`, text): Email address on the billing address.
- Billing phone (`billing_phone`, text): Phone number on the billing address.
- Staff notes (`staff_notes`, text): A note on the order, seen only in admin.
- Customer message (`customer_message`, text): A note from the buyer, as left at checkout.

**Outputs**

- `backorder_shipping_expectation_message` (text)
- `base_handling_cost` (text)
- `base_shipping_cost` (text)
- `base_wrapping_cost` (text)
- `billing_address` (object)
- `cart_id` (text)
- `channel_id` (number)
- `consignments` (object)
- `coupon_discount` (text)
- `coupons` (object)
- `currency_code` (text)
- `currency_exchange_rate` (text)
- `currency_id` (number)
- `customer_id` (number)
- `customer_locale` (text)
- `customer_message` (text)
- `date_created` (text)
- `date_modified` (text)
- `date_shipped` (text)
- `default_currency_code` (text)
- `default_currency_id` (number)
- `discount_amount` (text)
- `ebay_order_id` (text)
- `external_id` (text)
- `external_merchant_id` (text)
- `external_order_id` (text)
- `external_source` (text)
- `fees` (object)
- `geoip_country` (text)
- `geoip_country_iso2` (text)
- `gift_certificate_amount` (text)
- `handling_cost_ex_tax` (text)
- `handling_cost_inc_tax` (text)
- `handling_cost_tax` (text)
- `handling_cost_tax_class_id` (number)
- `id` (number)
- `ip_address` (text)
- `ip_address_v6` (text)
- `is_deleted` (true/false)
- `is_email_opt_in` (true/false)
- `is_tax_inclusive_pricing` (true/false)
- `items_shipped` (number)
- `items_total` (number)
- `order_is_digital` (true/false)
- `order_source` (text)
- `payment_method` (text)
- `payment_provider_id` (text)
- `payment_status` (text)
- `products` (object)
- `refunded_amount` (text)
- `shipping_address_count` (number)
- `shipping_addresses` (object)
- `shipping_cost_ex_tax` (text)
- `shipping_cost_inc_tax` (text)
- `shipping_cost_tax` (text)
- `shipping_cost_tax_class_id` (number)
- `staff_notes` (text)
- `status` (text)
- `status_id` (number)
- `store_credit_amount` (text)
- `store_default_currency_code` (text)
- `store_default_to_transactional_exchange_rate` (text)
- `subtotal_ex_tax` (text)
- `subtotal_inc_tax` (text)
- `subtotal_tax` (text)
- `tax_provider_id` (text)
- `total_ex_tax` (text)
- `total_inc_tax` (text)
- `total_tax` (text)
- `wrapping_cost_ex_tax` (text)
- `wrapping_cost_inc_tax` (text)
- `wrapping_cost_tax` (text)
- `wrapping_cost_tax_class_id` (number)

**Example output**

```json
{
  "billing_address": {
    "city": "Cambridge",
    "country": "United Kingdom",
    "country_iso2": "GB",
    "email": "ada@example.com",
    "first_name": "Ada",
    "last_name": "Lovelace",
    "state": "Cambridgeshire",
    "street_1": "12 Bridge Street",
    "zip": "CB2 1UJ"
  },
  "channel_id": 1,
  "coupons": {
    "resource": "/orders/104/coupons",
    "url": "https://api.bigcommerce.com/stores/abc123xyz/v2/orders/104/coupons"
  },
  "currency_code": "USD",
  "currency_id": 1,
  "customer_id": 27,
  "customer_message": "Please leave with a neighbour.",
  "date_created": "Tue, 01 Sep 2026 08:24:12 +0000",
  "date_modified": "Tue, 01 Sep 2026 08:31:44 +0000",
  "default_currency_code": "USD",
  "discount_amount": "0.0000",
  "id": 104,
  "is_deleted": false,
  "items_shipped": 0,
  "items_total": 2,
  "order_is_digital": false,
  "payment_method": "Manual",
  "payment_status": "",
  "products": {
    "resource": "/orders/104/products",
    "url": "https://api.bigcommerce.com/stores/abc123xyz/v2/orders/104/products"
  },
  "refunded_amount": "0.0000",
  "shipping_address_count": 1,
  "shipping_addresses": {
    "resource": "/orders/104/shippingaddresses",
    "url": "https://api.bigcommerce.com/stores/abc123xyz/v2/orders/104/shippingaddresses"
  },
  "staff_notes": "Placed through the API.",
  "status": "Awaiting Fulfillment",
  "status_id": 11,
  "subtotal_ex_tax": "48.0000",
  "subtotal_inc_tax": "48.0000",
  "total_ex_tax": "52.5000",
  "total_inc_tax": "52.5000",
  "total_tax": "0.0000"
}
```

### Create product

Add a product to the catalogue: name, type and price, plus SKU, description, stock tracking and level, categories, brand, sale and retail prices, dimensions, barcodes and page metadata. The name and the SKU both have to be unique across the store.

**Inputs**

- Name (`name`, text, required): The product's name, as shoppers see it. BigCommerce requires it to be unique across the catalogue, and caps it at 250 characters.
- Type (`product_type`, text, required): Whether the product is shipped or downloaded. BigCommerce has no default for this, so it has to be chosen when the product is created. One of: `physical` (Physical - shipped to the customer), `digital` (Digital - downloaded by the customer).
- Price (`price`, text, required): The product's price, as a plain number in the store's own currency - 19.99, not $19.99. Whether that figure includes tax is the store's setting; 'Get store information' reports it as 'is_price_entered_with_tax'.
- Weight (`weight`, text): The product's weight, as a plain number in the store's own weight unit. BigCommerce demands one even for a digital product, so leaving it blank sends 0.
- SKU (`sku`, text): Your own stock-keeping code. BigCommerce refuses a duplicate, so it has to be unique across the store.
- Description (`description`, text): The full product description. HTML is allowed.
- Visible in the storefront (`is_visible`, true/false): Whether shoppers can see the product at all.
- Featured (`is_featured`, true/false): Show the product in the store's featured list.
- Availability (`availability`, text): Whether the product can be bought, and how. One of: `available` (Available to buy), `disabled` (Not available to buy), `preorder` (Pre-order).
- Condition (`condition`, text): What condition the product is in. Only shown to shoppers when the product is set to show it. One of: `New`, `Used`, `Refurbished`.
- Stock tracking (`inventory_tracking`, text): Where this product's stock is counted. The stock level below only applies when it is tracked on the product; a product tracked on its variants keeps a level per variant instead. One of: `none` (Do not track stock), `product` (Track stock on the product), `variant` (Track stock on each variant).
- Stock level (`inventory_level`, number): How many are in stock. Needs stock tracking to be on. At least 0.
- Low stock warning level (`inventory_warning_level`, number): The stock level at which BigCommerce calls the product low in stock. At least 0.
- Categories (`category_ids`, list): Which categories to file the product under. Pick from the store's categories, or type a category ID.
- Brand (`brand_id`, text): Which brand the product belongs to. Pick from the store's brands, or type a brand ID.
- Sale price (`sale_price`, text): A discounted price, shown alongside the normal one. Leave blank for no sale.
- Retail price (MSRP) (`retail_price`, text): The recommended retail price, shown struck through beside the store's own price.
- UPC/EAN (`upc`, text): The product's barcode number.
- Manufacturer part number (`mpn`, text): The manufacturer's own code for the product.
- Width (`width`, text): Width, in the store's own dimension unit.
- Height (`height`, text): Height, in the store's own dimension unit.
- Depth (`depth`, text): Depth, in the store's own dimension unit.
- Page title (`page_title`, text): The title of the product's own page, for search engines. The product name is used when this is blank.
- Meta description (`meta_description`, text): The summary search engines show under the page title.

**Outputs**

- `availability` (text)
- `availability_description` (text)
- `base_variant_id` (number)
- `bin_picking_number` (text)
- `brand_id` (number)
- `brand_name` (text)
- `bulk_pricing_rules` (list)
- `calculated_price` (number)
- `categories` (list)
- `condition` (text)
- `cost_price` (number)
- `custom_fields` (list)
- `custom_url` (object)
- `date_created` (text)
- `date_last_imported` (text)
- `date_modified` (text)
- `depth` (number)
- `description` (text)
- `fixed_cost_shipping_price` (number)
- `gift_wrapping_options_list` (list)
- `gift_wrapping_options_type` (text)
- `gtin` (text)
- `height` (number)
- `id` (number)
- `images` (list)
- `inventory_level` (number)
- `inventory_tracking` (text)
- `inventory_warning_level` (number)
- `is_condition_shown` (true/false)
- `is_featured` (true/false)
- `is_free_shipping` (true/false)
- `is_preorder_only` (true/false)
- `is_price_hidden` (true/false)
- `is_visible` (true/false)
- `layout_file` (text)
- `map_price` (number)
- `meta_description` (text)
- `meta_keywords` (list)
- `mpn` (text)
- `name` (text)
- `open_graph_description` (text)
- `open_graph_title` (text)
- `open_graph_type` (text)
- `open_graph_use_image` (true/false)
- `open_graph_use_meta_description` (true/false)
- `open_graph_use_product_name` (true/false)
- `order_quantity_maximum` (number)
- `order_quantity_minimum` (number)
- `page_title` (text)
- `preorder_message` (text)
- `preorder_release_date` (text)
- `price` (number)
- `price_hidden_label` (text)
- `product_tax_code` (text)
- `related_products` (list)
- `retail_price` (number)
- `reviews_count` (number)
- `reviews_rating_sum` (number)
- `sale_price` (number)
- `search_keywords` (text)
- `sku` (text)
- `sort_order` (number)
- `tax_class_id` (number)
- `total_sold` (number)
- `type` (text)
- `upc` (text)
- `variants` (list)
- `videos` (list)
- `view_count` (number)
- `warranty` (text)
- `weight` (number)
- `width` (number)

**Example output**

```json
{
  "availability": "available",
  "base_variant_id": 401,
  "brand_id": 38,
  "calculated_price": 24,
  "categories": [
    23
  ],
  "condition": "New",
  "cost_price": 11,
  "custom_url": {
    "is_customized": false,
    "url": "/hand-thrown-mug/"
  },
  "date_created": "2026-08-14T09:12:44+00:00",
  "date_modified": "2026-09-02T16:04:01+00:00",
  "depth": 9,
  "description": "<p>Stoneware, glazed inside and out.</p>",
  "height": 9,
  "id": 112,
  "inventory_level": 18,
  "inventory_tracking": "product",
  "inventory_warning_level": 3,
  "is_featured": false,
  "is_visible": true,
  "meta_description": "A 350ml stoneware mug, thrown and glazed by hand.",
  "mpn": "MUG350",
  "name": "Hand-thrown mug",
  "page_title": "Hand-thrown stoneware mug",
  "price": 28,
  "retail_price": 32,
  "reviews_count": 15,
  "reviews_rating_sum": 72,
  "sale_price": 24,
  "sku": "MUG-350",
  "total_sold": 63,
  "type": "physical",
  "upc": "5012345678900",
  "weight": 0.4,
  "width": 9
}
```

### Delete category

Remove one or more categories from the catalogue. Products filed under a deleted category are not deleted with it - they are left uncategorised. This cannot be undone, and at least one ID has to be named: BigCommerce takes these as a filter, so an empty one would not mean 'nothing'.

**Inputs**

- Categories (`category_ids`, list, required): The categories to remove. Pick from the store's categories, or type their IDs.

**Outputs**

- `category_ids` (list)
- `deleted` (true/false)
- `failed` (number)
- `success` (number)
- `total` (number)

**Example output**

```json
{
  "category_ids": [
    23
  ],
  "deleted": true,
  "failed": 0,
  "success": 1,
  "total": 1
}
```

### Delete customer

Remove one or more customer accounts and their saved addresses. Orders they placed stay in the store. This cannot be undone, and at least one ID has to be named: BigCommerce takes these as a filter and answers a filterless delete with a success that changed nothing.

**Inputs**

- Customer IDs (`customer_ids`, list, required): The numeric IDs of the customers to remove. 'List customers' returns each as 'id'.

**Outputs**

- `customer_ids` (list)
- `deleted` (true/false)

**Example output**

```json
{
  "customer_ids": [
    27
  ],
  "deleted": true
}
```

### Delete product

Remove a product from the catalogue, along with its variants, images and options. BigCommerce has no trash and no restore, so this cannot be undone - hide a product instead by turning off 'Visible in the storefront' with 'Update product'. Orders that already include the product keep their own copy of it.

**Inputs**

- Product ID (`product_id`, text, required): The numeric ID of the product to remove.

**Outputs**

- `deleted` (true/false)
- `product_id` (number)

**Example output**

```json
{
  "deleted": true,
  "product_id": 112
}
```

### Get order

Read one order by its number: its status, every subtotal, tax, shipping and handling figure, the currency it was placed in, the payment method and status, the billing address, and the notes the buyer and staff left. Amounts come back as strings, which is how BigCommerce sends them.

**Inputs**

- Order ID (`order_id`, text, required): The order's number. 'List orders' returns it as 'id', and it is the number shown against the order in Orders > View.

**Outputs**

- `backorder_shipping_expectation_message` (text)
- `base_handling_cost` (text)
- `base_shipping_cost` (text)
- `base_wrapping_cost` (text)
- `billing_address` (object)
- `cart_id` (text)
- `channel_id` (number)
- `consignments` (object)
- `coupon_discount` (text)
- `coupons` (object)
- `currency_code` (text)
- `currency_exchange_rate` (text)
- `currency_id` (number)
- `customer_id` (number)
- `customer_locale` (text)
- `customer_message` (text)
- `date_created` (text)
- `date_modified` (text)
- `date_shipped` (text)
- `default_currency_code` (text)
- `default_currency_id` (number)
- `discount_amount` (text)
- `ebay_order_id` (text)
- `external_id` (text)
- `external_merchant_id` (text)
- `external_order_id` (text)
- `external_source` (text)
- `fees` (object)
- `geoip_country` (text)
- `geoip_country_iso2` (text)
- `gift_certificate_amount` (text)
- `handling_cost_ex_tax` (text)
- `handling_cost_inc_tax` (text)
- `handling_cost_tax` (text)
- `handling_cost_tax_class_id` (number)
- `id` (number)
- `ip_address` (text)
- `ip_address_v6` (text)
- `is_deleted` (true/false)
- `is_email_opt_in` (true/false)
- `is_tax_inclusive_pricing` (true/false)
- `items_shipped` (number)
- `items_total` (number)
- `order_is_digital` (true/false)
- `order_source` (text)
- `payment_method` (text)
- `payment_provider_id` (text)
- `payment_status` (text)
- `products` (object)
- `refunded_amount` (text)
- `shipping_address_count` (number)
- `shipping_addresses` (object)
- `shipping_cost_ex_tax` (text)
- `shipping_cost_inc_tax` (text)
- `shipping_cost_tax` (text)
- `shipping_cost_tax_class_id` (number)
- `staff_notes` (text)
- `status` (text)
- `status_id` (number)
- `store_credit_amount` (text)
- `store_default_currency_code` (text)
- `store_default_to_transactional_exchange_rate` (text)
- `subtotal_ex_tax` (text)
- `subtotal_inc_tax` (text)
- `subtotal_tax` (text)
- `tax_provider_id` (text)
- `total_ex_tax` (text)
- `total_inc_tax` (text)
- `total_tax` (text)
- `wrapping_cost_ex_tax` (text)
- `wrapping_cost_inc_tax` (text)
- `wrapping_cost_tax` (text)
- `wrapping_cost_tax_class_id` (number)

**Example output**

```json
{
  "billing_address": {
    "city": "Cambridge",
    "country": "United Kingdom",
    "country_iso2": "GB",
    "email": "ada@example.com",
    "first_name": "Ada",
    "last_name": "Lovelace",
    "state": "Cambridgeshire",
    "street_1": "12 Bridge Street",
    "zip": "CB2 1UJ"
  },
  "channel_id": 1,
  "coupons": {
    "resource": "/orders/104/coupons",
    "url": "https://api.bigcommerce.com/stores/abc123xyz/v2/orders/104/coupons"
  },
  "currency_code": "USD",
  "currency_id": 1,
  "customer_id": 27,
  "customer_message": "Please leave with a neighbour.",
  "date_created": "Tue, 01 Sep 2026 08:24:12 +0000",
  "date_modified": "Tue, 01 Sep 2026 08:31:44 +0000",
  "default_currency_code": "USD",
  "discount_amount": "0.0000",
  "id": 104,
  "is_deleted": false,
  "items_shipped": 0,
  "items_total": 2,
  "order_is_digital": false,
  "payment_method": "Manual",
  "payment_status": "",
  "products": {
    "resource": "/orders/104/products",
    "url": "https://api.bigcommerce.com/stores/abc123xyz/v2/orders/104/products"
  },
  "refunded_amount": "0.0000",
  "shipping_address_count": 1,
  "shipping_addresses": {
    "resource": "/orders/104/shippingaddresses",
    "url": "https://api.bigcommerce.com/stores/abc123xyz/v2/orders/104/shippingaddresses"
  },
  "staff_notes": "Placed through the API.",
  "status": "Awaiting Fulfillment",
  "status_id": 11,
  "subtotal_ex_tax": "48.0000",
  "subtotal_inc_tax": "48.0000",
  "total_ex_tax": "52.5000",
  "total_inc_tax": "52.5000",
  "total_tax": "0.0000"
}
```

### Get product

Read one product by its ID: name, description, SKU, every price, stock, dimensions, categories, brand, search identifiers and review totals - plus its images, variants, custom fields and options if you ask for them.

**Inputs**

- Product ID (`product_id`, text, required): The product's numeric ID. 'List products' returns it as 'id', and it is the number in the control panel URL when you edit a product.
- Also include (`include`, list): Sub-resources to return with the product. One or more of: `variants`, `images`, `primary_image` (Primary image), `videos`, `custom_fields` (Custom fields), `bulk_pricing_rules` (Bulk pricing rules), `modifiers`, `options`, `channels`, `parent_relations` (Parent relations), `reviews`.

**Outputs**

- `availability` (text)
- `availability_description` (text)
- `base_variant_id` (number)
- `bin_picking_number` (text)
- `brand_id` (number)
- `brand_name` (text)
- `bulk_pricing_rules` (list)
- `calculated_price` (number)
- `categories` (list)
- `condition` (text)
- `cost_price` (number)
- `custom_fields` (list)
- `custom_url` (object)
- `date_created` (text)
- `date_last_imported` (text)
- `date_modified` (text)
- `depth` (number)
- `description` (text)
- `fixed_cost_shipping_price` (number)
- `gift_wrapping_options_list` (list)
- `gift_wrapping_options_type` (text)
- `gtin` (text)
- `height` (number)
- `id` (number)
- `images` (list)
- `inventory_level` (number)
- `inventory_tracking` (text)
- `inventory_warning_level` (number)
- `is_condition_shown` (true/false)
- `is_featured` (true/false)
- `is_free_shipping` (true/false)
- `is_preorder_only` (true/false)
- `is_price_hidden` (true/false)
- `is_visible` (true/false)
- `layout_file` (text)
- `map_price` (number)
- `meta_description` (text)
- `meta_keywords` (list)
- `mpn` (text)
- `name` (text)
- `open_graph_description` (text)
- `open_graph_title` (text)
- `open_graph_type` (text)
- `open_graph_use_image` (true/false)
- `open_graph_use_meta_description` (true/false)
- `open_graph_use_product_name` (true/false)
- `order_quantity_maximum` (number)
- `order_quantity_minimum` (number)
- `page_title` (text)
- `preorder_message` (text)
- `preorder_release_date` (text)
- `price` (number)
- `price_hidden_label` (text)
- `product_tax_code` (text)
- `related_products` (list)
- `retail_price` (number)
- `reviews_count` (number)
- `reviews_rating_sum` (number)
- `sale_price` (number)
- `search_keywords` (text)
- `sku` (text)
- `sort_order` (number)
- `tax_class_id` (number)
- `total_sold` (number)
- `type` (text)
- `upc` (text)
- `variants` (list)
- `videos` (list)
- `view_count` (number)
- `warranty` (text)
- `weight` (number)
- `width` (number)

**Example output**

```json
{
  "availability": "available",
  "base_variant_id": 401,
  "brand_id": 38,
  "calculated_price": 24,
  "categories": [
    23
  ],
  "condition": "New",
  "cost_price": 11,
  "custom_url": {
    "is_customized": false,
    "url": "/hand-thrown-mug/"
  },
  "date_created": "2026-08-14T09:12:44+00:00",
  "date_modified": "2026-09-02T16:04:01+00:00",
  "depth": 9,
  "description": "<p>Stoneware, glazed inside and out.</p>",
  "height": 9,
  "id": 112,
  "inventory_level": 18,
  "inventory_tracking": "product",
  "inventory_warning_level": 3,
  "is_featured": false,
  "is_visible": true,
  "meta_description": "A 350ml stoneware mug, thrown and glazed by hand.",
  "mpn": "MUG350",
  "name": "Hand-thrown mug",
  "page_title": "Hand-thrown stoneware mug",
  "price": 28,
  "retail_price": 32,
  "reviews_count": 15,
  "reviews_rating_sum": 72,
  "sale_price": 24,
  "sku": "MUG-350",
  "total_sold": 63,
  "type": "physical",
  "upc": "5012345678900",
  "weight": 0.4,
  "width": 9
}
```

### Get store information

The store's own settings: its name, domain, status, country and timezone, the currency and how amounts are formatted, the weight and dimension units the catalogue is measured in, the plan it is on, and its default channel. Two of these decide how the other actions behave - 'is_price_entered_with_tax' says whether a price you send includes tax, and 'default_channel_id' is the channel an order lands on.

**Inputs**: None.

**Outputs**

- `account_uuid` (text)
- `active_comparison_modules` (list)
- `address` (text)
- `admin_email` (text)
- `control_panel_base_url` (text)
- `country` (text)
- `country_code` (text)
- `currency` (text)
- `currency_symbol` (text)
- `currency_symbol_location` (text)
- `decimal_places` (number)
- `decimal_separator` (text)
- `default_channel_id` (number)
- `default_site_id` (number)
- `dimension_decimal_places` (number)
- `dimension_decimal_token` (text)
- `dimension_thousands_token` (text)
- `dimension_units` (text)
- `domain` (text)
- `favicon_url` (text)
- `features` (object)
- `first_name` (text)
- `id` (text)
- `industry` (text)
- `infrastructure_region` (text)
- `is_price_entered_with_tax` (true/false)
- `language` (text)
- `last_name` (text)
- `logo`
- `name` (text)
- `order_email` (text)
- `phone` (text)
- `plan_is_trial` (true/false)
- `plan_level` (text)
- `plan_name` (text)
- `secure_url` (text)
- `status` (text)
- `store_id` (number)
- `thousands_separator` (text)
- `timezone` (object)
- `weight_units` (text)

**Example output**

```json
{
  "admin_email": "owner@example.com",
  "control_panel_base_url": "https://store-abc123xyz.mybigcommerce.com/manage",
  "country": "United States",
  "country_code": "US",
  "currency": "USD",
  "currency_symbol": "$",
  "decimal_places": 2,
  "default_channel_id": 1,
  "default_site_id": 1000,
  "dimension_units": "Inches",
  "domain": "example-store.mybigcommerce.com",
  "features": {
    "multi_storefront_enabled": false,
    "stencil_enabled": true,
    "wishlists_enabled": true
  },
  "id": "abc123xyz",
  "is_price_entered_with_tax": false,
  "language": "en",
  "name": "The Example Store",
  "order_email": "orders@example.com",
  "plan_is_trial": false,
  "plan_level": "Sandbox",
  "plan_name": "Partner Sandbox",
  "secure_url": "https://example-store.mybigcommerce.com",
  "status": "live",
  "store_id": 1000123,
  "weight_units": "Ounces"
}
```

### List categories

The categories the catalogue is filed under, each with its ID, tree, parent, name, description, visibility and web address. Use it to turn a category name into the numeric ID the product actions file a product under, or to find the tree a new category should go into.

**Inputs**

- Name (`name`, text): Only the category with this exact name.
- Name contains (`name_contains`, text): Only categories whose name contains this text.
- Keyword (`keyword`, text): Only categories matching this text in their name or description.
- Parent category (`parent_id`, text): Only categories directly under this one.
- Tree ID (`tree_id`, text): Only categories in this tree. A store with one storefront has one tree; a multi-storefront store has one per storefront.
- Visible only (`is_visible`, true/false): Only categories shoppers can see, or only ones they cannot.
- Page (`page`, number): Which page of results to read, starting at 1. Read 'has_more' from the result to know whether to ask for another. At least 1.
- Results per page (`limit`, number): How many records to return, 1-250. Defaults to 50. From 1 to 250.

**Outputs**

- `categories` (list): The categories on this page
- `count` (number): How many records this page holds.
- `has_more` (true/false): Whether another page is worth asking for.
- `page` (number): Which page this is.
- `total` (number): How many records match, across every page.
- `total_pages` (number): How many pages there are, across every page.

**Example output**

```json
{
  "categories": [
    {
      "category_id": 23,
      "category_uuid": "0f6c6d1a-6c3e-4f2e-9c58-6a1b2c3d4e5f",
      "default_product_sort": "use_store_settings",
      "description": "<p>Everything for the kitchen table.</p>",
      "image_url": "",
      "is_visible": true,
      "meta_description": "Mugs, plates and bowls.",
      "meta_keywords": [],
      "name": "Kitchen",
      "page_title": "Kitchen",
      "parent_id": 0,
      "search_keywords": "",
      "sort_order": 2,
      "tree_id": 1,
      "url": {
        "is_customized": false,
        "path": "/kitchen/"
      },
      "views": 0
    }
  ],
  "count": 1,
  "has_more": false,
  "page": 1,
  "total": 9,
  "total_pages": 1
}
```

### List customers

Search the store's customers by email, name, company, phone, customer group, ID or when they registered. Returns each customer with their name, email, company, phone, group and notes - and their saved addresses, store credit and attributes if you ask for them.

**Inputs**

- Email (`email`, text): Only customers with one of these exact email addresses.
- Full name (`name`, text): Only customers with this exact full name.
- Name contains (`name_contains`, text): Only customers whose name contains this text.
- Company (`company`, text): Only customers at this company.
- Phone (`phone`, text): Only customers with this exact phone number.
- Customer IDs (`customer_ids`, list): Only these customers, by their numeric IDs. Useful for reading a list of customers gathered by an earlier step.
- Customer group ID (`customer_group_id`, text): Only customers in this group.
- Registered after (`created_after`, date and time): Only customers who registered after this moment.
- Registered before (`created_before`, date and time): Only customers who registered before this moment.
- Also include (`include`, list): Sub-resources to return with each customer. One or more of: `addresses` (Saved addresses), `storecredit` (Store credit), `attributes`, `formfields` (Form fields), `shopper_profile_id` (Shopper profile ID), `segment_ids` (Segment IDs).
- Sort by (`sort`, text): What to sort by, and which way round. BigCommerce carries both in one value here, so there is no separate direction. One of: `date_created:desc` (Date created, newest first), `date_created:asc` (Date created, oldest first), `date_modified:desc` (Date modified, newest first), `date_modified:asc` (Date modified, oldest first), `last_name:asc` (Last name, A to Z), `last_name:desc` (Last name, Z to A).
- Page (`page`, number): Which page of results to read, starting at 1. Read 'has_more' from the result to know whether to ask for another. At least 1.
- Results per page (`limit`, number): How many records to return, 1-250. Defaults to 50. From 1 to 250.

**Outputs**

- `count` (number): How many records this page holds.
- `customers` (list): The customers on this page
- `has_more` (true/false): Whether another page is worth asking for.
- `page` (number): Which page this is.
- `total` (number): How many records match, across every page.
- `total_pages` (number): How many pages there are, across every page.

**Example output**

```json
{
  "count": 1,
  "customers": [
    {
      "accepts_product_review_abandoned_cart_emails": true,
      "addresses": [
        {
          "address1": "12 Bridge Street",
          "address_type": "residential",
          "city": "Cambridge",
          "country": "United Kingdom",
          "country_code": "GB",
          "customer_id": 27,
          "first_name": "Ada",
          "id": 44,
          "last_name": "Lovelace",
          "postal_code": "CB2 1UJ",
          "state_or_province": "Cambridgeshire"
        }
      ],
      "channel_ids": [
        1
      ],
      "company": "Analytical Engines",
      "customer_group_id": 0,
      "date_created": "2026-05-02T14:31:07+00:00",
      "date_modified": "2026-09-01T08:22:19+00:00",
      "email": "ada@example.com",
      "first_name": "Ada",
      "id": 27,
      "last_name": "Lovelace",
      "notes": "",
      "origin_channel_id": 1,
      "phone": "+44 1223 000000",
      "registration_ip_address": "",
      "tax_exempt_category": ""
    }
  ],
  "has_more": false,
  "page": 1,
  "total": 64,
  "total_pages": 1
}
```

### List order products

What an order is for: every line on it, with the product it points at, its name and SKU, the quantity, the price with and without tax, any discount applied, and how much of it has been shipped or refunded. This is the only way to read an order's lines - the 'products' field on the order itself is a link to this.

**Inputs**

- Order ID (`order_id`, text, required): The order's number. 'List orders' returns it as 'id', and it is the number shown against the order in Orders > View.
- Page (`page`, number): Which page of results to read, starting at 1. Read 'has_more' from the result to know whether to ask for another. At least 1.
- Results per page (`limit`, number): How many records to return, 1-250. Defaults to 50. From 1 to 250.

**Outputs**

- `count` (number): How many records this page holds.
- `has_more` (true/false): Whether another page is worth asking for.
- `order_products` (list): The lines on this page of the order
- `page` (number): Which page this is.
- `total` (number): How many records match, when the API reports it, which v2 order endpoints do not.
- `total_pages` (number): How many pages there are, when the API reports it, which v2 order endpoints do not.

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "order_products": [
    {
      "applied_discounts": [],
      "base_price": "24.0000",
      "id": 91,
      "is_refunded": false,
      "name": "Hand-thrown mug",
      "order_id": 104,
      "price_ex_tax": "24.0000",
      "price_inc_tax": "24.0000",
      "price_tax": "0.0000",
      "product_id": 112,
      "product_options": [],
      "quantity": 2,
      "quantity_refunded": 0,
      "quantity_shipped": 0,
      "sku": "MUG-350",
      "total_ex_tax": "48.0000",
      "total_inc_tax": "48.0000",
      "total_tax": "0.0000",
      "type": "physical",
      "variant_id": 401
    }
  ],
  "page": 1,
  "total": null,
  "total_pages": null
}
```

### List orders

Search the store's orders by customer, email, status, payment method, total, channel and when they were placed or last changed. Returns each order with its status, every total, currency, payment method and billing address. What an order is actually for comes from 'List order products' - the 'products' field on an order is a link, not the lines.

**Inputs**

- Customer ID (`customer_id`, text): Only orders belonging to this customer. Guest orders have no customer, so this never matches one.
- Email (`email`, text): Only orders with this email on their billing address. This is how to find a guest order.
- Status (`status_id`, text): Only orders currently in this status.
- Payment method (`payment_method`, text): Only orders paid for this way, by the method's name - 'Manual', 'Credit Card', 'Cash on Delivery'.
- Minimum total (`min_total`, text): Only orders at or above this total, as a plain number in the store's own currency.
- Maximum total (`max_total`, text): Only orders at or below this total, as a plain number in the store's own currency.
- Placed after (`created_after`, date and time): Only orders placed after this moment.
- Placed before (`created_before`, date and time): Only orders placed before this moment.
- Changed after (`modified_after`, date and time): Only orders changed after this moment.
- Changed before (`modified_before`, date and time): Only orders changed before this moment.
- Channel ID (`channel_id`, text): Only orders from this sales channel. 'Get store information' reports the store's own as 'default_channel_id'.
- Sort by (`sort`, text): What to sort the orders by. Defaults to order ID. One of: `id` (Order ID), `customer_id` (Customer ID), `date_created` (Date created), `date_modified` (Date modified), `status_id` (Status), `channel_id` (Channel), `external_id` (External ID).
- Sort direction (`direction`, text): Which way round to sort. One of: `asc` (Ascending (oldest/lowest first)), `desc` (Descending (newest/highest first)).
- Page (`page`, number): Which page of results to read, starting at 1. Read 'has_more' from the result to know whether to ask for another. At least 1.
- Results per page (`limit`, number): How many records to return, 1-250. Defaults to 50. From 1 to 250.

**Outputs**

- `count` (number): How many records this page holds.
- `has_more` (true/false): Whether another page is worth asking for.
- `orders` (list): The orders on this page
- `page` (number): Which page this is.
- `total` (number): How many records match, when the API reports it, which v2 order endpoints do not.
- `total_pages` (number): How many pages there are, when the API reports it, which v2 order endpoints do not.

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "orders": [
    {
      "billing_address": {
        "city": "Cambridge",
        "country": "United Kingdom",
        "country_iso2": "GB",
        "email": "ada@example.com",
        "first_name": "Ada",
        "last_name": "Lovelace",
        "state": "Cambridgeshire",
        "street_1": "12 Bridge Street",
        "zip": "CB2 1UJ"
      },
      "channel_id": 1,
      "coupons": {
        "resource": "/orders/104/coupons",
        "url": "https://api.bigcommerce.com/stores/abc123xyz/v2/orders/104/coupons"
      },
      "currency_code": "USD",
      "currency_id": 1,
      "customer_id": 27,
      "customer_message": "Please leave with a neighbour.",
      "date_created": "Tue, 01 Sep 2026 08:24:12 +0000",
      "date_modified": "Tue, 01 Sep 2026 08:31:44 +0000",
      "default_currency_code": "USD",
      "discount_amount": "0.0000",
      "id": 104,
      "is_deleted": false,
      "items_shipped": 0,
      "items_total": 2,
      "order_is_digital": false,
      "payment_method": "Manual",
      "payment_status": "",
      "products": {
        "resource": "/orders/104/products",
        "url": "https://api.bigcommerce.com/stores/abc123xyz/v2/orders/104/products"
      },
      "refunded_amount": "0.0000",
      "shipping_address_count": 1,
      "shipping_addresses": {
        "resource": "/orders/104/shippingaddresses",
        "url": "https://api.bigcommerce.com/stores/abc123xyz/v2/orders/104/shippingaddresses"
      },
      "staff_notes": "Placed through the API.",
      "status": "Awaiting Fulfillment",
      "status_id": 11,
      "subtotal_ex_tax": "48.0000",
      "subtotal_inc_tax": "48.0000",
      "total_ex_tax": "52.5000",
      "total_inc_tax": "52.5000",
      "total_tax": "0.0000"
    }
  ],
  "page": 1,
  "total": null,
  "total_pages": null
}
```

### List product variants

The variants of one product - the individual combinations of its options that a shopper actually buys. Each has its own SKU, price, weight, image and stock level. A product whose stock is tracked on its variants keeps the real numbers here rather than on the product.

**Inputs**

- Product ID (`product_id`, text, required): The numeric ID of the product to read variants of.
- Page (`page`, number): Which page of results to read, starting at 1. Read 'has_more' from the result to know whether to ask for another. At least 1.
- Results per page (`limit`, number): How many records to return, 1-250. Defaults to 50. From 1 to 250.

**Outputs**

- `count` (number): How many records this page holds.
- `has_more` (true/false): Whether another page is worth asking for.
- `page` (number): Which page this is.
- `total` (number): How many records match, across every page.
- `total_pages` (number): How many pages there are, across every page.
- `variants` (list): The variants on this page

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "page": 1,
  "total": 3,
  "total_pages": 1,
  "variants": [
    {
      "calculated_price": 24,
      "id": 401,
      "image_url": "https://cdn11.bigcommerce.com/s-abc123xyz/images/mug-blue.jpg",
      "inventory_level": 7,
      "inventory_warning_level": 2,
      "option_values": [
        {
          "id": 55,
          "label": "Blue",
          "option_display_name": "Glaze",
          "option_id": 12
        }
      ],
      "price": 28,
      "product_id": 112,
      "purchasing_disabled": false,
      "sale_price": 24,
      "sku": "MUG-350-BLUE",
      "sku_id": 812,
      "weight": 0.4
    }
  ]
}
```

### List products

Search the store's catalogue. Filter by name, SKU, keyword, type, condition, availability, brand, category, visibility, whether stock is low or gone, and when a product last changed. Returns each product with its prices, stock, categories and identifiers. With no filters at all this is the whole catalogue.

**Inputs**

- Name (`name`, text): Only the product with this exact name.
- SKU (`sku`, text): Only the product with this exact SKU.
- Keyword (`keyword`, text): Only products matching this text in their name, SKU or description.
- Search as (`keyword_context`, text): Whose view of the catalogue the keyword searches. A shopper's view leaves out what is not on sale. One of: `shopper` (What a shopper can see), `merchant` (Everything in the catalogue).
- Type (`product_type`, text): Only products of this type. One of: `physical` (Physical - shipped to the customer), `digital` (Digital - downloaded by the customer).
- Condition (`condition`, text): Only products in this condition. One of: `new`, `used`, `refurbished`.
- Availability (`availability`, text): Only products with this availability. One of: `available` (Available to buy), `disabled` (Not available to buy), `preorder` (Pre-order).
- Brand (`brand_id`, text): Only products from this brand.
- Category (`category_id`, text): Only products filed under this category.
- Visible only (`is_visible`, true/false): Only products shoppers can see, or only ones they cannot.
- Featured only (`is_featured`, true/false): Only products marked as featured.
- Low stock only (`inventory_low`, true/false): Only products at or below their low stock warning level.
- Out of stock only (`out_of_stock`, true/false): Only products with no stock left.
- Modified after (`modified_after`, date and time): Only products changed after this moment.
- Modified before (`modified_before`, date and time): Only products changed before this moment.
- Also include (`include`, list): Sub-resources to return with each product. Asking for options or modifiers limits the page to 10 products. One or more of: `variants`, `images`, `primary_image` (Primary image), `videos`, `custom_fields` (Custom fields), `bulk_pricing_rules` (Bulk pricing rules), `modifiers`, `options`, `channels`, `parent_relations` (Parent relations), `reviews`.
- Sort by (`sort`, text): What to sort the catalogue by. One of: `id`, `name`, `sku`, `price`, `calculated_price` (Calculated price), `date_modified` (Date modified), `date_last_imported` (Date last imported), `inventory_level` (Inventory level), `available_to_sell` (Available to sell), `qty_backordered` (Quantity backordered), and 3 more.
- Sort direction (`direction`, text): Which way round to sort. One of: `asc` (Ascending (oldest/lowest first)), `desc` (Descending (newest/highest first)).
- Page (`page`, number): Which page of results to read, starting at 1. Read 'has_more' from the result to know whether to ask for another. At least 1.
- Results per page (`limit`, number): How many records to return, 1-250. Defaults to 50. From 1 to 250.

**Outputs**

- `count` (number): How many records this page holds.
- `has_more` (true/false): Whether another page is worth asking for.
- `page` (number): Which page this is.
- `products` (list): The products on this page
- `total` (number): How many records match, across every page.
- `total_pages` (number): How many pages there are, across every page.

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "page": 1,
  "products": [
    {
      "availability": "available",
      "base_variant_id": 401,
      "brand_id": 38,
      "calculated_price": 24,
      "categories": [
        23
      ],
      "condition": "New",
      "cost_price": 11,
      "custom_url": {
        "is_customized": false,
        "url": "/hand-thrown-mug/"
      },
      "date_created": "2026-08-14T09:12:44+00:00",
      "date_modified": "2026-09-02T16:04:01+00:00",
      "depth": 9,
      "description": "<p>Stoneware, glazed inside and out.</p>",
      "height": 9,
      "id": 112,
      "inventory_level": 18,
      "inventory_tracking": "product",
      "inventory_warning_level": 3,
      "is_featured": false,
      "is_visible": true,
      "meta_description": "A 350ml stoneware mug, thrown and glazed by hand.",
      "mpn": "MUG350",
      "name": "Hand-thrown mug",
      "page_title": "Hand-thrown stoneware mug",
      "price": 28,
      "retail_price": 32,
      "reviews_count": 15,
      "reviews_rating_sum": 72,
      "sale_price": 24,
      "sku": "MUG-350",
      "total_sold": 63,
      "type": "physical",
      "upc": "5012345678900",
      "weight": 0.4,
      "width": 9
    }
  ],
  "total": 128,
  "total_pages": 1
}
```

### Update category

Change an existing category - its name, description, visibility, position among its siblings, parent or web address. Only the fields you fill in are sent, so everything you leave blank keeps its current value.

**Inputs**

- Category (`category_id`, text, required): The category to change. 'List categories' returns its ID as 'category_id'.
- Name (`name`, text): A new name for the category, capped at 50 characters.
- Parent category (`parent_id`, text): Move the category under a different one.
- Description (`description`, text): The text shown at the top of the category's own page.
- Visible in the storefront (`is_visible`, true/false): Whether the category appears in the store's navigation and can be browsed.
- Sort order (`sort_order`, number): Where the category sits among its siblings. Lower comes first.
- URL path (`url_path`, text): The category's own web address, such as '/summer-sale/'. BigCommerce needs it to be unique: if it is already taken the category is still saved but keeps its generated address.
- Image URL (`image_url`, text): A publicly reachable image to show for the category. BigCommerce downloads it into the store.
- Default product order (`default_product_sort`, text): How products are ordered on the category's own page. One of: `use_store_settings` (Use the store's setting), `featured` (Featured products first), `newest` (Newest first), `best_selling` (Best selling first), `alpha_asc` (Name, A to Z), `alpha_desc` (Name, Z to A), `avg_customer_review` (Highest rated first), `price_asc` (Price, low to high), `price_desc` (Price, high to low).
- Page title (`page_title`, text): The title of the category's page, for search engines.
- Meta description (`meta_description`, text): The summary search engines show under the page title.

**Outputs**

- `category_id` (number)
- `category_uuid` (text)
- `default_product_sort` (text)
- `description` (text)
- `image_url` (text)
- `is_visible` (true/false)
- `layout_file` (text)
- `meta_description` (text)
- `meta_keywords` (list)
- `name` (text)
- `page_title` (text)
- `parent_id` (number)
- `search_keywords` (text)
- `sort_order` (number)
- `tree_id` (number)
- `url` (object)
- `views` (number)

**Example output**

```json
{
  "category_id": 23,
  "category_uuid": "0f6c6d1a-6c3e-4f2e-9c58-6a1b2c3d4e5f",
  "default_product_sort": "use_store_settings",
  "description": "<p>Everything for the kitchen table.</p>",
  "image_url": "",
  "is_visible": true,
  "meta_description": "Mugs, plates and bowls.",
  "meta_keywords": [],
  "name": "Kitchen",
  "page_title": "Kitchen",
  "parent_id": 0,
  "search_keywords": "",
  "sort_order": 2,
  "tree_id": 1,
  "url": {
    "is_customized": false,
    "path": "/kitchen/"
  },
  "views": 0
}
```

### Update customer

Change an existing customer's details. Only the fields you fill in are sent, so everything you leave blank keeps its current value. Saved addresses cannot be changed here - BigCommerce does not accept them on this endpoint, so this action does not pretend to offer them.

**Inputs**

- Customer ID (`customer_id`, text, required): The customer's numeric ID. 'List customers' returns it as 'id'.
- Email (`email`, text): The customer's email address, which BigCommerce uses as their sign-in and requires to be unique across the store.
- First name (`first_name`, text): The customer's first name.
- Last name (`last_name`, text): The customer's last name.
- Company (`company`, text): The company the customer buys for.
- Phone (`phone`, text): The customer's phone number.
- Notes (`notes`, text): A private note about the customer, seen only in admin.
- Customer group ID (`customer_group_id`, text): The numeric ID of the customer group to put them in, which decides the pricing and discounts they see.
- Tax exempt category (`tax_exempt_category`, text): The store's own code for this customer's tax exemption, if they have one.
- Accepts review and abandoned-cart emails (`accepts_marketing`, true/false): Whether BigCommerce may email the customer product review requests and abandoned cart reminders.

**Outputs**

- `accepts_product_review_abandoned_cart_emails` (true/false)
- `addresses` (list)
- `attributes` (list)
- `authentication` (object)
- `channel_ids` (list)
- `company` (text)
- `customer_group_id` (number)
- `date_created` (text)
- `date_modified` (text)
- `email` (text)
- `first_name` (text)
- `form_fields` (list)
- `id` (number)
- `last_name` (text)
- `notes` (text)
- `origin_channel_id` (number)
- `phone` (text)
- `registration_ip_address` (text)
- `segment_ids` (list)
- `shopper_profile_id` (text)
- `store_credit_amounts` (list)
- `tax_exempt_category` (text)

**Example output**

```json
{
  "accepts_product_review_abandoned_cart_emails": true,
  "addresses": [
    {
      "address1": "12 Bridge Street",
      "address_type": "residential",
      "city": "Cambridge",
      "country": "United Kingdom",
      "country_code": "GB",
      "customer_id": 27,
      "first_name": "Ada",
      "id": 44,
      "last_name": "Lovelace",
      "postal_code": "CB2 1UJ",
      "state_or_province": "Cambridgeshire"
    }
  ],
  "channel_ids": [
    1
  ],
  "company": "Analytical Engines",
  "customer_group_id": 0,
  "date_created": "2026-05-02T14:31:07+00:00",
  "date_modified": "2026-09-01T08:22:19+00:00",
  "email": "ada@example.com",
  "first_name": "Ada",
  "id": 27,
  "last_name": "Lovelace",
  "notes": "",
  "origin_channel_id": 1,
  "phone": "+44 1223 000000",
  "registration_ip_address": "",
  "tax_exempt_category": ""
}
```

### Update order

Change an order - most often to move it to its next status, such as marking an awaiting-fulfilment order shipped. Only the fields you fill in are sent, which matters here: a BigCommerce order update that restates the line items clears every discount and promotion applied to them, so this action never touches them.

**Inputs**

- Order ID (`order_id`, text, required): The order's number. 'List orders' returns it as 'id', and it is the number shown against the order in Orders > View.
- Status (`status_id`, text): The status to move the order to. Changing this is what sends BigCommerce's own customer emails.
- Customer ID (`customer_id`, text): Reassign the order to this customer.
- Staff notes (`staff_notes`, text): Replace the admin-only note on the order.
- Customer message (`customer_message`, text): Replace the note left by the buyer.

**Outputs**

- `backorder_shipping_expectation_message` (text)
- `base_handling_cost` (text)
- `base_shipping_cost` (text)
- `base_wrapping_cost` (text)
- `billing_address` (object)
- `cart_id` (text)
- `channel_id` (number)
- `consignments` (object)
- `coupon_discount` (text)
- `coupons` (object)
- `currency_code` (text)
- `currency_exchange_rate` (text)
- `currency_id` (number)
- `customer_id` (number)
- `customer_locale` (text)
- `customer_message` (text)
- `date_created` (text)
- `date_modified` (text)
- `date_shipped` (text)
- `default_currency_code` (text)
- `default_currency_id` (number)
- `discount_amount` (text)
- `ebay_order_id` (text)
- `external_id` (text)
- `external_merchant_id` (text)
- `external_order_id` (text)
- `external_source` (text)
- `fees` (object)
- `geoip_country` (text)
- `geoip_country_iso2` (text)
- `gift_certificate_amount` (text)
- `handling_cost_ex_tax` (text)
- `handling_cost_inc_tax` (text)
- `handling_cost_tax` (text)
- `handling_cost_tax_class_id` (number)
- `id` (number)
- `ip_address` (text)
- `ip_address_v6` (text)
- `is_deleted` (true/false)
- `is_email_opt_in` (true/false)
- `is_tax_inclusive_pricing` (true/false)
- `items_shipped` (number)
- `items_total` (number)
- `order_is_digital` (true/false)
- `order_source` (text)
- `payment_method` (text)
- `payment_provider_id` (text)
- `payment_status` (text)
- `products` (object)
- `refunded_amount` (text)
- `shipping_address_count` (number)
- `shipping_addresses` (object)
- `shipping_cost_ex_tax` (text)
- `shipping_cost_inc_tax` (text)
- `shipping_cost_tax` (text)
- `shipping_cost_tax_class_id` (number)
- `staff_notes` (text)
- `status` (text)
- `status_id` (number)
- `store_credit_amount` (text)
- `store_default_currency_code` (text)
- `store_default_to_transactional_exchange_rate` (text)
- `subtotal_ex_tax` (text)
- `subtotal_inc_tax` (text)
- `subtotal_tax` (text)
- `tax_provider_id` (text)
- `total_ex_tax` (text)
- `total_inc_tax` (text)
- `total_tax` (text)
- `wrapping_cost_ex_tax` (text)
- `wrapping_cost_inc_tax` (text)
- `wrapping_cost_tax` (text)
- `wrapping_cost_tax_class_id` (number)

**Example output**

```json
{
  "billing_address": {
    "city": "Cambridge",
    "country": "United Kingdom",
    "country_iso2": "GB",
    "email": "ada@example.com",
    "first_name": "Ada",
    "last_name": "Lovelace",
    "state": "Cambridgeshire",
    "street_1": "12 Bridge Street",
    "zip": "CB2 1UJ"
  },
  "channel_id": 1,
  "coupons": {
    "resource": "/orders/104/coupons",
    "url": "https://api.bigcommerce.com/stores/abc123xyz/v2/orders/104/coupons"
  },
  "currency_code": "USD",
  "currency_id": 1,
  "customer_id": 27,
  "customer_message": "Please leave with a neighbour.",
  "date_created": "Tue, 01 Sep 2026 08:24:12 +0000",
  "date_modified": "Tue, 01 Sep 2026 08:31:44 +0000",
  "default_currency_code": "USD",
  "discount_amount": "0.0000",
  "id": 104,
  "is_deleted": false,
  "items_shipped": 0,
  "items_total": 2,
  "order_is_digital": false,
  "payment_method": "Manual",
  "payment_status": "",
  "products": {
    "resource": "/orders/104/products",
    "url": "https://api.bigcommerce.com/stores/abc123xyz/v2/orders/104/products"
  },
  "refunded_amount": "0.0000",
  "shipping_address_count": 1,
  "shipping_addresses": {
    "resource": "/orders/104/shippingaddresses",
    "url": "https://api.bigcommerce.com/stores/abc123xyz/v2/orders/104/shippingaddresses"
  },
  "staff_notes": "Placed through the API.",
  "status": "Awaiting Fulfillment",
  "status_id": 11,
  "subtotal_ex_tax": "48.0000",
  "subtotal_inc_tax": "48.0000",
  "total_ex_tax": "52.5000",
  "total_inc_tax": "52.5000",
  "total_tax": "0.0000"
}
```

### Update product

Change an existing product. Only the fields you fill in are sent, so everything you leave blank keeps its current value - which makes this safe for changing one thing, such as a price or a stock level, without restating the rest of the product.

**Inputs**

- Product ID (`product_id`, text, required): The numeric ID of the product to change.
- Name (`name`, text): The product's name, as shoppers see it. BigCommerce requires it to be unique across the catalogue, and caps it at 250 characters.
- Type (`product_type`, text): Whether the product is shipped or downloaded. BigCommerce has no default for this, so it has to be chosen when the product is created. One of: `physical` (Physical - shipped to the customer), `digital` (Digital - downloaded by the customer).
- Price (`price`, text): The product's price, as a plain number in the store's own currency - 19.99, not $19.99. Whether that figure includes tax is the store's setting; 'Get store information' reports it as 'is_price_entered_with_tax'.
- Weight (`weight`, text): The product's weight, as a plain number in the store's own weight unit. BigCommerce demands one even for a digital product, so leaving it blank sends 0.
- SKU (`sku`, text): Your own stock-keeping code. BigCommerce refuses a duplicate, so it has to be unique across the store.
- Description (`description`, text): The full product description. HTML is allowed.
- Visible in the storefront (`is_visible`, true/false): Whether shoppers can see the product at all.
- Featured (`is_featured`, true/false): Show the product in the store's featured list.
- Availability (`availability`, text): Whether the product can be bought, and how. One of: `available` (Available to buy), `disabled` (Not available to buy), `preorder` (Pre-order).
- Condition (`condition`, text): What condition the product is in. Only shown to shoppers when the product is set to show it. One of: `New`, `Used`, `Refurbished`.
- Stock tracking (`inventory_tracking`, text): Where this product's stock is counted. The stock level below only applies when it is tracked on the product; a product tracked on its variants keeps a level per variant instead. One of: `none` (Do not track stock), `product` (Track stock on the product), `variant` (Track stock on each variant).
- Stock level (`inventory_level`, number): How many are in stock. Needs stock tracking to be on. At least 0.
- Low stock warning level (`inventory_warning_level`, number): The stock level at which BigCommerce calls the product low in stock. At least 0.
- Categories (`category_ids`, list): Which categories to file the product under. Pick from the store's categories, or type a category ID.
- Brand (`brand_id`, text): Which brand the product belongs to. Pick from the store's brands, or type a brand ID.
- Sale price (`sale_price`, text): A discounted price, shown alongside the normal one. Leave blank for no sale.
- Retail price (MSRP) (`retail_price`, text): The recommended retail price, shown struck through beside the store's own price.
- UPC/EAN (`upc`, text): The product's barcode number.
- Manufacturer part number (`mpn`, text): The manufacturer's own code for the product.
- Width (`width`, text): Width, in the store's own dimension unit.
- Height (`height`, text): Height, in the store's own dimension unit.
- Depth (`depth`, text): Depth, in the store's own dimension unit.
- Page title (`page_title`, text): The title of the product's own page, for search engines. The product name is used when this is blank.
- Meta description (`meta_description`, text): The summary search engines show under the page title.

**Outputs**

- `availability` (text)
- `availability_description` (text)
- `base_variant_id` (number)
- `bin_picking_number` (text)
- `brand_id` (number)
- `brand_name` (text)
- `bulk_pricing_rules` (list)
- `calculated_price` (number)
- `categories` (list)
- `condition` (text)
- `cost_price` (number)
- `custom_fields` (list)
- `custom_url` (object)
- `date_created` (text)
- `date_last_imported` (text)
- `date_modified` (text)
- `depth` (number)
- `description` (text)
- `fixed_cost_shipping_price` (number)
- `gift_wrapping_options_list` (list)
- `gift_wrapping_options_type` (text)
- `gtin` (text)
- `height` (number)
- `id` (number)
- `images` (list)
- `inventory_level` (number)
- `inventory_tracking` (text)
- `inventory_warning_level` (number)
- `is_condition_shown` (true/false)
- `is_featured` (true/false)
- `is_free_shipping` (true/false)
- `is_preorder_only` (true/false)
- `is_price_hidden` (true/false)
- `is_visible` (true/false)
- `layout_file` (text)
- `map_price` (number)
- `meta_description` (text)
- `meta_keywords` (list)
- `mpn` (text)
- `name` (text)
- `open_graph_description` (text)
- `open_graph_title` (text)
- `open_graph_type` (text)
- `open_graph_use_image` (true/false)
- `open_graph_use_meta_description` (true/false)
- `open_graph_use_product_name` (true/false)
- `order_quantity_maximum` (number)
- `order_quantity_minimum` (number)
- `page_title` (text)
- `preorder_message` (text)
- `preorder_release_date` (text)
- `price` (number)
- `price_hidden_label` (text)
- `product_tax_code` (text)
- `related_products` (list)
- `retail_price` (number)
- `reviews_count` (number)
- `reviews_rating_sum` (number)
- `sale_price` (number)
- `search_keywords` (text)
- `sku` (text)
- `sort_order` (number)
- `tax_class_id` (number)
- `total_sold` (number)
- `type` (text)
- `upc` (text)
- `variants` (list)
- `videos` (list)
- `view_count` (number)
- `warranty` (text)
- `weight` (number)
- `width` (number)

**Example output**

```json
{
  "availability": "available",
  "base_variant_id": 401,
  "brand_id": 38,
  "calculated_price": 24,
  "categories": [
    23
  ],
  "condition": "New",
  "cost_price": 11,
  "custom_url": {
    "is_customized": false,
    "url": "/hand-thrown-mug/"
  },
  "date_created": "2026-08-14T09:12:44+00:00",
  "date_modified": "2026-09-02T16:04:01+00:00",
  "depth": 9,
  "description": "<p>Stoneware, glazed inside and out.</p>",
  "height": 9,
  "id": 112,
  "inventory_level": 18,
  "inventory_tracking": "product",
  "inventory_warning_level": 3,
  "is_featured": false,
  "is_visible": true,
  "meta_description": "A 350ml stoneware mug, thrown and glazed by hand.",
  "mpn": "MUG350",
  "name": "Hand-thrown mug",
  "page_title": "Hand-thrown stoneware mug",
  "price": 28,
  "retail_price": 32,
  "reviews_count": 15,
  "reviews_rating_sum": 72,
  "sale_price": 24,
  "sku": "MUG-350",
  "total_sold": 63,
  "type": "physical",
  "upc": "5012345678900",
  "weight": 0.4,
  "width": 9
}
```
