Abonelikler
Bir abonelik, bir müşteriyi bir plana bağlar ve faturalama motorunu çalıştırır: deneme süreleri, dönem faturaları, dunning, plan değişiklikleri ve iptal. Bu sayfa merchant API üzerinden yaşam döngüsünün tamamını anlatır.
Tüm endpoint'ler secret key'inizi Bearer token olarak kullanır ve https://api-gateway.lunixi.com/api/v1/subscriptions/subscriptions altındadır — segment bilerek iki kez geçer: ilk subscriptions ürün alanı, ikincisi bu kaynak grubudur. Liste endpoint'leri cursor pagination kullanır (pageSize, pageToken).
Yaşam döngüsü tek bakışta
cancelAtPeriodEnd ile iptal, aboneliği dönem sonuna kadar Aktif tutar — o dönemin faturası yine kesilir.Her geçiş bir webhook üretir — subscription.created, subscription.activated, subscription.paused, subscription.resumed, subscription.canceled — böylece sisteminiz polling yapmadan durumu yansıtabilir. Event tablosunun tamamı sayfanın sonunda.
Status değerleri
Aboneliğin status alanı tam olarak şu değerleri alır (liste endpoint'ini status ile filtreleyebilirsiniz):
status | Anlamı |
|---|---|
PENDING | İleri tarihli başlangıç — startsAt henüz gelmedi |
TRIALING | Deneme süresi devam ediyor |
ACTIVE | Canlı — dönem faturaları oluşturulur ve tahsil edilir |
PAST_DUE | Bir çekim başarısız oldu — dunning çalışıyor |
UNPAID | Dunning denemeleri tükendi — grace period çalışıyor |
PAUSED | Merchant tarafından duraklatıldı |
UPGRADED | Yükseltme plan değişikliğiyle sona erdi — terminal |
DOWNGRADED | Düşürme plan değişikliğiyle sona erdi — terminal |
CANCELED | İptal edildi — terminal |
EXPIRED | Faturalama kuralının tekrar sayısı doldu — terminal |
Entitlement'lar status ACTIVE veya PAST_DUE iken geçerlidir. Terminal status'lar (UPGRADED, DOWNGRADED, CANCELED, EXPIRED) bir daha başka duruma geçmez.
Abonelik oluşturma
Müşteriyi oluşturun (veya upsert edin)
Müşteriler kendi externalId'nizle PUT /api/v1/subscriptions/customers üzerinden upsert edilir; güvenle tekrar deneyebilirsiniz.
Kart kaydedin (otomatik tahsilat için)
Otomatik tahsilat yapacaksanız önce bir kart kaydedin (POST /api/v1/subscriptions/cards, paymentMethodToken ile) ve id'sini paymentCardId olarak geçin. Kart kaydı 3DS gerektirir — bkz. Başlarken.
Aboneliği oluşturun
idempotencyKey zorunludur — abonelik oluşturma para hareketi başlatabilir; key, ağ hatası sonrası tekrar denemenin asla ikinci bir abonelik yaratmamasını garanti eder.
curl -X POST https://api-gateway.lunixi.com/api/v1/subscriptions/subscriptions \
-H "Authorization: Bearer at_live_5f3e2b1a..." \
-H "Content-Type: application/json" \
-d '{
"customerId": "cust_01JX2F9K4T",
"planId": "plan_01JX2G3M8V",
"idempotencyKey": "order-84172-sub",
"paymentCardId": "card_01JX2H5N1Q",
"collectionMethod": "AUTO_CHARGE",
"skipTrial": false,
"startsAt": "2026-08-01T00:00:00Z"
}'{
"success": true,
"data": {
"id": "sub_01JX5B8R3M",
"customerId": "cust_01JX2F9K4T",
"planId": "plan_01JX2G3M8V",
"status": "TRIALING",
"collectionMethod": "AUTO_CHARGE",
"currentPeriodEnd": "2026-09-01T00:00:00Z"
}
}Create'te idempotencyKey zorunludur. Key'i kendi iş nesnenizden türetin (örn. sipariş id'niz) — aynı key ile tekrar denendiğinde ikinci bir abonelik oluşmaz, orijinal abonelik döner.
Tahsilat yöntemleri
collectionMethod | Davranış |
|---|---|
AUTO_CHARGE | Her dönem faturası kayıtlı karttan (paymentCardId / müşterinin varsayılan kartı) otomatik çekilir. Başarısız çekimler dunning'e girer. |
SEND_INVOICE | Fatura kesilir, müşteri kendisi öder; otomatik kart çekimi yoktur. |
MANUAL | Otomatik tahsilat yapılmaz — faturaları kendi sürecinizle veya retry-charge ile kapatırsınız. |
Aboneliğin kayıtlı kartı kullanılamaz hâle gelirse (silindi, yenisi olmadan süresi doldu) platform subscription.payment_method_lost event'ini üretir ve yeni bir kart bağlanana kadar tahsilat MANUAL'e düşer. Ayrıntılar Faturalar sayfasında.
Deneme süreleri
Planın trialPeriodDays > 0 ise abonelik denemede başlar: entitlement'lar aktiftir, ancak deneme bitene kadar çekim yapılmaz. Denemeyi atlayıp hemen faturalamak için create'te skipTrial: true gönderin.
Deneme bitmeden önce platform subscription.trial_will_end event'ini üretir — müşteriye ödeme yöntemi eklemesini/onaylamasını hatırlatmak için kullanın. Deneme bitince ilk dönem faturası oluşturulur ve collectionMethod'a göre tahsil edilir; abonelik subscription.activated üretir.
| Event | Ne zaman |
|---|---|
subscription.created | Abonelik oluşturuldu (denemeli veya değil) |
subscription.trial_will_end | Deneme süresi dolmadan kısa süre önce |
subscription.activated | İlk ücretli dönem başladı |
İptal
POST /api/v1/subscriptions/subscriptions/:id/cancel
| Mod | İstek | Davranış |
|---|---|---|
| Anında | { "cancelAtPeriodEnd": false } (veya hiç göndermeyin) | Abonelik hemen biter; entitlement'lar durur |
| Dönem sonunda | { "cancelAtPeriodEnd": true } | Abonelik currentPeriodEnd'e kadar aktif kalır, sonra biter — yeni fatura kesilmez |
curl -X POST https://api-gateway.lunixi.com/api/v1/subscriptions/subscriptions/sub_01JX5B8R3M/cancel \
-H "Authorization: Bearer at_live_5f3e2b1a..." \
-H "Content-Type: application/json" \
-d '{ "cancelAtPeriodEnd": true }'subscription.canceled event'ini üretir. Müşteriler müşteri portalı üzerinden kendi kendilerine de iptal edebilir — o yol, fraud koruması olarak ayrıca e-posta onay token'ı ister.
Duraklat & devam ettir
POST /api/v1/subscriptions/subscriptions/:id/pause faturalamayı askıya alır; otomatik yeniden başlatma zamanlamak için opsiyonel resumeAt gönderin. POST /api/v1/subscriptions/subscriptions/:id/resume hemen yeniden aktifleştirir.
curl -X POST https://api-gateway.lunixi.com/api/v1/subscriptions/subscriptions/sub_01JX5B8R3M/pause \
-H "Authorization: Bearer at_live_5f3e2b1a..." \
-H "Content-Type: application/json" \
-d '{ "resumeAt": "2026-10-01T00:00:00Z" }'
# daha sonra, ya da resumeAt yerine:
curl -X POST https://api-gateway.lunixi.com/api/v1/subscriptions/subscriptions/sub_01JX5B8R3M/resume \
-H "Authorization: Bearer at_live_5f3e2b1a..."Duraklatılmışken dönem faturası oluşturulmaz. subscription.paused ve subscription.resumed event'lerini üretir.
Plan değiştirme (yükseltme / düşürme)
POST /api/v1/subscriptions/subscriptions/:id/change-plan — hedef newPlanId ve bir behavior ile:
behavior | Etki | Event'ler |
|---|---|---|
IMMEDIATE | Hemen geçer; faturalama bu andan itibaren yeni planı izler | subscription.upgraded veya subscription.downgraded |
NEXT_PERIOD | Geçişi bir sonraki yenilemeye zamanlar; mevcut döneme dokunmaz | subscription.plan_change_scheduled, geçiş gerçekleştiğinde subscription.pending_change_applied (+ upgraded/downgraded) |
curl -X POST https://api-gateway.lunixi.com/api/v1/subscriptions/subscriptions/sub_01JX5B8R3M/change-plan \
-H "Authorization: Bearer at_live_5f3e2b1a..." \
-H "Content-Type: application/json" \
-d '{
"newPlanId": "plan_01JX2G9P7W",
"behavior": "NEXT_PERIOD"
}'Yaygın desen: yükseltmeler IMMEDIATE (müşteri büyük planı hemen alır), düşürmeler NEXT_PERIOD (ödediği dönemi sonuna kadar kullanır).
Sorgulama, listeleme & audit
| Method | Path | Ne yapar |
|---|---|---|
GET | /api/v1/subscriptions/subscriptions | Abonelikleri listeler (cursor pagination: pageSize, pageToken; customerId, status ile filtre) |
GET | /api/v1/subscriptions/subscriptions/:id | Tek abonelik — güncel plan ve dönem bilgisiyle |
GET | /api/v1/subscriptions/subscriptions/:id/audit-logs | Her durum değişikliğinin kronolojik kaydı — create, cancel, plan değişikliği, pause işlemlerini kimin/neyin tetiklediği |
Audit log, "bu müşterinin planı neden değişti?" gibi destek soruları için başvuracağınız araçtır — yukarıdaki her mutasyon zaman damgası ve kaynağıyla orada görünür.
Hatalar
| Durum | Anlamı | Ne yapmalı |
|---|---|---|
400 | Doğrulama hatası (eksik idempotencyKey, bilinmeyen collectionMethod / behavior) | Gövdeyi düzeltin; create'te idempotencyKey zorunlu |
401 | Eksik/geçersiz Bearer key | Authorization header'ını kontrol edin |
404 | Abonelik, müşteri, plan veya kart bulunamadı | Id'lerin hesabınıza ait olduğunu doğrulayın |
409 | Geçersiz durum geçişi (örn. duraklatılmamış aboneliği resume etmek, iptal edilmişi tekrar iptal etmek) veya idempotency çakışması | Önce aboneliği okuyun (GET …/subscriptions/:id) ve güncel status'a göre davranın |
Webhooks
| Event | Ne zaman |
|---|---|
subscription.created | Abonelik oluşturuldu |
subscription.activated | İlk ücretli dönem başladı (deneme sonrası veya hemen) |
subscription.trial_will_end | Deneme süresi dolmak üzere |
subscription.paused / subscription.resumed | Duraklat / devam ettir |
subscription.plan_change_scheduled | NEXT_PERIOD plan değişikliği zamanlandı |
subscription.pending_change_applied | Zamanlanmış değişiklik yürürlüğe girdi |
subscription.upgraded / subscription.downgraded | Plan yukarı / aşağı değişti |
subscription.canceled | İptal edildi (anında veya dönem sonunda) |
subscription.payment_card_swapped | Aboneliğin bağlı kartı değişti |
subscription.payment_method_lost | Kayıtlı kart kullanılamaz oldu — tahsilat MANUAL'e düştü |
Teslimat, tekrar deneme ve imza doğrulaması için Webhooks sayfasına bakın.
Sonraki adımlar
- Faturalar — dönem faturaları, dunning ve retry-charge
- Müşteri Portalı — müşterilerin aboneliklerini kendilerinin yönetmesi
- Özellikler & Eklentiler — abonelik başına eklenti ücretleri
- Kullanım & Entitlement — metered faturalama ve kota kontrolleri