Payment Orchestrator
Subscription
Ürünler

Ürünler

Ürün, kataloğunuzun kökündeki satılabilir birimdir — "Pro", "Enterprise", "Depolama Paketi". Kendi fiyatı yoktur; fiyatları ve faturalama ritimlerini ona planlar bağlar. Ürünün sahip olduğu şeyler: sizin sabit code'unuz, müşteriye görünen ad ve açıklama, locale bazlı çeviriler ve planlarındaki aboneliklere miras kalan varsayılan fiyat-değişikliği politikası.

Endpoint'ler

Tüm endpoint'ler Bearer ile doğrulanır (at_live_…); liste yanıtları cursor pagination kullanır (pageSize, pageToken).

MethodPathNe yapar
POST/api/v1/subscriptions/productsÜrün oluşturur
GET/api/v1/subscriptions/productsListeler (includeArchived filtresi, pageSize / pageToken sayfalama)
GET/api/v1/subscriptions/products/:idTek ürünü getirir
PATCH/api/v1/subscriptions/products/:idAlanları günceller
DELETE/api/v1/subscriptions/products/:idArşivler (soft delete)
GET/api/v1/subscriptions/products/:id/translationsÇevirileri listeler
PATCH/api/v1/subscriptions/products/:id/translations/:localeÇeviri oluşturur veya günceller

Ürün oluşturma

curl -X POST https://api-gateway.lunixi.com/api/v1/subscriptions/products \
  -H "Authorization: Bearer at_live_5f3e2b1a..." \
  -H "Content-Type: application/json" \
  -d '{
    "code": "pro",
    "name": "Pro",
    "description": "Büyüyen ekipler için",
    "defaultPriceUpdatePolicy": "LOCKED",
    "defaultPriceChangeBehavior": "NEXT_PERIOD",
    "metadata": { "tier": 2 }
  }'

Alanlar

AlanTipNot
codestring, zorunluSizin sabit kimliğiniz; entegrasyonlarda kullanılır, merchant başına benzersizdir.
namestring, zorunluMüşteriye görünen ad (temel locale).
descriptionstringMüşteriye görünen açıklama.
defaultPriceUpdatePolicyLOCKED | FOLLOW_PLANBu ürünün planlarında açılan abonelikler için varsayılan: LOCKED müşterinin kaydolduğu fiyatı sabitler; FOLLOW_PLAN sonraki plan fiyat değişikliklerini takip eder. Abonelik başına ezilebilir (priceUpdatePolicy).
defaultPriceChangeBehaviorIMMEDIATE | NEXT_PERIODTakip edilen fiyat değişikliğinin ne zaman devreye gireceği: hemen ya da bir sonraki faturalama döneminde.
metadataobjectOkumalarda aynen geri dönen serbest key/value deposu.

Bu iki politika alanını grandfathering şalteriniz olarak düşünün. LOCKED + NEXT_PERIOD en muhafazakâr duruştur: mevcut aboneler fiyatını korur; uygulanacak bir değişiklik varsa da dönem sınırını bekler.

Güncelleme

PATCH /api/v1/subscriptions/products/:id; name, description, defaultPriceUpdatePolicy, defaultPriceChangeBehavior, isActive, metadata alanlarının herhangi bir alt kümesini ve audit izine yazılan opsiyonel bir reason alanını kabul eder.

curl -X PATCH https://api-gateway.lunixi.com/api/v1/subscriptions/products/prd_4b2e88 \
  -H "Authorization: Bearer at_live_5f3e2b1a..." \
  -H "Content-Type: application/json" \
  -d '{ "name": "Pro Plus", "reason": "Q3 rebrand" }'

Arşivleme — DELETE soft'tur

DELETE hiçbir zaman veri silmez. Ürünü arşivler: public katalogdan ve varsayılan listelerden kaybolur; mevcut planlar ve abonelikler çalışmaya devam eder, geçmiş bozulmaz.

curl -X DELETE https://api-gateway.lunixi.com/api/v1/subscriptions/products/prd_4b2e88 \
  -H "Authorization: Bearer at_live_5f3e2b1a..." \
  -H "Content-Type: application/json" \
  -d '{ "reason": "satıştan kaldırıldı" }'

Arşivlenen ürünlere erişim sürer: GET /api/v1/subscriptions/products?includeArchived=true.

Çeviriler — çok dilli katalog

Her ürün, name ve description için locale bazlı override taşır. Çağıran taraf locale gönderdiğinde Public Catalog API ve portal bunları otomatik sunar — tek katalog, pricing sayfanızın konuştuğu her dil.

curl -X PATCH https://api-gateway.lunixi.com/api/v1/subscriptions/products/prd_4b2e88/translations/en \
  -H "Authorization: Bearer at_live_5f3e2b1a..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Pro",
    "description": "For growing teams"
  }'

:locale segmenti BCP-47 tarzı etiketleri kabul eder (tr, en, en-US, de-DE). PATCH bir upsert'tür — aynı çağrı eksik locale'i oluşturur, mevcut olanı günceller; GET …/translations tanımlı her şeyi listeler.

Yanıt

{
  "id": "prd_4b2e88",
  "code": "pro",
  "name": "Pro",
  "description": "Büyüyen ekipler için",
  "defaultPriceUpdatePolicy": "LOCKED",
  "defaultPriceChangeBehavior": "NEXT_PERIOD",
  "isActive": true,
  "metadata": { "tier": 2 },
  "createdAt": "2026-07-06T09:30:00Z"
}

Liste yanıtları items ve nextPageToken döndürür — sonraki sayfa için token'ı pageToken olarak geri gönderin (pageSize üst sınırı 500'dür).

Hatalar

DurumAnlamıNe yapmalı
400Doğrulama hatası (eksik code/name, geçersiz enum değeri, bozuk locale)İşaretlenen alanları düzeltin.
401Eksik veya geçersiz API keyAuthorization: Bearer at_live_… gönderin.
404Ürün veya çeviri locale'i bulunamadı:id'yi kontrol edin; arşivlenmiş olabilirse includeArchived=true ile listeleyin.
409Mükerrer codeÜrün kodları merchant başına benzersizdir — başka bir kod seçin veya mevcut ürünü kullanın.

Webhook'lar

EventNe zaman
product.createdÜrün oluşturuldu.
product.updatedAlanlar veya çeviriler değişti.
product.archivedÜrün DELETE ile arşivlendi.

Sonraki adımlar

  • Planlar — bu ürüne fiyat ve faturalama ritmi bağlayın
  • Pricing & Portal SDK — (çevrilmiş) kataloğu kendi sitenize sunun
  • Başlarken — ürün → abonelik zincirinin tamamı