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
| Kaynak | Tablo | Listeleme ve okuma | POST | PATCH | DELETE |
|---|---|---|---|---|---|
resource_bookings | resource_booking | /api/v1/resource_bookings | resources.book | ||
resource_services | resource_service | /api/v1/resource_services | |||
resources | resource | /api/v1/resources | resources.create | resources.update | resources.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
| İşlem | Gereken izin | Ne yapar |
|---|---|---|
resources.archive | resources:manage | Arşivle |
resources.book | resources:write | Kaynak rezerve et |
resources.book_weekly | resources:write | Her hafta ayır |
resources.cancel_booking | resources:write | Rezervasyonu iptal et |
resources.create | resources:manage | Kaynak ekle |
resources.set_services | resources:manage | Bu kaynağı gerektiren hizmetleri belirle |
resources.update | resources:manage | Kaynağı 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
https://app.getera.io/api/v1/resources/{id}/actions/archive- REST kısayolu:
DELETE /api/v1/resources/{id} - Asıl adres:
POST /api/v1/actions/resources.archive
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Kaynak · kimliği: resource |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
resource_not_found | Kaynak bulunamadı. |
resource_archived | Bu 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 '{}'{
"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{
"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
https://app.getera.io/api/v1/resource_bookings/actions/book- REST kısayolu:
POST /api/v1/resource_bookings - Asıl adres:
POST /api/v1/actions/resources.book
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
resourceId | uuid | evet | Kaynak · kimliği: resource |
startsAt | string | evet | Başlangıç (yerel, YYYY-MM-DDTHH:mm) · en çok 16 |
endsAt | string | evet | Bitiş (yerel, YYYY-MM-DDTHH:mm) · en çok 16 |
customerId | uuid | Müşteri · kimliği: customer | |
appointmentId | uuid | Randevu (personel tarafı) | |
note | string | Not · en çok 2000 |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
resource_not_found | Kaynak bulunamadı. |
resource_archived | Arşivlenmiş bir kaynak için rezervasyon yapılamaz. |
customer_not_found | Müşteri bulunmalı. |
appointment_not_found | Bağlı randevu bulunamadı. |
resource_booking_range_invalid | Rezervasyonun bitişi başlangıcından sonra olmalı. |
resource_full | Bu 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)"}'{
"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)"{
"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
https://app.getera.io/api/v1/resource_bookings/actions/book_weekly- Asıl adres:
POST /api/v1/actions/resources.book_weekly
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
resourceId | uuid | evet | Kaynak · kimliği: resource |
subscriptionId | uuid | evet | Abonelik · kimliği: subscription |
startsAt | string | evet | İlk hafta başlangıcı (yerel) · en çok 16 |
endsAt | string | evet | İlk hafta bitişi (yerel) · en çok 16 |
note | string | Not · en çok 2000 |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
resource_not_found | Kaynak bulunamadı. |
resource_archived | Arşivlenmiş bir kaynak için rezervasyon yapılamaz. |
subscription_not_live | Abonelik etkin değil. |
resource_booking_range_invalid | Rezervasyonun bitişi başlangıcından sonra olmalı ve dönem içinde kalmalı. |
resource_full | Bazı 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)"}'{
"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)"{
"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
https://app.getera.io/api/v1/resource_bookings/{id}/actions/cancel_booking- Asıl adres:
POST /api/v1/actions/resources.cancel_booking
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Rezervasyon · kimliği: resource_booking |
reason | string | Neden · en çok 500 | |
wholeSeries | boolean | Gelecek tüm haftalar |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
resource_booking_not_found | Rezervasyon bulunmalı. |
resource_booking_cancelled | Bu 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"}'{
"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"{
"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
https://app.getera.io/api/v1/resources/actions/create- REST kısayolu:
POST /api/v1/resources - Asıl adres:
POST /api/v1/actions/resources.create
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
name | string | evet | Ad · en çok 120 |
kind | string (enum) | Tür · İzin verilen değerler: room, pitch, vehicle, chair, equipment, other | |
capacity | number | Aynı anda rezervasyon · en az 1 · en çok 1000 | |
opensAt | string | Açılış · en çok 5 | |
closesAt | string | Kapanış · en çok 5 | |
slotMinutes | number | Rezervasyon birimi (dakika; 1440 = günlük) · en az 5 · en çok 1440 | |
color | string | Renk · en çok 20 | |
description | string | Açıklama · en çok 2000 |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
resource_name_taken | Kullanımdaki iki kaynak aynı adı taşıyamaz. |
resource_hours_invalid | Açı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"}'{
"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"{
"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
https://app.getera.io/api/v1/resource_services/actions/set_services- Asıl adres:
POST /api/v1/actions/resources.set_services
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Kaynak · kimliği: resource |
itemIds | string | Hizmetler · 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:
| Kod | Ne zaman reddedilir |
|---|---|
resource_not_found | Kaynak bulunamadı. |
resource_archived | Arşivlenmiş bir kaynak hizmetlere bağlanamaz. |
item_not_found | Her 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"}'{
"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"{
"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
https://app.getera.io/api/v1/resources/{id}/actions/update- REST kısayolu:
PATCH /api/v1/resources/{id} - Asıl adres:
POST /api/v1/actions/resources.update
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Kaynak · kimliği: resource |
name | string | Ad · en çok 120 | |
kind | string (enum) | Tür · İzin verilen değerler: room, pitch, vehicle, chair, equipment, other | |
capacity | number | Aynı anda rezervasyon · en az 1 · en çok 1000 | |
opensAt | string | Açılış · en çok 5 | |
closesAt | string | Kapanış · en çok 5 | |
slotMinutes | number | Rezervasyon birimi (dakika; 1440 = günlük) · en az 5 · en çok 1440 | |
color | string | Renk · en çok 20 | |
description | string | Açıklama · en çok 2000 |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
resource_not_found | Kaynak bulunamadı. |
resource_archived | Arşivlenmiş bir kaynak düzenlenemez. |
resource_name_taken | Kullanımdaki iki kaynak aynı adı taşıyamaz. |
resource_hours_invalid | Açı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"}'{
"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"{
"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_bookingsGET /api/v1/resource_bookings/{id}POST /api/v1/resource_bookings→resources.book
| Sütun | Tür | Boş olabilir | İzin verilen değerler | Bağlı olduğu tablo |
|---|---|---|---|---|
id | string (uuid) · uuid | |||
organization_id | string (uuid) · uuid | organization | ||
workspace_id | string (uuid) · uuid | workspace | ||
resource_id | string (uuid) · uuid | resource | ||
customer_id | string (uuid) · uuid | evet | customer | |
appointment_id | string (uuid) · uuid | evet | ||
subscription_id | string (uuid) · uuid | evet | subscription | |
series_id | string (uuid) · uuid | evet | ||
starts_at | string (date-time) · timestamptz | |||
ends_at | string (date-time) · timestamptz | |||
status | string · text | booked, cancelled | ||
note | string · text | evet | ||
cancelled_at | string (date-time) · timestamptz | evet | ||
cancel_reason | string · text | evet | ||
created_by | string (uuid) · uuid | evet | app_user | |
created_at | string (date-time) · timestamptz | |||
updated_at | string (date-time) · timestamptz |
Birincil anahtar: id
Denetimler:
CHECK ((ends_at > starts_at))
ResourceService
Tablo resource_service · Kaynak resource_services
GET /api/v1/resource_servicesGET /api/v1/resource_services/{id}
| Sütun | Tür | Boş olabilir | İzin verilen değerler | Bağlı olduğu tablo |
|---|---|---|---|---|
id | string (uuid) · uuid | |||
organization_id | string (uuid) · uuid | organization | ||
workspace_id | string (uuid) · uuid | workspace | ||
resource_id | string (uuid) · uuid | resource | ||
item_id | string (uuid) · uuid | item | ||
created_at | string (date-time) · timestamptz |
Birincil anahtar: id
Tekil: resource_id, item_id
Resource
Tablo resource · Kaynak resources
GET /api/v1/resourcesGET /api/v1/resources/{id}POST /api/v1/resources→resources.createPATCH /api/v1/resources/{id}→resources.updateDELETE /api/v1/resources/{id}→resources.archive
| Sütun | Tür | Boş olabilir | İzin verilen değerler | Bağlı olduğu tablo |
|---|---|---|---|---|
id | string (uuid) · uuid | |||
organization_id | string (uuid) · uuid | organization | ||
workspace_id | string (uuid) · uuid | workspace | ||
name | string · text | |||
kind | string · text | room, pitch, vehicle, chair, equipment, other | ||
capacity | integer · int4 | |||
opens_at | string (time) · time | |||
closes_at | string (time) · time | |||
slot_minutes | integer · int4 | |||
color | string · text | evet | ||
description | string · text | evet | ||
archived_at | string (date-time) · timestamptz | evet | ||
created_by | string (uuid) · uuid | evet | app_user | |
created_at | string (date-time) · timestamptz | |||
updated_at | string (date-time) · timestamptz | |||
is_public | boolean · bool | evet |
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.
| Olay | Ne olur | Taşıdığı alanlar |
|---|---|---|
resources.archived | Bir kaynak arşivlendi. | id |
resources.booked | Bir kaynak rezerve edildi. | id, resourceId, customerId, appointmentId, startsAt, endsAt |
resources.booking_cancelled | Bir kaynak rezervasyonu iptal edildi. | id, resourceId, count |
resources.created | Bir kaynak eklendi. | id, name, kind, capacity |
resources.series_booked | Bir kaynak bir abonelik için her hafta ayrıldı. | id, resourceId, subscriptionId, customerId, weeks, until |
resources.services_changed | Bir kaynağı kullanan hizmetler değişti. | id, itemIds |
resources.updated | Bir kaynak değişti. | id |