SellOrchard

API reference

Products

Products with their variants, options and images.
On this page

List products

get/products

Required scopes:read_products

Query parameters

NameTypeDescription
limitintegerPage size, 1–250 (default 50).

default 50 · min 1 · max 250

cursorstringnext_cursor from the previous page.
updated_sincestring<date-time>Only objects changed at or after this ISO-8601 time.
created_sincestring<date-time>Only objects created at or after this ISO-8601 time.
statusstringFilter by status.

One of:activedraftarchived

kindstringFilter by kind.

One of:physicaldigitalgift_cardbooking

category_idintegerIn this category.
brand_idintegerOf this brand.
skustringHas a variant with this SKU.
slugstringThis URL handle.
idsstringComma-separated ids (up to 250).

Example request

curl
curl "https://api.sellorchard.com/v1/products?limit=50" \
  -H "Authorization: Bearer $SELLORCHARD_API_KEY"

Response200Products, newest first.

Show response schema
  • dataarray of Productrequired
    Show item attributes
    • objectstringrequired
    • idintegerrequired

      Product id.

    • namestringrequired

      Name.

    • slugstringrequired

      URL handle (unique).

    • statusstringrequired

      Visibility.

      One of:activedraftarchived

    • kindstringrequired

      What is sold.

      One of:physicaldigitalgift_cardbooking

    • typestringrequired

      simple (one variant) or variable (options and variants).

      One of:simplevariable

    • descriptionstring | nullrequired

      Description (sanitised HTML).

    • short_descriptionstring | nullrequired

      Short description (HTML).

    • brand_idinteger | nullrequired

      Brand.

    • category_idsarray of integerrequired

      Categories.

    • optionsarray of ProductOptionrequired

      Options (variable products, up to 3).

      Show item attributes
      • namestringrequired

        Option name.

      • valuesarray of stringrequired

        Values in order.

    • imagesarray of ProductImagerequired

      Images, main image first.

      Show item attributes
      • idinteger | nullrequired

        Image id (null for a thumbnail that is not in the gallery).

      • urlstring<uri>required

        Public URL.

      • altstring | nullrequired

        Alt text.

      • positionintegerrequired

        Order in the gallery (0 = main image).

    • variantsarray of Variantrequired

      Variants in order.

      Show item attributes
      • objectstringrequired
      • idintegerrequired

        Variant id.

      • product_idintegerrequired

        Its product.

      • titlestring | nullrequired

        Option values joined ("Blue / Large"); null for a simple product.

      • option_valuesobjectrequired

        Option name → value.

      • skustring | nullrequired

        SKU (unique in the store).

      • barcodestring | nullrequired

        GTIN / EAN / UPC (8, 12, 13 or 14 digits).

      • pricestringrequired

        Price in the store currency.

        pattern ^-?\d+\.\d{2}$

      • compare_at_pricestring | nullrequired

        Was-price (higher than price), or null.

        pattern ^-?\d+\.\d{2}$

      • coststring | nullrequired

        Cost price (for margins), or null.

        pattern ^-?\d+\.\d{2}$

      • currencystringrequired

        Store currency.

      • weight_gramsinteger | nullrequired

        Shipping weight in grams.

      • inventory_trackedbooleanrequired

        Whether stock is tracked.

      • inventory_quantityinteger | nullrequired

        Units available online (all fulfilling locations); null when not tracked.

      • is_activebooleanrequired

        Can be bought.

      • positionintegerrequired

        Order among the product's variants.

      • image_urlstring<uri> | nullrequired

        Variant image.

      • created_atstring<date-time>required

        Created.

      • updated_atstring<date-time>required

        Last changed.

    • seoobjectrequired
      Show child attributes
      • titlestring | nullrequired

        Meta title.

      • descriptionstring | nullrequired

        Meta description.

    • is_featuredbooleanrequired

      Featured on the storefront.

    • created_atstring<date-time>required

      Created.

    • updated_atstring<date-time>required

      Last changed.

    • deleted_atstring<date-time> | nullrequired

      When it was deleted (product.deleted webhooks), else null.

  • has_morebooleanrequired

    More pages after this one.

  • next_cursorstring | nullrequired

    Pass as cursor for the next page; null on the last page.

200 response
{
  "data": [
    {
      "object": "product",
      "id": 120,
      "name": "Organic cotton tee",
      "slug": "organic-cotton-tee",
      "status": "active",
      "kind": "physical",
      "type": "variable",
      "description": "<p>Soft, breathable and made to last.</p>",
      "short_description": "Our everyday tee.",
      "brand_id": 4,
      "category_ids": [
        7,
        9
      ],
      "options": [
        {
          "name": "Color",
          "values": [
            "Blue",
            "White"
          ]
        },
        {
          "name": "Size",
          "values": [
            "Medium",
            "Large"
          ]
        }
      ],
      "images": [
        {
          "id": 801,
          "url": "https://media.sellorchard.com/stores/01J.../tee.jpg",
          "alt": "Blue tee",
          "position": 0
        }
      ],
      "variants": [
        {
          "object": "variant",
          "id": 311,
          "product_id": 120,
          "title": "Blue / Large",
          "option_values": {
            "Color": "Blue",
            "Size": "Large"
          },
          "sku": "TEE-BL-L",
          "barcode": "0012345678905",
          "price": "24.00",
          "compare_at_price": "30.00",
          "cost": "9.50",
          "currency": "USD",
          "weight_grams": 180,
          "inventory_tracked": true,
          "inventory_quantity": 42,
          "is_active": true,
          "position": 0,
          "image_url": "https://media.sellorchard.com/stores/01J.../tee-blue.jpg",
          "created_at": "2026-11-02T15:00:00Z",
          "updated_at": "2026-11-03T09:30:00Z"
        }
      ],
      "seo": {
        "title": "Organic cotton tee",
        "description": "Soft organic cotton tee in four colours."
      },
      "is_featured": false,
      "created_at": "2026-11-02T15:00:00Z",
      "updated_at": "2026-11-03T09:30:00Z",
      "deleted_at": null
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Error responses

  • 400invalid_requestMalformed request (e.g. a bad cursor).
  • 401authenticationMissing, invalid, expired or revoked API key.
  • 403permissionThe key lacks the scope, or the store's plan doesn't include the API.
  • 422invalid_requestInvalid parameters; errors lists each field.
  • 429rate_limitedToo many requests.
  • 500serverSomething went wrong on our side; safe to retry with the same Idempotency-Key.

Create a product

post/products

Images given by URL are downloaded into the store's media library. Checked with the same rules as the product editor (SKUs unique, one variant per option combination…). Fires product.created.

Required scopes:write_products

Headers

NameTypeDescription
Idempotency-KeystringAny unique string (e.g. a UUID, up to 255 characters). A retry with the same key and body within 24 hours gets the first response again (Idempotent-Replayed: true); the same key with a different body is a 409 conflict.

Request body

  • namestring

    Name (required on create).

    max length 200

  • slugstring | null

    URL handle (generated from the name when empty).

  • statusstring

    Default draft.

    One of:activedraftarchived

  • kindstring

    physical (default) or digital.

    One of:physicaldigital

  • descriptionstring | null

    HTML (sanitised).

  • short_descriptionstring | null

    HTML.

  • brand_idinteger | null

    Brand id (GET /brands).

  • category_idsarray of integer

    Category ids (GET /categories); replaces the list.

  • is_featuredboolean

    Featured.

  • seoobject
    Show child attributes
    • titlestring | null

      Meta title.

    • descriptionstring | null

      Meta description.

  • optionsarray of ProductOption

    Options (up to 3). Without options the product is simple and has exactly one variant.

    Show item attributes
    • namestringrequired

      Option name.

    • valuesarray of stringrequired

      Values in order.

  • imagesarray of object

    Images, main image first; replaces the gallery.

    Show item attributes
    • urlstring<uri>required

      An http(s) image URL; downloaded into the media library (JPG, PNG, WebP, AVIF or GIF). URLs of the product's current images are kept as they are.

    • altstring | null

      Alt text.

  • variantsarray of VariantInput

    Variants (required on create). On PATCH: the full list (ids keep variants; the rest are deleted).

    Show item attributes
    • idinteger | null

      An existing variant to keep and change (PATCH). Variants left out of a PATCH that sends variants are deleted.

    • skustring | null

      SKU (unique in the store).

      max length 64

    • barcodestring | null

      GTIN (8, 12, 13 or 14 digits).

    • pricestring | number

      Price (required for new variants).

    • compare_at_pricestring | number | null

      Was-price; must be higher than price.

    • coststring | number | null

      Cost price.

    • weight_gramsinteger | null

      Weight in grams.

    • option_valuesobject

      Option name → value (one per option).

    • inventory_trackedboolean

      Track stock (default true).

    • inventory_quantityinteger | null

      Units at the first fulfilling location (tracked variants). Use the inventory endpoints for per-location stock.

    • is_activeboolean

      Can be bought (default true).

Example request

curl
curl -X POST "https://api.sellorchard.com/v1/products" \
  -H "Authorization: Bearer $SELLORCHARD_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Organic cotton tee",
  "status": "active",
  "kind": "physical",
  "description": "<p>Soft, breathable and made to last.</p>",
  "brand_id": 4,
  "category_ids": [
    7
  ],
  "seo": {
    "title": "Organic cotton tee",
    "description": "Soft organic cotton tee."
  },
  "options": [
    {
      "name": "Color",
      "values": [
        "Blue"
      ]
    },
    {
      "name": "Size",
      "values": [
        "Large"
      ]
    }
  ],
  "images": [
    {
      "url": "https://example.com/images/tee.jpg",
      "alt": "Blue tee"
    }
  ],
  "variants": [
    {
      "sku": "TEE-BL-L",
      "barcode": null,
      "price": "24.00",
      "compare_at_price": "30.00",
      "cost": "9.50",
      "weight_grams": 180,
      "option_values": {
        "Color": "Blue",
        "Size": "Large"
      },
      "inventory_tracked": true,
      "inventory_quantity": 40,
      "is_active": true
    }
  ]
}'

Response201A product.

Show response schema
  • dataProductrequired
    Show child attributes
    • objectstringrequired
    • idintegerrequired

      Product id.

    • namestringrequired

      Name.

    • slugstringrequired

      URL handle (unique).

    • statusstringrequired

      Visibility.

      One of:activedraftarchived

    • kindstringrequired

      What is sold.

      One of:physicaldigitalgift_cardbooking

    • typestringrequired

      simple (one variant) or variable (options and variants).

      One of:simplevariable

    • descriptionstring | nullrequired

      Description (sanitised HTML).

    • short_descriptionstring | nullrequired

      Short description (HTML).

    • brand_idinteger | nullrequired

      Brand.

    • category_idsarray of integerrequired

      Categories.

    • optionsarray of ProductOptionrequired

      Options (variable products, up to 3).

      Show item attributes
      • namestringrequired

        Option name.

      • valuesarray of stringrequired

        Values in order.

    • imagesarray of ProductImagerequired

      Images, main image first.

      Show item attributes
      • idinteger | nullrequired

        Image id (null for a thumbnail that is not in the gallery).

      • urlstring<uri>required

        Public URL.

      • altstring | nullrequired

        Alt text.

      • positionintegerrequired

        Order in the gallery (0 = main image).

    • variantsarray of Variantrequired

      Variants in order.

      Show item attributes
      • objectstringrequired
      • idintegerrequired

        Variant id.

      • product_idintegerrequired

        Its product.

      • titlestring | nullrequired

        Option values joined ("Blue / Large"); null for a simple product.

      • option_valuesobjectrequired

        Option name → value.

      • skustring | nullrequired

        SKU (unique in the store).

      • barcodestring | nullrequired

        GTIN / EAN / UPC (8, 12, 13 or 14 digits).

      • pricestringrequired

        Price in the store currency.

        pattern ^-?\d+\.\d{2}$

      • compare_at_pricestring | nullrequired

        Was-price (higher than price), or null.

        pattern ^-?\d+\.\d{2}$

      • coststring | nullrequired

        Cost price (for margins), or null.

        pattern ^-?\d+\.\d{2}$

      • currencystringrequired

        Store currency.

      • weight_gramsinteger | nullrequired

        Shipping weight in grams.

      • inventory_trackedbooleanrequired

        Whether stock is tracked.

      • inventory_quantityinteger | nullrequired

        Units available online (all fulfilling locations); null when not tracked.

      • is_activebooleanrequired

        Can be bought.

      • positionintegerrequired

        Order among the product's variants.

      • image_urlstring<uri> | nullrequired

        Variant image.

      • created_atstring<date-time>required

        Created.

      • updated_atstring<date-time>required

        Last changed.

    • seoobjectrequired
      Show child attributes
      • titlestring | nullrequired

        Meta title.

      • descriptionstring | nullrequired

        Meta description.

    • is_featuredbooleanrequired

      Featured on the storefront.

    • created_atstring<date-time>required

      Created.

    • updated_atstring<date-time>required

      Last changed.

    • deleted_atstring<date-time> | nullrequired

      When it was deleted (product.deleted webhooks), else null.

201 response
{
  "data": {
    "object": "product",
    "id": 120,
    "name": "Organic cotton tee",
    "slug": "organic-cotton-tee",
    "status": "active",
    "kind": "physical",
    "type": "variable",
    "description": "<p>Soft, breathable and made to last.</p>",
    "short_description": "Our everyday tee.",
    "brand_id": 4,
    "category_ids": [
      7,
      9
    ],
    "options": [
      {
        "name": "Color",
        "values": [
          "Blue",
          "White"
        ]
      },
      {
        "name": "Size",
        "values": [
          "Medium",
          "Large"
        ]
      }
    ],
    "images": [
      {
        "id": 801,
        "url": "https://media.sellorchard.com/stores/01J.../tee.jpg",
        "alt": "Blue tee",
        "position": 0
      }
    ],
    "variants": [
      {
        "object": "variant",
        "id": 311,
        "product_id": 120,
        "title": "Blue / Large",
        "option_values": {
          "Color": "Blue",
          "Size": "Large"
        },
        "sku": "TEE-BL-L",
        "barcode": "0012345678905",
        "price": "24.00",
        "compare_at_price": "30.00",
        "cost": "9.50",
        "currency": "USD",
        "weight_grams": 180,
        "inventory_tracked": true,
        "inventory_quantity": 42,
        "is_active": true,
        "position": 0,
        "image_url": "https://media.sellorchard.com/stores/01J.../tee-blue.jpg",
        "created_at": "2026-11-02T15:00:00Z",
        "updated_at": "2026-11-03T09:30:00Z"
      }
    ],
    "seo": {
      "title": "Organic cotton tee",
      "description": "Soft organic cotton tee in four colours."
    },
    "is_featured": false,
    "created_at": "2026-11-02T15:00:00Z",
    "updated_at": "2026-11-03T09:30:00Z",
    "deleted_at": null
  }
}

Error responses

  • 401authenticationMissing, invalid, expired or revoked API key.
  • 403permissionThe key lacks the scope, or the store's plan doesn't include the API.
  • 409conflictThe Idempotency-Key was used with a different request, or that request is still running.
  • 422invalid_requestInvalid parameters; errors lists each field.
  • 429rate_limitedToo many requests.
  • 500serverSomething went wrong on our side; safe to retry with the same Idempotency-Key.

Get a product

get/products/{id}

Required scopes:read_products

Path parameters

NameTypeDescription
idrequiredintegerThe object id.

Example request

curl
curl "https://api.sellorchard.com/v1/products/120" \
  -H "Authorization: Bearer $SELLORCHARD_API_KEY"

Response200A product.

Show response schema
  • dataProductrequired
    Show child attributes
    • objectstringrequired
    • idintegerrequired

      Product id.

    • namestringrequired

      Name.

    • slugstringrequired

      URL handle (unique).

    • statusstringrequired

      Visibility.

      One of:activedraftarchived

    • kindstringrequired

      What is sold.

      One of:physicaldigitalgift_cardbooking

    • typestringrequired

      simple (one variant) or variable (options and variants).

      One of:simplevariable

    • descriptionstring | nullrequired

      Description (sanitised HTML).

    • short_descriptionstring | nullrequired

      Short description (HTML).

    • brand_idinteger | nullrequired

      Brand.

    • category_idsarray of integerrequired

      Categories.

    • optionsarray of ProductOptionrequired

      Options (variable products, up to 3).

      Show item attributes
      • namestringrequired

        Option name.

      • valuesarray of stringrequired

        Values in order.

    • imagesarray of ProductImagerequired

      Images, main image first.

      Show item attributes
      • idinteger | nullrequired

        Image id (null for a thumbnail that is not in the gallery).

      • urlstring<uri>required

        Public URL.

      • altstring | nullrequired

        Alt text.

      • positionintegerrequired

        Order in the gallery (0 = main image).

    • variantsarray of Variantrequired

      Variants in order.

      Show item attributes
      • objectstringrequired
      • idintegerrequired

        Variant id.

      • product_idintegerrequired

        Its product.

      • titlestring | nullrequired

        Option values joined ("Blue / Large"); null for a simple product.

      • option_valuesobjectrequired

        Option name → value.

      • skustring | nullrequired

        SKU (unique in the store).

      • barcodestring | nullrequired

        GTIN / EAN / UPC (8, 12, 13 or 14 digits).

      • pricestringrequired

        Price in the store currency.

        pattern ^-?\d+\.\d{2}$

      • compare_at_pricestring | nullrequired

        Was-price (higher than price), or null.

        pattern ^-?\d+\.\d{2}$

      • coststring | nullrequired

        Cost price (for margins), or null.

        pattern ^-?\d+\.\d{2}$

      • currencystringrequired

        Store currency.

      • weight_gramsinteger | nullrequired

        Shipping weight in grams.

      • inventory_trackedbooleanrequired

        Whether stock is tracked.

      • inventory_quantityinteger | nullrequired

        Units available online (all fulfilling locations); null when not tracked.

      • is_activebooleanrequired

        Can be bought.

      • positionintegerrequired

        Order among the product's variants.

      • image_urlstring<uri> | nullrequired

        Variant image.

      • created_atstring<date-time>required

        Created.

      • updated_atstring<date-time>required

        Last changed.

    • seoobjectrequired
      Show child attributes
      • titlestring | nullrequired

        Meta title.

      • descriptionstring | nullrequired

        Meta description.

    • is_featuredbooleanrequired

      Featured on the storefront.

    • created_atstring<date-time>required

      Created.

    • updated_atstring<date-time>required

      Last changed.

    • deleted_atstring<date-time> | nullrequired

      When it was deleted (product.deleted webhooks), else null.

200 response
{
  "data": {
    "object": "product",
    "id": 120,
    "name": "Organic cotton tee",
    "slug": "organic-cotton-tee",
    "status": "active",
    "kind": "physical",
    "type": "variable",
    "description": "<p>Soft, breathable and made to last.</p>",
    "short_description": "Our everyday tee.",
    "brand_id": 4,
    "category_ids": [
      7,
      9
    ],
    "options": [
      {
        "name": "Color",
        "values": [
          "Blue",
          "White"
        ]
      },
      {
        "name": "Size",
        "values": [
          "Medium",
          "Large"
        ]
      }
    ],
    "images": [
      {
        "id": 801,
        "url": "https://media.sellorchard.com/stores/01J.../tee.jpg",
        "alt": "Blue tee",
        "position": 0
      }
    ],
    "variants": [
      {
        "object": "variant",
        "id": 311,
        "product_id": 120,
        "title": "Blue / Large",
        "option_values": {
          "Color": "Blue",
          "Size": "Large"
        },
        "sku": "TEE-BL-L",
        "barcode": "0012345678905",
        "price": "24.00",
        "compare_at_price": "30.00",
        "cost": "9.50",
        "currency": "USD",
        "weight_grams": 180,
        "inventory_tracked": true,
        "inventory_quantity": 42,
        "is_active": true,
        "position": 0,
        "image_url": "https://media.sellorchard.com/stores/01J.../tee-blue.jpg",
        "created_at": "2026-11-02T15:00:00Z",
        "updated_at": "2026-11-03T09:30:00Z"
      }
    ],
    "seo": {
      "title": "Organic cotton tee",
      "description": "Soft organic cotton tee in four colours."
    },
    "is_featured": false,
    "created_at": "2026-11-02T15:00:00Z",
    "updated_at": "2026-11-03T09:30:00Z",
    "deleted_at": null
  }
}

Error responses

  • 401authenticationMissing, invalid, expired or revoked API key.
  • 403permissionThe key lacks the scope, or the store's plan doesn't include the API.
  • 404not_foundNo such object in this store.
  • 429rate_limitedToo many requests.
  • 500serverSomething went wrong on our side; safe to retry with the same Idempotency-Key.

Update a product

patch/products/{id}

Only the fields sent change. variants, options, images and category_ids replace the whole list when sent. Fires product.updated.

Required scopes:write_products

Path parameters

NameTypeDescription
idrequiredintegerThe object id.

Request body

  • namestring

    Name (required on create).

    max length 200

  • slugstring | null

    URL handle (generated from the name when empty).

  • statusstring

    Default draft.

    One of:activedraftarchived

  • kindstring

    physical (default) or digital.

    One of:physicaldigital

  • descriptionstring | null

    HTML (sanitised).

  • short_descriptionstring | null

    HTML.

  • brand_idinteger | null

    Brand id (GET /brands).

  • category_idsarray of integer

    Category ids (GET /categories); replaces the list.

  • is_featuredboolean

    Featured.

  • seoobject
    Show child attributes
    • titlestring | null

      Meta title.

    • descriptionstring | null

      Meta description.

  • optionsarray of ProductOption

    Options (up to 3). Without options the product is simple and has exactly one variant.

    Show item attributes
    • namestringrequired

      Option name.

    • valuesarray of stringrequired

      Values in order.

  • imagesarray of object

    Images, main image first; replaces the gallery.

    Show item attributes
    • urlstring<uri>required

      An http(s) image URL; downloaded into the media library (JPG, PNG, WebP, AVIF or GIF). URLs of the product's current images are kept as they are.

    • altstring | null

      Alt text.

  • variantsarray of VariantInput

    Variants (required on create). On PATCH: the full list (ids keep variants; the rest are deleted).

    Show item attributes
    • idinteger | null

      An existing variant to keep and change (PATCH). Variants left out of a PATCH that sends variants are deleted.

    • skustring | null

      SKU (unique in the store).

      max length 64

    • barcodestring | null

      GTIN (8, 12, 13 or 14 digits).

    • pricestring | number

      Price (required for new variants).

    • compare_at_pricestring | number | null

      Was-price; must be higher than price.

    • coststring | number | null

      Cost price.

    • weight_gramsinteger | null

      Weight in grams.

    • option_valuesobject

      Option name → value (one per option).

    • inventory_trackedboolean

      Track stock (default true).

    • inventory_quantityinteger | null

      Units at the first fulfilling location (tracked variants). Use the inventory endpoints for per-location stock.

    • is_activeboolean

      Can be bought (default true).

Example request

curl
curl -X PATCH "https://api.sellorchard.com/v1/products/120" \
  -H "Authorization: Bearer $SELLORCHARD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Organic cotton tee",
  "status": "active",
  "kind": "physical",
  "description": "<p>Soft, breathable and made to last.</p>",
  "brand_id": 4,
  "category_ids": [
    7
  ],
  "seo": {
    "title": "Organic cotton tee",
    "description": "Soft organic cotton tee."
  },
  "options": [
    {
      "name": "Color",
      "values": [
        "Blue"
      ]
    },
    {
      "name": "Size",
      "values": [
        "Large"
      ]
    }
  ],
  "images": [
    {
      "url": "https://example.com/images/tee.jpg",
      "alt": "Blue tee"
    }
  ],
  "variants": [
    {
      "sku": "TEE-BL-L",
      "barcode": null,
      "price": "24.00",
      "compare_at_price": "30.00",
      "cost": "9.50",
      "weight_grams": 180,
      "option_values": {
        "Color": "Blue",
        "Size": "Large"
      },
      "inventory_tracked": true,
      "inventory_quantity": 40,
      "is_active": true
    }
  ]
}'

Response200A product.

Show response schema
  • dataProductrequired
    Show child attributes
    • objectstringrequired
    • idintegerrequired

      Product id.

    • namestringrequired

      Name.

    • slugstringrequired

      URL handle (unique).

    • statusstringrequired

      Visibility.

      One of:activedraftarchived

    • kindstringrequired

      What is sold.

      One of:physicaldigitalgift_cardbooking

    • typestringrequired

      simple (one variant) or variable (options and variants).

      One of:simplevariable

    • descriptionstring | nullrequired

      Description (sanitised HTML).

    • short_descriptionstring | nullrequired

      Short description (HTML).

    • brand_idinteger | nullrequired

      Brand.

    • category_idsarray of integerrequired

      Categories.

    • optionsarray of ProductOptionrequired

      Options (variable products, up to 3).

      Show item attributes
      • namestringrequired

        Option name.

      • valuesarray of stringrequired

        Values in order.

    • imagesarray of ProductImagerequired

      Images, main image first.

      Show item attributes
      • idinteger | nullrequired

        Image id (null for a thumbnail that is not in the gallery).

      • urlstring<uri>required

        Public URL.

      • altstring | nullrequired

        Alt text.

      • positionintegerrequired

        Order in the gallery (0 = main image).

    • variantsarray of Variantrequired

      Variants in order.

      Show item attributes
      • objectstringrequired
      • idintegerrequired

        Variant id.

      • product_idintegerrequired

        Its product.

      • titlestring | nullrequired

        Option values joined ("Blue / Large"); null for a simple product.

      • option_valuesobjectrequired

        Option name → value.

      • skustring | nullrequired

        SKU (unique in the store).

      • barcodestring | nullrequired

        GTIN / EAN / UPC (8, 12, 13 or 14 digits).

      • pricestringrequired

        Price in the store currency.

        pattern ^-?\d+\.\d{2}$

      • compare_at_pricestring | nullrequired

        Was-price (higher than price), or null.

        pattern ^-?\d+\.\d{2}$

      • coststring | nullrequired

        Cost price (for margins), or null.

        pattern ^-?\d+\.\d{2}$

      • currencystringrequired

        Store currency.

      • weight_gramsinteger | nullrequired

        Shipping weight in grams.

      • inventory_trackedbooleanrequired

        Whether stock is tracked.

      • inventory_quantityinteger | nullrequired

        Units available online (all fulfilling locations); null when not tracked.

      • is_activebooleanrequired

        Can be bought.

      • positionintegerrequired

        Order among the product's variants.

      • image_urlstring<uri> | nullrequired

        Variant image.

      • created_atstring<date-time>required

        Created.

      • updated_atstring<date-time>required

        Last changed.

    • seoobjectrequired
      Show child attributes
      • titlestring | nullrequired

        Meta title.

      • descriptionstring | nullrequired

        Meta description.

    • is_featuredbooleanrequired

      Featured on the storefront.

    • created_atstring<date-time>required

      Created.

    • updated_atstring<date-time>required

      Last changed.

    • deleted_atstring<date-time> | nullrequired

      When it was deleted (product.deleted webhooks), else null.

200 response
{
  "data": {
    "object": "product",
    "id": 120,
    "name": "Organic cotton tee",
    "slug": "organic-cotton-tee",
    "status": "active",
    "kind": "physical",
    "type": "variable",
    "description": "<p>Soft, breathable and made to last.</p>",
    "short_description": "Our everyday tee.",
    "brand_id": 4,
    "category_ids": [
      7,
      9
    ],
    "options": [
      {
        "name": "Color",
        "values": [
          "Blue",
          "White"
        ]
      },
      {
        "name": "Size",
        "values": [
          "Medium",
          "Large"
        ]
      }
    ],
    "images": [
      {
        "id": 801,
        "url": "https://media.sellorchard.com/stores/01J.../tee.jpg",
        "alt": "Blue tee",
        "position": 0
      }
    ],
    "variants": [
      {
        "object": "variant",
        "id": 311,
        "product_id": 120,
        "title": "Blue / Large",
        "option_values": {
          "Color": "Blue",
          "Size": "Large"
        },
        "sku": "TEE-BL-L",
        "barcode": "0012345678905",
        "price": "24.00",
        "compare_at_price": "30.00",
        "cost": "9.50",
        "currency": "USD",
        "weight_grams": 180,
        "inventory_tracked": true,
        "inventory_quantity": 42,
        "is_active": true,
        "position": 0,
        "image_url": "https://media.sellorchard.com/stores/01J.../tee-blue.jpg",
        "created_at": "2026-11-02T15:00:00Z",
        "updated_at": "2026-11-03T09:30:00Z"
      }
    ],
    "seo": {
      "title": "Organic cotton tee",
      "description": "Soft organic cotton tee in four colours."
    },
    "is_featured": false,
    "created_at": "2026-11-02T15:00:00Z",
    "updated_at": "2026-11-03T09:30:00Z",
    "deleted_at": null
  }
}

Error responses

  • 401authenticationMissing, invalid, expired or revoked API key.
  • 403permissionThe key lacks the scope, or the store's plan doesn't include the API.
  • 404not_foundNo such object in this store.
  • 422invalid_requestInvalid parameters; errors lists each field.
  • 429rate_limitedToo many requests.
  • 500serverSomething went wrong on our side; safe to retry with the same Idempotency-Key.

Delete a product

delete/products/{id}

Soft delete: past orders keep showing the product. Fires product.deleted.

Required scopes:write_products

Path parameters

NameTypeDescription
idrequiredintegerThe object id.

Example request

curl
curl -X DELETE "https://api.sellorchard.com/v1/products/120" \
  -H "Authorization: Bearer $SELLORCHARD_API_KEY"

Response200Deleted.

Show response schema
  • dataDeletedrequired
    Show child attributes
    • objectstringrequired

      Object type.

    • idintegerrequired

      Id.

    • deletedbooleanrequired

      true: deleted. Discounts used on orders are switched off instead (deleted false, is_active false).

200 response
{
  "data": {
    "object": "product",
    "id": 120,
    "deleted": true
  }
}

Error responses

  • 401authenticationMissing, invalid, expired or revoked API key.
  • 403permissionThe key lacks the scope, or the store's plan doesn't include the API.
  • 404not_foundNo such object in this store.
  • 429rate_limitedToo many requests.
  • 500serverSomething went wrong on our side; safe to retry with the same Idempotency-Key.

List a product's variants

get/products/{id}/variants

Required scopes:read_products

Path parameters

NameTypeDescription
idrequiredintegerThe object id.

Query parameters

NameTypeDescription
limitintegerPage size, 1–250 (default 50).

default 50 · min 1 · max 250

cursorstringnext_cursor from the previous page.
updated_sincestring<date-time>Only objects changed at or after this ISO-8601 time.
created_sincestring<date-time>Only objects created at or after this ISO-8601 time.

Example request

curl
curl "https://api.sellorchard.com/v1/products/120/variants?limit=50" \
  -H "Authorization: Bearer $SELLORCHARD_API_KEY"

Response200Variants.

Show response schema
  • dataarray of Variantrequired
    Show item attributes
    • objectstringrequired
    • idintegerrequired

      Variant id.

    • product_idintegerrequired

      Its product.

    • titlestring | nullrequired

      Option values joined ("Blue / Large"); null for a simple product.

    • option_valuesobjectrequired

      Option name → value.

    • skustring | nullrequired

      SKU (unique in the store).

    • barcodestring | nullrequired

      GTIN / EAN / UPC (8, 12, 13 or 14 digits).

    • pricestringrequired

      Price in the store currency.

      pattern ^-?\d+\.\d{2}$

    • compare_at_pricestring | nullrequired

      Was-price (higher than price), or null.

      pattern ^-?\d+\.\d{2}$

    • coststring | nullrequired

      Cost price (for margins), or null.

      pattern ^-?\d+\.\d{2}$

    • currencystringrequired

      Store currency.

    • weight_gramsinteger | nullrequired

      Shipping weight in grams.

    • inventory_trackedbooleanrequired

      Whether stock is tracked.

    • inventory_quantityinteger | nullrequired

      Units available online (all fulfilling locations); null when not tracked.

    • is_activebooleanrequired

      Can be bought.

    • positionintegerrequired

      Order among the product's variants.

    • image_urlstring<uri> | nullrequired

      Variant image.

    • created_atstring<date-time>required

      Created.

    • updated_atstring<date-time>required

      Last changed.

  • has_morebooleanrequired

    More pages after this one.

  • next_cursorstring | nullrequired

    Pass as cursor for the next page; null on the last page.

200 response
{
  "data": [
    {
      "object": "variant",
      "id": 311,
      "product_id": 120,
      "title": "Blue / Large",
      "option_values": {
        "Color": "Blue",
        "Size": "Large"
      },
      "sku": "TEE-BL-L",
      "barcode": "0012345678905",
      "price": "24.00",
      "compare_at_price": "30.00",
      "cost": "9.50",
      "currency": "USD",
      "weight_grams": 180,
      "inventory_tracked": true,
      "inventory_quantity": 42,
      "is_active": true,
      "position": 0,
      "image_url": "https://media.sellorchard.com/stores/01J.../tee-blue.jpg",
      "created_at": "2026-11-02T15:00:00Z",
      "updated_at": "2026-11-03T09:30:00Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Error responses

  • 400invalid_requestMalformed request (e.g. a bad cursor).
  • 401authenticationMissing, invalid, expired or revoked API key.
  • 403permissionThe key lacks the scope, or the store's plan doesn't include the API.
  • 404not_foundNo such object in this store.
  • 422invalid_requestInvalid parameters; errors lists each field.
  • 429rate_limitedToo many requests.
  • 500serverSomething went wrong on our side; safe to retry with the same Idempotency-Key.

Update a variant

patch/variants/{id}

Price, compare-at price, cost, SKU, barcode and weight. Stock changes go through the inventory endpoints.

Required scopes:write_products

Path parameters

NameTypeDescription
idrequiredintegerThe object id.

Request body

  • pricestring | number
  • compare_at_pricestring | number | null
  • coststring | number | null
  • skustring | null

    SKU.

  • barcodestring | null

    GTIN.

  • weight_gramsinteger | null

    Weight in grams.

Example request

curl
curl -X PATCH "https://api.sellorchard.com/v1/variants/120" \
  -H "Authorization: Bearer $SELLORCHARD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "price": "22.00",
  "compare_at_price": "30.00"
}'

Response200A variant.

Show response schema
  • dataVariantrequired
    Show child attributes
    • objectstringrequired
    • idintegerrequired

      Variant id.

    • product_idintegerrequired

      Its product.

    • titlestring | nullrequired

      Option values joined ("Blue / Large"); null for a simple product.

    • option_valuesobjectrequired

      Option name → value.

    • skustring | nullrequired

      SKU (unique in the store).

    • barcodestring | nullrequired

      GTIN / EAN / UPC (8, 12, 13 or 14 digits).

    • pricestringrequired

      Price in the store currency.

      pattern ^-?\d+\.\d{2}$

    • compare_at_pricestring | nullrequired

      Was-price (higher than price), or null.

      pattern ^-?\d+\.\d{2}$

    • coststring | nullrequired

      Cost price (for margins), or null.

      pattern ^-?\d+\.\d{2}$

    • currencystringrequired

      Store currency.

    • weight_gramsinteger | nullrequired

      Shipping weight in grams.

    • inventory_trackedbooleanrequired

      Whether stock is tracked.

    • inventory_quantityinteger | nullrequired

      Units available online (all fulfilling locations); null when not tracked.

    • is_activebooleanrequired

      Can be bought.

    • positionintegerrequired

      Order among the product's variants.

    • image_urlstring<uri> | nullrequired

      Variant image.

    • created_atstring<date-time>required

      Created.

    • updated_atstring<date-time>required

      Last changed.

200 response
{
  "data": {
    "object": "variant",
    "id": 311,
    "product_id": 120,
    "title": "Blue / Large",
    "option_values": {
      "Color": "Blue",
      "Size": "Large"
    },
    "sku": "TEE-BL-L",
    "barcode": "0012345678905",
    "price": "24.00",
    "compare_at_price": "30.00",
    "cost": "9.50",
    "currency": "USD",
    "weight_grams": 180,
    "inventory_tracked": true,
    "inventory_quantity": 42,
    "is_active": true,
    "position": 0,
    "image_url": "https://media.sellorchard.com/stores/01J.../tee-blue.jpg",
    "created_at": "2026-11-02T15:00:00Z",
    "updated_at": "2026-11-03T09:30:00Z"
  }
}

Error responses

  • 401authenticationMissing, invalid, expired or revoked API key.
  • 403permissionThe key lacks the scope, or the store's plan doesn't include the API.
  • 404not_foundNo such object in this store.
  • 422invalid_requestInvalid parameters; errors lists each field.
  • 429rate_limitedToo many requests.
  • 500serverSomething went wrong on our side; safe to retry with the same Idempotency-Key.