Resources API

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

Rooms, pitches, cars, chairs and equipment people book — by the hour or by the day.

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

Kaynaklar

KaynakTabloListeleme ve okumaPOSTPATCHDELETE
resource_bookingsresource_booking/api/v1/resource_bookingsresources.book
resource_servicesresource_service/api/v1/resource_services
resourcesresource/api/v1/resourcesresources.createresources.updateresources.archive

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
resources.archiveresources:manageArşivle
resources.bookresources:writeKaynak rezerve et
resources.book_weeklyresources:writeHer hafta ayır
resources.cancel_bookingresources:writeRezervasyonu iptal et
resources.createresources:manageKaynak ekle
resources.set_servicesresources:manageBu kaynağı gerektiren hizmetleri belirle
resources.updateresources:manageKaynağı düzenle

resources.archive

Arşivle — Yeni rezervasyonları durdurur. Mevcut olanlar olduğu gibi kalır.

Gereken izin resources: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/resources/{id}/actions/archive
API anahtarı ya da OAuth token · resources:manage
  • REST kısayolu: DELETE /api/v1/resources/{id}
  • Asıl adres: POST /api/v1/actions/resources.archive

Girdi

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

Ön koşullar

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

KodNe zaman reddedilir
resource_not_foundKaynak bulunamadı.
resource_archivedBu kaynak zaten arşivlenmiş.

Yayımladığı olaylar: resources.archived

Neye yazar: resource (update) — Stamps archived_at

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

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.resources.archive("RESOURCE_ID")
era resources archive RESOURCE_ID
tools/call
{
  "name": "era__resources__archive",
  "arguments": {
    "id": "RESOURCE_ID"
  }
}

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

resources.book

Kaynak rezerve et — Bir sahada bir saat ya da bir odada dokuz gece; o zaman zaten doluysa reddedilir.

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

POSThttps://app.getera.io/api/v1/resource_bookings/actions/book
API anahtarı ya da OAuth token · resources:write
  • REST kısayolu: POST /api/v1/resource_bookings
  • Asıl adres: POST /api/v1/actions/resources.book

Girdi

AlanTürZorunluAçıklama
resourceIduuidevetKaynak · kimliği: resource
startsAtstringevetBaşlangıç (yerel, YYYY-MM-DDTHH:mm) · en çok 16
endsAtstringevetBitiş (yerel, YYYY-MM-DDTHH:mm) · en çok 16
customerIduuidMüşteri · kimliği: customer
appointmentIduuidRandevu (personel tarafı)
notestringNot · en çok 2000

Ön koşullar

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

KodNe zaman reddedilir
resource_not_foundKaynak bulunamadı.
resource_archivedArşivlenmiş bir kaynak için rezervasyon yapılamaz.
customer_not_foundMüşteri bulunmalı.
appointment_not_foundBağlı randevu bulunamadı.
resource_booking_range_invalidRezervasyonun bitişi başlangıcından sonra olmalı.
resource_fullBu saat dolu; kaynağın kapasitesi aşılıyor.

Yayımladığı olaylar: resources.booked

Neye yazar: resource_booking (insert) — Books it

curl -X POST https://app.getera.io/api/v1/resource_bookings/actions/book \
  -H "Authorization: Bearer $ERA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"resourceId":"RESOURCE_ID","startsAt":"From (local, YYYY-MM-DDTHH:mm)","endsAt":"Until (local, YYYY-MM-DDTHH:mm)"}'
Yanıt
{
  "ok": true,
  "result": "…",
  "events": [
    "resources.booked"
  ]
}
import { createEra } from "@getera/sdk"

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.resourceBookings.create({
  resourceId: "RESOURCE_ID",
  startsAt: "From (local, YYYY-MM-DDTHH:mm)",
  endsAt: "Until (local, YYYY-MM-DDTHH:mm)"
})
era resource_bookings create \
  --resource-id "RESOURCE_ID" \
  --starts-at "From (local, YYYY-MM-DDTHH:mm)" \
  --ends-at "Until (local, YYYY-MM-DDTHH:mm)"
tools/call
{
  "name": "era__resources__book",
  "arguments": {
    "resourceId": "RESOURCE_ID",
    "startsAt": "From (local, YYYY-MM-DDTHH:mm)",
    "endsAt": "Until (local, YYYY-MM-DDTHH:mm)"
  }
}

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

resources.book_weekly

Her hafta ayır — Aboneliğin dönemi bitene kadar her hafta aynı gün ve saat; ya tüm haftalar ya hiçbiri.

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

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

Girdi

AlanTürZorunluAçıklama
resourceIduuidevetKaynak · kimliği: resource
subscriptionIduuidevetAbonelik · kimliği: subscription
startsAtstringevetİlk hafta başlangıcı (yerel) · en çok 16
endsAtstringevetİlk hafta bitişi (yerel) · en çok 16
notestringNot · en çok 2000

Ön koşullar

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

KodNe zaman reddedilir
resource_not_foundKaynak bulunamadı.
resource_archivedArşivlenmiş bir kaynak için rezervasyon yapılamaz.
subscription_not_liveAbonelik etkin değil.
resource_booking_range_invalidRezervasyonun bitişi başlangıcından sonra olmalı ve dönem içinde kalmalı.
resource_fullBazı haftalarda yer yok; her hafta müsait olmalı.

Yayımladığı olaylar: resources.series_booked

Neye yazar: resource_booking (insert) — Books every week of the period

curl -X POST https://app.getera.io/api/v1/resource_bookings/actions/book_weekly \
  -H "Authorization: Bearer $ERA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"resourceId":"RESOURCE_ID","subscriptionId":"SUBSCRIPTION_ID","startsAt":"First week from (local)","endsAt":"First week until (local)"}'
Yanıt
{
  "ok": true,
  "result": "…",
  "events": [
    "resources.series_booked"
  ]
}
import { createEra } from "@getera/sdk"

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.resourceBookings.bookWeekly({
  resourceId: "RESOURCE_ID",
  subscriptionId: "SUBSCRIPTION_ID",
  startsAt: "First week from (local)",
  endsAt: "First week until (local)"
})
era resource_bookings book_weekly \
  --resource-id "RESOURCE_ID" \
  --subscription-id "SUBSCRIPTION_ID" \
  --starts-at "First week from (local)" \
  --ends-at "First week until (local)"
tools/call
{
  "name": "era__resources__book_weekly",
  "arguments": {
    "resourceId": "RESOURCE_ID",
    "subscriptionId": "SUBSCRIPTION_ID",
    "startsAt": "First week from (local)",
    "endsAt": "First week until (local)"
  }
}

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

resources.cancel_booking

Rezervasyonu iptal et — Zamanı boşaltır. Haftalık bir seride, isteğe bağlı olarak kalan tüm haftaları da.

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

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

Girdi

AlanTürZorunluAçıklama
iduuidevetDoldurulduğu yer: adresteki {id} · Rezervasyon · kimliği: resource_booking
reasonstringNeden · en çok 500
wholeSeriesbooleanGelecek tüm haftalar

Ön koşullar

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

KodNe zaman reddedilir
resource_booking_not_foundRezervasyon bulunmalı.
resource_booking_cancelledBu rezervasyon zaten iptal edilmiş.

Yayımladığı olaylar: resources.booking_cancelled

Neye yazar: resource_booking (update) — Marks it cancelled

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

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.resourceBookings.cancelBooking("RESOURCE_BOOKING_ID", {
  reason: "Reason"
})
era resource_bookings cancel_booking RESOURCE_BOOKING_ID \
  --reason "Reason"
tools/call
{
  "name": "era__resources__cancel_booking",
  "arguments": {
    "id": "RESOURCE_BOOKING_ID",
    "reason": "Reason"
  }
}

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

resources.create

Kaynak ekle — İnsanların rezervasyon yaptığı bir oda, saha, araç, koltuk veya ekipman.

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

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

Girdi

AlanTürZorunluAçıklama
namestringevetAd · en çok 120
kindstring (enum)Tür · İzin verilen değerler: room, pitch, vehicle, chair, equipment, other
capacitynumberAynı anda rezervasyon · en az 1 · en çok 1000
opensAtstringAçılış · en çok 5
closesAtstringKapanış · en çok 5
slotMinutesnumberRezervasyon birimi (dakika; 1440 = günlük) · en az 5 · en çok 1440
colorstringRenk · en çok 20
descriptionstringAçıklama · en çok 2000

Ön koşullar

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

KodNe zaman reddedilir
resource_name_takenKullanımdaki iki kaynak aynı adı taşıyamaz.
resource_hours_invalidAçılış saatleri SS:dd biçiminde olmalı ve kapanış açılıştan sonra gelmeli.

Yayımladığı olaylar: resources.created

Neye yazar: resource (insert) — Adds the resource

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

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.resources.create({
  name: "Name"
})
era resources create \
  --name "Name"
tools/call
{
  "name": "era__resources__create",
  "arguments": {
    "name": "Name"
  }
}

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

resources.set_services

Bu kaynağı gerektiren hizmetleri belirle — Bu kaynakla birlikte alınan hizmetler. Böyle bir hizmet için randevu alınırken randevu sihirbazı boş bir kaynak ister.

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

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

Girdi

AlanTürZorunluAçıklama
iduuidevetKaynak · kimliği: resource
itemIdsstringHizmetler · Virgülle ayrılmış hizmet kimlikleri. Boş bırakılırsa tüm hizmetlerden ayrılır. · en çok 4000

Ön koşullar

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

KodNe zaman reddedilir
resource_not_foundKaynak bulunamadı.
resource_archivedArşivlenmiş bir kaynak hizmetlere bağlanamaz.
item_not_foundHer hizmet bulunmalı.

Yayımladığı olaylar: resources.services_changed

Neye yazar: resource_service (upsert) — Replaces the list of services that need it

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

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.resourceServices.setServices({
  id: "RESOURCE_ID"
})
era resource_services set_services \
  --id "RESOURCE_ID"
tools/call
{
  "name": "era__resources__set_services",
  "arguments": {
    "id": "RESOURCE_ID"
  }
}

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

resources.update

Kaynağı düzenle — Ad, tür, kapasite, saatler ve zaman aralığı uzunluğu. Mevcut rezervasyonlar olduğu gibi kalır.

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

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

Girdi

AlanTürZorunluAçıklama
iduuidevetDoldurulduğu yer: adresteki {id} · Kaynak · kimliği: resource
namestringAd · en çok 120
kindstring (enum)Tür · İzin verilen değerler: room, pitch, vehicle, chair, equipment, other
capacitynumberAynı anda rezervasyon · en az 1 · en çok 1000
opensAtstringAçılış · en çok 5
closesAtstringKapanış · en çok 5
slotMinutesnumberRezervasyon birimi (dakika; 1440 = günlük) · en az 5 · en çok 1440
colorstringRenk · en çok 20
descriptionstringAçıklama · en çok 2000

Ön koşullar

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

KodNe zaman reddedilir
resource_not_foundKaynak bulunamadı.
resource_archivedArşivlenmiş bir kaynak düzenlenemez.
resource_name_takenKullanımdaki iki kaynak aynı adı taşıyamaz.
resource_hours_invalidAçılış saatleri SS:dd biçiminde olmalı ve kapanış açılıştan sonra gelmeli.

Yayımladığı olaylar: resources.updated

Neye yazar: resource (update) — Updates the resource

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

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.resources.update("RESOURCE_ID", {
  name: "Name"
})
era resources update RESOURCE_ID \
  --name "Name"
tools/call
{
  "name": "era__resources__update",
  "arguments": {
    "id": "RESOURCE_ID",
    "name": "Name"
  }
}

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

Veri modelleri

ResourceBooking

Tablo resource_booking · Kaynak resource_bookings

  • GET /api/v1/resource_bookings
  • GET /api/v1/resource_bookings/{id}
  • POST /api/v1/resource_bookings → resources.book
SütunTürBoş olabilirİzin verilen değerlerBağlı olduğu tablo
idstring (uuid) · uuid
organization_idstring (uuid) · uuidorganization
workspace_idstring (uuid) · uuidworkspace
resource_idstring (uuid) · uuidresource
customer_idstring (uuid) · uuidevetcustomer
appointment_idstring (uuid) · uuidevet
subscription_idstring (uuid) · uuidevetsubscription
series_idstring (uuid) · uuidevet
starts_atstring (date-time) · timestamptz
ends_atstring (date-time) · timestamptz
statusstring · textbooked, cancelled
notestring · textevet
cancelled_atstring (date-time) · timestamptzevet
cancel_reasonstring · textevet
created_bystring (uuid) · uuidevetapp_user
created_atstring (date-time) · timestamptz
updated_atstring (date-time) · timestamptz

Birincil anahtar: id

Denetimler:

  • CHECK ((ends_at > starts_at))

ResourceService

Tablo resource_service · Kaynak resource_services

  • GET /api/v1/resource_services
  • GET /api/v1/resource_services/{id}
SütunTürBoş olabilirİzin verilen değerlerBağlı olduğu tablo
idstring (uuid) · uuid
organization_idstring (uuid) · uuidorganization
workspace_idstring (uuid) · uuidworkspace
resource_idstring (uuid) · uuidresource
item_idstring (uuid) · uuiditem
created_atstring (date-time) · timestamptz

Birincil anahtar: id

Tekil: resource_id, item_id

Resource

Tablo resource · Kaynak resources

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
kindstring · textroom, pitch, vehicle, chair, equipment, other
capacityinteger · int4
opens_atstring (time) · time
closes_atstring (time) · time
slot_minutesinteger · int4
colorstring · textevet
descriptionstring · textevet
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 (((capacity >= 1) AND (capacity <= 1000)))
  • CHECK (((slot_minutes = 1440) OR (closes_at > opens_at)))
  • CHECK ((length(TRIM(BOTH FROM name)) > 0))
  • CHECK (((slot_minutes >= 5) AND (slot_minutes <= 1440)))

Olaylar

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

OlayNe olurTaşıdığı alanlar
resources.archivedBir kaynak arşivlendi.id
resources.bookedBir kaynak rezerve edildi.id, resourceId, customerId, appointmentId, startsAt, endsAt
resources.booking_cancelledBir kaynak rezervasyonu iptal edildi.id, resourceId, count
resources.createdBir kaynak eklendi.id, name, kind, capacity
resources.series_bookedBir kaynak bir abonelik için her hafta ayrıldı.id, resourceId, subscriptionId, customerId, weeks, until
resources.services_changedBir kaynağı kullanan hizmetler değişti.id, itemIds
resources.updatedBir kaynak değişti.id
Bu sayfa yardımcı oldu mu?