API resource

Store products and stock

The store behind a connected Shopify account (or a WordPress site running WooCommerce): products, variants, images, prices, stock and where it sells. Pick the store with accountId: a query parameter on reads, a body field on writes. Products are created as drafts unless you ask for active. Stock, sales channels and markets need extra permissions the merchant approves on Shopify: Get a store lists what is missing and returns the link (grantPermissionsUrl). Product, variant and location ids are the store's own.

List sales channels

GET/v1/commerce/channels

Works on: Shopify, WooCommerce

Where products and collections can be published: the online store, Shop, POS and installed channel apps.

Query parameters

accountIdstringrequired

Connected store account id.

curl "https://creatoros-production-5658.up.railway.app/v1/commerce/channels?accountId=acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H" \
  -H "Authorization: Bearer $CREATOROS_API_KEY"
Response 200
{
  "channels": [
    {
      "id": "string",
      "name": "string"
    }
  ]
}

Get a product's stock

GET/v1/commerce/inventory

Works on: Shopify, WooCommerce

Stock per variant and location: available, on hand, committed to orders and incoming.

Query parameters

accountIdstringrequired

Connected store account id.

productIdstringrequired

curl "https://creatoros-production-5658.up.railway.app/v1/commerce/inventory?accountId=acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H&productId=8214569812345" \
  -H "Authorization: Bearer $CREATOROS_API_KEY"
Response 200
{
  "inventory": [
    {
      "productId": "8214569812345",
      "variantId": "string",
      "sku": "string",
      "tracked": true,
      "levels": [
        {}
      ]
    }
  ]
}

List locations

GET/v1/commerce/locations

Works on: Shopify, WooCommerce

The store's stock locations (warehouses, shops).

Query parameters

accountIdstringrequired

Connected store account id.

curl "https://creatoros-production-5658.up.railway.app/v1/commerce/locations?accountId=acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H" \
  -H "Authorization: Bearer $CREATOROS_API_KEY"
Response 200
{
  "locations": [
    {
      "id": "string",
      "name": "string",
      "isActive": true,
      "fulfillsOnlineOrders": true,
      "address": {
        "line1": "string",
        "line2": "string",
        "city": "string",
        "region": "string",
        "postalCode": "string",
        "countryCode": "string",
        "phone": "string"
      }
    }
  ]
}

List markets

GET/v1/commerce/markets

Works on: Shopify, WooCommerce

The regions the store sells to, each with its own currency and pricing.

Query parameters

accountIdstringrequired

Connected store account id.

curl "https://creatoros-production-5658.up.railway.app/v1/commerce/markets?accountId=acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H" \
  -H "Authorization: Bearer $CREATOROS_API_KEY"
Response 200
{
  "markets": [
    {
      "id": "string",
      "name": "string",
      "handle": "string",
      "status": "active",
      "type": "string"
    }
  ]
}

List price lists

GET/v1/commerce/price-lists

Works on: Shopify, WooCommerce

Price lists hold fixed prices per variant for a market.

Query parameters

accountIdstringrequired

Connected store account id.

curl "https://creatoros-production-5658.up.railway.app/v1/commerce/price-lists?accountId=acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H" \
  -H "Authorization: Bearer $CREATOROS_API_KEY"
Response 200
{
  "priceLists": [
    {
      "id": "string",
      "name": "string",
      "currency": "string"
    }
  ]
}

Remove fixed prices

DELETE/v1/commerce/price-lists/{priceListId}/prices

Works on: Shopify, WooCommerce

The variants go back to the market's converted price.

Path parameters

priceListIdstringrequired

Platform-native id.

Query parameters

accountIdstringrequired

Connected store account id.

variantIdsstringrequired

Comma-separated ids.

curl -X DELETE "https://creatoros-production-5658.up.railway.app/v1/commerce/price-lists/556677889900/prices?accountId=acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H&variantIds=%3CvariantIds%3E" \
  -H "Authorization: Bearer $CREATOROS_API_KEY"
Response 200
{
  "priceListId": "556677889900",
  "deleted": 0
}

Set fixed prices

PUT/v1/commerce/price-lists/{priceListId}/prices

Works on: Shopify, WooCommerce

Sets fixed prices for variants in the price list's currency, overriding the converted price in that market.

Path parameters

priceListIdstringrequired

Platform-native id.

Body

accountIdstringrequired

pricesobject[]required

curl -X PUT "https://creatoros-production-5658.up.railway.app/v1/commerce/price-lists/556677889900/prices" \
  -H "Authorization: Bearer $CREATOROS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "accountId": "acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H",
    "prices": [
      {
        "variantId": "string",
        "price": "string",
        "compareAtPrice": "string"
      }
    ]
  }'
Response 200
{
  "priceListId": "556677889900",
  "updated": 0
}

List products

GET/v1/commerce/products

Works on: Shopify, WooCommerce

Lists the store's products with their variants, options and images. Cursor-paginated: pass limit (1-100, default 20) and the cursor from a previous response's nextCursor, which is null on the last page. Filter with status and/or query (the platform's product search syntax, passed through verbatim). A status the platform has no equivalent of returns an empty page.

Query parameters

accountIdstringrequired

Connected store account id.

limitinteger

cursorstring

Opaque cursor from a previous response. Omit for the first page.

statusstring

Creator OS product status. The platform value is returned as platformStatus. Shopify: ACTIVE, DRAFT and ARCHIVED map to the same names; UNLISTED maps to inactive. One of: active, draft, pending_review, rejected, inactive, archived, deleted.

querystring

Platform product search syntax (Shopify: title, vendor, product_type, tag, sku, handle, ...).

collectionIdstring

Only products in this collection.

curl "https://creatoros-production-5658.up.railway.app/v1/commerce/products?accountId=acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H" \
  -H "Authorization: Bearer $CREATOROS_API_KEY"
Response 200
{
  "products": [
    {
      "id": "string",
      "accountId": "acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H",
      "platform": "shopify",
      "title": "string",
      "descriptionHtml": "string",
      "handle": "string",
      "vendor": "string",
      "productType": "string",
      "tags": [
        "string"
      ],
      "status": "active",
      "platformStatus": "string",
      "featuredImage": {
        "id": "string",
        "url": "string",
        "altText": "string"
      },
      "images": [
        {}
      ],
      "options": [
        {}
      ],
      "variants": [
        {}
      ],
      "totalInventory": 0,
      "url": "string",
      "seo": {
        "title": "string",
        "description": "string"
      },
      "createdAt": "2026-10-10T00:00:00.000Z",
      "updatedAt": "2026-10-10T00:00:00.000Z",
      "publishedAt": "2026-10-10T00:00:00.000Z",
      "platformData": {}
    }
  ],
  "nextCursor": "string"
}

Create a product

POST/v1/commerce/products

Works on: Shopify, WooCommerce

Creates a product with its options and variants. status defaults to draft: no platform offers a sandbox for product writes, so nothing goes on sale unless you ask for active. A product without options has exactly one variant. Images are fetched by the platform from the given URLs and may appear on the product a few seconds later.

Body

accountIdstringrequired

titlestringrequired

descriptionHtmlstring

handlestring

vendorstring

productTypestring

tagsstring[]

seoobject

statusstring

imagesobject[]

optionsobject[]

variantsobject[]required

curl -X POST "https://creatoros-production-5658.up.railway.app/v1/commerce/products" \
  -H "Authorization: Bearer $CREATOROS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "accountId": "acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H",
    "title": "string",
    "variants": [
      {
        "sku": "string",
        "price": {},
        "compareAtPrice": {},
        "options": [
          {
            "name": "string",
            "value": "string"
          }
        ]
      }
    ]
  }'
Response 200
{
  "product": {
    "id": "string",
    "accountId": "acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H",
    "platform": "shopify",
    "title": "string",
    "descriptionHtml": "string",
    "handle": "string",
    "vendor": "string",
    "productType": "string",
    "tags": [
      "string"
    ],
    "status": "active",
    "platformStatus": "string",
    "featuredImage": {
      "id": "string",
      "url": "string",
      "altText": "string"
    },
    "images": [
      {
        "id": "string",
        "url": "string",
        "altText": "string"
      }
    ],
    "options": [
      {
        "name": "string",
        "values": []
      }
    ],
    "variants": [
      {
        "id": "string",
        "title": "string",
        "sku": "string",
        "barcode": "string",
        "price": {},
        "compareAtPrice": {},
        "inventoryQuantity": 0,
        "availableForSale": true,
        "options": []
      }
    ],
    "totalInventory": 0,
    "url": "string",
    "seo": {
      "title": "string",
      "description": "string"
    },
    "createdAt": "2026-10-10T00:00:00.000Z",
    "updatedAt": "2026-10-10T00:00:00.000Z",
    "publishedAt": "2026-10-10T00:00:00.000Z",
    "platformData": {}
  }
}

Activate, deactivate, archive or delete products

POST/v1/commerce/products/state

Works on: Shopify, WooCommerce

Applies one action to up to 50 products and reports each product's outcome, so one failure does not abort the rest. On Shopify, deactivate sets the product to draft and delete is permanent.

Body

accountIdstringrequired

productIdsstring[]required

actionstringrequired

curl -X POST "https://creatoros-production-5658.up.railway.app/v1/commerce/products/state" \
  -H "Authorization: Bearer $CREATOROS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "accountId": "acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H",
    "productIds": [
      "string"
    ],
    "action": "activate"
  }'
Response 200
{
  "action": "activate",
  "succeeded": [
    "string"
  ],
  "failed": [
    {
      "productId": "8214569812345",
      "message": "string"
    }
  ]
}

Add or remove tags in bulk

POST/v1/commerce/products/tags

Works on: Shopify, WooCommerce

Adds and/or removes tags on up to 50 products and reports each product's outcome.

Body

accountIdstringrequired

productIdsstring[]required

addstring[]

removestring[]

curl -X POST "https://creatoros-production-5658.up.railway.app/v1/commerce/products/tags" \
  -H "Authorization: Bearer $CREATOROS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "accountId": "acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H",
    "productIds": [
      "string"
    ]
  }'
Response 200
{
  "succeeded": [
    "string"
  ],
  "failed": [
    {
      "id": "string",
      "message": "string"
    }
  ]
}

Get a product

GET/v1/commerce/products/{productId}

Works on: Shopify, WooCommerce

One product with all its variants, options and images. Needs products.read. 404 product_not_found when the id does not exist in the store.

Path parameters

productIdstringrequired

Platform-native product id.

Query parameters

accountIdstringrequired

Connected store account id.

curl "https://creatoros-production-5658.up.railway.app/v1/commerce/products/8214569812345?accountId=acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H" \
  -H "Authorization: Bearer $CREATOROS_API_KEY"
Response 200
{
  "product": {
    "id": "string",
    "accountId": "acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H",
    "platform": "shopify",
    "title": "string",
    "descriptionHtml": "string",
    "handle": "string",
    "vendor": "string",
    "productType": "string",
    "tags": [
      "string"
    ],
    "status": "active",
    "platformStatus": "string",
    "featuredImage": {
      "id": "string",
      "url": "string",
      "altText": "string"
    },
    "images": [
      {
        "id": "string",
        "url": "string",
        "altText": "string"
      }
    ],
    "options": [
      {
        "name": "string",
        "values": []
      }
    ],
    "variants": [
      {
        "id": "string",
        "title": "string",
        "sku": "string",
        "barcode": "string",
        "price": {},
        "compareAtPrice": {},
        "inventoryQuantity": 0,
        "availableForSale": true,
        "options": []
      }
    ],
    "totalInventory": 0,
    "url": "string",
    "seo": {
      "title": "string",
      "description": "string"
    },
    "createdAt": "2026-10-10T00:00:00.000Z",
    "updatedAt": "2026-10-10T00:00:00.000Z",
    "publishedAt": "2026-10-10T00:00:00.000Z",
    "platformData": {}
  }
}

Update a product

PATCH/v1/commerce/products/{productId}

Works on: Shopify, WooCommerce

Partial-updates the product's own fields; at least one besides accountId is required. tags replaces the full list. Change prices with POST /v1/commerce/products/{productId}/price and status with POST /v1/commerce/products/state.

Path parameters

productIdstringrequired

Platform-native product id.

Body

accountIdstringrequired

titlestring

descriptionHtmlstring

handlestring

vendorstring

productTypestring

tagsstring[]

seoobject

curl -X PATCH "https://creatoros-production-5658.up.railway.app/v1/commerce/products/8214569812345" \
  -H "Authorization: Bearer $CREATOROS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "accountId": "acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H"
  }'
Response 200
{
  "product": {
    "id": "string",
    "accountId": "acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H",
    "platform": "shopify",
    "title": "string",
    "descriptionHtml": "string",
    "handle": "string",
    "vendor": "string",
    "productType": "string",
    "tags": [
      "string"
    ],
    "status": "active",
    "platformStatus": "string",
    "featuredImage": {
      "id": "string",
      "url": "string",
      "altText": "string"
    },
    "images": [
      {
        "id": "string",
        "url": "string",
        "altText": "string"
      }
    ],
    "options": [
      {
        "name": "string",
        "values": []
      }
    ],
    "variants": [
      {
        "id": "string",
        "title": "string",
        "sku": "string",
        "barcode": "string",
        "price": {},
        "compareAtPrice": {},
        "inventoryQuantity": 0,
        "availableForSale": true,
        "options": []
      }
    ],
    "totalInventory": 0,
    "url": "string",
    "seo": {
      "title": "string",
      "description": "string"
    },
    "createdAt": "2026-10-10T00:00:00.000Z",
    "updatedAt": "2026-10-10T00:00:00.000Z",
    "publishedAt": "2026-10-10T00:00:00.000Z",
    "platformData": {}
  }
}

Publish or unpublish a product

POST/v1/commerce/products/{productId}/channels

Works on: Shopify, WooCommerce

Publishes to and/or unpublishes from sales channels (the online store, Shop, POS and others). List channels with GET /v1/commerce/channels.

Path parameters

productIdstringrequired

Platform-native id.

Body

accountIdstringrequired

publishstring[]

Channel ids from GET /v1/commerce/channels.

unpublishstring[]

curl -X POST "https://creatoros-production-5658.up.railway.app/v1/commerce/products/8214569812345/channels" \
  -H "Authorization: Bearer $CREATOROS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "accountId": "acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H"
  }'
Response 200
{
  "productId": "8214569812345",
  "published": [
    "string"
  ],
  "unpublished": [
    "string"
  ]
}

Duplicate a product

POST/v1/commerce/products/{productId}/duplicate

Works on: Shopify, WooCommerce

Copies a product with its options, variants and (by default) images. The copy starts as a draft.

Path parameters

productIdstringrequired

Platform-native id.

Body

accountIdstringrequired

titlestringrequired

statusstring

includeImagesboolean

curl -X POST "https://creatoros-production-5658.up.railway.app/v1/commerce/products/8214569812345/duplicate" \
  -H "Authorization: Bearer $CREATOROS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "accountId": "acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H",
    "title": "string"
  }'
Response 200
{
  "product": {
    "id": "string",
    "accountId": "acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H",
    "platform": "shopify",
    "title": "string",
    "descriptionHtml": "string",
    "handle": "string",
    "vendor": "string",
    "productType": "string",
    "tags": [
      "string"
    ],
    "status": "active",
    "platformStatus": "string",
    "featuredImage": {
      "id": "string",
      "url": "string",
      "altText": "string"
    },
    "images": [
      {
        "id": "string",
        "url": "string",
        "altText": "string"
      }
    ],
    "options": [
      {
        "name": "string",
        "values": []
      }
    ],
    "variants": [
      {
        "id": "string",
        "title": "string",
        "sku": "string",
        "barcode": "string",
        "price": {},
        "compareAtPrice": {},
        "inventoryQuantity": 0,
        "availableForSale": true,
        "options": []
      }
    ],
    "totalInventory": 0,
    "url": "string",
    "seo": {
      "title": "string",
      "description": "string"
    },
    "createdAt": "2026-10-10T00:00:00.000Z",
    "updatedAt": "2026-10-10T00:00:00.000Z",
    "publishedAt": "2026-10-10T00:00:00.000Z",
    "platformData": {}
  }
}

Remove images

DELETE/v1/commerce/products/{productId}/images

Works on: Shopify, WooCommerce

Removes images from the product by image id (the id on each image). The file stays in the store's media library. Needs the products.images_remove capability.

Path parameters

productIdstringrequired

Platform-native id.

Query parameters

accountIdstringrequired

Connected store account id.

imageIdsstringrequired

Comma-separated ids.

curl -X DELETE "https://creatoros-production-5658.up.railway.app/v1/commerce/products/8214569812345/images?accountId=acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H&imageIds=%3CimageIds%3E" \
  -H "Authorization: Bearer $CREATOROS_API_KEY"
Response 200
{
  "product": {
    "id": "string",
    "accountId": "acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H",
    "platform": "shopify",
    "title": "string",
    "descriptionHtml": "string",
    "handle": "string",
    "vendor": "string",
    "productType": "string",
    "tags": [
      "string"
    ],
    "status": "active",
    "platformStatus": "string",
    "featuredImage": {
      "id": "string",
      "url": "string",
      "altText": "string"
    },
    "images": [
      {
        "id": "string",
        "url": "string",
        "altText": "string"
      }
    ],
    "options": [
      {
        "name": "string",
        "values": []
      }
    ],
    "variants": [
      {
        "id": "string",
        "title": "string",
        "sku": "string",
        "barcode": "string",
        "price": {},
        "compareAtPrice": {},
        "inventoryQuantity": 0,
        "availableForSale": true,
        "options": []
      }
    ],
    "totalInventory": 0,
    "url": "string",
    "seo": {
      "title": "string",
      "description": "string"
    },
    "createdAt": "2026-10-10T00:00:00.000Z",
    "updatedAt": "2026-10-10T00:00:00.000Z",
    "publishedAt": "2026-10-10T00:00:00.000Z",
    "platformData": {}
  }
}

Add images

POST/v1/commerce/products/{productId}/images

Works on: Shopify, WooCommerce

Adds images from public URLs. The platform fetches them, so they can appear on the product a few seconds after the call returns.

Path parameters

productIdstringrequired

Platform-native id.

Body

accountIdstringrequired

imagesobject[]required

curl -X POST "https://creatoros-production-5658.up.railway.app/v1/commerce/products/8214569812345/images" \
  -H "Authorization: Bearer $CREATOROS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "accountId": "acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H",
    "images": [
      {
        "url": "string",
        "altText": "string"
      }
    ]
  }'
Response 200
{
  "product": {
    "id": "string",
    "accountId": "acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H",
    "platform": "shopify",
    "title": "string",
    "descriptionHtml": "string",
    "handle": "string",
    "vendor": "string",
    "productType": "string",
    "tags": [
      "string"
    ],
    "status": "active",
    "platformStatus": "string",
    "featuredImage": {
      "id": "string",
      "url": "string",
      "altText": "string"
    },
    "images": [
      {
        "id": "string",
        "url": "string",
        "altText": "string"
      }
    ],
    "options": [
      {
        "name": "string",
        "values": []
      }
    ],
    "variants": [
      {
        "id": "string",
        "title": "string",
        "sku": "string",
        "barcode": "string",
        "price": {},
        "compareAtPrice": {},
        "inventoryQuantity": 0,
        "availableForSale": true,
        "options": []
      }
    ],
    "totalInventory": 0,
    "url": "string",
    "seo": {
      "title": "string",
      "description": "string"
    },
    "createdAt": "2026-10-10T00:00:00.000Z",
    "updatedAt": "2026-10-10T00:00:00.000Z",
    "publishedAt": "2026-10-10T00:00:00.000Z",
    "platformData": {}
  }
}

Reorder images

POST/v1/commerce/products/{productId}/images/reorder

Works on: Shopify, WooCommerce

Puts the product's images in the given order; the first becomes the featured image. pending is true while the platform finishes in the background.

Path parameters

productIdstringrequired

Platform-native id.

Body

accountIdstringrequired

imageIdsstring[]required

curl -X POST "https://creatoros-production-5658.up.railway.app/v1/commerce/products/8214569812345/images/reorder" \
  -H "Authorization: Bearer $CREATOROS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "accountId": "acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H",
    "imageIds": [
      "string"
    ]
  }'
Response 200
{
  "pending": true
}

Set or adjust stock

POST/v1/commerce/products/{productId}/inventory

Works on: Shopify, WooCommerce

set makes quantity the new available count; adjust adds quantity (negative to subtract). The variant must be stocked at the location. Answers the product's stock after the change.

Path parameters

productIdstringrequired

Platform-native id.

Body

accountIdstringrequired

modestring

changesobject[]required

curl -X POST "https://creatoros-production-5658.up.railway.app/v1/commerce/products/8214569812345/inventory" \
  -H "Authorization: Bearer $CREATOROS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "accountId": "acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H",
    "changes": [
      {
        "variantId": "string",
        "locationId": "string",
        "quantity": 0
      }
    ]
  }'
Response 200
{
  "inventory": [
    {
      "productId": "8214569812345",
      "variantId": "string",
      "sku": "string",
      "tracked": true,
      "levels": [
        {}
      ]
    }
  ]
}

Delete product metafields

DELETE/v1/commerce/products/{productId}/metafields

Works on: Shopify, WooCommerce

Deletes the product custom fields named in keys (comma-separated namespace.key, up to 25) and returns how many were deleted. Needs metafields.write.

Path parameters

productIdstringrequired

Platform-native id.

Query parameters

accountIdstringrequired

Connected store account id.

keysstringrequired

Comma-separated namespace.key pairs.

curl -X DELETE "https://creatoros-production-5658.up.railway.app/v1/commerce/products/8214569812345/metafields?accountId=acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H&keys=%3Ckeys%3E" \
  -H "Authorization: Bearer $CREATOROS_API_KEY"
Response 200
{
  "deleted": 0
}

List product metafields

GET/v1/commerce/products/{productId}/metafields

Works on: Shopify, WooCommerce

The product's custom fields (metafields on Shopify, public meta on WooCommerce) as namespace, key, type and value. Needs metafields.read.

Path parameters

productIdstringrequired

Platform-native id.

Query parameters

accountIdstringrequired

Connected store account id.

curl "https://creatoros-production-5658.up.railway.app/v1/commerce/products/8214569812345/metafields?accountId=acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H" \
  -H "Authorization: Bearer $CREATOROS_API_KEY"
Response 200
{
  "metafields": [
    {
      "namespace": "string",
      "key": "string",
      "type": "string",
      "value": "string"
    }
  ]
}

Set product metafields

PUT/v1/commerce/products/{productId}/metafields

Works on: Shopify, WooCommerce

Creates or updates custom fields by namespace and key.

Path parameters

productIdstringrequired

Platform-native id.

Body

accountIdstringrequired

metafieldsobject[]required

curl -X PUT "https://creatoros-production-5658.up.railway.app/v1/commerce/products/8214569812345/metafields" \
  -H "Authorization: Bearer $CREATOROS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "accountId": "acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H",
    "metafields": [
      {
        "namespace": "string",
        "key": "string",
        "type": "string",
        "value": "string"
      }
    ]
  }'
Response 200
{
  "metafields": [
    {
      "namespace": "string",
      "key": "string",
      "type": "string",
      "value": "string"
    }
  ]
}

Delete options

DELETE/v1/commerce/products/{productId}/options

Works on: Shopify, WooCommerce

Deletes options by name, with the variants that depended on them.

Path parameters

productIdstringrequired

Platform-native id.

Query parameters

accountIdstringrequired

Connected store account id.

namesstringrequired

Comma-separated option names.

curl -X DELETE "https://creatoros-production-5658.up.railway.app/v1/commerce/products/8214569812345/options?accountId=acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H&names=%3Cnames%3E" \
  -H "Authorization: Bearer $CREATOROS_API_KEY"
Response 200
{
  "product": {
    "id": "string",
    "accountId": "acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H",
    "platform": "shopify",
    "title": "string",
    "descriptionHtml": "string",
    "handle": "string",
    "vendor": "string",
    "productType": "string",
    "tags": [
      "string"
    ],
    "status": "active",
    "platformStatus": "string",
    "featuredImage": {
      "id": "string",
      "url": "string",
      "altText": "string"
    },
    "images": [
      {
        "id": "string",
        "url": "string",
        "altText": "string"
      }
    ],
    "options": [
      {
        "name": "string",
        "values": []
      }
    ],
    "variants": [
      {
        "id": "string",
        "title": "string",
        "sku": "string",
        "barcode": "string",
        "price": {},
        "compareAtPrice": {},
        "inventoryQuantity": 0,
        "availableForSale": true,
        "options": []
      }
    ],
    "totalInventory": 0,
    "url": "string",
    "seo": {
      "title": "string",
      "description": "string"
    },
    "createdAt": "2026-10-10T00:00:00.000Z",
    "updatedAt": "2026-10-10T00:00:00.000Z",
    "publishedAt": "2026-10-10T00:00:00.000Z",
    "platformData": {}
  }
}

Add options

POST/v1/commerce/products/{productId}/options

Works on: Shopify, WooCommerce

Adds option axes (e.g. Size, Color) and their values. With createVariants true the platform creates a variant for every new combination; otherwise existing variants take the first value.

Path parameters

productIdstringrequired

Platform-native id.

Body

accountIdstringrequired

optionsobject[]required

createVariantsboolean

curl -X POST "https://creatoros-production-5658.up.railway.app/v1/commerce/products/8214569812345/options" \
  -H "Authorization: Bearer $CREATOROS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "accountId": "acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H",
    "options": [
      {
        "name": "string",
        "values": [
          "string"
        ]
      }
    ]
  }'
Response 200
{
  "product": {
    "id": "string",
    "accountId": "acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H",
    "platform": "shopify",
    "title": "string",
    "descriptionHtml": "string",
    "handle": "string",
    "vendor": "string",
    "productType": "string",
    "tags": [
      "string"
    ],
    "status": "active",
    "platformStatus": "string",
    "featuredImage": {
      "id": "string",
      "url": "string",
      "altText": "string"
    },
    "images": [
      {
        "id": "string",
        "url": "string",
        "altText": "string"
      }
    ],
    "options": [
      {
        "name": "string",
        "values": []
      }
    ],
    "variants": [
      {
        "id": "string",
        "title": "string",
        "sku": "string",
        "barcode": "string",
        "price": {},
        "compareAtPrice": {},
        "inventoryQuantity": 0,
        "availableForSale": true,
        "options": []
      }
    ],
    "totalInventory": 0,
    "url": "string",
    "seo": {
      "title": "string",
      "description": "string"
    },
    "createdAt": "2026-10-10T00:00:00.000Z",
    "updatedAt": "2026-10-10T00:00:00.000Z",
    "publishedAt": "2026-10-10T00:00:00.000Z",
    "platformData": {}
  }
}

Update variant prices

POST/v1/commerce/products/{productId}/price

Works on: Shopify, WooCommerce

Sets the price and/or compare-at price of the listed variants. Other variants are untouched. Amounts are in the store currency; send compareAtPrice: null to remove a strike-through price.

Path parameters

productIdstringrequired

Platform-native product id.

Body

accountIdstringrequired

variantsobject[]required

curl -X POST "https://creatoros-production-5658.up.railway.app/v1/commerce/products/8214569812345/price" \
  -H "Authorization: Bearer $CREATOROS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "accountId": "acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H",
    "variants": [
      {
        "id": "string",
        "price": {},
        "compareAtPrice": {}
      }
    ]
  }'
Response 200
{
  "product": {
    "id": "string",
    "accountId": "acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H",
    "platform": "shopify",
    "title": "string",
    "descriptionHtml": "string",
    "handle": "string",
    "vendor": "string",
    "productType": "string",
    "tags": [
      "string"
    ],
    "status": "active",
    "platformStatus": "string",
    "featuredImage": {
      "id": "string",
      "url": "string",
      "altText": "string"
    },
    "images": [
      {
        "id": "string",
        "url": "string",
        "altText": "string"
      }
    ],
    "options": [
      {
        "name": "string",
        "values": []
      }
    ],
    "variants": [
      {
        "id": "string",
        "title": "string",
        "sku": "string",
        "barcode": "string",
        "price": {},
        "compareAtPrice": {},
        "inventoryQuantity": 0,
        "availableForSale": true,
        "options": []
      }
    ],
    "totalInventory": 0,
    "url": "string",
    "seo": {
      "title": "string",
      "description": "string"
    },
    "createdAt": "2026-10-10T00:00:00.000Z",
    "updatedAt": "2026-10-10T00:00:00.000Z",
    "publishedAt": "2026-10-10T00:00:00.000Z",
    "platformData": {}
  }
}

Delete variants

DELETE/v1/commerce/products/{productId}/variants

Works on: Shopify, WooCommerce

Deletes the variants in variantIds (comma-separated, up to 100) and returns the updated product. A product keeps at least one variant, so deleting every variant is refused by the platform. Needs products.variants.

Path parameters

productIdstringrequired

Platform-native id.

Query parameters

accountIdstringrequired

Connected store account id.

variantIdsstringrequired

Comma-separated ids.

curl -X DELETE "https://creatoros-production-5658.up.railway.app/v1/commerce/products/8214569812345/variants?accountId=acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H&variantIds=%3CvariantIds%3E" \
  -H "Authorization: Bearer $CREATOROS_API_KEY"
Response 200
{
  "product": {
    "id": "string",
    "accountId": "acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H",
    "platform": "shopify",
    "title": "string",
    "descriptionHtml": "string",
    "handle": "string",
    "vendor": "string",
    "productType": "string",
    "tags": [
      "string"
    ],
    "status": "active",
    "platformStatus": "string",
    "featuredImage": {
      "id": "string",
      "url": "string",
      "altText": "string"
    },
    "images": [
      {
        "id": "string",
        "url": "string",
        "altText": "string"
      }
    ],
    "options": [
      {
        "name": "string",
        "values": []
      }
    ],
    "variants": [
      {
        "id": "string",
        "title": "string",
        "sku": "string",
        "barcode": "string",
        "price": {},
        "compareAtPrice": {},
        "inventoryQuantity": 0,
        "availableForSale": true,
        "options": []
      }
    ],
    "totalInventory": 0,
    "url": "string",
    "seo": {
      "title": "string",
      "description": "string"
    },
    "createdAt": "2026-10-10T00:00:00.000Z",
    "updatedAt": "2026-10-10T00:00:00.000Z",
    "publishedAt": "2026-10-10T00:00:00.000Z",
    "platformData": {}
  }
}

Add variants

POST/v1/commerce/products/{productId}/variants

Works on: Shopify, WooCommerce

Adds variants to a product. Each variant names a value for every product option (create options first with POST .../options). A product's placeholder default variant is replaced when real ones arrive.

Path parameters

productIdstringrequired

Platform-native id.

Body

accountIdstringrequired

variantsobject[]required

curl -X POST "https://creatoros-production-5658.up.railway.app/v1/commerce/products/8214569812345/variants" \
  -H "Authorization: Bearer $CREATOROS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "accountId": "acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H",
    "variants": [
      {
        "sku": "string",
        "price": {},
        "compareAtPrice": {},
        "options": [
          {
            "name": "string",
            "value": "string"
          }
        ]
      }
    ]
  }'
Response 200
{
  "product": {
    "id": "string",
    "accountId": "acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H",
    "platform": "shopify",
    "title": "string",
    "descriptionHtml": "string",
    "handle": "string",
    "vendor": "string",
    "productType": "string",
    "tags": [
      "string"
    ],
    "status": "active",
    "platformStatus": "string",
    "featuredImage": {
      "id": "string",
      "url": "string",
      "altText": "string"
    },
    "images": [
      {
        "id": "string",
        "url": "string",
        "altText": "string"
      }
    ],
    "options": [
      {
        "name": "string",
        "values": []
      }
    ],
    "variants": [
      {
        "id": "string",
        "title": "string",
        "sku": "string",
        "barcode": "string",
        "price": {},
        "compareAtPrice": {},
        "inventoryQuantity": 0,
        "availableForSale": true,
        "options": []
      }
    ],
    "totalInventory": 0,
    "url": "string",
    "seo": {
      "title": "string",
      "description": "string"
    },
    "createdAt": "2026-10-10T00:00:00.000Z",
    "updatedAt": "2026-10-10T00:00:00.000Z",
    "publishedAt": "2026-10-10T00:00:00.000Z",
    "platformData": {}
  }
}

Get a store

GET/v1/commerce/store

Works on: Shopify, WooCommerce

Returns the connected store with its currency, country and the capabilities it supports, so an integration can tell up front which Commerce operations the store serves. On Shopify, stock, sales channels, discounts, navigation, metaobjects, markets, marketing and image removal need permissions the store owner approves separately: missingCapabilities lists what is not granted yet and grantPermissionsUrl is the page where the owner approves it.

Query parameters

accountIdstringrequired

Connected store account id.

curl "https://creatoros-production-5658.up.railway.app/v1/commerce/store?accountId=acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H" \
  -H "Authorization: Bearer $CREATOROS_API_KEY"
Response 200
{
  "store": {
    "accountId": "acc_Sh4Vp9Kz2Ny7Tx3Lm1Rc6Wb5Js8Df0Ga4Ue7Ki2Oq3H",
    "platform": "shopify",
    "name": "string",
    "domain": "string",
    "url": "string",
    "currency": "string",
    "country": "string",
    "capabilities": [
      "products.read"
    ],
    "missingCapabilities": [
      "products.read"
    ],
    "grantPermissionsUrl": "string"
  }
}