Promosyon kodları ve indirimlerin uygulanması

Bu kılavuzda, Evrensel Ticaret Protokolü'nün (UCP) 2026-04-08 sürümünde promosyon kodlarını ve indirimleri işlemek için teknik API referansı ve yük şemaları sağlanır.

Uç noktalarınızı oluşturmadan önce, üst düzey kavramlar, matematiksel değişmezler ve hata işleme kuralları için Promosyon kodları ve indirimlere genel bakış başlıklı makaleyi incelediğinizden emin olun.

Discovery

Google'dan indirim kodu almak için profilinizde indirim desteği reklamı yapmanız gerekir. 2026-04-08 sürümünde, platformlar indirim kodlarını göndermeden önce ödeme özelliğinin genişletilip genişletilmediğini kontrol eder.

{
  "ucp": {
    "version": "2026-04-08",
    "capabilities": {
      "dev.ucp.shopping.discount": [
        {
          "version": "2026-04-08",
          "extends": ["dev.ucp.shopping.checkout"],
          "spec": "https://ucp.dev/2026-04-08/specification/discount",
          "schema": "https://ucp.dev/2026-04-08/schemas/shopping/discount.json"
        }
      ]
    }
  }
}

Satır öğeleri ve toplamlar üzerindeki etkisi

Uygulanan indirimler, iki farklı toplam türü kullanılarak temel ödeme alanlarına yansıtılır. Bir indirim allocations ile satır öğelerini işaret ediyorsa items_discount'e katkıda bulunur. Tahsis edilmemiş veya kargo ya da ücretlere tahsis edilmiş indirimler discount değerine katkıda bulunur.

İndirim türü Toplam türü Nerede yansıtılır?
Satır öğesi indirimi items_discount line_items[].totals[type=items_discount]
Sipariş düzeyinde indirim discount totals[type=discount]

Sürüm koşulu:

2026-04-08 sürümünde, totals[] ve line_items[].totals[] içindeki indirim girişleri, makbuz üzerindeki çıkarma etkilerini yansıtmak için negatif değerler kullanmalıdır. discounts.applied ve allocations dizilerindeki tutarlar her zaman pozitif tam sayı olarak kalır.

Otomatik uygulanan promosyonlarla ilgili API örnekleri

Aşağıdaki örneklerde otomatik olarak uygulanan indirimler gösterilmektedir. İstek yüklerinde discounts.codes dizisi yok ancak yanıtlarda "automatic": true var ve code alanı atlanıyor.

Otomatik olarak uygulanan öğe düzeyinde indirim

Belirli bir satır öğesine otomatik olarak uygulanan% 10'luk site genelinde indirim.

İstek örneği:

{
  "line_items": [
    {
      "id": "li_1",
      "item": { "title": "Sneakers", "price": 10000 },
      "quantity": 1
    }
  ]
}

Yanıt örneği:

{
  "line_items": [
    {
      "id": "li_1",
      "item": { "title": "Sneakers", "price": 10000 },
      "quantity": 1,
      "totals": [
        {"type": "subtotal", "amount": 10000},
        {"type": "items_discount", "amount": -1000},
        {"type": "total", "amount": 9000}
      ]
    }
  ],
  "discounts": {
    "applied": [
      {
        "title": "10% Off Sitewide Sale",
        "amount": 1000,
        "automatic": true,
        "method": "each",
        "allocations": [
          {"path": "$.line_items[0]", "amount": 1000}
        ]
      }
    ]
  },
  "totals": [
    {"type": "subtotal", "display_text": "Subtotal", "amount": 10000},
    {"type": "items_discount", "display_text": "Item Discounts", "amount": -1000},
    {"type": "total", "display_text": "Total", "amount": 9000}
  ]
}

Otomatik uygulanan sipariş düzeyinde indirim

Siparişe bir bütün olarak uygulanan ve belirli satır öğesi tahsisleri içermeyen bir promosyon kuralı (ör. "50 TL üzeri siparişlerde 10 TL indirim").

İstek örneği:

{
  "line_items": [ ... ]
}

Yanıt örneği:

{
  "line_items": [ ... ],
  "discounts": {
    "applied": [
      {
        "title": "$10 Off Orders Over $50",
        "amount": 1000,
        "automatic": true
      }
    ]
  },
  "totals": [
    {"type": "subtotal", "display_text": "Subtotal", "amount": 6000},
    {"type": "discount", "display_text": "Order Promo", "amount": -1000},
    {"type": "total", "display_text": "Total", "amount": 5000}
  ]
}

Kullanıcı tarafından uygulanan promosyonlarla ilgili API örnekleri

Aşağıdaki örneklerde, kullanıcının promosyon kodu girmesiyle tetiklenen indirimler gösterilmektedir. İstek yükleri, istenen kodları içerir. Yanıtlar ise uygulanan tutarları ayırırken bu kodları tekrar gönderir.

Sipariş düzeyinde indirim

Sipariş toplamına uygulanan sabit indirim. Tahsis yapılması gerekmez. İndirim, siparişin tamamı için geçerlidir ve type: "discount" kullanılır.

İstek örneği:

{
  "line_items": [ ... ],
  "discounts": {
    "codes": ["SAVE10"]
  }
}

Yanıt örneği:

{
  "line_items": [ ... ],
  "discounts": {
    "codes": ["SAVE10"],
    "applied": [
      {
        "code": "SAVE10",
        "title": "$10 Off Your Order",
        "amount": 1000
      }
    ]
  },
  "totals": [
    {"type": "subtotal", "display_text": "Subtotal", "amount": 5000},
    {"type": "discount", "display_text": "Order Discount", "amount": -1000},
    {"type": "total", "display_text": "Total", "amount": 4000}
  ]
}

Karma indirimler (ürün + sipariş düzeyinde)

Bu örnekte, hem öğe başına indirim (20% indirim) hem de sipariş düzeyinde otomatik kargo indirimi olmak üzere iki indirim türü gösterilmektedir.

İstek örneği:

{
  "line_items": [ ... ],
  "discounts": {
    "codes": ["SUMMER20"]
  }
}

Yanıt örneği:

{
  "line_items": [
    {
      "id": "li_1",
      "item": { "title": "T-Shirt", "price": 2000 },
      "quantity": 2,
      "totals": [
        {"type": "subtotal", "amount": 4000},
        {"type": "items_discount", "amount": -800},
        {"type": "total", "amount": 3200}
      ]
    }
  ],
  "discounts": {
    "codes": ["SUMMER20"],
    "applied": [
      {
        "code": "SUMMER20",
        "title": "Summer Sale 20% Off",
        "amount": 800,
        "allocations": [
          {"path": "$.line_items[0]", "amount": 800}
        ]
      },
      {
        "title": "Free shipping on orders over $30",
        "amount": 599,
        "automatic": true
      }
    ]
  },
  "totals": [
    {"type": "subtotal", "display_text": "Subtotal", "amount": 4000},
    {"type": "items_discount", "display_text": "Item Discounts", "amount": -800},
    {"type": "discount", "display_text": "Order Discounts", "amount": -599},
    {"type": "fulfillment", "display_text": "Shipping", "amount": 0},
    {"type": "total", "display_text": "Total", "amount": 2601}
  ]
}

İndirim kodu reddedildi

Geçersiz bir kod, codes içinde yansıtılır ancak applied içinde atlanır. Reddetme, messages[] dizisinde warning kullanılarak bildirilir.

İstek örneği:

{
  "line_items": [ ... ],
  "discounts": {
    "codes": ["SAVE10", "EXPIRED50"]
  }
}

Yanıt örneği:

{
  "line_items": [ ... ],
  "discounts": {
    "codes": ["SAVE10", "EXPIRED50"],
    "applied": [
      {
        "code": "SAVE10",
        "title": "$10 Off Your Order",
        "amount": 1000
      }
    ]
  },
  "totals": [
    {"type": "subtotal", "display_text": "Subtotal", "amount": 5000},
    {"type": "discount", "display_text": "Order Discount", "amount": -1000},
    {"type": "total", "display_text": "Total", "amount": 4000}
  ],
  "messages": [
    {
      "type": "warning",
      "code": "discount_code_expired",
      "path": "$.discounts.codes[1]",
      "content": "Code 'EXPIRED50' expired on December 1st"
    }
  ]
}

Ayrılmış indirimler

Tam dağılım dökümleriyle birlikte uygulanan birden fazla indirim.

İstek örneği:

{
  "line_items": [ ... ],
  "discounts": {
    "codes": ["SUMMER20", "EXTRA5"]
  }
}

Yanıt örneği:

{
  "line_items": [
    {
      "id": "li_1",
      "item": { "title": "T-Shirt", "price": 6000 },
      "quantity": 1,
      "totals": [
        {"type": "subtotal", "amount": 6000},
        {"type": "items_discount", "amount": -1500},
        {"type": "total", "amount": 4500}
      ]
    },
    {
      "id": "li_2",
      "item": { "title": "Socks", "price": 4000 },
      "quantity": 1,
      "totals": [
        {"type": "subtotal", "amount": 4000},
        {"type": "items_discount", "amount": -1000},
        {"type": "total", "amount": 3000}
      ]
    }
  ],
  "discounts": {
    "codes": ["SUMMER20", "EXTRA5"],
    "applied": [
      {
        "code": "SUMMER20",
        "title": "Summer Sale 20% Off",
        "amount": 2000,
        "method": "each",
        "priority": 1,
        "allocations": [
          {"path": "$.line_items[0]", "amount": 1200},
          {"path": "$.line_items[1]", "amount": 800}
        ]
      },
      {
        "code": "EXTRA5",
        "title": "Extra $5 Off",
        "amount": 500,
        "method": "across",
        "priority": 2,
        "allocations": [
          {"path": "$.line_items[0]", "amount": 300},
          {"path": "$.line_items[1]", "amount": 200}
        ]
      }
    ]
  },
  "totals": [
    {"type": "subtotal", "display_text": "Subtotal", "amount": 10000},
    {"type": "items_discount", "display_text": "Item Discounts", "amount": -2500},
    {"type": "total", "display_text": "Total", "amount": 7500}
  ]
}