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}
]
}