Public API v2: Price List
A price list: who it is for and when, plus a list of products or variants, each with its own price.
| Scopes | price-list:read, price-list:write |
| Plan | Plans with Price List; otherwise 403 |
| Takes effect | Saved in the app; reaches the storefront at the next upload. |
Every response has the same envelope (success, status, data, meta; see Responses). Returns below describes data. The examples are real calls; the rules were created disabled.
Good to know
Section titled “Good to know”GET /rules/{id}returns the rule anditems_count; read the items fromGET /rules/{id}/itemspage by page, or count them with/items/count.POSTandPUTcarry every item;PUTremoves the items left out. A request holds up to about 5,890 items (its cost must stay at 600 or below); add more withPOST /rules/{id}/items/bulk-upsert, 250 at a time.- There is no
bulk-upsertof rules: create or replace them one by one. To change only the name, status, priority or schedule, usePATCH. - On checkout versions 1, 3 and 5 (shown as Checkout version in Settings), a
set_fixed_pricecan be lower or higher than the product’s original price. - A price list priced by cost (Cost + Markup in the app) keeps its items: changing them is a
422; its name, status and schedule can still change. - While the app updates a price list to its new options, writes to it answer
409 RESOURCE_CONFLICT; send them again later.
Price List API endpoints
- GET/api/v2/price-list/rules# List rules
- POST/api/v2/price-list/rules# Create a rule
- GET/api/v2/price-list/rules/{id}# Get a rule
- PUT/api/v2/price-list/rules/{id}# Replace a rule
- PATCH/api/v2/price-list/rules/{id}# Update a rule
- DEL/api/v2/price-list/rules/{id}# Delete a rule
- POST/api/v2/price-list/rules/bulk-delete# Delete rules in bulk
- POST/api/v2/price-list/rules/upload# Upload rules to the storefront
- GET/api/v2/price-list/rules/{id}/items# List a rule's items
- GET/api/v2/price-list/rules/{id}/items/count# Count a rule's items
- POST/api/v2/price-list/rules/{id}/items/bulk-upsert# Add or reprice items in bulk
- POST/api/v2/price-list/rules/{id}/items/bulk-delete# Remove items in bulk
The rule object
Section titled “The rule object”What every read returns. Lists come back as [] when empty, never null.
idstringread-only
Rule id.
namestring
Rule name.
priorityinteger
Lower number wins; see Rules.
statusenum
disabled rules are kept but not applied. One of disabled, enabled.
CustomersCommon object
Who gets the rule.
Show fields
apply_toenum
all everyone, logged in or not · logged_in any logged-in customer · non_logged_in visitors who are not logged in · customer_ids the listed customers · customer_tags customers with any of the tags · company_location the listed B2B company locations. Accepted here: all, logged_in, non_logged_in, customer_ids, customer_tags, company_location.
customer_ids[string]
Used when apply_to is customer_ids; required and not empty then.
customer_tags[string]
Used when apply_to is customer_tags; required and not empty then.
company_location_ids[string]
Used when apply_to is company_location; required and not empty then.
exclude_fromenum
none (default) · customer_tags · customer_ids · company_location. Excluded customers stay out even when apply_to includes them. Accepted here: none, customer_tags, customer_ids, company_location.
exc_customer_tags[string]
Used when exclude_from is customer_tags.
exc_customers[string]
Used when exclude_from is customer_ids.
exc_company_location_ids[string]
Used when exclude_from is company_location.
apply_atenum
One of product, variant.
exc_product_type, exc_product_variantssee link
Products — see Common objects. exc_product_type: none, by_ids, by_collections, by_tags, by_variants.
Show fields
exc_product_typeenum
none (default) or one of the types above: these products are left out. Accepted here: none, by_ids, by_collections, by_tags, by_variants.
exc_product_variants[string]
Used when exc_product_type is by_variants.
MarketsCommon object
Which markets the rule covers.
Show fields
market_condition_typeenum
all (default) every market · by_ids the listed markets. Accepted here: all, by_ids.
market_ids[string]
Shopify market ids.
ScheduleCommon object
When the rule applies.
Show fields
start_atstring
UTC date and time ending in Z; null or left out: starts at once.
end_atstring
After start_at; null or left out: never ends.
items_countintegerread-only
Items GET .../items returns when walked to the end.
created_atstring or nullread-only
UTC, ending in Z.
updated_atstring or nullread-only
UTC, ending in Z.
{ "id": "25117", "name": "Wholesale", "priority": 1, "status": "disabled", "apply_to": "all", "customer_ids": [], "customer_tags": [], "company_location_ids": [], "exclude_from": "none", "exc_customer_tags": [], "exc_customers": [], "exc_company_location_ids": [], "apply_at": "product", "exc_product_type": "none", "exc_product_variants": [], "market_condition_type": "all", "market_ids": [], "start_at": null, "end_at": null, "items_count": 2, "created_at": "2026-10-21T09:32:58.000Z", "updated_at": "2026-10-21T09:32:58.000Z"}The item object
Section titled “The item object”product_idstring
variant_idstring or null
discount_typeenum
apply_fixed and apply_increased_fixed appear only on items created before these discount types were retired.
decrease_fixed: Take a fixed amount off the price.decrease_percentage: Take a percentage off (at most 100).increase_fixed: Add a fixed amount.increase_percentage: Add a percentage.set_fixed_price: The price becomes exactly the value.apply_fixed,apply_increased_fixed: Older items only; read-only. Writeset_fixed_priceinstead.
discount_valuestring
{ "product_id": "8123456788001", "variant_id": null, "discount_type": "decrease_percentage", "discount_value": "10.00"}List rules
GET/api/v2/price-list/rules
List rules, newest first, without their items.
Query parameters
Section titled “Query parameters”limitinteger
1–250, default 50. See Paging.
cursorstring
next_cursor or prev_cursor of the last page; leave out for the first page. Keep the same filters on every page.
filter_statusenum
One of disabled, enabled.
filter_namestring
Part of the name, any case. 1–200 characters.
Returns
Section titled “Returns”data[Rule]
The rules of this page; [] when there are none.
meta.paginationobject
limit, next_cursor, prev_cursor and links to the next and previous pages.
curl -X GET "https://solution-public-api.bss-b2b.solutions/api/v2/price-list/rules?limit=2&filter_name=Wholesale" \ -H "X-API-Key: $B2B_API_KEY" \ -H "X-Shop-Domain: your-store.myshopify.com"{ "success": true, "status": "success", "data": [ { "id": "25117", "name": "Wholesale", "priority": 1, "status": "disabled", "apply_to": "all", "customer_ids": [], "customer_tags": [], "company_location_ids": [], "exclude_from": "none", "exc_customer_tags": [], "exc_customers": [], "exc_company_location_ids": [], "apply_at": "product", "exc_product_type": "none", "exc_product_variants": [], "market_condition_type": "all", "market_ids": [], "start_at": null, "end_at": null, "items_count": 2, "created_at": "2026-10-21T09:32:58.000Z", "updated_at": "2026-10-21T09:32:58.000Z" } ], "meta": { "timestamp": "2026-10-21T09:33:01.559Z", "version": "v2", "request_id": "45d9ba9e-d612-461d-b330-67ea7eeb3594", "rate_limit": { "cost": 10, "limit": 600, "remaining": 590, "restore_rate": 10 }, "pagination": { "limit": 2, "next_cursor": null, "prev_cursor": null, "links": { "self": "/api/v2/price-list/rules?limit=2&filter_name=Wholesale", "next": null, "prev": null } } }}Create a rule
POST/api/v2/price-list/rules
Create a rule with its items.
The body of POST /rules, PUT /rules/{id} and each element of bulk-upsert (add id to replace a rule). PUT replaces the whole rule: optional fields left out go back to their defaults. Fields not listed here are refused with 422.
Arguments
Section titled “Arguments”namestringrequired
Rule name. 1–200 characters.
priorityintegerrequired
Lower number wins; see Rules. 0–99.
statusenum
disabled rules are kept but not applied. One of disabled, enabled. Default "enabled".
CustomersCommon objectrequired
Who gets the rule.
Show fields
apply_toenum
all everyone, logged in or not · logged_in any logged-in customer · non_logged_in visitors who are not logged in · customer_ids the listed customers · customer_tags customers with any of the tags · company_location the listed B2B company locations. Accepted here: all, logged_in, non_logged_in, customer_ids, customer_tags, company_location.
customer_ids[string]
Used when apply_to is customer_ids; required and not empty then.
customer_tags[string]
Used when apply_to is customer_tags; required and not empty then.
company_location_ids[string]
Used when apply_to is company_location; required and not empty then.
exclude_fromenum
none (default) · customer_tags · customer_ids · company_location. Excluded customers stay out even when apply_to includes them. Accepted here: none, customer_tags, customer_ids, company_location.
exc_customer_tags[string]
Used when exclude_from is customer_tags.
exc_customers[string]
Used when exclude_from is customer_ids.
exc_company_location_ids[string]
Used when exclude_from is company_location.
apply_atenum
Default "product".
product: Items are products: every variant of the product gets the price. Sendselected_products.variant: Items are variants. Sendselected_variants.
exc_product_type, exc_product_variantssee link
Products — see Common objects. exc_product_type: none, by_variants.
Show fields
exc_product_typeenum
none (default) or one of the types above: these products are left out. Accepted here: none, by_variants.
exc_product_variants[string]
Used when exc_product_type is by_variants.
MarketsCommon object
Which markets the rule covers.
Show fields
market_condition_typeenum
all (default) every market · by_ids the listed markets. Accepted here: all, by_ids.
market_ids[string]
Shopify market ids.
ScheduleCommon object
When the rule applies.
Show fields
start_atstring
UTC date and time ending in Z; null or left out: starts at once.
end_atstring
After start_at; null or left out: never ends.
selected_products[object]
Show fields
product_idstringrequired
Numeric id as a string.
variant_idstring
Numeric id as a string.
discount_typeenumrequired
decrease_fixed: Take a fixed amount off the price.decrease_percentage: Take a percentage off (at most 100).increase_fixed: Add a fixed amount.increase_percentage: Add a percentage.set_fixed_price: The price becomes exactly the value.apply_fixed,apply_increased_fixed: Older items only; read-only. Writeset_fixed_priceinstead.
discount_valuestringrequired
Decimal string, up to 2 decimals.
selected_variants[object]
Show fields
product_idstringrequired
Numeric id as a string.
variant_idstring
Numeric id as a string.
discount_typeenumrequired
decrease_fixed: Take a fixed amount off the price.decrease_percentage: Take a percentage off (at most 100).increase_fixed: Add a fixed amount.increase_percentage: Add a percentage.set_fixed_price: The price becomes exactly the value.apply_fixed,apply_increased_fixed: Older items only; read-only. Writeset_fixed_priceinstead.
discount_valuestringrequired
Decimal string, up to 2 decimals.
Returns
Section titled “Returns”dataRule
The new rule.
curl -X POST "https://solution-public-api.bss-b2b.solutions/api/v2/price-list/rules" \ -H "X-API-Key: $B2B_API_KEY" \ -H "X-Shop-Domain: your-store.myshopify.com" \ -H "Content-Type: application/json" \ -d '{ "name": "Wholesale", "priority": 1, "apply_to": "all", "selected_products": [ { "product_id": "8123456788001", "discount_type": "decrease_percentage", "discount_value": "10" }, { "product_id": "8123456788002", "discount_type": "set_fixed_price", "discount_value": "19.90" } ], "status": "disabled"}'{ "success": true, "status": "success", "data": { "id": "25117", "name": "Wholesale", "priority": 1, "status": "disabled", "apply_to": "all", "customer_ids": [], "customer_tags": [], "company_location_ids": [], "exclude_from": "none", "exc_customer_tags": [], "exc_customers": [], "exc_company_location_ids": [], "apply_at": "product", "exc_product_type": "none", "exc_product_variants": [], "market_condition_type": "all", "market_ids": [], "start_at": null, "end_at": null, "items_count": 0, "created_at": "2026-10-21T09:32:58.000Z", "updated_at": "2026-10-21T09:32:58.000Z" }, "meta": { "timestamp": "2026-10-21T09:32:58.937Z", "version": "v2", "request_id": "2c2b8d8c-7630-43ca-a91a-9e46f8b30b1d", "rate_limit": { "cost": 11, "limit": 600, "remaining": 589, "restore_rate": 10 } }}Get a rule
GET/api/v2/price-list/rules/{id}
Get a rule with its item count; read the items from .../items.
Path parameters
Section titled “Path parameters”idstringrequired
Rule id.
Returns
Section titled “Returns”dataRule
The rule. An id that does not exist answers 404 RESOURCE_NOT_FOUND.
curl -X GET "https://solution-public-api.bss-b2b.solutions/api/v2/price-list/rules/25117" \ -H "X-API-Key: $B2B_API_KEY" \ -H "X-Shop-Domain: your-store.myshopify.com"{ "success": true, "status": "success", "data": { "id": "25117", "name": "Wholesale", "priority": 1, "status": "disabled", "apply_to": "all", "customer_ids": [], "customer_tags": [], "company_location_ids": [], "exclude_from": "none", "exc_customer_tags": [], "exc_customers": [], "exc_company_location_ids": [], "apply_at": "product", "exc_product_type": "none", "exc_product_variants": [], "market_condition_type": "all", "market_ids": [], "start_at": null, "end_at": null, "items_count": 2, "created_at": "2026-10-21T09:32:58.000Z", "updated_at": "2026-10-21T09:32:58.000Z" }, "meta": { "timestamp": "2026-10-21T09:33:00.247Z", "version": "v2", "request_id": "481a0423-5f84-44a0-b5ab-3a0cf2af63c3", "rate_limit": { "cost": 10, "limit": 600, "remaining": 590, "restore_rate": 10 } }}Replace a rule
PUT/api/v2/price-list/rules/{id}
Replace a rule and all its items; items left out are removed.
Path parameters
Section titled “Path parameters”idstringrequired
Rule id.
Arguments
Section titled “Arguments”The same fields as Create a rule.
Returns
Section titled “Returns”dataRule
The rule after the change.
curl -X PUT "https://solution-public-api.bss-b2b.solutions/api/v2/price-list/rules/25117" \ -H "X-API-Key: $B2B_API_KEY" \ -H "X-Shop-Domain: your-store.myshopify.com" \ -H "Content-Type: application/json" \ -d '{ "name": "Wholesale (updated)", "priority": 2, "apply_to": "all", "selected_products": [ { "product_id": "8123456788001", "discount_type": "decrease_percentage", "discount_value": "10" }, { "product_id": "8123456788002", "discount_type": "set_fixed_price", "discount_value": "19.90" } ], "status": "disabled"}'{ "success": true, "status": "success", "data": { "id": "25117", "name": "Wholesale (updated)", "priority": 2, "status": "disabled", "apply_to": "all", "customer_ids": [], "customer_tags": [], "company_location_ids": [], "exclude_from": "none", "exc_customer_tags": [], "exc_customers": [], "exc_company_location_ids": [], "apply_at": "product", "exc_product_type": "none", "exc_product_variants": [], "market_condition_type": "all", "market_ids": [], "start_at": null, "end_at": null, "items_count": 0, "created_at": "2026-10-21T09:32:58.000Z", "updated_at": "2026-10-21T09:33:02.000Z" }, "meta": { "timestamp": "2026-10-21T09:33:02.903Z", "version": "v2", "request_id": "329b352b-1e61-4922-b343-3cd997041038", "rate_limit": { "cost": 11, "limit": 600, "remaining": 589, "restore_rate": 10 } }}Update a rule
PATCH/api/v2/price-list/rules/{id}
Change the header fields sent; items and the rest stay.
Path parameters
Section titled “Path parameters”idstringrequired
Rule id.
Arguments
Section titled “Arguments”namestring
1–200 characters.
priorityinteger
0–99.
statusenum
One of disabled, enabled.
apply_toenum
One of all, logged_in, non_logged_in, customer_ids, customer_tags, company_location.
customer_ids[string]
customer_tags[string]
company_location_ids[string]
exclude_fromenum
One of none, customer_tags, customer_ids, company_location.
exc_customer_tags[string]
exc_customers[string]
exc_company_location_ids[string]
apply_atenum
product: Items are products: every variant of the product gets the price. Sendselected_products.variant: Items are variants. Sendselected_variants.
exc_product_typeenum
One of none, by_variants.
exc_product_variants[string]
market_condition_typeenum
One of all, by_ids.
market_ids[string]
start_atstring
UTC; null or left out applies the rule at once. UTC, ending in Z.
end_atstring
UTC, after start_at; null or left out never ends. UTC, ending in Z.
Returns
Section titled “Returns”dataRule
The rule after the change.
curl -X PATCH "https://solution-public-api.bss-b2b.solutions/api/v2/price-list/rules/25117" \ -H "X-API-Key: $B2B_API_KEY" \ -H "X-Shop-Domain: your-store.myshopify.com" \ -H "Content-Type: application/json" \ -d '{ "name": "Wholesale 2026", "priority": 3}'{ "success": true, "status": "success", "data": { "id": "25117", "name": "Wholesale 2026", "priority": 3, "status": "disabled", "apply_to": "all", "customer_ids": [], "customer_tags": [], "company_location_ids": [], "exclude_from": "none", "exc_customer_tags": [], "exc_customers": [], "exc_company_location_ids": [], "apply_at": "product", "exc_product_type": "none", "exc_product_variants": [], "market_condition_type": "all", "market_ids": [], "start_at": null, "end_at": null, "items_count": 2, "created_at": "2026-10-21T09:32:58.000Z", "updated_at": "2026-10-21T09:33:04.000Z" }, "meta": { "timestamp": "2026-10-21T09:33:04.231Z", "version": "v2", "request_id": "ab789d8f-6986-437e-90d8-3ba4b3695534", "rate_limit": { "cost": 11, "limit": 600, "remaining": 589, "restore_rate": 10 } }}Delete a rule
DEL/api/v2/price-list/rules/{id}
Delete a rule and its items.
Path parameters
Section titled “Path parameters”idstringrequired
Rule id.
Returns
Section titled “Returns”data.idstring
Id of the deleted rule.
data.deletedboolean
true.
curl -X DELETE "https://solution-public-api.bss-b2b.solutions/api/v2/price-list/rules/25117" \ -H "X-API-Key: $B2B_API_KEY" \ -H "X-Shop-Domain: your-store.myshopify.com"{ "success": true, "status": "success", "data": { "id": "25117", "deleted": true }, "meta": { "timestamp": "2026-10-21T09:33:12.168Z", "version": "v2", "request_id": "a66122d6-cddb-42ef-ad7a-2dda6a4f680f", "rate_limit": { "cost": 11, "limit": 600, "remaining": 589, "restore_rate": 10 } }}Delete rules in bulk
POST/api/v2/price-list/rules/bulk-delete
Delete up to 250 rules; an unknown id fails on its own.
See Bulk & idempotency.
Arguments
Section titled “Arguments”ids[string]required
1–250 rule ids.
Returns
Section titled “Returns”data.results[object]
One entry per id: index, id, result (deleted or error) and error (code, message) when it failed.
data.summaryobject
total, succeeded, failed.
curl -X POST "https://solution-public-api.bss-b2b.solutions/api/v2/price-list/rules/bulk-delete" \ -H "X-API-Key: $B2B_API_KEY" \ -H "X-Shop-Domain: your-store.myshopify.com" \ -H "Content-Type: application/json" \ -d '{ "ids": [ "999999999" ]}'{ "success": true, "status": "success", "data": { "results": [ { "index": 0, "id": "999999999", "result": "error", "error": { "code": "RESOURCE_NOT_FOUND", "message": "Resource not found" } } ], "summary": { "total": 1, "succeeded": 0, "failed": 1 } }, "meta": { "timestamp": "2026-10-21T09:33:10.841Z", "version": "v2", "request_id": "f8089232-2940-4da6-941b-95a794841f77", "rate_limit": { "cost": 11, "limit": 600, "remaining": 589, "restore_rate": 10 } }}Upload rules to the storefront
POST/api/v2/price-list/rules/upload
Upload the rules to the storefront, as the app does.
The body is empty. See Upload.
Returns
Section titled “Returns”data.statusenum
uploaded, or partial_success when some rules did not reach the storefront.
data.skippedobject
capacity_exceeded, write_failed and rule_id_range; see Upload.
curl -X POST "https://solution-public-api.bss-b2b.solutions/api/v2/price-list/rules/upload" \ -H "X-API-Key: $B2B_API_KEY" \ -H "X-Shop-Domain: your-store.myshopify.com"Answer of the Net Terms upload; every module answers in this shape.
{ "success": true, "status": "success", "data": { "status": "uploaded", "skipped": { "capacity_exceeded": 0, "write_failed": 0, "rule_id_range": null } }, "meta": { "timestamp": "2026-10-21T09:34:46.663Z", "version": "v2", "request_id": "db2079e7-e134-412e-9943-e2c2b29a9e8c", "rate_limit": { "cost": 20, "limit": 600, "remaining": 580, "restore_rate": 10 } }}List a rule's items
GET/api/v2/price-list/rules/{id}/items
List a rule’s items in the order they were written.
Path parameters
Section titled “Path parameters”idstringrequired
Rule id.
Returns
Section titled “Returns”data[Item]
The items of this page.
meta.paginationobject
limit, next_cursor, prev_cursor and links to the next and previous pages.
curl -X GET "https://solution-public-api.bss-b2b.solutions/api/v2/price-list/rules/25117/items?limit=2" \ -H "X-API-Key: $B2B_API_KEY" \ -H "X-Shop-Domain: your-store.myshopify.com"{ "success": true, "status": "success", "data": [ { "product_id": "8123456788001", "variant_id": null, "discount_type": "decrease_percentage", "discount_value": "10.00" }, { "product_id": "8123456788002", "variant_id": null, "discount_type": "set_fixed_price", "discount_value": "19.90" } ], "meta": { "timestamp": "2026-10-21T09:33:06.881Z", "version": "v2", "request_id": "0facd230-ab8b-41f3-9284-4dc6b9da17cd", "rate_limit": { "cost": 10, "limit": 600, "remaining": 590, "restore_rate": 10 }, "pagination": { "limit": 2, "next_cursor": "eyJ2IjoxLCJkIjoibmV4dCIsImsiOlsxMDIxNDY5XSwiZiI6IlQxUE5vWXdycWd3RFZMdGYifQ", "prev_cursor": null, "links": { "self": "/api/v2/price-list/rules/25117/items?limit=2", "next": "/api/v2/price-list/rules/25117/items?limit=2&cursor=eyJ2IjoxLCJkIjoibmV4dCIsImsiOlsxMDIxNDY5XSwiZiI6IlQxUE5vWXdycWd3RFZMdGYifQ", "prev": null } } }}Count a rule's items
GET/api/v2/price-list/rules/{id}/items/count
Count a rule’s items without reading them.
Path parameters
Section titled “Path parameters”idstringrequired
Rule id.
Returns
Section titled “Returns”data.idstring
Rule id.
data.items_countinteger
Number of items the rule has.
curl -X GET "https://solution-public-api.bss-b2b.solutions/api/v2/price-list/rules/25117/items/count" \ -H "X-API-Key: $B2B_API_KEY" \ -H "X-Shop-Domain: your-store.myshopify.com"{ "success": true, "status": "success", "data": { "id": "25117", "items_count": 3 }, "meta": { "timestamp": "2026-10-21T09:33:08.195Z", "version": "v2", "request_id": "48d9226f-8369-4dfd-9177-30dd86ed1a2d", "rate_limit": { "cost": 10, "limit": 600, "remaining": 590, "restore_rate": 10 } }}Add or reprice items in bulk
POST/api/v2/price-list/rules/{id}/items/bulk-upsert
Add or reprice up to 250 items; the other items stay.
Path parameters
Section titled “Path parameters”idstringrequired
Rule id.
Arguments
Section titled “Arguments”items[object]required
1–250 items.
Show fields
product_idstringrequired
Numeric id as a string.
variant_idstring
Numeric id as a string.
discount_typeenumrequired
decrease_fixed: Take a fixed amount off the price.decrease_percentage: Take a percentage off (at most 100).increase_fixed: Add a fixed amount.increase_percentage: Add a percentage.set_fixed_price: The price becomes exactly the value.apply_fixed,apply_increased_fixed: Older items only; read-only. Writeset_fixed_priceinstead.
discount_valuestringrequired
Decimal string, up to 2 decimals.
Returns
Section titled “Returns”data.idstring
Rule id.
data.items_countinteger
Number of items the rule has.
curl -X POST "https://solution-public-api.bss-b2b.solutions/api/v2/price-list/rules/25117/items/bulk-upsert" \ -H "X-API-Key: $B2B_API_KEY" \ -H "X-Shop-Domain: your-store.myshopify.com" \ -H "Content-Type: application/json" \ -d '{ "items": [ { "product_id": "8123456788003", "discount_type": "decrease_fixed", "discount_value": "5" } ]}'{ "success": true, "status": "success", "data": { "id": "25117", "items_count": 3 }, "meta": { "timestamp": "2026-10-21T09:33:05.563Z", "version": "v2", "request_id": "bb2a0b76-74e2-4bb7-a1b9-96ba612981a7", "rate_limit": { "cost": 11, "limit": 600, "remaining": 589, "restore_rate": 10 } }}Remove items in bulk
POST/api/v2/price-list/rules/{id}/items/bulk-delete
Remove up to 250 items by the key of the rule level; unknown ones are skipped.
Path parameters
Section titled “Path parameters”idstringrequired
Rule id.
Arguments
Section titled “Arguments”product_ids[string]
1–250 items.
variant_ids[string]
1–250 items.
Returns
Section titled “Returns”data.idstring
Rule id.
data.items_countinteger
Number of items the rule has.
curl -X POST "https://solution-public-api.bss-b2b.solutions/api/v2/price-list/rules/25117/items/bulk-delete" \ -H "X-API-Key: $B2B_API_KEY" \ -H "X-Shop-Domain: your-store.myshopify.com" \ -H "Content-Type: application/json" \ -d '{ "product_ids": [ "8123456788003" ]}'{ "success": true, "status": "success", "data": { "id": "25117", "items_count": 2 }, "meta": { "timestamp": "2026-10-21T09:33:09.523Z", "version": "v2", "request_id": "3ed77a02-377e-4df4-a848-c04eac002688", "rate_limit": { "cost": 11, "limit": 600, "remaining": 589, "restore_rate": 10 } }}- Public API v2: Authentication & keysCreate Public API v2 keys with per-module permissions, send them with every request, and keep them safe.
- Public API v2: Auto TagRules that tag customers and orders, add notes or mark a customer tax exempt when an event happens.
- Public API v2: Buy X Get YBuy X Get Y offers: what the customer buys, what they get, and the discount on it.
- Public API v2: Bulk & idempotencyCreate, replace or delete up to 250 rules in one Public API v2 request, and retry POST requests safely.