Product Catalog

View as Markdown

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:

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

Creating a Product

Endpoint: POST /product

1{
2 "name": "Light Roast Coffee",
3 "type_id": 1,
4 "variants": [
5 {
6 "name": "Light Roast Coffee",
7 "sku": "light-roast",
8 "packaging_requirement_id": 1,
9 "packaging_material_type_id": 1,
10 "barcode": "06547321109",
11 "customs": {
12 "country_code_of_origin": "US",
13 "hs_tariff_code": "6103.22.00",
14 "value": "10",
15 "description": "coffee"
16 }
17 }
18 ]
19}

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

1{
2 "name": "Coffee Bundle",
3 "type_id": 2,
4 "variants": [
5 {
6 "bundle_definition": [
7 {
8 "quantity": 1,
9 "variant_id": 16608663
10 },
11 {
12 "quantity": 1,
13 "variant_id": 16608664
14 },
15 {
16 "quantity": 1,
17 "variant_id": 16608667
18 }
19 ],
20 "sku": "coffee-bundle"
21 }
22 ]
23}

Creating a Varying Product

Endpoint: POST /product

1{
2 "name": "Light Roast Coffee",
3 "type_id": 1,
4 "taxonomy_id": 266,
5 "variants": [
6 {
7 "name": "Light Roast Coffee - 3 lb",
8 "sku": "light-roast-3lb",
9 "packaging_requirement_id": 1,
10 "packaging_material_type_id": 1,
11 "barcode": "06547321110",
12 "customs": {
13 "country_code_of_origin": "US",
14 "hs_tariff_code": "6103.22.00",
15 "value": "10",
16 "description": "coffee"
17 }
18 }
19 ]
20}

Updating Existing Products

Endpoint: PATCH /product/{product-id}

1{
2 "variants": [
3 {
4 "id": 6,
5 "barcode": "4324323212",
6 "packaging_material_type_id": 6
7 },
8 {
9 "id": 8,
10 "name": "Jupiter Shirt (Small)"
11 }
12 ]
13}

Retrieving Products

Endpoint: GET /product

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

Product Attributes

Product-Level Attributes

FieldTypeDescription
namestringName of the product
type_idintRegular Product (1) or Bundle (2)
taxonomy_idintProduct category ID

Variant-Level Attributes

FieldTypeDescription
namestringVariant name (should match product name for non-varying products)
status_idintActive (1) or Inactive (2)
skustringUnique SKU for the variant
barcodestringBarcode for scanning
packaging_requirement_idintPackaging requirement
packaging_material_type_idintPackaging material
is_digitalbooleanTrue for digital items
customsobjectCustoms details for international shipping

Packaging Requirements

IDName
1No Requirements
2Fragile
3Foldable
4Media
5Book
6Poster
7Apparel
8Packaging Material

Packaging Material Types

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

Taxonomy Values

Taxonomy values can be found using the lookup tool (requires login): ShipBob Taxonomy Lookup

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

1{
2 "name": "Dark Roast Coffee",
3 "type_id": 1,
4 "variants": [
5 {
6 "name": "Dark Roast Coffee",
7 "sku": "dark-roast",
8 "channel_metadata": [
9 {
10 "channel_id": 175984,
11 "platform": "API",
12 "platform_identifier": "SHOPIFY-VARIANT-452198776",
13 "seller_sku": "dark-roast"
14 }
15 ]
16 }
17 ]
18}
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.