> For the complete documentation index, see [llms.txt](https://docs-shpf.bsscommerce.com/b2b-wholesale-solution/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs-shpf.bsscommerce.com/b2b-wholesale-solution/api-integration/public-apis/public-apis-for-uploading.md).

# 🔗Public APIs for Uploading

These public endpoints allow you to upload pricing and discount rules from an external system directly into your Shopify store using the BSS B2B Solution app.

When a request is made, the app automatically uploads all **enabled rules** to your **active theme**, keeping your storefront pricing logic up-to-date.

***

## 🔑 Get the Access Key

1. Generate your API Access Key in the app dashboard under **API Integration → Public APIs**.
2. **Security Note:** Your Secret Key is displayed **only once** upon generation for enhanced security. Copy and store it in a secure password manager or server environment variable immediately.
3. Include the key in your request payload or header for authentication.

***

## 🔐 Authentication

All requests require an **Access Key** generated in your app. You can include it either way:

* In the request body, as `accessKey` (see the examples below), **or**
* As a header:

```http
x-bss-b2b-api-key: <accessKey>
```

> ⚠️ **Important:** Each endpoint has a rate limit of **1 request per module per 5 minutes**.\
> Exceeding this limit returns a `429 Too Many Requests` response.

***

### I. 🧾 Upload Custom Pricing Rules

Upload all active **Custom Pricing** rules from your app or system to Shopify.

#### Endpoint

```http
POST https://b2b-solution-public-api.bsscommerce.com/api/v1/rule/upload
```

#### Request Body

| Field       | Type   | Required | Description                                            |
| ----------- | ------ | -------- | ------------------------------------------------------ |
| `domain`    | String | ✅        | Your store’s `myshopify.com` domain                    |
| `accessKey` | String | ✅        | API Access Key generated from the BSS B2B Solution app |

#### Example Request

```bash
curl -X POST "https://b2b-solution-public-api.bsscommerce.com/api/v1/rule/upload" \
  -H "Content-Type: application/json" \
  -d '{
        "domain": "bsscommerce-store.myshopify.com",
        "accessKey": "yt1pRFAU8ARdwQORhz/Ww7vyS+xxxxxxxxxxxxxx"
      }'
```

#### Responses

| Code                    | Meaning             | Notes                                              |
| ----------------------- | ------------------- | -------------------------------------------------- |
| `200 OK`                | Upload successful   | All enabled rules were applied to the active theme |
| `429 Too Many Requests` | Rate limit exceeded | Wait 5 minutes before sending another request      |

***

### II. 📦 Upload Volume Pricing Rules

Upload all active **Quantity-based** or **Volume-based** rules to your store.

#### Endpoint

```http
POST https://b2b-solution-public-api.bsscommerce.com/api/v1/qb/rule/upload
```

#### Request Body

| Field       | Type   | Required | Description                           |
| ----------- | ------ | -------- | ------------------------------------- |
| `domain`    | String | ✅        | Your store’s `myshopify.com` domain   |
| `accessKey` | String | ✅        | API Access Key generated from the app |

#### Example Request

```bash
curl -X POST "https://b2b-solution-public-api.bsscommerce.com/api/v1/qb/rule/upload" \
  -H "Content-Type: application/json" \
  -d '{
        "domain": "bsscommerce-store.myshopify.com",
        "accessKey": "yt1pRFAU8ARdwQORhz/Ww7vyS+xxxxxxxxxxxxxx"
      }'
```

#### Responses

| Code                    | Meaning                     | Notes                              |
| ----------------------- | --------------------------- | ---------------------------------- |
| `200 OK`                | Rules uploaded successfully | Quantity/Amount Breaks were synced |
| `429 Too Many Requests` | Rate limit exceeded         | Wait 5 minutes before retrying     |

***

### III. 💰 Upload Price List Rules

Upload all active **Price List** rules to your Shopify store.

#### Endpoint

```http
POST https://b2b-solution-public-api.bsscommerce.com/api/v1/pl/rule/upload
```

#### Request Body

| Field       | Type   | Required | Description                           |
| ----------- | ------ | -------- | ------------------------------------- |
| `domain`    | String | ✅        | Your store’s `myshopify.com` domain   |
| `accessKey` | String | ✅        | API Access Key generated from the app |

#### Example Request

```bash
curl -X POST "https://b2b-solution-public-api.bsscommerce.com/api/v1/pl/rule/upload" \
  -H "Content-Type: application/json" \
  -d '{
        "domain": "bsscommerce-store.myshopify.com",
        "accessKey": "yt1pRFAU8ARdwQORhz/Ww7vyS+xxxxxxxxxxxxxx"
      }'
```

#### Responses

| Code                    | Meaning                     | Notes                                          |
| ----------------------- | --------------------------- | ---------------------------------------------- |
| `200 OK`                | Rules uploaded successfully | Price List data has been deployed to the theme |
| `429 Too Many Requests` | Rate limit exceeded         | Wait 5 minutes before sending another request  |

***

## 🧠 Data Storage and Capacity Limitations

When uploading rules through these APIs, the data is stored in **Shopify metafields** as JSON.

| Specification           | Details                                                     |
| ----------------------- | ----------------------------------------------------------- |
| **Maximum metafields**  | 10 keys                                                     |
| **Data type**           | JSON                                                        |
| **Max size per key**    | 2,000,000 characters                                        |
| **Total max data size** | \~20,000,000 characters                                     |
| **Exceeding data**      | Any content beyond capacity is safely skipped and reported  |
| **Uploaded content**    | Primarily rule data and minimal setting data                |
| **Active rules only**   | Only enabled rules are uploaded — inactive ones are ignored |

### Partial Upload & Capacity Skip Reporting

If your uploaded rule dataset exceeds Shopify's maximum single metafield capacity, the API avoids total failure by persisting all rules that fit within capacity and returning a structured partial report:

```json
{
  "status": "partial_success",
  "message": "Some rules exceeded metafield capacity and were skipped.",
  "data": {
    "total_rules": 1200,
    "saved_rules": 950,
    "skipped_rules": 250,
    "reason": "SHOPIFY_METAFIELD_CAPACITY_EXCEEDED",
    "skipped_rule_ids": ["rule_951", "rule_952"]
  }
}
```

When this occurs, partition large rule catalogs or prune inactive rules before re-triggering synchronization.

## ✅ Example Automation Flow

1. External system (ERP/CRM) updates B2B rules.
2. System triggers a POST request to the relevant **upload API**.
3. B2B/Wholesale Solution validates data and pushes it to the Shopify metafields.
4. Storefront automatically reflects updated pricing and rule logic.

***

With these **Public Upload APIs**, your development team can fully automate pricing rule synchronization — ensuring your B2B store always delivers accurate, real-time pricing without manual updates.

{% hint style="info" %}
If you need further assistance, please feel free to reach us at [**support-sbc@bsscommerce.com**](mailto:support-sbc@bsscommerce.com) or [**Live Chat**](https://go.crisp.chat/chat/embed/?website_id=9f64b5a9-1a02-4190-93b8-8ef56b19f740).
{% endhint %}
