Paketler API

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

Hizmet ve dersleri bir araya getiren, seansları sayılan aylık paketler.

Modül kodu packages · 7 işlem · 3 veri modeli · 6 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ı: packages (hepsi), packages:read (yalnız okuma) ya da packages:<yetenek>.

Kaynaklar

KaynakTabloListeleme ve okumaPOSTPATCHDELETE
package_itemspackage_item/api/v1/package_items
package_usagespackage_usage/api/v1/package_usages
packagespackage/api/v1/packagespackages.create_packagepackages.update_package

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
packages.create_packagepackages:managePaket oluştur
packages.redeempackages:writePaket seansı kullan
packages.releasepackages:writeSeansı geri ver
packages.retire_packagepackages:manageSatıştan kaldır
packages.set_itemspackages:manageKapsamı değiştir
packages.update_packagepackages:managePaketi düzenle
packages.use_on_my_bookingpackages:writePaketimi kullan

packages.create_package

Paket oluştur — Bir dönem, bir fiyat ve neleri kapsadığı.

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

POSThttps://app.getera.io/api/v1/packages/actions/create_package
API anahtarı ya da OAuth token · packages:manage
  • REST kısayolu: POST /api/v1/packages
  • Asıl adres: POST /api/v1/actions/packages.create_package

Girdi

AlanTürZorunluAçıklama
namestringevetAd · en çok 255
periodMonthsnumberevetAy · en az 1 · en çok 120
priceAmountnumber (money)evetFiyat (küçük birim) · en az 1
priceCurrencystringPara birimi · en çok 3
autoRenewbooleanVarsayılan olarak yenilenir
itemsobject / arrayevetNeleri kapsar · [{ itemVariantId? | groupClassId?, sessionsPerPeriod? (boş = sınırsız) }]

Ön koşullar

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

KodNe zaman reddedilir
invalid_itemsEn az bir öğe; her biri bir hizmet ya da bir ders.
service_not_foundHer hizmet bulunmalı.
class_not_foundHer ders bulunmalı ve hâlâ yapılıyor olmalı.

Yayımladığı olaylar: packages.package_created

Neye yazar: package (insert) — Creates the package; package_item (insert) — Writes what it covers

curl -X POST https://app.getera.io/api/v1/packages/actions/create_package \
  -H "Authorization: Bearer $ERA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"name":"Name","periodMonths":1,"priceAmount":1,"items":{}}'
Yanıt
{
  "ok": true,
  "result": "…",
  "events": [
    "packages.package_created"
  ]
}
import { createEra } from "@getera/sdk"

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.packages.create({
  name: "Name",
  periodMonths: 1,
  priceAmount: 1,
  items: {}
})
era packages create --data '{"name":"Name","periodMonths":1,"priceAmount":1,"items":{}}'
tools/call
{
  "name": "era__packages__create_package",
  "arguments": {
    "name": "Name",
    "periodMonths": 1,
    "priceAmount": 1,
    "items": {}
  }
}

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

packages.redeem

Paket seansı kullan — Seansı kaldıkça bir randevuyu abonelikten karşılar.

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

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

Girdi

AlanTürZorunluAçıklama
subscriptionIduuidevetAbonelik · kimliği: subscription
recordTypestring (enum)evetRandevu türü · İzin verilen değerler: appointment_line, class_joining
recordIduuidevetRezervasyon

Ön koşullar

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

KodNe zaman reddedilir
subscription_not_foundAbonelik bulunmalı.
subscription_not_activeAbonelik aktif olmalı.
record_not_foundRandevu bulunmalı ve iptal edilmemiş olmalı.
customer_mismatchRandevu abone için olmalı.
subscription_expiredRandevu aboneliğin dönemi içinde olmalı.
not_coveredPaket, randevusu alınan hizmeti içermeli.
already_redeemedBir randevu en fazla bir seans kullanır.
no_sessions_leftDönemin seanslarının hepsi kullanılmış olmamalı.

Yayımladığı olaylar: packages.session_used, packages.almost_used_up

Neye yazar: package_usage (insert) — Records the session drawn

curl -X POST https://app.getera.io/api/v1/package_usages/actions/redeem \
  -H "Authorization: Bearer $ERA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"subscriptionId":"SUBSCRIPTION_ID","recordType":"appointment_line","recordId":"RECORD_ID"}'
Yanıt
{
  "ok": true,
  "result": "…",
  "events": [
    "packages.session_used",
    "packages.almost_used_up"
  ]
}
import { createEra } from "@getera/sdk"

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.packageUsages.redeem({
  subscriptionId: "SUBSCRIPTION_ID",
  recordType: "appointment_line",
  recordId: "RECORD_ID"
})
era package_usages redeem \
  --subscription-id "SUBSCRIPTION_ID" \
  --record-type "appointment_line" \
  --record-id "RECORD_ID"
tools/call
{
  "name": "era__packages__redeem",
  "arguments": {
    "subscriptionId": "SUBSCRIPTION_ID",
    "recordType": "appointment_line",
    "recordId": "RECORD_ID"
  }
}

Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde packages: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, record_not_found, customer_mismatch, subscription_expired, not_covered, already_redeemed, no_sessions_left · 429 çok sık istek

packages.release

Seansı geri ver — Yanlışlıkla düşülen bir seansı geri alır. Randevunun kendisine dokunulmaz.

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

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

Girdi

AlanTürZorunluAçıklama
usageIduuidevetDoldurulduğu yer: adresteki {id} · Oturum · kimliği: package_usage

Ön koşullar

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

KodNe zaman reddedilir
usage_not_foundSeans bir paketten düşülmüş olmalı.

Yayımladığı olaylar: packages.session_released

Neye yazar: package_usage (delete) — Removes the usage

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

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.packageUsages.release("PACKAGE_USAGE_ID")
era package_usages release PACKAGE_USAGE_ID
tools/call
{
  "name": "era__packages__release",
  "arguments": {
    "usageId": "PACKAGE_USAGE_ID"
  }
}

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

packages.retire_package

Satıştan kaldır — Satışı durdurur. Devam eden abonelikler bitiş tarihlerine kadar sürer.

Gereken izin packages:manage · dışarıya ulaşır (gönderir, yayımlar ya da ücret alır) · Era çalıştırırken bir kişiye onaylatır

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

Girdi

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

Ön koşullar

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

KodNe zaman reddedilir
not_foundPaket bulunmalı.
package_retiredHâlâ satışta olmalı.

Yayımladığı olaylar: packages.package_retired

Neye yazar: package (update) — Stamps archived_at

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

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.packages.retirePackage("PACKAGE_ID")
era packages retire_package PACKAGE_ID
tools/call
{
  "name": "era__packages__retire_package",
  "arguments": {
    "id": "PACKAGE_ID"
  }
}

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

packages.set_items

Kapsamı değiştir — Paketteki hizmet ve dersler, her birinden kaç seansla.

Gereken izin packages:manage · siler ya da geri alınamaz

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

Girdi

AlanTürZorunluAçıklama
iduuidevetPaket · kimliği: package
itemsobject / arrayevetNeleri kapsar · [{ itemVariantId? | groupClassId?, sessionsPerPeriod? (boş = sınırsız) }]

Ön koşullar

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

KodNe zaman reddedilir
not_foundPaket bulunmalı.
package_retiredSatıştan kaldırılmış bir paket düzenlenemez.
invalid_itemsEn az bir öğe; her biri bir hizmet ya da bir ders.
service_not_foundHer hizmet bulunmalı.
class_not_foundHer ders bulunmalı ve hâlâ yapılıyor olmalı.
items_in_useSeans kullanıldıktan sonra içerik değişemez.

Yayımladığı olaylar: packages.package_updated

Neye yazar: package_item (delete) — Clears the old contents; package_item (insert) — Writes the new contents

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

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.packageItems.setItems({
  id: "PACKAGE_ID",
  items: {}
})
era package_items set_items --data '{"id":"PACKAGE_ID","items":{}}'
tools/call
{
  "name": "era__packages__set_items",
  "arguments": {
    "id": "PACKAGE_ID",
    "items": {}
  }
}

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

packages.update_package

Paketi düzenle — Ad, dönem, fiyat ve varsayılan yenileme — yalnızca yeni satışlar için.

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

POSThttps://app.getera.io/api/v1/packages/{id}/actions/update_package
API anahtarı ya da OAuth token · packages:manage
  • REST kısayolu: PATCH /api/v1/packages/{id}
  • Asıl adres: POST /api/v1/actions/packages.update_package

Girdi

AlanTürZorunluAçıklama
iduuidevetDoldurulduğu yer: adresteki {id} · Paket · kimliği: package
namestringAd · en çok 255
periodMonthsnumberAy · en az 1 · en çok 120
priceAmountnumber (money)Fiyat (küçük birim) · en az 1
priceCurrencystringPara birimi · en çok 3
autoRenewbooleanVarsayılan olarak yenilenir

Ön koşullar

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

KodNe zaman reddedilir
not_foundPaket bulunmalı.
package_retiredSatıştan kaldırılmış bir paket düzenlenemez.

Yayımladığı olaylar: packages.package_updated

Neye yazar: package (update) — Updates the package

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

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.packages.updatePackage("PACKAGE_ID", {
  name: "Name"
})
era packages update_package PACKAGE_ID \
  --name "Name"
tools/call
{
  "name": "era__packages__update_package",
  "arguments": {
    "id": "PACKAGE_ID",
    "name": "Name"
  }
}

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

packages.use_on_my_booking

Paketimi kullan — Giriş yapmış müşteri, yeni aldığı randevuyu seansı kalmışsa paketinden karşılar.

Gereken izin packages: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/package_usages/actions/use_on_my_booking
API anahtarı ya da OAuth token · packages:write
  • Asıl adres: POST /api/v1/actions/packages.use_on_my_booking

Girdi

AlanTürZorunluAçıklama
subscriptionIduuidevetPaket · kimliği: subscription
appointmentIduuidevetRezervasyon · kimliği: appointment

Ön koşullar

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

KodNe zaman reddedilir
not_your_bookingYalnızca müşterinin katılımcısı olduğu bir randevu için yapılabilir.
no_sessions_leftDönemin seanslarının hepsi kullanılmış olmamalı.

Yayımladığı olaylar: packages.session_used, packages.almost_used_up

Neye yazar: package_usage (insert) — Records the session drawn

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

Veri modelleri

PackageItem

Tablo package_item · Kaynak package_items

  • GET /api/v1/package_items
  • GET /api/v1/package_items/{id}
SütunTürBoş olabilirİzin verilen değerlerBağlı olduğu tablo
idstring (uuid) · uuid
organization_idstring (uuid) · uuidorganization
workspace_idstring (uuid) · uuidworkspace
package_idstring (uuid) · uuidpackage
item_variant_idstring (uuid) · uuidevetitem_variant
group_class_idstring (uuid) · uuidevetgroup_class
sessions_per_periodinteger · int4evet
sort_orderinteger · int4
created_atstring (date-time) · timestamptz

Birincil anahtar: id

Denetimler:

  • CHECK ((num_nonnulls(item_variant_id, group_class_id) = 1))
  • CHECK (((sessions_per_period IS NULL) OR (sessions_per_period > 0)))

PackageUsage

Tablo package_usage · Kaynak package_usages

  • GET /api/v1/package_usages
  • GET /api/v1/package_usages/{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
package_item_idstring (uuid) · uuidpackage_item
record_typestring · textappointment_line, class_joining
record_idstring (uuid) · uuid
used_onstring (date) · date
created_bystring (uuid) · uuidevetapp_user
created_atstring (date-time) · timestamptz

Birincil anahtar: id

Tekil: record_type, record_id

Package

Tablo package · Kaynak packages

SütunTürBoş olabilirİzin verilen değerlerBağlı olduğu tablo
idstring (uuid) · uuid
organization_idstring (uuid) · uuidorganization
workspace_idstring (uuid) · uuidworkspace
namestring · text
period_monthsinteger · int4
price_amountstring (int64) · int8
price_currencystring · bpchareveten çok 3
auto_renewboolean · bool
archived_atstring (date-time) · timestamptzevet
created_bystring (uuid) · uuidevetapp_user
created_atstring (date-time) · timestamptz
updated_atstring (date-time) · timestamptz
is_publicboolean · boolevet

Birincil anahtar: id

Denetimler:

  • CHECK (((length(btrim(name)) >= 1) AND (length(btrim(name)) <= 255)))
  • CHECK ((period_months > 0))
  • CHECK ((price_amount >= 0))

Olaylar

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

OlayNe olurTaşıdığı alanlar
packages.almost_used_upBir müşterinin paketinde bu dönem iki veya daha az seans kaldı.id, subscriptionId, packageId, packageName, packageItemId, customerId, remaining, included, endsOn, autoRenew
packages.package_createdBir paket satışa çıkarıldı.id, name, periodMonths, priceAmount
packages.package_retiredBir paket satıştan kaldırıldı.id
packages.package_updatedBir paket değişti.id
packages.session_releasedBir paket seansı geri verildi.id, subscriptionId
packages.session_usedBir randevu bir paketle karşılandı.id, subscriptionId, recordType, recordId, customerId, remaining
Bu sayfa yardımcı oldu mu?