Müsaitlik API
Müsaitlik modülünün tüm işlemleri (13) ve veri modelleri (7): adresler, izinler, girdiler, ön koşullar, olaylar ve örnekler.
Çalışma saatleri, özel günler, izinler ve hangi hizmeti kimin verdiği.
Modül kodu availability · 13 işlem · 7 veri modeli · 12 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ı: availability (hepsi), availability:read (yalnız okuma) ya da availability:<yetenek>.
Kaynaklar
| Kaynak | Tablo | Listeleme ve okuma | POST | PATCH | DELETE |
|---|---|---|---|---|---|
leave_allowances | leave_allowance | /api/v1/leave_allowances | |||
leave_periods | leave_period | /api/v1/leave_periods | |||
leave_types | leave_type | /api/v1/leave_types | |||
service_available_days | service_available_day | /api/v1/service_available_days | |||
service_providers | service_provider | /api/v1/service_providers | |||
working_hour_overrides | working_hour_override | /api/v1/working_hour_overrides | |||
working_hours | working_hour | /api/v1/working_hours |
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 |
|---|---|---|
availability.adjust_allowance | availability:manage | Bakiyeyi düzelt |
availability.approve_leave | availability:write | İzni onayla |
availability.cancel_leave | availability:write | İzni geri çek |
availability.carry_over | availability:manage | İzin yılını kapat |
availability.clear_override | availability:manage | Özel günü kaldır |
availability.clear_person_hours | availability:manage | Çalışma alanının saatlerini kullan |
availability.reject_leave | availability:write | İzni reddet |
availability.request_leave | availability:write | İzin talep et |
availability.save_leave_type | availability:manage | İzin türünü kaydet |
availability.set_hours | availability:manage | Çalışma saatlerini belirle |
availability.set_item_days | availability:manage | Hangi günler sunulduğunu belirle |
availability.set_item_providers | availability:manage | Kimin yapabileceğini belirle |
availability.set_override | availability:manage | Özel gün belirle |
availability.adjust_allowance
Bakiyeyi düzelt — Bir kişinin bir yıllık bakiyesine gün ekler veya çıkarır — yeni başlayanın kıst hakkı, bir düzeltme.
Gereken izin availability:manage · veriyi değiştirir
https://app.getera.io/api/v1/leave_allowances/actions/adjust_allowance- Asıl adres:
POST /api/v1/actions/availability.adjust_allowance
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
userId | uuid | evet | Ekip üyesi · kimliği: app_user |
leaveType | string | evet | Tür · en çok 40 |
year | number | evet | Yıl · en az 2000 · en çok 2100 |
adjustment | number | evet | Düzeltme (gün) · en az -366 · en çok 366 |
note | string | Neden · en çok 1000 |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
unknown_leave_type | Yalnızca sayılan bir türün bakiyesi olur. |
not_a_member | Kişi bu çalışma alanının üyesi olmalı. |
Yayımladığı olaylar: availability.allowance_adjusted
Neye yazar: leave_allowance (upsert) — Sets the adjustment for that year
curl -X POST https://app.getera.io/api/v1/leave_allowances/actions/adjust_allowance \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"userId":"APP_USER_ID","leaveType":"Kind","year":2000,"adjustment":1}'{
"ok": true,
"result": "…",
"events": [
"availability.allowance_adjusted"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.leaveAllowances.adjustAllowance({
userId: "APP_USER_ID",
leaveType: "Kind",
year: 2000,
adjustment: 1
})era leave_allowances adjust_allowance \
--user-id "APP_USER_ID" \
--leave-type "Kind" \
--year 2000 \
--adjustment 1{
"name": "era__availability__adjust_allowance",
"arguments": {
"userId": "APP_USER_ID",
"leaveType": "Kind",
"year": 2000,
"adjustment": 1
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde availability:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 unknown_leave_type, not_a_member · 429 çok sık istek
availability.approve_leave
İzni onayla — İzni kesinleştirir; bozacağı randevuları belirtir.
Gereken izin availability:write · veriyi değiştirir
https://app.getera.io/api/v1/leave_periods/{id}/actions/approve_leave- Asıl adres:
POST /api/v1/actions/availability.approve_leave
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
leaveId | uuid | evet | Doldurulduğu yer: adresteki {id} · Talep · kimliği: leave_period |
force | boolean | Yine de onayla | |
note | string | Not · en çok 1000 |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
already_approved | Zaten onaylanmış olmamalı. |
not_found | Talep bulunmalı. |
not_pending | Yalnızca hâlâ bekleyen bir talep karara bağlanabilir. |
cannot_approve_own | Yapılandırma yetkiniz yoksa kendi izninize başkası karar verir. |
not_an_approver | Yöneticisi ya da onay yetkisi olan biri karar verir. |
clashes_with_appointments | İzin süresi içindeki randevular belirtilir. |
Yayımladığı olaylar: availability.leave_approved
Neye yazar: leave_period (update) — Marks it approved
curl -X POST https://app.getera.io/api/v1/leave_periods/LEAVE_PERIOD_ID/actions/approve_leave \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"force":true}'{
"ok": true,
"result": "…",
"events": [
"availability.leave_approved"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.leavePeriods.approveLeave("LEAVE_PERIOD_ID", {
force: true
})era leave_periods approve_leave LEAVE_PERIOD_ID \
--force true{
"name": "era__availability__approve_leave",
"arguments": {
"leaveId": "LEAVE_PERIOD_ID",
"force": true
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde availability:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 already_approved, not_found, not_pending, cannot_approve_own, not_an_approver, clashes_with_appointments · 429 çok sık istek
availability.cancel_leave
İzni geri çek — Bir talebi geri çeker ya da başlamamış onaylı izni iade eder.
Gereken izin availability:write · siler ya da geri alınamaz
https://app.getera.io/api/v1/leave_periods/{id}/actions/cancel_leave- Asıl adres:
POST /api/v1/actions/availability.cancel_leave
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
leaveId | uuid | evet | Doldurulduğu yer: adresteki {id} · Talep · kimliği: leave_period |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
not_found | Talep bulunmalı. |
not_your_leave | Yalnızca kişinin kendisi ya da Yapılandırma yetkisi olan biri geri çekebilir. |
cannot_cancel | Reddedilmiş, geri çekilmiş veya başlamış izin geri çekilemez. |
Yayımladığı olaylar: availability.leave_cancelled
Neye yazar: leave_period (update) — Marks it withdrawn
curl -X POST https://app.getera.io/api/v1/leave_periods/LEAVE_PERIOD_ID/actions/cancel_leave \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{}'{
"ok": true,
"result": "…",
"events": [
"availability.leave_cancelled"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.leavePeriods.cancelLeave("LEAVE_PERIOD_ID")era leave_periods cancel_leave LEAVE_PERIOD_ID{
"name": "era__availability__cancel_leave",
"arguments": {
"leaveId": "LEAVE_PERIOD_ID"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde availability:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 not_found, not_your_leave, cannot_cancel · 429 çok sık istek
availability.carry_over
İzin yılını kapat — Her bakiyeden kalanı, her türün devir sınırına kadar sonraki yıla taşır.
Gereken izin availability:manage · veriyi değiştirir
https://app.getera.io/api/v1/leave_allowances/actions/carry_over- Asıl adres:
POST /api/v1/actions/availability.carry_over
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
year | number | evet | Yıl · en az 2000 · en çok 2100 |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
year_not_over | Yalnızca bitmiş bir yıl kapatılabilir. |
Yayımladığı olaylar: availability.leave_carried_over
Neye yazar: leave_allowance (upsert) — Writes next year’s carried-over days
curl -X POST https://app.getera.io/api/v1/leave_allowances/actions/carry_over \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"year":2000}'{
"ok": true,
"result": "…",
"events": [
"availability.leave_carried_over"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.leaveAllowances.carryOver({
year: 2000
})era leave_allowances carry_over \
--year 2000{
"name": "era__availability__carry_over",
"arguments": {
"year": 2000
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde availability:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 year_not_over · 429 çok sık istek
availability.clear_override
Özel günü kaldır — Bir tarihi haftalık saatlere geri döndürür.
Gereken izin availability:manage · siler ya da geri alınamaz
https://app.getera.io/api/v1/working_hour_overrides/{id}/actions/clear_override- Asıl adres:
POST /api/v1/actions/availability.clear_override
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
overrideId | uuid | evet | Doldurulduğu yer: adresteki {id} · Özel gün · kimliği: working_hour_override |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
not_found | Özel gün hâlâ bulunmalı. |
Yayımladığı olaylar: availability.override_cleared
Neye yazar: working_hour_override (delete) — Removes that date’s exception
curl -X POST https://app.getera.io/api/v1/working_hour_overrides/WORKING_HOUR_OVERRIDE_ID/actions/clear_override \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{}'{
"ok": true,
"result": "…",
"events": [
"availability.override_cleared"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.workingHourOverrides.clearOverride("WORKING_HOUR_OVERRIDE_ID")era working_hour_overrides clear_override WORKING_HOUR_OVERRIDE_ID{
"name": "era__availability__clear_override",
"arguments": {
"overrideId": "WORKING_HOUR_OVERRIDE_ID"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde availability:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 not_found · 429 çok sık istek
availability.clear_person_hours
Çalışma alanının saatlerini kullan — Bir kişinin kendine ait çalışma haftasını kaldırır; böylece çalışma alanının açılış saatleri ona yeniden uygulanır.
Gereken izin availability:manage · siler ya da geri alınamaz
https://app.getera.io/api/v1/working_hours/actions/clear_person_hours- Asıl adres:
POST /api/v1/actions/availability.clear_person_hours
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
userId | uuid | evet | Ekip üyesi |
Yayımladığı olaylar: availability.hours_changed
Neye yazar: working_hour (delete) — Removes that person’s weekday rows
curl -X POST https://app.getera.io/api/v1/working_hours/actions/clear_person_hours \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"userId":"USER_ID"}'{
"ok": true,
"result": "…",
"events": [
"availability.hours_changed"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.workingHours.clearPersonHours({
userId: "USER_ID"
})era working_hours clear_person_hours \
--user-id "USER_ID"{
"name": "era__availability__clear_person_hours",
"arguments": {
"userId": "USER_ID"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde availability:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 429 çok sık istek
availability.reject_leave
İzni reddet — Talebi, talep edene bildirilen bir nedenle reddeder.
Gereken izin availability:write · veriyi değiştirir
https://app.getera.io/api/v1/leave_periods/{id}/actions/reject_leave- Asıl adres:
POST /api/v1/actions/availability.reject_leave
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
leaveId | uuid | evet | Doldurulduğu yer: adresteki {id} · Talep · kimliği: leave_period |
note | string | Neden · en çok 1000 |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
not_found | Talep bulunmalı. |
not_pending | Yalnızca hâlâ bekleyen bir talep karara bağlanabilir. |
cannot_approve_own | Yapılandırma yetkiniz yoksa kendi izninize başkası karar verir. |
not_an_approver | Yöneticisi ya da onay yetkisi olan biri karar verir. |
Yayımladığı olaylar: availability.leave_rejected
Neye yazar: leave_period (update) — Marks it declined
curl -X POST https://app.getera.io/api/v1/leave_periods/LEAVE_PERIOD_ID/actions/reject_leave \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"note":"Reason"}'{
"ok": true,
"result": "…",
"events": [
"availability.leave_rejected"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.leavePeriods.rejectLeave("LEAVE_PERIOD_ID", {
note: "Reason"
})era leave_periods reject_leave LEAVE_PERIOD_ID \
--note "Reason"{
"name": "era__availability__reject_leave",
"arguments": {
"leaveId": "LEAVE_PERIOD_ID",
"note": "Reason"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde availability:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 not_found, not_pending, cannot_approve_own, not_an_approver · 429 çok sık istek
availability.request_leave
İzin talep et — İzni kaydeder, iş günlerini bakiyeden düşer ve onaylanana kadar hiçbir şeyi engellemez.
Gereken izin availability:write · veriyi değiştirir
https://app.getera.io/api/v1/leave_periods/actions/request_leave- Asıl adres:
POST /api/v1/actions/availability.request_leave
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
userId | uuid | Ekip üyesi · Tüm organizasyonu kapatan bir izin için boş bırakın. | |
title | string | evet | Başlık · en çok 120 |
leaveType | string | Tür · en çok 40 | |
startDate | date | evet | Nereden |
endDate | date | evet | Bitiş |
isAllDay | boolean | Tüm gün | |
startTime | string | Başlangıç (saat) · en çok 8 | |
endTime | string | Bitiş (saat) · en çok 8 | |
description | string | Not · en çok 2000 |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
invalid_range | Bitiş başlangıçtan önce olmamalı ve bir talep en fazla bir yılı kapsar. |
times_required | Yarım günlük izin iki saati de gerektirir. |
not_your_leave | Başkasının ya da tüm organizasyonun izni Yapılandırma yetkisi gerektirir. |
unknown_leave_type | Tür, bu çalışma alanının kullandığı türlerden biri olmalı. |
overlaps_existing | Zaten talep edilmiş veya onaylanmış bir izinle çakışmamalı. |
insufficient_balance | Sayılan bir tür, kuralı izin vermedikçe sıfırın altına inemez. |
Yayımladığı olaylar: availability.leave_requested
Neye yazar: leave_period (insert) — Records the request
curl -X POST https://app.getera.io/api/v1/leave_periods/actions/request_leave \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"title":"Title","startDate":"2026-11-02","endDate":"2026-11-02"}'{
"ok": true,
"result": "…",
"events": [
"availability.leave_requested"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.leavePeriods.requestLeave({
title: "Title",
startDate: "2026-11-02",
endDate: "2026-11-02"
})era leave_periods request_leave \
--title "Title" \
--start-date "2026-11-02" \
--end-date "2026-11-02"{
"name": "era__availability__request_leave",
"arguments": {
"title": "Title",
"startDate": "2026-11-02",
"endDate": "2026-11-02"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde availability:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 invalid_range, times_required, not_your_leave, unknown_leave_type, overlaps_existing, insufficient_balance · 429 çok sık istek
availability.save_leave_type
İzin türünü kaydet — Bir izin türünü ve kuralını ekler veya değiştirir: hak ediş, devir ve üst sınır.
Gereken izin availability:manage · veriyi değiştirir
https://app.getera.io/api/v1/leave_types/actions/save_leave_type- Asıl adres:
POST /api/v1/actions/availability.save_leave_type
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
code | string | evet | Kod · en çok 40 |
label | string | evet | Ad · en çok 80 |
colour | string | Renk · en çok 20 | |
isPaid | boolean | Ödendi | |
accrualPeriod | string (enum) | Hak ediş sıklığı · İzin verilen değerler: none, year, month | |
accrualDays | number | Dönem başına gün · en çok 366 | |
carryOverMax | number | En fazla devredilecek · en çok 366 | |
maxBalance | number | Bakiye üst sınırı · en çok 999 | |
allowNegative | boolean | Sıfırın altına inebilir | |
isActive | boolean | Kullanımda |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
invalid_code | Kod küçük harf, rakam ve alt çizgiden oluşur. |
invalid_policy | Sayılan bir tür hak ediş biriktirir ve devir üst sınırın altında kalır. |
Yayımladığı olaylar: availability.leave_type_saved
Neye yazar: leave_type (upsert) — Writes the kind and its policy
curl -X POST https://app.getera.io/api/v1/leave_types/actions/save_leave_type \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"code":"Code","label":"Name"}'{
"ok": true,
"result": "…",
"events": [
"availability.leave_type_saved"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.leaveTypes.saveLeaveType({
code: "Code",
label: "Name"
})era leave_types save_leave_type \
--code "Code" \
--label "Name"{
"name": "era__availability__save_leave_type",
"arguments": {
"code": "Code",
"label": "Name"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde availability:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 invalid_code, invalid_policy · 429 çok sık istek
availability.set_hours
Çalışma saatlerini belirle — Bir hafta gününü değiştirir; saatlerin dışında kalacak randevuları belirtir.
Gereken izin availability:manage · veriyi değiştirir
https://app.getera.io/api/v1/working_hours/actions/set_hours- Asıl adres:
POST /api/v1/actions/availability.set_hours
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
userId | uuid | Ekip üyesi · Tüm çalışma alanının saatlerini ayarlamak için boş bırakın. | |
weekday | number | evet | Hafta günü · en az 0 · en çok 6 |
isWorkingDay | boolean | O günü aç | |
startsAt | string | Açılış · en çok 8 | |
endsAt | string | Kapanış · en çok 8 | |
blocks | object / array | Açık olduğu aralıklar · Bir günde birkaç aralık, ör. [{"startsAt":"09:00","endsAt":"12:30"},{"startsAt":"13:30","endsAt":"18:00"}]. Açılış/Kapanış alanlarının yerine geçer. | |
force | boolean | Yine de değiştir |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
hours_required | Açık bir gün iki saati de gerektirir. |
invalid_range | Kapanış açılıştan sonra olmalı. |
overlapping_blocks | Aynı gündeki açık saat aralıkları çakışamaz. |
orphans_appointments | Yeni saatlerin dışında kalan randevular belirtilir. |
Yayımladığı olaylar: availability.hours_changed
Neye yazar: working_hour (upsert) — Replaces that weekday’s hours
curl -X POST https://app.getera.io/api/v1/working_hours/actions/set_hours \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"weekday":1}'{
"ok": true,
"result": "…",
"events": [
"availability.hours_changed"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.workingHours.setHours({
weekday: 1
})era working_hours set_hours \
--weekday 1{
"name": "era__availability__set_hours",
"arguments": {
"weekday": 1
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde availability:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 hours_required, invalid_range, overlapping_blocks, orphans_appointments · 429 çok sık istek
availability.set_item_days
Hangi günler sunulduğunu belirle — Bir katalog kaydını belirli hafta günleriyle sınırlar. Boş, her gün demektir.
Gereken izin availability:manage · veriyi değiştirir
https://app.getera.io/api/v1/service_available_days/actions/set_item_days- Asıl adres:
POST /api/v1/actions/availability.set_item_days
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
itemId | uuid | evet | Kalem · kimliği: item |
days | string | Hafta günleri · Virgülle ayrılmış, 0 = Pazar. Her gün için boş bırakın. · en çok 32 |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
not_found | Katalog kaydı bulunmalı. |
invalid_weekday | Hafta günü 0 ile 6 arasında olmalı. |
Yayımladığı olaylar: availability.item_days_changed
Neye yazar: service_available_day (upsert) — Replaces the weekday restriction
curl -X POST https://app.getera.io/api/v1/service_available_days/actions/set_item_days \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"itemId":"ITEM_ID"}'{
"ok": true,
"result": "…",
"events": [
"availability.item_days_changed"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.serviceAvailableDays.setItemDays({
itemId: "ITEM_ID"
})era service_available_days set_item_days \
--item-id "ITEM_ID"{
"name": "era__availability__set_item_days",
"arguments": {
"itemId": "ITEM_ID"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde availability:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 not_found, invalid_weekday · 429 çok sık istek
availability.set_item_providers
Kimin yapabileceğini belirle — Bir katalog kaydını verebilecek ekip üyelerini değiştirir.
Gereken izin availability:manage · veriyi değiştirir
https://app.getera.io/api/v1/service_providers/actions/set_item_providers- Asıl adres:
POST /api/v1/actions/availability.set_item_providers
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
itemId | uuid | evet | Kalem · kimliği: item |
userIds | string | Ekip üyeleri · Virgülle ayrılmış kullanıcı kimlikleri. Kimseyi atamamak için boş bırakın. · en çok 2000 | |
force | boolean | Yine de ata |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
not_found | Katalog kaydı bulunmalı. |
not_a_member | Atanan herkes burada aktif bir üye olmalı. |
clashes_with_appointments | Hâlâ çıkarılan kişiyi belirten randevular listelenir. |
Yayımladığı olaylar: availability.item_providers_changed
Neye yazar: service_provider (upsert) — Replaces the assignment list
curl -X POST https://app.getera.io/api/v1/service_providers/actions/set_item_providers \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"itemId":"ITEM_ID"}'{
"ok": true,
"result": "…",
"events": [
"availability.item_providers_changed"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.serviceProviders.setItemProviders({
itemId: "ITEM_ID"
})era service_providers set_item_providers \
--item-id "ITEM_ID"{
"name": "era__availability__set_item_providers",
"arguments": {
"itemId": "ITEM_ID"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde availability:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 not_found, not_a_member, clashes_with_appointments · 429 çok sık istek
availability.set_override
Özel gün belirle — Tek bir tarih için haftalık saatleri geçersiz kılar — bir tatil ya da tek seferlik bir açılış.
Gereken izin availability:manage · veriyi değiştirir
https://app.getera.io/api/v1/working_hour_overrides/actions/set_override- Asıl adres:
POST /api/v1/actions/availability.set_override
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
overrideDate | date | evet | Tarih |
title | string | evet | Neden · en çok 120 |
userId | uuid | Ekip üyesi · Tüm çalışma alanı için boş bırakın. | |
isWorkingDay | boolean | O günü aç | |
startsAt | string | Açılış · en çok 8 | |
endsAt | string | Kapanış · en çok 8 | |
force | boolean | Yine de ayarla |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
hours_required | Açık bir gün iki saati de gerektirir. |
invalid_range | Kapanış açılıştan sonra olmalı. |
clashes_with_appointments | O gün zaten alınmış randevular belirtilir. |
Yayımladığı olaylar: availability.override_set
Neye yazar: working_hour_override (upsert) — Replaces that date’s exception
curl -X POST https://app.getera.io/api/v1/working_hour_overrides/actions/set_override \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"overrideDate":"2026-11-02","title":"Why"}'{
"ok": true,
"result": "…",
"events": [
"availability.override_set"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.workingHourOverrides.setOverride({
overrideDate: "2026-11-02",
title: "Why"
})era working_hour_overrides set_override \
--override-date "2026-11-02" \
--title "Why"{
"name": "era__availability__set_override",
"arguments": {
"overrideDate": "2026-11-02",
"title": "Why"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde availability:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 hours_required, invalid_range, clashes_with_appointments · 429 çok sık istek
Veri modelleri
LeaveAllowance
Tablo leave_allowance · Kaynak leave_allowances
GET /api/v1/leave_allowancesGET /api/v1/leave_allowances/{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 | ||
user_id | string (uuid) · uuid | app_user | ||
leave_type_code | string · text | |||
year | integer · int4 | |||
carried_over | string (decimal) · numeric | |||
adjustment | string (decimal) · numeric | |||
note | string · text | evet | ||
updated_at | string (date-time) · timestamptz |
Birincil anahtar: id
Tekil: workspace_id, user_id, leave_type_code, year
Denetimler:
CHECK ((carried_over >= (0)::numeric))CHECK (((year >= 2000) AND (year <= 2100)))
LeavePeriod
Tablo leave_period · Kaynak leave_periods
GET /api/v1/leave_periodsGET /api/v1/leave_periods/{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 | ||
user_id | string (uuid) · uuid | evet | app_user | |
leave_type | string · text | |||
title | string · text | |||
description | string · text | evet | ||
start_date | string (date) · date | |||
end_date | string (date) · date | |||
is_all_day | boolean · bool | |||
start_time | string (time) · time | evet | ||
end_time | string (time) · time | evet | ||
status | string · text | requested, approved, rejected, cancelled | ||
created_at | string (date-time) · timestamptz | |||
days | string (decimal) · numeric | evet | ||
requested_by_user_id | string (uuid) · uuid | evet | app_user | |
decided_by_user_id | string (uuid) · uuid | evet | app_user | |
decided_at | string (date-time) · timestamptz | evet | ||
decision_note | string · text | evet |
Birincil anahtar: id
Denetimler:
CHECK ((end_date >= start_date))CHECK ((is_all_day OR ((start_time IS NOT NULL) AND (end_time IS NOT NULL) AND (end_time > start_time))))
LeaveType
Tablo leave_type · Kaynak leave_types
GET /api/v1/leave_typesGET /api/v1/leave_types/{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 | ||
code | string · text | |||
label | string · text | |||
colour | string · text | |||
is_paid | boolean · bool | |||
accrual_period | string · text | none, year, month | ||
accrual_days | string (decimal) · numeric | |||
carry_over_max | string (decimal) · numeric | |||
max_balance | string (decimal) · numeric | evet | ||
allow_negative | boolean · bool | |||
is_active | boolean · bool | |||
sort_order | integer · int4 | |||
created_at | string (date-time) · timestamptz | |||
updated_at | string (date-time) · timestamptz |
Birincil anahtar: id
Tekil: workspace_id, code
Denetimler:
CHECK ((accrual_days >= (0)::numeric))CHECK ((carry_over_max >= (0)::numeric))CHECK ((code ~ '^[a-z][a-z0-9_]{0,39}$'::text))CHECK ((length(TRIM(BOTH FROM label)) > 0))CHECK (((max_balance IS NULL) OR (max_balance > (0)::numeric)))
ServiceAvailableDay
Tablo service_available_day · Kaynak service_available_days
GET /api/v1/service_available_daysGET /api/v1/service_available_days/{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 | ||
item_id | string (uuid) · uuid | item | ||
day_of_week | integer · int2 |
Birincil anahtar: id
Tekil: item_id, day_of_week
Denetimler:
CHECK (((day_of_week >= 0) AND (day_of_week <= 6)))
ServiceProvider
Tablo service_provider · Kaynak service_providers
GET /api/v1/service_providersGET /api/v1/service_providers/{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 | ||
item_id | string (uuid) · uuid | item | ||
user_id | string (uuid) · uuid | app_user |
Birincil anahtar: id
Tekil: item_id, user_id
WorkingHourOverride
Tablo working_hour_override · Kaynak working_hour_overrides
GET /api/v1/working_hour_overridesGET /api/v1/working_hour_overrides/{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 | ||
user_id | string (uuid) · uuid | evet | app_user | |
override_date | string (date) · date | |||
title | string · text | |||
is_working_day | boolean · bool | |||
starts_at | string (time) · time | evet | ||
ends_at | string (time) · time | evet | ||
created_at | string (date-time) · timestamptz |
Birincil anahtar: id
Denetimler:
CHECK (((is_working_day AND (starts_at IS NOT NULL) AND (ends_at IS NOT NULL) AND (ends_at > starts_at)) OR (NOT is_working_day)))CHECK ((override_date IS NOT NULL))
WorkingHour
Tablo working_hour · Kaynak working_hours
GET /api/v1/working_hoursGET /api/v1/working_hours/{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 | ||
user_id | string (uuid) · uuid | evet | app_user | |
weekday | integer · int2 | |||
is_working_day | boolean · bool | |||
starts_at | string (time) · time | evet | ||
ends_at | string (time) · time | evet |
Birincil anahtar: id
Tekil: workspace_id, user_id, weekday, starts_at
Denetimler:
CHECK (((is_working_day AND (starts_at IS NOT NULL) AND (ends_at IS NOT NULL) AND (ends_at > starts_at)) OR (NOT is_working_day)))CHECK (((weekday >= 0) AND (weekday <= 6)))
Olaylar
İş akışları ve webhook'lar bu olaylara tepki verir.
| Olay | Ne olur | Taşıdığı alanlar |
|---|---|---|
availability.allowance_adjusted | Birinin izin bakiyesi elle düzeltildi. | id, userId, leaveType, year, adjustment, recipientUserId |
availability.hours_changed | Çalışma saatleri değiştirildi. | weekday |
availability.item_days_changed | Bir katalog kaydının verildiği hafta günleri değişti. | id, days |
availability.item_providers_changed | Bir katalog kaydını kimlerin verebileceği değişti. | id, userIds |
availability.leave_approved | İzin onaylandı ve artık randevuları engelliyor. | id, userId, clashes, recipientUserId |
availability.leave_cancelled | İzin geri çekildi. | id, userId, recipientUserId |
availability.leave_carried_over | Bir izin yılı kapatıldı ve kullanılmayan günler devredildi. | year, balances, moved |
availability.leave_rejected | Bir izin isteği reddedildi. | id, userId, note, recipientUserId |
availability.leave_requested | Biri izin istedi. Yöneticisine yönlendirilir. | id, userId, leaveType, startDate, endDate, days, recipientUserId |
availability.leave_type_saved | Bir izin türü ya da politikası değişti. | id, code |
availability.override_cleared | Bir tarih haftalık saatlere döndü. | id, overrideDate |
availability.override_set | Bir tarih için özel çalışma saatleri tanımlandı. | id, overrideDate, isWorkingDay |