> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developer-stage.shipbob.dev/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developer-stage.shipbob.dev/_mcp/server.

# Product Catalog

> API documentation for managing products through the ShipBob product catalog.

## Overview

This documentation provides an overview and API request examples for creating, retrieving, and modifying products through the ShipBob product catalog.

## Base URL

All requests should be directed to the following base URL:

```plaintext
https://api.shipbob.com/2026-01/
```

## Creating a Product

**Endpoint:** `POST /product`

```json
{
  "name": "Light Roast Coffee",
  "type_id": 1,
  "variants": [
    {
      "name": "Light Roast Coffee",
      "sku": "light-roast",
      "packaging_requirement_id": 1,
      "packaging_material_type_id": 1,
      "barcode": "06547321109",
      "customs": {
        "country_code_of_origin": "US",
        "hs_tariff_code": "6103.22.00",
        "value": "10",
        "description": "coffee"
      }
    }
  ]
}
```

**Notes**

* **Type ID**: `1` indicates a regular product (not a bundle). Use `2` for creating a bundle product.

* **Taxonomy ID**: Categorizes products in the UI. (`266` represents "Clothing").

* **Packaging Requirement ID**: Determines special handling (e.g., `7` for apparel).

* **Customs Information**: Required for international shipments.

## Creating a Bundle Product

**Endpoint:** `POST /product`

```json
{
	"name": "Coffee Bundle",
  "type_id": 2,
  "variants": [
    {
      "bundle_definition": [
        {
          "quantity": 1,
          "variant_id": 16608663
        },
        {
          "quantity": 1,
          "variant_id": 16608664
        },
        {
          "quantity": 1,
          "variant_id": 16608667
        }       
      ],
      "sku": "coffee-bundle"
    }
  ]
}
```

## Creating a Varying Product

**Endpoint:** `POST /product`

```json
{
  "name": "Light Roast Coffee",
  "type_id": 1,
  "taxonomy_id": 266,
  "variants": [
    {
      "name": "Light Roast Coffee - 3 lb",
      "sku": "light-roast-3lb",
      "packaging_requirement_id": 1,
      "packaging_material_type_id": 1,
      "barcode": "06547321110",
      "customs": {
        "country_code_of_origin": "US",
        "hs_tariff_code": "6103.22.00",
        "value": "10",
        "description": "coffee"
      }
    }
  ]
}
```

## Updating Existing Products

**Endpoint:** `PATCH /product/{product-id}`

```json
{
  "variants": [
    {
      "id": 6,
      "barcode": "4324323212",
      "packaging_material_type_id": 6
    },
    {
      "id": 8,
      "name": "Jupiter Shirt (Small)"
    }
  ]
}
```

## Retrieving Products

**Endpoint:** `GET /product`

```plaintext
/product?productTypeId=1&variantStatus=1&hasDigitalVariants=false
```

## Product Attributes

### Product-Level Attributes

| Field         | Type   | Description                       |
| ------------- | ------ | --------------------------------- |
| `name`        | string | Name of the product               |
| `type_id`     | int    | Regular Product (1) or Bundle (2) |
| `taxonomy_id` | int    | Product category ID               |

### Variant-Level Attributes

| Field                        | Type    | Description                                                       |
| ---------------------------- | ------- | ----------------------------------------------------------------- |
| `name`                       | string  | Variant name (should match product name for non-varying products) |
| `status_id`                  | int     | Active (1) or Inactive (2)                                        |
| `sku`                        | string  | Unique SKU for the variant                                        |
| `barcode`                    | string  | Barcode for scanning                                              |
| `packaging_requirement_id`   | int     | Packaging requirement                                             |
| `packaging_material_type_id` | int     | Packaging material                                                |
| `is_digital`                 | boolean | True for digital items                                            |
| `customs`                    | object  | Customs details for international shipping                        |

## Packaging Requirements

| ID | Name               |
| -- | ------------------ |
| 1  | No Requirements    |
| 2  | Fragile            |
| 3  | Foldable           |
| 4  | Media              |
| 5  | Book               |
| 6  | Poster             |
| 7  | Apparel            |
| 8  | Packaging Material |

## Packaging Material Types

| ID | Name                  |
| -- | --------------------- |
| 1  | Box                   |
| 2  | Bubble Mailer         |
| 3  | Poly Mailer           |
| 5  | Poster Tube           |
| 6  | Custom Box            |
| 7  | Bookfold              |
| 8  | Ship In Own Container |
| 9  | Custom Bubble Mailer  |
| 10 | Custom Poly Mailer    |

## Taxonomy Values

Taxonomy values can be found using the lookup tool (requires login):
[ShipBob Taxonomy Lookup](https://web.shipbob.com/app/merchant/#/product-catalog/taxonomy)

## FAQs

If your upstream platform uses a different identifier than your ShipBob SKU, send it in `channel_metadata[].platform_identifier`.

Example:

* ShipBob SKU: `dark-roast`
* Upstream identifier (from your platform): `SHOPIFY-VARIANT-452198776`

When using `channel_metadata`, make sure:

* `channel_id` is the numeric ID of your ShipBob channel.
* `platform` is `API` when creating products through your API channel.
* `platform_identifier` is your upstream system's unique variant/product identifier.
* `seller_sku` can remain your platform-facing SKU if needed.

Endpoint: `POST /product`

```json
{
  "name": "Dark Roast Coffee",
  "type_id": 1,
  "variants": [
    {
      "name": "Dark Roast Coffee",
      "sku": "dark-roast",
      "channel_metadata": [
        {
          "channel_id": 175984,
          "platform": "API",
          "platform_identifier": "SHOPIFY-VARIANT-452198776",
          "seller_sku": "dark-roast"
        }
      ]
    }
  ]
}
```

If you are not sure which `channel_id` to use, retrieve your channels first and use the ID for the channel that should own this product mapping.