productSet ile ürünü tek seferde oluşturma ya da güncelleme

Harici bir sistemden ürünü tek çağrıda senkronize edin: productSet, ürünü seçenekleri ve varyantlarıyla birlikte handle’a göre oluşturur ya da günceller.

API
Admin GraphQL API
İşlem
productSet
Erişim yetkisi
write_products
Yerini aldığı REST çağrısı
POST /admin/api/products.json ve PUT /admin/api/products/{id}.json
API sürümü
2026-10
Son kontrol

Kısaca

Bir ürünü ERP ya da PIM’den senkronize etmek için productSet’i ürünün tamamıyla çağırın: title, status, productOptions ve variants. Mevcut bir ürünü güncellemek için identifier’a handle ya da ID verin; yeni ürün için boş bırakın. Liste alanları baştan yazılır, yani göndermediğiniz varyantlar silinir. Küçük ürünlerde synchronous: true, büyüklerde asenkron modu kullanın.

Nasıl kullanılır

  1. Kaynak kaydınızı ProductSetInput’a eşleyin: her seçenek tüm değerleriyle, ardından her kombinasyon için optionValues, sku ve price içeren bir varyant.
  2. İkinci çalıştırmada kopya oluşmasın, ürün güncellensin diye identifier’a handle (ya da ID veya customId olarak benzersiz bir metafield) verin.
  3. SyncProduct’ı gönderin. synchronous: true ile ürün yanıtta döner.
  4. Büyük ürünlerde synchronous: false gönderin ve dönen productSetOperation ID’siyle productOperation sorgusunu takip edin.

Kod

product-set.graphql
mutation SyncProduct($identifier: ProductSetIdentifiers, $input: ProductSetInput!) {
  productSet(identifier: $identifier, input: $input, synchronous: true) {
    product {
      id
      handle
      title
      status
      variants(first: 10) {
        nodes {
          id
          sku
          price
          selectedOptions {
            name
            value
          }
        }
      }
    }
    userErrors {
      code
      field
      message
    }
  }
}
product-set.variables.json
{
  "identifier": {
    "handle": "linen-shirt"
  },
  "input": {
    "title": "Linen shirt",
    "handle": "linen-shirt",
    "status": "ACTIVE",
    "vendor": "Your Brand",
    "productType": "Shirts",
    "tags": ["summer", "linen"],
    "productOptions": [
      {
        "name": "Size",
        "values": [{"name": "S"}, {"name": "M"}, {"name": "L"}]
      }
    ],
    "variants": [
      {"optionValues": [{"optionName": "Size", "name": "S"}], "sku": "LS-S", "price": "49.00"},
      {"optionValues": [{"optionName": "Size", "name": "M"}], "sku": "LS-M", "price": "49.00"},
      {"optionValues": [{"optionName": "Size", "name": "L"}], "sku": "LS-L", "price": "52.00"}
    ]
  }
}
product-set.response.json
{
  "data": {
    "productSet": {
      "product": {
        "id": "gid://shopify/Product/1234567890",
        "handle": "linen-shirt",
        "title": "Linen shirt",
        "status": "ACTIVE",
        "variants": {
          "nodes": [
            {"id": "gid://shopify/ProductVariant/1111111111", "sku": "LS-S", "price": "49.00", "selectedOptions": [{"name": "Size", "value": "S"}]},
            {"id": "gid://shopify/ProductVariant/1111111112", "sku": "LS-M", "price": "49.00", "selectedOptions": [{"name": "Size", "value": "M"}]},
            {"id": "gid://shopify/ProductVariant/1111111113", "sku": "LS-L", "price": "52.00", "selectedOptions": [{"name": "Size", "value": "L"}]}
          ]
        }
      },
      "userErrors": []
    }
  }
}

Lintel tarafından yazıldı. MIT lisansı: kendi mağazanızda da müşteri işlerinizde de ücretsiz kullanabilirsiniz.

Sınırlar ve özel durumlar

  • Liste alanları (variants, productOptions, metafields, collections, files) baştan yazılır: göndermedikleriniz silinir. Diğer alanlar yalnızca gönderirseniz değişir.
  • Mağazalarda varsayılan olarak ürün başına en fazla 2048 varyant olabilir.
  • Bir bulk operation içinde productSet her zaman senkron çalışır.
  • Yalnızca varyantları ya da seçenekleri değiştirecekseniz productVariantsBulkCreate, productVariantsBulkUpdate veya productOption mutation’larını kullanın.

Sık sorulan sorular

productSet ile productCreate arasındaki fark nedir?
productCreate ürünün iskeletini ve seçeneklerini oluşturur; varyantlar başka çağrılarla eklenir. productSet ise ürünü varyantlarıyla birlikte alır ve oluşturur ya da günceller; bu da harici bir kaynaktan senkronizasyon için idealdir.
productSet varyantları siler mi?
Evet, göndermezseniz siler. variants bir liste alanıdır; sonuç tam olarak gönderdiğiniz listeyle aynı olur.
Bir ürünü handle’a göre nasıl upsert ederim?
identifier: { handle: "urun-handle" } verin. Bu handle’a sahip bir ürün yoksa productSet yenisini oluşturur.
  • Gösterilen tarihte, 2026-10 sürümünün Admin veya Storefront API şemasıyla doğrulandı. İstek adresinizdeki sürümü kontrol edin.
  • Örneklerdeki ID’ler ve mağaza adresleri yer tutucudur. Kendi değerlerinizle değiştirin.
  • Admin API çağrıları uygulamanızdan bir erişim anahtarı (access token) ister. Admin API anahtarını asla vitrine ya da temaya koymayın.
  • MIT lisansı. Kodu kendi mağazanızda da müşteri işlerinizde de kullanabilirsiniz.

Mağazanız için kurulmasını, test edilmesini ve bakımını isterseniz: API entegrasyonları.

Geliştirmek istediğiniz bir şey mi var? Gelin, birlikte konuşalım.

Aynı anda sınırlı sayıda proje alıyoruz.

Gencer KarakayaShopify mühendisi

Proje özetinizi bir mühendis okur; size e-postayla yanıt veririz.