Public API v2: Shipping Rate
Shipping rates by quantity, amount or weight, with usage limits.
| Scopes | shipping-rate:read, shipping-rate:write |
| Plan | Plans with Shipping Rate; 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”nameis unique in the store, any case. Usage is counted by name, so renaming a rule stops counting the orders placed before.usage_limit.per_customerneeds customers to be identified: not withapply_toallornon_logged_in.total_remainingis counted by the app.
Shipping Rate API endpoints
- GET/api/v2/shipping-rate/rules# List rules
- POST/api/v2/shipping-rate/rules# Create a rule
- GET/api/v2/shipping-rate/rules/{id}# Get a rule
- PUT/api/v2/shipping-rate/rules/{id}# Replace a rule
- DEL/api/v2/shipping-rate/rules/{id}# Delete a rule
- POST/api/v2/shipping-rate/rules/bulk-upsert# Create or replace rules in bulk
- POST/api/v2/shipping-rate/rules/bulk-delete# Delete rules in bulk
- POST/api/v2/shipping-rate/rules/upload# Upload rules to the storefront
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.
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.
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.
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.
exc_customer_tags[string]
Used when exclude_from is customer_tags.
exc_customers[string]
Used when exclude_from is customer_ids.
ProductsCommon object
Which products the rule covers.
Show fields
product_condition_typeenum
all every product · by_ids · by_collections · by_tags · by_variants. Accepted here: all, by_ids, by_collections, by_tags, by_variants.
product_ids[string]
Used when the type is by_ids; required and not empty then.
product_collections[string]
Used when the type is by_collections; required and not empty then.
product_tags[string]
Used when the type is by_tags; required and not empty then.
variant_ids[string]
Used when the type is by_variants; required and not empty then.
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_specific_products[string]
Used when exc_product_type is by_ids.
exc_product_collections[string]
Used when exc_product_type is by_collections.
exc_product_tags[string]
Used when exc_product_type is by_tags.
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.
rule_settingenum
One of quantity, amount, weight.
qty_table[object]
[] unless rule_setting is quantity.
Show fields
frominteger
tointeger or null
discount_typeenum
One of percentage, flat_rate.
discount_valuestring
amount_table[object]
[] unless rule_setting is amount.
Show fields
fromstring
tostring or null
discount_typeenum
One of percentage, flat_rate.
discount_valuestring
weight_table[object]
[] unless rule_setting is weight.
Show fields
unitenum
One of g, kg, lb, oz.
fromstring
tostring or null
discount_typeenum
One of percentage, flat_rate.
discount_valuestring
usage_limitobject
Show fields
totalinteger or null
per_customerinteger or null
total_remaininginteger or nullread-only
Read only: orders left under usage_limit.total, null without one. Set to the limit on create and when the limit changes.
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.
created_atstring or nullread-only
UTC, ending in Z.
updated_atstring or nullread-only
UTC, ending in Z.
{ "id": "56", "name": "Wholesale shipping", "status": "disabled", "apply_to": "customer_tags", "customer_ids": [], "customer_tags": [ "wholesale" ], "exclude_from": "none", "exc_customer_tags": [], "exc_customers": [], "product_condition_type": "by_variants", "product_ids": [], "product_collections": [], "product_tags": [], "variant_ids": [ "4501234567899001" ], "exc_product_type": "none", "exc_specific_products": [], "exc_product_collections": [], "exc_product_tags": [], "market_condition_type": "by_ids", "market_ids": [ "24150055" ], "rule_setting": "quantity", "qty_table": [ { "from": 1, "to": 9, "discount_type": "percentage", "discount_value": "100.00" }, { "from": 10, "to": null, "discount_type": "flat_rate", "discount_value": "4.50" } ], "amount_table": [], "weight_table": [], "usage_limit": { "total": 100, "per_customer": 2 }, "total_remaining": 100, "start_at": null, "end_at": null, "created_at": "2026-10-21T09:35:04.000Z", "updated_at": "2026-10-21T09:35:04.000Z"}List rules
GET/api/v2/shipping-rate/rules
List rules, newest first.
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.
filter_rule_settingenum
One of quantity, amount, weight.
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/shipping-rate/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": "56", "name": "Wholesale shipping", "status": "disabled", "apply_to": "customer_tags", "customer_ids": [], "customer_tags": [ "wholesale" ], "exclude_from": "none", "exc_customer_tags": [], "exc_customers": [], "product_condition_type": "by_variants", "product_ids": [], "product_collections": [], "product_tags": [], "variant_ids": [ "4501234567899001" ], "exc_product_type": "none", "exc_specific_products": [], "exc_product_collections": [], "exc_product_tags": [], "market_condition_type": "by_ids", "market_ids": [ "24150055" ], "rule_setting": "quantity", "qty_table": [ { "from": 1, "to": 9, "discount_type": "percentage", "discount_value": "100.00" }, { "from": 10, "to": null, "discount_type": "flat_rate", "discount_value": "4.50" } ], "amount_table": [], "weight_table": [], "usage_limit": { "total": 100, "per_customer": 2 }, "total_remaining": 100, "start_at": null, "end_at": null, "created_at": "2026-10-21T09:35:04.000Z", "updated_at": "2026-10-21T09:35:04.000Z" } ], "meta": { "timestamp": "2026-10-21T09:35:07.530Z", "version": "v2", "request_id": "bf163355-a437-4eea-9d71-e708d676ec42", "rate_limit": { "cost": 10, "limit": 600, "remaining": 590, "restore_rate": 10 }, "pagination": { "limit": 2, "next_cursor": null, "prev_cursor": null, "links": { "self": "/api/v2/shipping-rate/rules?limit=2&filter_name=Wholesale", "next": null, "prev": null } } }}Create a rule
POST/api/v2/shipping-rate/rules
Create a rule.
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
The shipping rate title at checkout, unique in the shop: the order webhook counts usage by it. 1–200 characters.
statusenumrequired
disabled rules are kept but not applied. One of disabled, 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.
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.
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.
exc_customer_tags[string]
Used when exclude_from is customer_tags.
exc_customers[string]
Used when exclude_from is customer_ids.
ProductsCommon objectrequired
Which products the rule covers.
Show fields
product_condition_typeenum
all every product · by_ids · by_collections · by_tags · by_variants. Accepted here: all, by_ids, by_collections, by_tags, by_variants.
product_ids[string]
Used when the type is by_ids; required and not empty then.
product_collections[string]
Used when the type is by_collections; required and not empty then.
product_tags[string]
Used when the type is by_tags; required and not empty then.
variant_ids[string]
Used when the type is by_variants; required and not empty then.
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.
exc_specific_products[string]
Used when exc_product_type is by_ids.
exc_product_collections[string]
Used when exc_product_type is by_collections.
exc_product_tags[string]
Used when exc_product_type is by_tags.
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.
rule_settingenumrequired
quantity,amount,weight: What the rate ranges count; sendqty_table,amount_tableorweight_table.
qty_table[object]
Required when rule_setting is quantity; rows ascend and do not overlap. 1–50 items.
Show fields
fromintegerrequired
0–2,147,483,647.
tointeger
null or left out: no upper bound, last row only. 1–2,147,483,647.
discount_typeenumrequired
flat_rate: A fixed shipping cost, in the store currency.percentage: A percentage of the order total, or of the products this rule covers, as set in the Shipping Rate settings of the app (at most 100).
discount_valuestringrequired
A percentage (at most 100), or a rate in the shop currency. Decimal string, up to 2 decimals.
amount_table[object]
Required when rule_setting is amount; rows ascend and do not overlap. 1–50 items.
Show fields
fromstringrequired
An amount in the shop currency. Decimal string, up to 2 decimals.
tostring
null or left out: no upper bound, last row only. Decimal string, up to 2 decimals.
discount_typeenumrequired
flat_rate: A fixed shipping cost, in the store currency.percentage: A percentage of the order total, or of the products this rule covers, as set in the Shipping Rate settings of the app (at most 100).
discount_valuestringrequired
A percentage (at most 100), or a rate in the shop currency. Decimal string, up to 2 decimals.
weight_table[object]
Required when rule_setting is weight; rows ascend and do not overlap. 1–50 items.
Show fields
unitenumrequired
The same on every row.
g,kg,lb,oz: Every row of a weight table uses the same unit.
fromstringrequired
Decimal string, up to 2 decimals.
tostring
null or left out: no upper bound, last row only. Decimal string, up to 2 decimals.
discount_typeenumrequired
flat_rate: A fixed shipping cost, in the store currency.percentage: A percentage of the order total, or of the products this rule covers, as set in the Shipping Rate settings of the app (at most 100).
discount_valuestringrequired
A percentage (at most 100), or a rate in the shop currency. Decimal string, up to 2 decimals.
usage_limitobject
Left out: no limit. The server keeps the remaining count: see total_remaining.
Show fields
totalinteger
Orders the rule applies to in all; null: no limit. 0–2,147,483,647.
per_customerinteger
Orders per customer; null: no limit. 0–2,147,483,647.
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.
Returns
Section titled “Returns”dataRule
The new rule.
curl -X POST "https://solution-public-api.bss-b2b.solutions/api/v2/shipping-rate/rules" \ -H "X-API-Key: $B2B_API_KEY" \ -H "X-Shop-Domain: your-store.myshopify.com" \ -H "Content-Type: application/json" \ -d '{ "name": "Wholesale shipping", "status": "disabled", "apply_to": "customer_tags", "customer_tags": [ "wholesale" ], "product_condition_type": "by_variants", "variant_ids": [ "4501234567899001" ], "market_condition_type": "by_ids", "market_ids": [ "24150055" ], "rule_setting": "quantity", "qty_table": [ { "from": 1, "to": 9, "discount_type": "percentage", "discount_value": "100" }, { "from": 10, "to": null, "discount_type": "flat_rate", "discount_value": "4.5" } ], "usage_limit": { "total": 100, "per_customer": 2 }}'{ "success": true, "status": "success", "data": { "id": "56", "name": "Wholesale shipping", "status": "disabled", "apply_to": "customer_tags", "customer_ids": [], "customer_tags": [ "wholesale" ], "exclude_from": "none", "exc_customer_tags": [], "exc_customers": [], "product_condition_type": "by_variants", "product_ids": [], "product_collections": [], "product_tags": [], "variant_ids": [ "4501234567899001" ], "exc_product_type": "none", "exc_specific_products": [], "exc_product_collections": [], "exc_product_tags": [], "market_condition_type": "by_ids", "market_ids": [ "24150055" ], "rule_setting": "quantity", "qty_table": [ { "from": 1, "to": 9, "discount_type": "percentage", "discount_value": "100.00" }, { "from": 10, "to": null, "discount_type": "flat_rate", "discount_value": "4.50" } ], "amount_table": [], "weight_table": [], "usage_limit": { "total": 100, "per_customer": 2 }, "total_remaining": 100, "start_at": null, "end_at": null, "created_at": "2026-10-21T09:35:04.000Z", "updated_at": "2026-10-21T09:35:04.000Z" }, "meta": { "timestamp": "2026-10-21T09:35:04.899Z", "version": "v2", "request_id": "3ebdfacd-24d6-46f0-b8a4-c460cab1c794", "rate_limit": { "cost": 11, "limit": 600, "remaining": 589, "restore_rate": 10 } }}Get a rule
GET/api/v2/shipping-rate/rules/{id}
Get a rule.
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/shipping-rate/rules/56" \ -H "X-API-Key: $B2B_API_KEY" \ -H "X-Shop-Domain: your-store.myshopify.com"{ "success": true, "status": "success", "data": { "id": "56", "name": "Wholesale shipping", "status": "disabled", "apply_to": "customer_tags", "customer_ids": [], "customer_tags": [ "wholesale" ], "exclude_from": "none", "exc_customer_tags": [], "exc_customers": [], "product_condition_type": "by_variants", "product_ids": [], "product_collections": [], "product_tags": [], "variant_ids": [ "4501234567899001" ], "exc_product_type": "none", "exc_specific_products": [], "exc_product_collections": [], "exc_product_tags": [], "market_condition_type": "by_ids", "market_ids": [ "24150055" ], "rule_setting": "quantity", "qty_table": [ { "from": 1, "to": 9, "discount_type": "percentage", "discount_value": "100.00" }, { "from": 10, "to": null, "discount_type": "flat_rate", "discount_value": "4.50" } ], "amount_table": [], "weight_table": [], "usage_limit": { "total": 100, "per_customer": 2 }, "total_remaining": 100, "start_at": null, "end_at": null, "created_at": "2026-10-21T09:35:04.000Z", "updated_at": "2026-10-21T09:35:04.000Z" }, "meta": { "timestamp": "2026-10-21T09:35:06.221Z", "version": "v2", "request_id": "bf15e629-06f8-406c-929f-9a50e6563ef0", "rate_limit": { "cost": 10, "limit": 600, "remaining": 590, "restore_rate": 10 } }}Replace a rule
PUT/api/v2/shipping-rate/rules/{id}
Replace a rule and its rate table; optional fields left out go back to their defaults.
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/shipping-rate/rules/56" \ -H "X-API-Key: $B2B_API_KEY" \ -H "X-Shop-Domain: your-store.myshopify.com" \ -H "Content-Type: application/json" \ -d '{ "name": "Wholesale shipping (updated)", "status": "disabled", "apply_to": "customer_tags", "customer_tags": [ "wholesale" ], "product_condition_type": "by_variants", "variant_ids": [ "4501234567899001" ], "market_condition_type": "by_ids", "market_ids": [ "24150055" ], "rule_setting": "quantity", "qty_table": [ { "from": 1, "to": 9, "discount_type": "percentage", "discount_value": "100" }, { "from": 10, "to": null, "discount_type": "flat_rate", "discount_value": "4.5" } ], "usage_limit": { "total": 100, "per_customer": 2 }}'{ "success": true, "status": "success", "data": { "id": "56", "name": "Wholesale shipping (updated)", "status": "disabled", "apply_to": "customer_tags", "customer_ids": [], "customer_tags": [ "wholesale" ], "exclude_from": "none", "exc_customer_tags": [], "exc_customers": [], "product_condition_type": "by_variants", "product_ids": [], "product_collections": [], "product_tags": [], "variant_ids": [ "4501234567899001" ], "exc_product_type": "none", "exc_specific_products": [], "exc_product_collections": [], "exc_product_tags": [], "market_condition_type": "by_ids", "market_ids": [ "24150055" ], "rule_setting": "quantity", "qty_table": [ { "from": 1, "to": 9, "discount_type": "percentage", "discount_value": "100.00" }, { "from": 10, "to": null, "discount_type": "flat_rate", "discount_value": "4.50" } ], "amount_table": [], "weight_table": [], "usage_limit": { "total": 100, "per_customer": 2 }, "total_remaining": 100, "start_at": null, "end_at": null, "created_at": "2026-10-21T09:35:04.000Z", "updated_at": "2026-10-21T09:35:08.000Z" }, "meta": { "timestamp": "2026-10-21T09:35:08.856Z", "version": "v2", "request_id": "498b9b00-b280-4405-b51b-a0ae2d2beb19", "rate_limit": { "cost": 11, "limit": 600, "remaining": 589, "restore_rate": 10 } }}Delete a rule
DEL/api/v2/shipping-rate/rules/{id}
Delete a rule.
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/shipping-rate/rules/56" \ -H "X-API-Key: $B2B_API_KEY" \ -H "X-Shop-Domain: your-store.myshopify.com"{ "success": true, "status": "success", "data": { "id": "56", "deleted": true }, "meta": { "timestamp": "2026-10-21T09:35:12.819Z", "version": "v2", "request_id": "0d53139c-b88f-4e8e-975c-dae0cecb9334", "rate_limit": { "cost": 11, "limit": 600, "remaining": 589, "restore_rate": 10 } }}Create or replace rules in bulk
POST/api/v2/shipping-rate/rules/bulk-upsert
Create or replace up to 250 rules; each one succeeds or fails on its own.
See Bulk & idempotency.
Arguments
Section titled “Arguments”rules[object]required
1–250 rules, each with the fields of Create a rule.
Show fields
idstring
Set it to replace that rule, as Replace a rule does; leave it out to create one.
Returns
Section titled “Returns”data.results[object]
One entry per rule, in the order sent.
Show fields
indexinteger
Position of the rule in rules.
idstring
Rule id.
resultenum
created, updated or error.
errorobject
code and message, only when result is error.
data.summaryobject
total, succeeded, failed.
curl -X POST "https://solution-public-api.bss-b2b.solutions/api/v2/shipping-rate/rules/bulk-upsert" \ -H "X-API-Key: $B2B_API_KEY" \ -H "X-Shop-Domain: your-store.myshopify.com" \ -H "Content-Type: application/json" \ -d '{ "rules": [ { "name": "Wholesale shipping B", "status": "disabled", "apply_to": "customer_tags", "customer_tags": [ "wholesale" ], "product_condition_type": "by_variants", "variant_ids": [ "4501234567899001" ], "market_condition_type": "by_ids", "market_ids": [ "24150055" ], "rule_setting": "quantity", "qty_table": [ { "from": 1, "to": 9, "discount_type": "percentage", "discount_value": "100" }, { "from": 10, "to": null, "discount_type": "flat_rate", "discount_value": "4.5" } ], "usage_limit": { "total": 100, "per_customer": 2 } }, { "name": "Wholesale shipping (bulk)", "status": "disabled", "apply_to": "customer_tags", "customer_tags": [ "wholesale" ], "product_condition_type": "by_variants", "variant_ids": [ "4501234567899001" ], "market_condition_type": "by_ids", "market_ids": [ "24150055" ], "rule_setting": "quantity", "qty_table": [ { "from": 1, "to": 9, "discount_type": "percentage", "discount_value": "100" }, { "from": 10, "to": null, "discount_type": "flat_rate", "discount_value": "4.5" } ], "usage_limit": { "total": 100, "per_customer": 2 }, "id": "56" } ]}'{ "success": true, "status": "success", "data": { "results": [ { "index": 0, "id": "57", "result": "created" }, { "index": 1, "id": "56", "result": "updated" } ], "summary": { "total": 2, "succeeded": 2, "failed": 0 } }, "meta": { "timestamp": "2026-10-21T09:35:10.184Z", "version": "v2", "request_id": "5328dcd7-6686-41c6-9f07-3ee8fbee9594", "rate_limit": { "cost": 11, "limit": 600, "remaining": 589, "restore_rate": 10 } }}Delete rules in bulk
POST/api/v2/shipping-rate/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/shipping-rate/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": [ "57", "999999999" ]}'{ "success": true, "status": "success", "data": { "results": [ { "index": 0, "id": "57", "result": "deleted" }, { "index": 1, "id": "999999999", "result": "error", "error": { "code": "RESOURCE_NOT_FOUND", "message": "Resource not found" } } ], "summary": { "total": 2, "succeeded": 1, "failed": 1 } }, "meta": { "timestamp": "2026-10-21T09:35:11.509Z", "version": "v2", "request_id": "79564b88-0ea6-4aac-b70f-272824076a14", "rate_limit": { "cost": 11, "limit": 600, "remaining": 589, "restore_rate": 10 } }}Upload rules to the storefront
POST/api/v2/shipping-rate/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/shipping-rate/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 } }}- 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.