# Create Wholesale Pricing using APIs

This document explains how to create a new Wholesale Pricing rule using the Public API.

***

### 1. Endpoint

To create a new Wholesale Pricing record, use the following endpoint:

```
POST - https://wholesale.samita.io/api/v1/wholesale-pricings
```

***

### 2. Request Headers

All API requests must include the following required headers:

| Header                  | Description                                     | Required |
| ----------------------- | ----------------------------------------------- | -------- |
| **`X-SAMITA-API-KEY`**  | API key provided in the Wholesale app           | Yes      |
| **`X-SAMITA-SHOP-URL`** | Shopify shop domain in format xxx.myshopify.com | Yes      |
| **`CONTENT-TYPE`**      | Must be `application/json`                      | Yes      |

If any required header is missing, the request will be rejected.

***

### 3. Request Body

#### a. General Format

The data used to create Wholesale Pricing must be sent in **JSON format**.\
A sample JSON structure is provided at the end of this document.

**Sample Request JSON:**

```json
{​
  "title": "New Wholesale Pricing",​
  "status": true,​
  "apply_customer": {​
    "type": "all",​
    "tags": []​
  },​
  "exclude_customer": {​
    "type": "none",​
    "tags": []​
  },​
  "apply_product": {​
    "type": "all",​
    "product_ids": [],​
    "product_tags": [],​
    "collection_ids": [],​
    "apply_for_variants": false​
  },​
  "exclude_product": {​
    "type": "none",​
    "product_ids": [],​
    "collection_ids": []​
  },​
  "discount_for_variants": [​
    {​
      "id": 8516448190631,​
      "variant_pricing": true,​
      "variants": [​
        {​
          "id": 46747346763943,​
          "discount_groups": [​
            {​
              "name": "all",​
              "type": "percent",​
              "value": "10"​
            }​
          ]​
        }​
      ]​
    }​
  ],​
  "apply_market": {​
    "type": "all",​
    "handle": []​
  },​
  "discount_group": {​
    "type": "percent",​
    "value": "10"​
  },​
  "active_date": {​
    "types": ["start_date", "end_date"],​
    "start_at": "2026-01-15 10:00:00",​
    "end_at": "2026-01-15 10:00:00"​​
  }​
​}
```

***

#### b. title (Required)

* The name used to identify the Wholesale Pricing record
* Must be a string
* Maximum length: **255 characters**

***

#### c. status (Required)

* Defines whether the record is active or not
* Accepts only the following values:

| Value   | Description              |
| ------- | ------------------------ |
| `true`  | Pricing rule is active   |
| `false` | Pricing rule is inactive |

***

#### d. apply\_customer (Required)

Defines which customers are eligible for this pricing rule.

**Structure:**

```
"apply_customer": {​
    "type": "all",​
    "tags": []​
}
```

**type**

Accepted values (only one of the following):

* `all` – Apply to all customers
* `logged` – Apply only to logged-in customers
* `non-logged` – Apply only to guest customers
* `customer-tags` – Apply only to customers with specific tags

**tags**

* Required only when `type == customer-tags`
* Must be a comma-separated array
* Example: `["wholesale","b2b"]`

If type is not `customer-tags`, this field can be ignored.

***

#### e. exclude\_customer

Used to exclude specific customers from the pricing rule.

**Structure:**

```
"exclude_customer": {​
    "type": "none",​
    "tags": []​
}
```

**type**

* Default value: `none`
* Accepted values:

| Value           | Description                 |
| --------------- | --------------------------- |
| `none`          | Do not exclude any customer |
| `customer-tags` | Exclude customers by tags   |

**tags**

* Required only when `type == customer-tags`
* Comma-separated array
* Example: `["vip","wholesale"]`

***

#### f. apply\_product (Required)

Defines which products the pricing rule will be applied to.

**Structure:**

```
"apply_product": {​
    "type": "all",​
    "product_ids": [],​
    "product_tags": [],​
    "collection_ids": [],​
    "apply_for_variants": false​
}
```

**type**

Accepted values:

* `all`
* `products`
* `collections`
* `product-tags`

**product\_ids**

* Required only when `type == products`
* Comma-separated list of product IDs
* Example: `[1,2,3]`

**product\_tags**

* Required only when `type == product-tags`
* Example: `["tag1","tag2"]`

**collection\_ids**

* Required only when `type == collections`
* Example: `[1,2,3]`

**apply\_for\_variants**

* Determines whether discounts can be configured per variant
* Accepted values: `true` or `false`
* Default value: `false`

***

#### g. exclude\_product

Defines products to be excluded from the rule.

**Structure:**

```
"exclude_product": {​
    "type": "none",​
    "product_ids": [],​
    "collection_ids": []​
}
```

**type**

* Default: `none`
* Accepted values:

| Value         | Description                  |
| ------------- | ---------------------------- |
| `none`        | Do not exclude any product   |
| `products`    | Exclude specific products    |
| `collections` | Exclude specific collections |

Other fields are required only depending on the selected type.

***

#### h. discount\_for\_variants

Used when applying discounts per variant.

* Must be empty if `apply_product.apply_for_variants == false`
* Required when `apply_product.apply_for_variants == true`

**Example structure:**&#x20;

```
"discount_for_variants": [​
  {​
    "id": 8516448190631,​
    "variant_pricing": true,​
    "variants": [​
      {​
        "id": 46747346763943,​
        "discount_groups": [​
          {​
            "name": "all",​
            "type": "percent",​
            "value": "10"​
          }​
        ]​
      }​
    ]​
  }​
]
```

Structure:

* Array of products
* Each product contains:
  * `id` – Product ID
  * `variant_pricing` – Must be `true`
  * `variants` – Array of variants

Each variant includes:

* `id` – Variant ID
* `discount_groups` – Array of discount settings

**discount\_groups rules**

* If `apply_customer.type` is `all`, `logged`, or `non-logged`:\
  → Only **one item** is allowed in the array
* If `apply_customer.type == customer-tags`:\
  → Multiple discount groups can be provided

Fields inside discount\_groups:

| Field   | Description                              |
| ------- | ---------------------------------------- |
| `name`  | Must match customer type or customer tag |
| `type`  | Discount type                            |
| `value` | Discount value                           |

Accepted discount types:

* `percent`
* `amount`
* `fixed-amount`

Value rules:

* Must be a number greater than 0
* If type is `percent`, value must be **less than 100**

***

#### i. apply\_market (Required)

Defines which Shopify markets the rule applies to.

**Structure:**

```
"apply_market": {​
    "type": "all",​
    "handle": []​
}
```

**type**

Accepted values:

* `all`
* `specific-market`

**handle**

* Required only when `type == specific-market`
* Comma-separated list of market handles
* Example: `["japan","us"]`

***To get Market handle, kindly do as follow:***&#x20;

* In Shopify Admin page, go to **Markets** section > Click on **More actions** > Choose **Edit Market** handles > Copy the handle showing there:&#x20;

<figure><img src="https://810149679-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7AXvWN0Sv4Sg8s2aVRWp%2Fuploads%2FWdhzDT5Lh0NpfW09falY%2Fimage.png?alt=media&#x26;token=2db51ee6-6de8-48cf-819e-10809affee74" alt=""><figcaption></figcaption></figure>

<figure><img src="https://810149679-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7AXvWN0Sv4Sg8s2aVRWp%2Fuploads%2F4Y6v89TvRB0NH8iXPLys%2Fimage.png?alt=media&#x26;token=7c93abed-9ea0-4f1d-ba4f-6cee7a795944" alt=""><figcaption></figcaption></figure>

***

#### j. discount\_group

Used when discount is not configured per variant.

Required when:

* `apply_product.type` is not `products`, OR
* `apply_product.type == products` AND variants are not applied

Structure:

```
"discount_group": {​
    "type": "percent",​
    "value": "10"​
}
```

Rules are the same as described above for discount types and values.

***

#### k. active\_date

Used to configure start and end time for the pricing rule.

Structure:

```
"active_date": {​
    "types": ["start_date", "end_date"],​
    "start_at": "2026-01-15 10:00:00",​
    "end_at": "2026-01-15 10:00:00"​
}​
```

**types**

* Optional
* Accepted values: `start_date`, `end_date`
* Can include one or both, separated by comma
* Example: `["start_date","end_date"]`

**start\_at**

* Required if `types` includes `start_date`
* Format: `YYYY-MM-DD HH:MM:SS`&#x20;

**end\_at**

* Required if `types` includes `end_date`
* Format: `YYYY-MM-DD HH:MM:SS`&#x20;

***

### 4. API Response

#### a. Error Responses

**401 – Unauthorized**

Possible reasons:

* Missing shop URL
* Missing API key
* Invalid shop URL
* Invalid API key
* API key does not match the shop

***

**403 – This action is unauthorized**

* API key does not have Create permission
* Each API key can have: View, Create, Update, Delete permissions
* This API requires **Create** permission
* Also returned when a provided ID does not exist

***

**429 – Too Many Requests**

* Rate limit exceeded
* Maximum allowed:

| Limit             | Value                   |
| ----------------- | ----------------------- |
| Request frequency | 1 request per 5 minutes |
| Daily limit       | 50 requests per day     |

***

#### b. Success Response

**200 – API Success**

* Wholesale Pricing record created successfully
* Response returned in JSON format

```json

{​
  "id": 1,​
  "title": "New Wholesale Pricing",​
  "status": true,​
  "apply_customer": {​
    "type": "all",​
    "tags": []​
  },​
  "exclude_customer": {​
    "type": "none",​
    "tags": []​
  },​
  "apply_product": {​
    "type": "all",​
    "product_ids": [],​
    "product_tags": [],​
    "collection_ids": [],​
    "apply_for_variants": false​
  },​
  "exclude_product": {​
    "type": "none",​
    "product_ids": [],​
    "collection_ids": []​
  },​
  "discount_for_variants": [​
    {​
      "id": 8516448190631,​
      "variant_pricing": true,​
      "variants": [​
        {​
          "id": 46747346763943,​
          "discount_groups": [​
            {​
              "name": "all",​
              "type": "percent",​
              "value": "10"​
            }​
          ]​
        }​
      ]​
    }​
  ],​
  "apply_market": {​
    "type": "all",​
    "handle": []​
  },​
  "discount_group": {​
    "type": "percent",​
    "value": "10"​
  },​
  "active_date": {​
    "types": ["start_date", "end_date"],​
    "start_at": "2026-01-15 10:00:00",​
    "end_at": "2026-01-15 10:00:00"​​
  },​
  "created_at": "2026-01-15T10:00:00",​
  "updated_at": "2026-01-15T10:00:00"​
​}

```
