Abonelikler API

Abonelikler modülünün tüm işlemleri (9) ve veri modelleri (2): adresler, izinler, girdiler, ön koşullar, olaylar ve örnekler.

Sabit fiyatlı, her dönem yenilenip faturalanan tekrarlayan planlar.

Modül kodu subscriptions · 9 işlem · 2 veri modeli · 9 olay. Bir anahtar ya da token, arkasındaki kişinin bu modülde yapabildiğinden fazlasını asla yapamaz; satır düzeyindeki güvenlik uygulamadakiyle birebir aynıdır. Yetki kapsamları: subscriptions (hepsi), subscriptions:read (yalnız okuma) ya da subscriptions:<yetenek>.

Kaynaklar

KaynakTabloListeleme ve okumaPOSTPATCHDELETE
subscription_periodssubscription_period/api/v1/subscription_periods
subscriptionssubscription/api/v1/subscriptions

Listeler limit (en çok 200), cursor, order (ör. -created_at), fields ve q alır; diğer her sorgu parametresi bir sütun süzgecidir: ?status=paid, ?total[gte]=100, ?id[in]=a,b, ?x=null.

İşlemler

İşlemGereken izinNe yapar
subscriptions.buy_package_onlinesubscriptions:writeOnline paket satın al
subscriptions.cancelsubscriptions:writeİptal et
subscriptions.pausesubscriptions:writeDuraklat
subscriptions.raise_ending_noticessubscriptions:write“Yakında bitiyor” bildirimlerini oluştur
subscriptions.renewsubscriptions:writeŞimdi yenile
subscriptions.renew_duesubscriptions:manageYenileme zamanı gelenleri yenile
subscriptions.resumesubscriptions:writeDevam ettir
subscriptions.set_auto_renewsubscriptions:writeYenileme
subscriptions.startsubscriptions:writeAbonelik başlat

subscriptions.buy_package_online

Online paket satın al — Giriş yapmış müşteri siteden bir paket başlatır: paketin fiyatıyla bir abonelik, ilk dönemi bugünden başlar.

Gereken izin subscriptions:write · veriyi değiştirir · Yayındaki bir siteden de çağrılabilir (customer)

Bir web sitesi işlemi: siteniz bunu site API’si üzerinden çağırır (/api/site/v1/{siteId}, örneğin @getera/storefront ile). API anahtarı ya da token ile istek reddedilir (403 site_only).
POSThttps://app.getera.io/api/v1/subscriptions/actions/buy_package_online
API anahtarı ya da OAuth token · subscriptions:write
  • Asıl adres: POST /api/v1/actions/subscriptions.buy_package_online

Girdi

AlanTürZorunluAçıklama
packageIduuidevetPaket · kimliği: package
autoRenewbooleanOtomatik yenilenir

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
package_not_foundBu paket satışta değil.
subscription_already_activeBu kişinin bu pakette zaten etkin bir aboneliği var.

Yayımladığı olaylar: subscriptions.started, subscriptions.period_started

Neye yazar: subscription (insert) — Starts the subscription; subscription_period (insert) — Opens the first period

Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde subscriptions:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 package_not_found, subscription_already_active · 429 çok sık istek

subscriptions.cancel

İptal et — Şimdi ya da ödenmiş dönemin sonunda bitirir.

Gereken izin subscriptions:write · siler ya da geri alınamaz · Era çalıştırırken bir kişiye onaylatır

POSThttps://app.getera.io/api/v1/subscriptions/{id}/actions/cancel
API anahtarı ya da OAuth token · subscriptions:write
  • Asıl adres: POST /api/v1/actions/subscriptions.cancel

Girdi

AlanTürZorunluAçıklama
iduuidevetDoldurulduğu yer: adresteki {id} · Abonelik · kimliği: subscription
atPeriodEndbooleanBu dönemin sonunda
reasonstringNeden · en çok 2000

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
subscription_not_foundAbonelik bulunmalı.
subscription_already_endedBitmiş bir abonelik yeniden iptal edilmez.

Yayımladığı olaylar: subscriptions.cancelled

Neye yazar: subscription (update) — Cancels it; subscription_period (update) — Cancels a period that has not started

curl -X POST https://app.getera.io/api/v1/subscriptions/SUBSCRIPTION_ID/actions/cancel \
  -H "Authorization: Bearer $ERA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"atPeriodEnd":true}'
Yanıt
{
  "ok": true,
  "result": "…",
  "events": [
    "subscriptions.cancelled"
  ]
}
import { createEra } from "@getera/sdk"

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.subscriptions.cancel("SUBSCRIPTION_ID", {
  atPeriodEnd: true
})
era subscriptions cancel SUBSCRIPTION_ID \
  --at-period-end true
tools/call
{
  "name": "era__subscriptions__cancel",
  "arguments": {
    "id": "SUBSCRIPTION_ID",
    "atPeriodEnd": true
  }
}

Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde subscriptions:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 subscription_not_found, subscription_already_ended · 429 çok sık istek

subscriptions.pause

Duraklat — Aboneliği bitirmeden yenilemeleri durdurur.

Gereken izin subscriptions:write · veriyi değiştirir

POSThttps://app.getera.io/api/v1/subscriptions/{id}/actions/pause
API anahtarı ya da OAuth token · subscriptions:write
  • Asıl adres: POST /api/v1/actions/subscriptions.pause

Girdi

AlanTürZorunluAçıklama
iduuidevetDoldurulduğu yer: adresteki {id} · Abonelik · kimliği: subscription

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
subscription_not_foundAbonelik bulunmalı.
subscription_not_activeYalnızca aktif bir abonelik duraklatılır.

Yayımladığı olaylar: subscriptions.paused

Neye yazar: subscription (update) — Pauses it

curl -X POST https://app.getera.io/api/v1/subscriptions/SUBSCRIPTION_ID/actions/pause \
  -H "Authorization: Bearer $ERA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{}'
Yanıt
{
  "ok": true,
  "result": "…",
  "events": [
    "subscriptions.paused"
  ]
}
import { createEra } from "@getera/sdk"

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.subscriptions.pause("SUBSCRIPTION_ID")
era subscriptions pause SUBSCRIPTION_ID
tools/call
{
  "name": "era__subscriptions__pause",
  "arguments": {
    "id": "SUBSCRIPTION_ID"
  }
}

Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde subscriptions:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 subscription_not_found, subscription_not_active · 429 çok sık istek

subscriptions.raise_ending_notices

“Yakında bitiyor” bildirimlerini oluştur — Günlük iş: yenilenmeyecek ve süre içinde bitecek her abonelik dönem başına bir kez bildirilir.

Gereken izin subscriptions:write · veriyi değiştirir

Era’nın kendi çalıştırdığı bir işlem. Başvuru eksiksiz olsun diye listelenir; API anahtarı ya da token ile istek reddedilir (403 machine_only).
POSThttps://app.getera.io/api/v1/subscriptions/actions/raise_ending_notices
API anahtarı ya da OAuth token · subscriptions:write
  • Asıl adres: POST /api/v1/actions/subscriptions.raise_ending_notices

Girdi

AlanTürZorunluAçıklama
asOfdateGeçerlilik tarihi

Yayımladığı olaylar: subscriptions.ending_soon

Neye yazar: subscription (update) — Records that the ending notice was raised

Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde subscriptions:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 429 çok sık istek

subscriptions.renew

Şimdi yenile — Sonraki dönemi açar — ya da süresi veya iptali öyle diyorsa aboneliği bitirir.

Gereken izin subscriptions:write · veriyi değiştirir

POSThttps://app.getera.io/api/v1/subscriptions/{id}/actions/renew
API anahtarı ya da OAuth token · subscriptions:write
  • Asıl adres: POST /api/v1/actions/subscriptions.renew

Girdi

AlanTürZorunluAçıklama
iduuidevetDoldurulduğu yer: adresteki {id} · Abonelik · kimliği: subscription

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
subscription_not_foundAbonelik bulunmalı.
subscription_not_renewableYalnızca aktif veya denemedeki bir abonelik yenilenir.

Yayımladığı olaylar: subscriptions.renewed, subscriptions.period_started, subscriptions.cancelled, subscriptions.expired

Neye yazar: subscription (update) — Moves it onto the next period; subscription_period (insert) — Opens the period

curl -X POST https://app.getera.io/api/v1/subscriptions/SUBSCRIPTION_ID/actions/renew \
  -H "Authorization: Bearer $ERA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{}'
Yanıt
{
  "ok": true,
  "result": "…",
  "events": [
    "subscriptions.renewed",
    "subscriptions.period_started",
    "subscriptions.cancelled",
    "subscriptions.expired"
  ]
}
import { createEra } from "@getera/sdk"

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.subscriptions.renew("SUBSCRIPTION_ID")
era subscriptions renew SUBSCRIPTION_ID
tools/call
{
  "name": "era__subscriptions__renew",
  "arguments": {
    "id": "SUBSCRIPTION_ID"
  }
}

Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde subscriptions:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 subscription_not_found, subscription_not_renewable · 429 çok sık istek

subscriptions.renew_due

Yenileme zamanı gelenleri yenile — Yenileme tarihi gelen her otomatik aboneliği yeniler.

Gereken izin subscriptions:manage · veriyi değiştirir

POSThttps://app.getera.io/api/v1/subscription_periods/actions/renew_due
API anahtarı ya da OAuth token · subscriptions:manage
  • Asıl adres: POST /api/v1/actions/subscriptions.renew_due

Girdi

AlanTürZorunluAçıklama
asOfdateGeçerlilik tarihi

Yayımladığı olaylar: subscriptions.renewed, subscriptions.period_started, subscriptions.cancelled, subscriptions.expired

Neye yazar: subscription (update) — Moves each onto its next period; subscription_period (insert) — Opens the periods

curl -X POST https://app.getera.io/api/v1/subscription_periods/actions/renew_due \
  -H "Authorization: Bearer $ERA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"asOf":"2026-11-02"}'
Yanıt
{
  "ok": true,
  "result": "…",
  "events": [
    "subscriptions.renewed",
    "subscriptions.period_started",
    "subscriptions.cancelled",
    "subscriptions.expired"
  ]
}
import { createEra } from "@getera/sdk"

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.subscriptionPeriods.renewDue({
  asOf: "2026-11-02"
})
era subscription_periods renew_due \
  --as-of "2026-11-02"
tools/call
{
  "name": "era__subscriptions__renew_due",
  "arguments": {
    "asOf": "2026-11-02"
  }
}

Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde subscriptions:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 429 çok sık istek

subscriptions.resume

Devam ettir — Duraklatılmış aboneliği yeniden başlatır; sonraki yenileme en erken bugündür.

Gereken izin subscriptions:write · veriyi değiştirir

POSThttps://app.getera.io/api/v1/subscriptions/{id}/actions/resume
API anahtarı ya da OAuth token · subscriptions:write
  • Asıl adres: POST /api/v1/actions/subscriptions.resume

Girdi

AlanTürZorunluAçıklama
iduuidevetDoldurulduğu yer: adresteki {id} · Abonelik · kimliği: subscription

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
subscription_not_foundAbonelik bulunmalı.
subscription_not_pausedYalnızca duraklatılmış bir abonelik devam ettirilir.

Yayımladığı olaylar: subscriptions.resumed

Neye yazar: subscription (update) — Resumes it

curl -X POST https://app.getera.io/api/v1/subscriptions/SUBSCRIPTION_ID/actions/resume \
  -H "Authorization: Bearer $ERA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{}'
Yanıt
{
  "ok": true,
  "result": "…",
  "events": [
    "subscriptions.resumed"
  ]
}
import { createEra } from "@getera/sdk"

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.subscriptions.resume("SUBSCRIPTION_ID")
era subscriptions resume SUBSCRIPTION_ID
tools/call
{
  "name": "era__subscriptions__resume",
  "arguments": {
    "id": "SUBSCRIPTION_ID"
  }
}

Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde subscriptions:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 subscription_not_found, subscription_not_paused · 429 çok sık istek

subscriptions.set_auto_renew

Yenileme — Dönem bittiğinde kendiliğinden yenilenip yenilenmeyeceği; yenilenmeyen abonelik günlük kontrolde sonlandırılır.

Gereken izin subscriptions:write · veriyi değiştirir

POSThttps://app.getera.io/api/v1/subscriptions/{id}/actions/set_auto_renew
API anahtarı ya da OAuth token · subscriptions:write
  • Asıl adres: POST /api/v1/actions/subscriptions.set_auto_renew

Girdi

AlanTürZorunluAçıklama
iduuidevetDoldurulduğu yer: adresteki {id} · Abonelik · kimliği: subscription
autoRenewbooleanevetOtomatik yenile

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
subscription_not_foundAbonelik bulunmalı.
subscription_already_endedBitmiş bir abonelik yenilenmez.

Yayımladığı olaylar: subscriptions.auto_renew_changed

Neye yazar: subscription (update) — Sets auto_renew

curl -X POST https://app.getera.io/api/v1/subscriptions/SUBSCRIPTION_ID/actions/set_auto_renew \
  -H "Authorization: Bearer $ERA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"autoRenew":true}'
Yanıt
{
  "ok": true,
  "result": "…",
  "events": [
    "subscriptions.auto_renew_changed"
  ]
}
import { createEra } from "@getera/sdk"

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.subscriptions.setAutoRenew("SUBSCRIPTION_ID", {
  autoRenew: true
})
era subscriptions set_auto_renew SUBSCRIPTION_ID \
  --auto-renew true
tools/call
{
  "name": "era__subscriptions__set_auto_renew",
  "arguments": {
    "id": "SUBSCRIPTION_ID",
    "autoRenew": true
  }
}

Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde subscriptions:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 subscription_not_found, subscription_already_ended · 429 çok sık istek

subscriptions.start

Abonelik başlat — Sabitlenmiş fiyatla tekrarlayan bir dönem. İlk dönem şimdi ya da deneme bitince açılır.

Gereken izin subscriptions:write · veriyi değiştirir

POSThttps://app.getera.io/api/v1/subscriptions/actions/start
API anahtarı ya da OAuth token · subscriptions:write
  • Asıl adres: POST /api/v1/actions/subscriptions.start

Girdi

AlanTürZorunluAçıklama
customerIduuidevetAbone · kimliği: customer
namestringevetPlan · en çok 255
amountnumber (money)evetDönem başına fiyat
currencystringPara birimi · en çok 3
billingCyclestring (enum)Her · İzin verilen değerler: weekly, monthly, quarterly, yearly
startDatedateBaşlangıç
trialDaysnumberDeneme günleri · en az 0 · en çok 365
endDatedateBitiş
autoRenewbooleanOtomatik yenilenir
itemModulestringÜrünün modülü · en çok 40
itemRecordIduuidKalem
periodMonthsnumberDönem başına ay · Tam aylar hâlinde satılan bir plan (paket); dönem ayarının yerine geçer. · en az 1 · en çok 120
notesstringNotlar · en çok 4000

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
customer_not_foundKişi bulunmalı.
customer_archivedArşivlenmiş bir kişi abone olamaz.
invalid_currencyPara birimi bir ISO-4217 kodu olmalı.
subscription_amount_not_positiveAboneliğin bedeli sıfırdan büyüktür.
subscription_already_activeKişi ve plan başına tek geçerli abonelik.
subscription_end_before_startDönem başlamadan bitemez.

Yayımladığı olaylar: subscriptions.started, subscriptions.period_started

Neye yazar: subscription (insert) — Starts the subscription; subscription_period (insert) — Opens the first period

curl -X POST https://app.getera.io/api/v1/subscriptions/actions/start \
  -H "Authorization: Bearer $ERA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"customerId":"CUSTOMER_ID","name":"Plan","amount":1}'
Yanıt
{
  "ok": true,
  "result": "…",
  "events": [
    "subscriptions.started",
    "subscriptions.period_started"
  ]
}
import { createEra } from "@getera/sdk"

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.subscriptions.start({
  customerId: "CUSTOMER_ID",
  name: "Plan",
  amount: 1
})
era subscriptions start \
  --customer-id "CUSTOMER_ID" \
  --name "Plan" \
  --amount 1
tools/call
{
  "name": "era__subscriptions__start",
  "arguments": {
    "customerId": "CUSTOMER_ID",
    "name": "Plan",
    "amount": 1
  }
}

Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde subscriptions:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 customer_not_found, customer_archived, invalid_currency, subscription_amount_not_positive, subscription_already_active, subscription_end_before_start · 429 çok sık istek

Veri modelleri

SubscriptionPeriod

Tablo subscription_period · Kaynak subscription_periods

  • GET /api/v1/subscription_periods
  • GET /api/v1/subscription_periods/{id}
SütunTürBoş olabilirİzin verilen değerlerBağlı olduğu tablo
idstring (uuid) · uuid
organization_idstring (uuid) · uuidorganization
workspace_idstring (uuid) · uuidworkspace
subscription_idstring (uuid) · uuidsubscription
sequenceinteger · int4
period_startstring (date) · date
period_endstring (date) · date
currencystring · bpcharen çok 3
amountstring (int64) · int8
statusstring · textcurrent, completed, cancelled
created_atstring (date-time) · timestamptz

Birincil anahtar: id

Tekil: subscription_id, sequence

Denetimler:

  • CHECK ((amount >= 0))
  • CHECK ((currency ~ '^[A-Z]{3}$'::text))
  • CHECK ((period_end >= period_start))
  • CHECK ((sequence > 0))

Subscription

Tablo subscription · Kaynak subscriptions

  • GET /api/v1/subscriptions
  • GET /api/v1/subscriptions/{id}
SütunTürBoş olabilirİzin verilen değerlerBağlı olduğu tablo
idstring (uuid) · uuid
organization_idstring (uuid) · uuidorganization
workspace_idstring (uuid) · uuidworkspace
customer_idstring (uuid) · uuidcustomer
namestring · text
item_modulestring · textevet
item_record_idstring (uuid) · uuidevet
statusstring · texttrialing, active, paused, cancelled, expired
billing_cyclestring · textweekly, monthly, quarterly, yearly
currencystring · bpcharen çok 3
amountstring (int64) · int8
start_datestring (date) · date
trial_ends_atstring (date) · dateevet
end_datestring (date) · dateevet
current_period_startstring (date) · dateevet
current_period_endstring (date) · dateevet
next_renewal_datestring (date) · dateevet
auto_renewboolean · bool
cancel_at_period_endboolean · bool
cancelled_atstring (date-time) · timestamptzevet
cancel_reasonstring · textevet
paused_atstring (date-time) · timestamptzevet
notesstring · textevet
created_by_user_idstring (uuid) · uuidevetapp_user
created_atstring (date-time) · timestamptz
updated_atstring (date-time) · timestamptz
period_monthsinteger · int4evet
renewalsinteger · int4
ending_notice_atstring (date-time) · timestamptzevet

Birincil anahtar: id

Denetimler:

  • CHECK ((amount >= 0))
  • CHECK ((currency ~ '^[A-Z]{3}$'::text))
  • CHECK (((end_date IS NULL) OR (end_date >= start_date)))
  • CHECK ((length(TRIM(BOTH FROM name)) > 0))
  • CHECK (((period_months IS NULL) OR (period_months > 0)))
  • CHECK ((renewals >= 0))

Olaylar

İş akışları ve webhook'lar bu olaylara tepki verir.

OlayNe olurTaşıdığı alanlar
subscriptions.auto_renew_changedBir aboneliğin yenileme ayarı değişti.id, autoRenew
subscriptions.cancelledBir abonelik iptal edildi.id, atPeriodEnd, customerId, itemModule
subscriptions.ending_soonYenilenmeyecek bir abonelik yakında bitiyor.id, customerId, customerName, name, endsOn, daysLeft, itemModule, itemRecordId
subscriptions.expiredSüreli bir aboneliğin süresi doldu.id, customerId, autoRenew, itemModule, itemRecordId
subscriptions.pausedBir abonelik duraklatıldı.id
subscriptions.period_startedÜcretli bir dönem başladı — finans sözleşmesini açar.id, subscriptionId, customerId, name, sequence, periodStart, periodEnd, amount, currency, itemModule, itemRecordId
subscriptions.renewedBir abonelik yenilendi.id, count
subscriptions.resumedBir abonelik sürdürüldü.id
subscriptions.startedBir abonelik başladı.id, customerId, trialEndsAt, name, startsOn, endsOn, itemModule, itemRecordId
Bu sayfa yardımcı oldu mu?