Genel API referansı

Workify360 Focus genel API'si kendi betiklerinizin ve araçlarınızın raporları ve zaman verilerini okumasını ve panelle aynı kurallarla değişiklik yapmasını sağlar. Genel API, API anahtarları ve webhook'lar Premium paketin parçasıdır.

Bu sayfadaki işlemler geriye uyumlu tutulur. Aynı işlemlerin makinece okunabilir OpenAPI belgesi:

https://api.focus.workify360.com/v1/openapi/public.json

API sözleşmesinin 0.1.0 sürümünden (c95fb97bb49a) üretildi.

Kimlik doğrulama

Her istekte Authorization başlığında kişisel bir API anahtarı gönderin. Anahtar onu oluşturan kişiye aittir, o kişi olarak çalışır ve kişinin güncel rolünün izin verdiğinden fazlasını asla yapmaz. Anahtarı eksik, yanlış, süresi dolmuş ya da iptal edilmiş istek unauthorized koduyla 401 alır.

curl https://api.focus.workify360.com/v1/me \
  -H "Authorization: Bearer w360_pat_…"

Anahtar oluşturma, kapsam seçme ve iptal etme: API anahtarları ve genel API

Kapsamlar

Her işlem yanında gösterilen tek bir kapsam ister. Anahtar bu kapsamı taşıyorsa ve sahibinin güncel rolü, takımları ve paketi isteğe, panelde olduğu gibi, izin veriyorsa işleme erişir.

KapsamNeye izin verir
meKendi profiliniz ve zamanlayıcınız
reports:readRaporları, zaman kayıtlarını, devamsızlıkları, vardiyaları, takımları, projeleri, görevleri ve dışa aktarmaları okuma
time:writeZaman kayıtları, devamsızlıklar, vardiyalar, görevler ve görevlere atanan süre eklemek ve değiştirmek, talepleri karara bağlamak
org:adminÜyeleri, takımları, davetleri ve projeleri yönetmek
webhooks:manageWebhook uçlarını yönetmek

İstek sınırları

Her anahtar dakikada 600, bir organizasyon bütün anahtarlarıyla birlikte dakikada 1.800 birim gönderebilir. Bir şeyi değiştiren istek (GET ve HEAD dışındaki her şey) iki birim, diğer her istek bir birim sayılır. Bir anahtar ayrıca bir seferde en çok 60 birim gönderebilir; bu hak saniyede 10 birim dolar: art arda 60'tan fazla okuma (ya da 30'dan fazla değişiklik) dakikada 600'ün altında kalsa da 429 alır.

BaşlıkAnlamı
RateLimit: "key";r=598;t=2Sayılan her yanıtta: anahtarın kalan hakkı ve hakkın yeniden dolmasına kalan saniye
RateLimit-Policy: "key";q=600;w=60, "tenant";q=1800;w=60Sayılan her yanıtta: anahtarın ve organizasyonun dakikalık sınırları
Retry-After: 12429 ile (rate_limited kodu): sonraki istekten önce beklenecek saniye

Hatalar

Hata bir RFC 9457 sorun belgesidir (Content-Type: application/problem+json). code, programınızda kullanacağınız kalıcı, snake_case bir koddur; title kayıtlar için İngilizce bir metindir. type kodun yardım adresidir: her _ yerine - yazılmış https://workify360.com/help/errors/<kod>/ adresi, kodun bir yardım makalesi varsa onu açar.

HTTP/1.1 403 Forbidden
Content-Type: application/problem+json

{
  "type": "https://workify360.com/help/errors/forbidden/",
  "title": "Forbidden",
  "status": 403,
  "code": "forbidden",
  "action": "webhooks.manage",
  "traceId": "4bf92f3577b34da6a3ce929d0e0e4736"
}

Bazı sorunlar başka alanlar da taşır: errors (422 validation_failed için alan hataları), action (403 forbidden yanıtının ilgili olduğu izin), requiredPlan (402 feature_not_in_plan), retryAfterSeconds (429 ve 503) ve traceId (destekle iletişime geçerken bunu belirtin).

DurumKodNe zaman
400 invalid_request Bir parametre bozuk ya da eksik
401 unauthorized Anahtar eksik, yanlış, süresi dolmuş ya da iptal edilmiş veya sahibi organizasyondan ayrılmış
402 feature_not_in_plan, subscription_read_only Paket bu özelliği içermiyor ya da abonelik salt okunur
403 forbidden, feature_not_enabled Anahtarda kapsam yok ya da sahibinin güncel rolü, takımları veya ayarlar isteğe izin vermiyor
412 version_conflict If-Match sürümü artık güncel değil; kaynağı yeniden okuyun
422 validation_failed Gövde geçersiz; errors alanları listeler
428 precondition_required İşlem, okuduğunuz sürümle bir If-Match başlığı ister
429 rate_limited Çok fazla istek; Retry-After başlığındaki saniye kadar bekleyin

Yardım makalesi olan kodlar işlem listesinde bağlantıdır.

Webhook'lar

API'ye tekrar tekrar sormak yerine, bir şey değiştiğinde sizin bir ucunuz imzalı bir HTTPS isteği alabilir. Olaylar, istek biçimi, imzanın Node.js ve Python ile doğrulanması, yeniden denemeler ve sırrın yenilenmesi yardım makalesinde anlatılır: Webhook'lar

İşlemler

Alanlara göre gruplanmıştır. İşlem özetleri ve alan açıklamaları API sözleşmesinden İngilizce gelir.

Devamsızlıklar

GET /v1/absences Kapsam: reports:read

List absences overlapping a range.

Parametreler
AdYerTürAçıklama
from sorgu string (date)
to sorgu string (date) At most 366 days after from.
userId sorgu string (uuid)
teamId sorgu string (uuid)
status sorgu string
typeId sorgu string (uuid)
cursor sorgu string
limit sorgu integer (int32)
Yanıtlar
200 AbsencePage
Hatalar

POST /v1/absences Kapsam: time:write

Request (or record) an absence.

Parametreler
AdYerTürAçıklama
Idempotency-Keyzorunlu başlık string Required: the same key and body return the first answer
İstek gövdesi
AbsenceRequest
Yanıtlar
201 AbsenceDto
Hatalar

POST /v1/absences/{id}/decision Kapsam: time:write

Approve or reject an absence (the G1 endpoint of the calendar).

Parametreler
AdYerTürAçıklama
idzorunlu yol string (uuid) Id
If-Matchzorunlu başlık string ETag of the resource ("v<n>"); missing: 428, stale: 412
İstek gövdesi
CalendarDecisionRequest
Yanıtlar
200 AbsenceDto
Hatalar

Etkinlik

GET /v1/activity/day Kapsam: reports:read

One user's local day (My Focus, the timeline): totals, productivity, attendance, day plan, slots, apps, time entries.

Parametreler
AdYerTürAçıklama
date sorgu string (date) The user's local day (required).
userId sorgu string (uuid) Default: the caller; another user must be visible (else 403).
Yanıtlar
200 ActivityDayDto
Hatalar

Süre atamaları

GET /v1/allocations Kapsam: reports:read

A person's allocations of a range of local days (the caller's, the people they manage, and the time on the projects they manage).

Parametreler
AdYerTürAçıklama
userId sorgu string (uuid) Default: the caller.
from sorgu string (date) Local date, included.
to sorgu string (date) Local date, included; at most 93 days after from.
projectId sorgu string (uuid)
cursor sorgu string
limit sorgu integer (int32) 1–200 (default 200).
Yanıtlar
200 AllocationPage
Hatalar

POST /v1/allocations Kapsam: time:write

Put time on a project: entered (manual) or tracked time assigned afterwards (assignment); for another person with allocations.write.

Parametreler
AdYerTürAçıklama
Idempotency-Key başlık string | null The same key and body return the first answer (a different body: 422 idempotency_key_reused)
İstek gövdesi
AllocationCreateRequest
Yanıtlar
201 AllocationCreatedDto
Hatalar

Dışa aktarmalar

POST /v1/exports Kapsam: reports:read

Request an export: the file is produced by a worker job with the requester's current role.

Parametreler
AdYerTürAçıklama
Idempotency-Keyzorunlu başlık string Required: the same key and body return the first answer
İstek gövdesi
CreateExportRequest
Yanıtlar
202 ExportJobDto
Hatalar

GET /v1/exports/{id} Kapsam: reports:read

One export job (poll every 2 s).

Parametreler
AdYerTürAçıklama
idzorunlu yol string (uuid) Id
Yanıtlar
200 ExportJobDto
Hatalar

Ben

GET /v1/me Kapsam: me

The signed-in person, their membership, organization, rights and session.

Yanıtlar
200 MeDto
Hatalar

Üyeler

GET /v1/members Kapsam: org:admin

List members.

Parametreler
AdYerTürAçıklama
status sorgu string Comma-separated statuses (default active,invited,suspended)
teamId sorgu string (uuid) Primary team
role sorgu string owner, admin, team_admin, manager or employee
q sorgu string Part of the name or e-mail (Turkish case folding)
cursor sorgu string Opaque cursor of the next page
limit sorgu integer (int32) 1–200, default 50
Yanıtlar
200 MemberPage
Hatalar
  • 403 No right

GET /v1/members/{id} Kapsam: org:admin

One member.

Parametreler
AdYerTürAçıklama
idzorunlu yol string (uuid) Membership id
Yanıtlar
200 MemberDto
Hatalar
  • 404 member_not_found

PATCH /v1/members/{id} Kapsam: org:admin

Change a member's role, team, viewer teams, zone or tracking.

Parametreler
AdYerTürAçıklama
idzorunlu yol string (uuid) Membership id
If-Matchzorunlu başlık string ETag of the member ("v<n>")
İstek gövdesi
PatchMember
Yanıtlar
200 MemberDto
Hatalar

POST /v1/members/{id}/reactivate Kapsam: org:admin

Reactivate a suspended member.

Parametreler
AdYerTürAçıklama
idzorunlu yol string (uuid) Membership id
Yanıtlar
200 MemberDto

POST /v1/members/{id}/suspend Kapsam: org:admin

Suspend a member: the membership is suspended and every session of it in this organization ends.

Parametreler
AdYerTürAçıklama
idzorunlu yol string (uuid) Membership id
Yanıtlar
200 MemberDto
Hatalar
  • 409 conflict (an invitation is revoked instead)

Projeler

GET /v1/projects Kapsam: reports:read

The projects the caller sees (Owners and Admins: all; others: open ones, their teams and, read only, the projects of the people they manage).

Parametreler
AdYerTürAçıklama
status sorgu string active, on_hold or completed.
clientId sorgu string (uuid)
q sorgu string Name or code search (case-insensitive).
includeArchived sorgu boolean
mine sorgu boolean Only the projects the caller may track time on.
cursor sorgu string
limit sorgu integer (int32) 1–200 (default 50).
Yanıtlar
200 ProjectPage
Hatalar

PUT /v1/projects/{id} Kapsam: org:admin

Change a project (Owners and Admins; the whole body).

Parametreler
AdYerTürAçıklama
idzorunlu yol string (uuid) Project id
If-Matchzorunlu başlık string The ETag the caller read (412 version_conflict when it changed)
İstek gövdesi
ProjectRequest
Yanıtlar
200 ProjectDto
Hatalar

Raporlar

GET /v1/reports/productivity Kapsam: reports:read

Productivity by day, week, month or range for the company, a team or a user.

Parametreler
AdYerTürAçıklama
from sorgu string (date)
to sorgu string (date) day 93 days, week, month and range 366.
groupBy sorgu string day, week, month or range.
teamId sorgu string (uuid)
userId sorgu string (uuid)
Yanıtlar
200 PeriodReportDto
Hatalar

GET /v1/reports/projects Kapsam: reports:read

Allocated time, billable time and the rate-layered amounts (Owners and Admins) of projects in a range, grouped by one or two of project, task, user, client and day, with the projects' budget use.

Parametreler
AdYerTürAçıklama
from sorgu string (date) Local date, included.
to sorgu string (date) Local date, included; at most 366 days after from.
groupBy sorgu string One or two of project (default), task, user, client, day, comma separated.
projectIds sorgu string Comma-separated project ids.
clientId sorgu string (uuid)
userIds sorgu string Comma-separated user ids (visible people only).
teamId sorgu string (uuid)
billable sorgu string all (default), billable or nonBillable.
includeProductive sorgu boolean Also compute the productive time within the allocations (costly; default false).
Yanıtlar
200 ProjectReportDto
Hatalar

GET /v1/reports/summary Kapsam: reports:read

The summary of the visible users over a range.

Parametreler
AdYerTürAçıklama
from sorgu string (date)
to sorgu string (date) At most 93 days after from.
teamId sorgu string (uuid) Only the team's current members; the team must be visible (else 403).
Yanıtlar
200 SummaryDto
Hatalar

GET /v1/reports/targets Kapsam: reports:read

The apps, domains or hosts of the visible users over a range (Apps & URLs).

Parametreler
AdYerTürAçıklama
from sorgu string (date)
to sorgu string (date)
type sorgu string app, domain or host.
teamId sorgu string (uuid)
userId sorgu string (uuid)
q sorgu string Search in the key and the name (.NET search).
level sorgu string productive, unproductive or neutral.
categoryKey sorgu string
unclassified sorgu boolean Only targets without a category.
cursor sorgu string
limit sorgu integer (int32) 1–200, default 50.
Yanıtlar
200 TargetListDto
Hatalar

GET /v1/reports/users/{userId}/daily Kapsam: reports:read

A user's days of a range (computed days and the workdays without activity).

Parametreler
AdYerTürAçıklama
userIdzorunlu yol string (uuid) User
from sorgu string (date)
to sorgu string (date) At most 93 days after from.
Yanıtlar
200 UserDailyDto
Hatalar

Vardiyalar

GET /v1/shifts Kapsam: reports:read

List the shifts starting in a range.

Parametreler
AdYerTürAçıklama
from sorgu string (date)
to sorgu string (date)
teamId sorgu string (uuid)
userId sorgu string (uuid)
includeOpen sorgu boolean Also open shifts (default true).
Yanıtlar
200 ShiftListDto
Hatalar

POST /v1/shifts Kapsam: time:write

Create a shift (assigned or open).

Parametreler
AdYerTürAçıklama
Idempotency-Keyzorunlu başlık string Required: the same key and body return the first answer
İstek gövdesi
ShiftBody
Yanıtlar
201 ShiftDto
Hatalar

Görevler

GET /v1/projects/{id}/tasks Kapsam: reports:read

A visible project's tasks, by sort order.

Parametreler
AdYerTürAçıklama
idzorunlu yol string (uuid) Project id
status sorgu string open, in_progress or done.
assigneeUserId sorgu string (uuid)
includeArchived sorgu boolean
cursor sorgu string
limit sorgu integer (int32) 1–500 (default 200).
Yanıtlar
200 TaskPage
Hatalar

POST /v1/projects/{id}/tasks Kapsam: time:write

Add a task (an Admin or the project's manager).

Parametreler
AdYerTürAçıklama
idzorunlu yol string (uuid) Project id
Idempotency-Key başlık string | null The same key and body return the first answer (a different body: 422 idempotency_key_reused)
İstek gövdesi
TaskRequest
Yanıtlar
201 TaskDto
Hatalar

PUT /v1/tasks/{id} Kapsam: time:write

Change a task (the whole body).

Parametreler
AdYerTürAçıklama
idzorunlu yol string (uuid) Task id
If-Matchzorunlu başlık string The ETag the caller read (412 version_conflict when it changed)
İstek gövdesi
TaskRequest
Yanıtlar
200 TaskDto
Hatalar

Takımlar

GET /v1/teams Kapsam: reports:read

List teams.

Parametreler
AdYerTürAçıklama
includeArchived sorgu boolean Also archived teams (default false)
cursor sorgu string Opaque cursor of the next page
limit sorgu integer (int32) 1–200, default 50
Yanıtlar
200 TeamPage

POST /v1/teams Kapsam: org:admin

Create a team (the G1 endpoint).

İstek gövdesi
CreateTeam
Yanıtlar
201 TeamDto
Hatalar
  • 403 forbidden (action teams.create)
  • 409 team_name_taken

PATCH /v1/teams/{id} Kapsam: org:admin

Rename a team or change its description.

Parametreler
AdYerTürAçıklama
idzorunlu yol string (uuid) Team id
If-Matchzorunlu başlık string ETag of the team
İstek gövdesi
PatchTeam
Yanıtlar
200 TeamDto
Hatalar
  • 409 team_name_taken

Zaman kayıtları

GET /v1/time-entries Kapsam: reports:read

List a user's time entries of a range (by start).

Parametreler
AdYerTürAçıklama
userId sorgu string (uuid) Default: the caller.
from sorgu string (date) The entry's local day, required.
to sorgu string (date) At most 93 days after from.
kind sorgu string offline or deletion.
status sorgu string pending, approved or rejected.
cursor sorgu string
limit sorgu integer (int32) 1–500.
Yanıtlar
200 TimeEntryPage
Hatalar

POST /v1/time-entries Kapsam: time:write

Add offline time or a deletion (for oneself, or for a user one manages: TimeEntryPolicy in the handler).

Parametreler
AdYerTürAçıklama
Idempotency-Keyzorunlu başlık string Required: the same key and body return the first answer
İstek gövdesi
CreateTimeEntryRequest
Yanıtlar
201 TimeEntryDto
Hatalar

GET /v1/time-entries/{id} Kapsam: reports:read

One time entry (invisible, missing and other tenants' entries are all 404).

Parametreler
AdYerTürAçıklama
idzorunlu yol string (uuid) Entry id
Yanıtlar
200 TimeEntryDto
Hatalar

PUT /v1/time-entries/{id} Kapsam: time:write

Replace an entry's editable fields.

Parametreler
AdYerTürAçıklama
idzorunlu yol string (uuid) Entry id
If-Matchzorunlu başlık string ETag of the resource ("v<n>"); missing: 428, stale: 412
İstek gövdesi
UpdateTimeEntryRequest
Yanıtlar
200 TimeEntryDto
Hatalar

POST /v1/time-entries/{id}/decision Kapsam: time:write

Approve or reject a pending offline entry (the G1 endpoint of the time module).

Parametreler
AdYerTürAçıklama
idzorunlu yol string (uuid) Entry id
If-Matchzorunlu başlık string ETag of the resource ("v<n>"); missing: 428, stale: 412
İstek gövdesi
TimeEntryDecisionRequest
Yanıtlar
200 TimeEntryDto
Hatalar

Zamanlayıcı

GET /v1/me/timer Kapsam: me

The caller's timer (a segment due after 24 hours is stopped first).

Parametreler
AdYerTürAçıklama
If-None-Match başlık string | null The ETag the caller holds (304 when unchanged)
Yanıtlar
200 TimerDto · 304 (gövde yok)
Hatalar

POST /v1/me/timer/start Kapsam: me

Start the timer, or switch the running one to another project or task, at at (the client's clock).

Parametreler
AdYerTürAçıklama
Idempotency-Key başlık string | null The client's command id; a retry returns the first answer
İstek gövdesi
TimerStartRequest
Yanıtlar
200 TimerCommandResultDto
Hatalar

Webhook'lar

PATCH /v1/webhook-endpoints/{id} Kapsam: webhooks:manage

Change an endpoint: URL, description, events, pause or resume (active also opens a disabled endpoint), take it over.

Parametreler
AdYerTürAçıklama
idzorunlu yol string (uuid) The endpoint
If-Matchzorunlu başlık string The endpoint's ETag ("v<n>")
İstek gövdesi
UpdateWebhookEndpointRequest
Yanıtlar
200 WebhookEndpointDto
Hatalar

DELETE /v1/webhook-endpoints/{id} Kapsam: webhooks:manage

Delete an endpoint and its deliveries.

Parametreler
AdYerTürAçıklama
idzorunlu yol string (uuid) The endpoint
Yanıtlar
204 (gövde yok)
Hatalar

GET /v1/webhook-endpoints/{id}/deliveries Kapsam: webhooks:manage

The deliveries of an endpoint, newest first.

Parametreler
AdYerTürAçıklama
idzorunlu yol string (uuid) The endpoint
status sorgu string pending, succeeded, failed, dead.
eventType sorgu string
cursor sorgu string Opaque cursor of the next page.
limit sorgu integer (int32) 1–200, default 50.
Yanıtlar
200 WebhookDeliveryPage
Hatalar

Şemalar

İşlemlerin kullandığı istek ve yanıt gövdeleri. Zorunlu alanlar işaretlidir.

AbsenceDto

An absence.

AlanTürAçıklama
createdAtzorunlu string (date-time)
createdByzorunlu CalendarUserRefDto
dayszorunlu number (double) Σ deductionByYear; for types that do not deduct, the planned workdays (information only).
decidedAt string (date-time) | null
decidedBy CalendarUserRefDto | null
decisionNote string | null
deductionByYearzorunlu object The balance deduction per year, e.g. {"2026": 3.5}; empty for types that do not deduct.
endzorunlu string (date-time)
endDatezorunlu string (date)
endTime string | null
half string | null
idzorunlu string (uuid)
note string | null
permissionszorunlu AbsencePermissionsDto
startzorunlu string (date-time) UTC coverage start.
startDatezorunlu string (date)
startTime string | null
statuszorunlu string
timeZonezorunlu string
typezorunlu AbsenceTypeRefDto
unitzorunlu string
updatedAtzorunlu string (date-time)
userzorunlu CalendarPersonDto
userIdzorunlu string (uuid)

AbsencePage

GET /v1/absences.

AlanTürAçıklama
itemszorunlu AbsenceDto[]
nextCursor string | null

AbsencePermissionsDto

AlanTürAçıklama
canApprovezorunlu boolean
canCancelzorunlu boolean
canEditzorunlu boolean

AbsenceRequest

POST /v1/absences, PUT /v1/absences/{id} (the user never changes).

AlanTürAçıklama
endDate string (date) | null
endTime string | null
half string | null am or pm for a half day.
note string | null
startDate string (date) | null
startTime string | null Local HH:mm for hours.
typeId string (uuid) | null
unit string | null days, half_day or hours.
userId string (uuid) | null null = the caller.

AbsenceTypeRefDto

The absence's type as the absence shows it; name translated for a built-in type that was not renamed.

AlanTürAçıklama
colorzorunlu string
countsAsWorkedzorunlu boolean
deductsFromBalancezorunlu boolean
idzorunlu string (uuid)
key string | null
namezorunlu string
paidzorunlu boolean
timeEffectzorunlu string

AcceptedDto

202 Accepted of a queued job.

AlanTürAçıklama
acceptedzorunlu boolean Always true.

AccessDto

What the person may see and manage (FAZ1 AccessDto; focus_contracts::access::policy).

AlanTürAçıklama
assignableRoleszorunlu string[]
canManageCompanySettingszorunlu boolean
canManageTeamszorunlu boolean
canManageUserszorunlu boolean
manageTeamIdszorunlu string[]
scopezorunlu string company, teams or self.
unassignedFallbackzorunlu boolean
viewTeamIdszorunlu string[]

ActivityDayDto

One user's local day. A day without activity is a 200 with zero totals, null arrival/leave and empty lists.

AlanTürAçıklama
absenceCreditMszorunlu integer (int64) A worked absence tops the worked time up to the expected work.
activeMszorunlu integer (int64) Window time ∩ not AFK (computer time only).
afkCoveragezorunlu boolean False when no device reported AFK data (idle unknown).
appszorunlu AppUsageDto[] Daily totals, largest first.
arrivalAt string (date-time) | null
atWorkMszorunlu integer (int64)
attendance DayAttendanceDto | null
categorieszorunlu CategoryUsageDto[] Active time per category (null key = uncategorized); offline time is in no category.
classifiedzorunlu boolean False for a day written before the Phase 2 classification (all neutral).
datezorunlu string (date)
dayEndzorunlu string (date-time)
dayStartzorunlu string (date-time) The day's window: local midnight, or the end of the previous day's night shift window.
deletedMszorunlu integer (int64) Tracked time removed by approved deletions (part of idle).
domainszorunlu DomainUsageDto[]
hostszorunlu HostUsageDto[] Hosts with a URL, at most 50, largest first.
idleMszorunlu integer (int64)
leftAt string (date-time) | null
meetingMszorunlu integer (int64) Active time the meeting apps exception turned from idle into active.
offlineMszorunlu integer (int64) Approved offline time outside the tracked active time.
pendingOfflineMszorunlu integer (int64) Pending offline entries of the day (information only).
plan DayPlanDto | null
privateIntervalszorunlu TimeIntervalDto[] Private intervals of the day, merged and clipped, without detail.
privateMszorunlu integer (int64) Private time outside active and offline time.
productivityzorunlu DayProductivityDto
recomputingzorunlu boolean The day waits in the recompute queue (the UI refetches every 15 s).
slotszorunlu ActivitySlotDto[] One entry per 5-minute UTC slot with activity, by time.
teamId string (uuid) | null The user's current primary team (its rules classify the day).
timeEntrieszorunlu TimeEntryDto[] Offline and deletion entries of every status overlapping the day's window, by start; the caller's permissions.
timeZonezorunlu string The zone the day was computed in; the UI draws slots at their wall-clock time in it.
userIdzorunlu string (uuid)
workedMszorunlu integer (int64) activeMs + offlineMs: the denominator of productivity.productivityPct.

ActivitySlotDto

Time in one 5-minute slot; activeMs includes approved offline time (offlineMs).

AlanTürAçıklama
activeMszorunlu integer (int64)
appszorunlu AppUsageDto[]
neutralMszorunlu integer (int64)
offlineMszorunlu integer (int64)
productiveMszorunlu integer (int64)
slotStartzorunlu string (date-time)
unproductiveMszorunlu integer (int64)

AffectedAllocationDto

An allocation replace changed.

AlanTürAçıklama
changezorunlu string trimmed, split or deleted.
idzorunlu string (uuid)

AllocationCreateRequest

POST /v1/allocations (Idempotency-Key).

AlanTürAçıklama
endedAt string (date-time) | null At most 24 hours after startedAt, at most 5 minutes in the future.
isBillable boolean | null
note string | null
projectId string (uuid) | null
replace boolean | null Trim, split or delete the person's (unbilled) allocations it overlaps; otherwise an overlap is 409 allocation_overlaps.
source string | null manual or assignment (timer only through the timer).
startedAt string (date-time) | null
taskId string (uuid) | null
userId string (uuid) | null null = the caller; another person needs allocations.write and to be managed by the caller.

AllocationCreatedDto

POST /v1/allocations → 201.

AlanTürAçıklama
affectedzorunlu AffectedAllocationDto[]
allocationzorunlu AllocationDto

AllocationDto

Time on a project.

AlanTürAçıklama
createdAtzorunlu string (date-time)
createdByzorunlu NamedRefDto
durationMszorunlu integer (int64)
effectiveBillablezorunlu boolean
endedAtzorunlu string (date-time)
idzorunlu string (uuid)
invoiceId string (uuid) | null Set once the time is on an invoice.
isBillable boolean | null null takes the task's, then the project's value.
localDatezorunlu string (date) The start's day in the person's zone (rates, reports).
note string | null
permissionszorunlu AllocationPermissionsDto
projectzorunlu ProjectRefDto
sourcezorunlu string timer, manual or assignment.
startedAtzorunlu string (date-time)
task NamedRefDto | null
timeZonezorunlu string
updatedAtzorunlu string (date-time)
userIdzorunlu string (uuid)
versionzorunlu integer (int64) The row version: If-Match: "v<version>" of a change (the same value as the resource's ETag).

AllocationPage

GET /v1/allocations.

AlanTürAçıklama
itemszorunlu AllocationDto[]
nextCursor string | null

AllocationPermissionsDto

What the caller may do with an allocation (a billed one is locked).

AlanTürAçıklama
deletezorunlu boolean
editzorunlu boolean

AppTotalDto

AlanTürAçıklama
activeMszorunlu integer (int64)
appKeyzorunlu string
categoryKey string | null
level string | null Level in the response's levelContext.
namezorunlu string
percentagezorunlu number (double) Share of the range's worked time (0–100, one decimal).

AppUsageDto

An app's time; offline rows use the reserved keys _offline_<level> with name: "Offline time" and levelSource: "offline".

AlanTürAçıklama
activeMszorunlu integer (int64)
appKeyzorunlu string
categoryKey string | null
level string | null The app's own rule (productive, unproductive, neutral).
levelSource string | null team, company, default or offline.
namezorunlu string

BudgetDto

A project's budget: hours (minutes) or an amount in the project's currency (amountMinor).

AlanTürAçıklama
amountMinor integer (int64) | null
kind string | null hours or amount.
minutes integer (int64) | null

BudgetRequest

The budget of a project request (kind hours with minutes, or amount with amountMinor).

AlanTürAçıklama
amountMinor integer (int64) | null
kind string | null
minutes integer (int64) | null

CalendarDecisionRequest

{decision, note?} of the decision endpoints (approve or reject; the note at most 500 characters).

AlanTürAçıklama
decision string | null
note string | null

CalendarPersonDto

A user with the current team.

AlanTürAçıklama
fullName string | null
idzorunlu string (uuid)
teamId string (uuid) | null
teamName string | null

CalendarUserRefDto

A user reference (names from the directory; null when unknown).

AlanTürAçıklama
fullName string | null
idzorunlu string (uuid)

CapabilitiesDto

Subscription capabilities.

AlanTürAçıklama
featureszorunlu string[]
readOnlyzorunlu boolean

CategoryUsageDto

AlanTürAçıklama
activeMszorunlu integer (int64)
categoryKey string | null null = uncategorized.

CreateExportRequest

POST /v1/exports: definition is the full definition the dialog shows; without it the saved template (templateId) or the built-in one (templateKey) gives it.

AlanTürAçıklama
definition ExportDefinitionDto | null
from string (date) | null
locale string | null tr or en.
templateId string (uuid) | null
templateKey string | null
to string (date) | null

CreateInvitation

POST /v1/invitations.

AlanTürAçıklama
emailzorunlu string
fullNamezorunlu string
locale string | null Language of the e-mail and the acceptance page (tr, en); the organization's default otherwise.
rolezorunlu string admin, team_admin, manager or employee.
teamId string (uuid) | null
timeZone string | null
viewerTeamIds string (uuid)[]

CreateTeam

POST /v1/teams.

AlanTürAçıklama
description string | null At most 500 characters.
namezorunlu string 1–100 characters, unique among active teams (Turkish case folding).

CreateTimeEntryRequest

POST /v1/time-entries (the .NET CreateTimeEntryRequest).

AlanTürAçıklama
description string | null Offline: 1–500 characters; deletion: optional reason (at most 500).
end string (date-time) | null
kind string | null offline or deletion.
level string | null Offline only (default productive).
projectId string (uuid) | null Must be null (400 project_not_supported).
start string (date-time) | null
userId string (uuid) | null null = the caller; a manager may add time for a user it manages.

CreateWebhookEndpointRequest

POST /v1/webhook-endpoints.

AlanTürAçıklama
description string | null ≤ 200 characters.
eventTypeszorunlu string[] 1–50 catalog event types of the tenant's plan.
urlzorunlu string https://… (≤ 2048; no user info, no fragment; every resolved address public).

CreatedWebhookEndpointDto

CreatedWebhookEndpointDto: the endpoint and its signing secret, shown once.

AlanTürAçıklama
endpointzorunlu WebhookEndpointDto
secretzorunlu string whsec_<base64>: shown once, never again.

DailyHolidayDto

A holiday of a daily report day.

AlanTürAçıklama
half string | null
keyzorunlu string
namezorunlu string English name; nameTr is the Turkish one.
nameTrzorunlu string

DayAbsenceDto

The dominant absence of a day (/v1/reports/users/{userId}/daily days[].absence).

AlanTürAçıklama
colorzorunlu string
fractionzorunlu number (double) The day's approved absence coverage (0–1).
half string | null
typeKey string | null
typeName string | null
unitzorunlu string

DayAttendanceDto

Attendance of the day on the day plan.

AlanTürAçıklama
expectedEnd string (date-time) | null
expectedStart string (date-time) | null
flexiblezorunlu boolean
lateByMszorunlu integer (int64)
lateToleranceMinuteszorunlu integer (int32)
leftEarlyzorunlu boolean
leftEarlyByMszorunlu integer (int64)
statuszorunlu string onTime, late, absent, notStarted, dayOff, onLeave, holiday.
targetMszorunlu integer (int64) The plan's target (the Effectiveness % denominator).
workdayzorunlu boolean

DayPlanDto

The day plan of one user's day.

AlanTürAçıklama
absenceszorunlu PlanAbsenceDto[] Approved and pending absences covering the day (only approved ones change the numbers).
expectedEnd string (date-time) | null
expectedStart string (date-time) | null
expectedWorkMszorunlu integer (int64) Overtime target (base × (1 − fLeave)).
holiday HolidayRefDto | null
kindzorunlu string schedule, shift, dayOff or holiday.
leaveFractionzorunlu number (double) The approved absence coverage f (0–1).
shiftszorunlu PlanShiftDto[] Shifts starting on the day, by start.
targetMszorunlu integer (int64) Effectiveness % denominator (base × (1 − f)).
workdayzorunlu boolean

DayProductivityDto

A day's time by productivity level (productive + unproductive + neutral = workedMs).

AlanTürAçıklama
effectivenessPct number (double) | null productive ÷ target × 100 (not capped); null without a target.
neutralMszorunlu integer (int64)
productiveMszorunlu integer (int64)
productivityPct number (double) | null productive ÷ worked × 100, one decimal; null without worked time.
targetMszorunlu integer (int64)
unproductiveMszorunlu integer (int64)

DayTotalDto

One local day of a summary.

AlanTürAçıklama
activeMszorunlu integer (int64)
activeUserCountzorunlu integer (int32)
atWorkMszorunlu integer (int64)
datezorunlu string (date)
idleMszorunlu integer (int64)
neutralMszorunlu integer (int64)
offlineMszorunlu integer (int64)
privateMszorunlu integer (int64)
productiveMszorunlu integer (int64)
productivityPct number (double) | null
unproductiveMszorunlu integer (int64)

DomainTotalDto

AlanTürAçıklama
activeMszorunlu integer (int64)
categoryKey string | null
domainzorunlu string
level string | null
percentagezorunlu number (double)

DomainUsageDto

AlanTürAçıklama
activeMszorunlu integer (int64)
categoryKey string | null
domainzorunlu string
level string | null
levelSource string | null

EmailVerificationDto

Where the person stands with the e-mail verification (owner decision 3 Oct 2026, focus_auth::email_gate).

AlanTürAçıklama
dueAt string (date-time) | null The deadline of an unverified account (Identity__EmailVerificationGraceHours after its creation).
statezorunlu string verified, not_required (an account that never has to verify: invited, imported, SCIM, IdP-verified), pending (unverified, before dueAt) or overdue (after dueAt: every request but a few answers 403 email_verification_required).

ExportDefinitionDto

What an export contains (FAZ4 §6.1; focus_contracts::reports::export::ExportDefinition on the wire); a saved template stores it without the date range. Every field is optional so that the validator reports what is wrong (422 validation_failed with errors[{field, code}]).

AlanTürAçıklama
columns string[] | null Column keys of the dataset in file order (1–40; a PDF at most 12).
csvDialect string | null standard (default) or excel-tr (csv only).
dataset string | null
durationFormat string | null hms (default), hours or minutes.
filters ExportFiltersDto | null
format string | null xlsx, csv or pdf.
groupBy string | null day, week, month, range or none (the dataset decides).
options ExportOptionsDto | null

ExportFiltersDto

Who is exported: a team, some users, or (neither) everyone the requester can see.

AlanTürAçıklama
includeInactiveUsers boolean
teamId string | null
userIds string | null[] | null

ExportJobDto

An export job as the panel lists and polls it.

AlanTürAçıklama
createdAtzorunlu string (date-time)
datasetzorunlu string
errorCode string | null too_many_rows, too_many_rows_for_pdf, access_lost, feature_not_in_plan, canceled, internal_error.
expiresAt string (date-time) | null
fileName string | null
fileSize integer (int64) | null
finishedAt string (date-time) | null
formatzorunlu string
fromzorunlu string (date)
groupBy string | null
idzorunlu string (uuid)
localezorunlu string
progresszorunlu integer (int32) 0–100.
rowCount integer (int32) | null
startedAt string (date-time) | null
statuszorunlu string queued, running, succeeded, failed, canceled, expired.
templateId string (uuid) | null
templateKey string | null
templateName string | null The saved template's name, while it still exists.
tozorunlu string (date)

ExportOptionsDto

Dataset options; each applies to one dataset and is ignored by the others.

AlanTürAçıklama
include string | null titles: titles, urls or both (default).
includeCosts boolean | null projects (Faz 6): fill the rate, amount and currency columns (needs projects.costs.read, else 403).
includeOpen boolean | null shifts: also open shifts.
splitByUser boolean | null applications: one row per user and target.
statuses string | null[] | null offline_time / absence: status filter (default approved).
targetType string | null applications: app (default), domain or host.

FieldError

One field error of a 400/422 body.

AlanTürAçıklama
codezorunlu string Stable snake_case code (required, too_long, invalid, ...).
fieldzorunlu string JSON path of the field in camelCase (name, items[2].start), or the parameter/header name.
message string | null

HolidayRefDto

A holiday of a day (both names; name is the English one).

AlanTürAçıklama
half string | null
keyzorunlu string Built-in key (republic_day, …) or custom.
namezorunlu string
nameEnzorunlu string
nameTrzorunlu string
source string | null builtin or tenant.

HostUsageDto

AlanTürAçıklama
activeMszorunlu integer (int64)
domain string | null
hostzorunlu string
levelzorunlu string
levelSourcezorunlu string
matchedKey string | null Key of the matching domain rule; null for the default.

InvitationEmail

What happened to the invitation e-mail.

AlanTürAçıklama
acceptUrl string | null The acceptance link, only when no e-mail is sent (not_configured, suppressed_reserved) and only in the fresh answer (share it by hand).
statuszorunlu string queued; not_configured when no e-mail provider is set up; suppressed_reserved when the address is an RFC 2606 / RFC 6761 reserved name (example.com, *.test, …) that is never e-mailed. Clients treat suppressed_reserved like not_configured: nothing arrives, share acceptUrl by hand.

InvitationRef

{"id","expiresAt"} of a created or re-sent invitation.

AlanTürAçıklama
expiresAtzorunlu string
idzorunlu string (uuid)

InvitationResult

The answer of POST /v1/invitations and POST /v1/invitations/{id}/resend.

AlanTürAçıklama
emailzorunlu InvitationEmail
invitationzorunlu InvitationRef
memberzorunlu MemberDto

LevelContextDto

Which rules the single level of an aggregate list follows (FAZ2 §5 "Listelerde hangi kural").

AlanTürAçıklama
kindzorunlu string user (a userId filter: that user's current team), team (a teamId filter) or company.
teamId string (uuid) | null

MeDto

GET /v1/me.

AlanTürAçıklama
accesszorunlu AccessDto
capabilitieszorunlu CapabilitiesDto
effectiveTimeZonezorunlu string
membershipzorunlu MeMembership
organizationzorunlu MeOrganization
organizationszorunlu OrganizationChoice[]
session MeSession | null
userzorunlu MeUser

MeMembership

The membership in the current organization.

AlanTürAçıklama
idzorunlu string (uuid)
isTrackedzorunlu boolean
joinedAt string | null
rolezorunlu string
statuszorunlu string
teamId string (uuid) | null
teamName string | null
timeZone string | null
viewerTeamIdszorunlu string (uuid)[]

MeOrganization

The current organization.

AlanTürAçıklama
defaultLocalezorunlu string
idzorunlu string (uuid)
namezorunlu string
slugzorunlu string
statuszorunlu string
timeZonezorunlu string

MeSession

The current session.

AlanTürAçıklama
absoluteExpiresAtzorunlu string
amrzorunlu string[]
authTimezorunlu string
clientIdzorunlu string
idzorunlu string (uuid)
idleExpiresAtzorunlu string

MeUser

The person (GET /v1/me → user).

AlanTürAçıklama
emailzorunlu string
emailVerificationzorunlu EmailVerificationDto The e-mail verification gate (owner decision 3 Oct 2026).
emailVerifiedzorunlu boolean
fullName string | null
idzorunlu string (uuid)
localezorunlu string

MemberDto

A membership with its person (MemberDto).

AlanTürAçıklama
createdAtzorunlu string
emailzorunlu string
emailVerifiedzorunlu boolean
fullName string | null
idzorunlu string (uuid)
invitation MemberInvitationDto | null
isTrackedzorunlu boolean
joinedAt string | null
localezorunlu string
rolezorunlu string owner, admin, team_admin, manager, employee.
statuszorunlu string invited, active, suspended, left.
teamId string (uuid) | null
teamName string | null
timeZone string | null
unassignedManagerzorunlu boolean A Manager with neither a team nor viewer teams (sees the whole company until assigned).
userIdzorunlu string (uuid)
viewerTeamIdszorunlu string (uuid)[]

MemberInvitationDto

The invitation of an invited member.

AlanTürAçıklama
emailStatus string | null queued, sending, sent, failed, suppressed, not_configured, suppressed_reserved (an RFC 2606 / RFC 6761 reserved domain, never e-mailed), or null before the first e-mail.
expiresAtzorunlu string
idzorunlu string (uuid)
lastSentAtzorunlu string
sentCountzorunlu integer (int32)

MemberPage

A page of members (OpenAPI).

AlanTürAçıklama
itemszorunlu MemberDto[]
nextCursor string | null

MemberRefDto

A member as a reference (current row): the connecting Admin of a connection, the owner of a webhook endpoint.

AlanTürAçıklama
activezorunlu boolean The membership is active and (for an endpoint or a tenant connection) still an Owner or Admin.
name string | null
userIdzorunlu string (uuid)

NamedRefDto

A reference by id and display name (a client, a person, a task).

AlanTürAçıklama
idzorunlu string (uuid)
namezorunlu string

OrganizationChoice

One organization of the person (sec.user_memberships).

AlanTürAçıklama
currentzorunlu boolean
idzorunlu string (uuid)
namezorunlu string
rolezorunlu string
selectablezorunlu boolean Can this session's sign-in method open it (design §4.5.3)?

PatchMember

PATCH /v1/members/{id}.

AlanTürAçıklama
isTracked boolean | null
role string | null admin, team_admin, manager or employee (the Owner is only transferred).
teamId string (uuid) | null Primary team; null removes it.
timeZone string | null IANA zone of the membership; null follows the organization.
viewerTeamIds string (uuid)[] | null Extra read-only teams (Manager and TeamAdmin only).

PatchTeam

PATCH /v1/teams/{id}.

AlanTürAçıklama
description string | null
name string | null

PeriodReportDto

GET /v1/reports/productivity.

AlanTürAçıklama
fromzorunlu string (date)
groupByzorunlu string
levelContextzorunlu LevelContextDto
periodszorunlu ReportPeriodDto[]
subjectzorunlu ReportSubjectDto
teamszorunlu TeamPeriodsDto[] Only for the company subject: every visible team over its current members.
tozorunlu string (date)
totalszorunlu ReportFiguresDto

PlanAbsenceDto

AlanTürAçıklama
colorzorunlu string
countsAsWorkedzorunlu boolean timeEffect == worked.
endTime string | null
half string | null
idzorunlu string (uuid)
startTime string | null Local start and end of an hours absence.
statuszorunlu string approved or pending.
timeEffectzorunlu string leave, worked or none.
typeKey string | null
typeName string | null null for a built-in type that was not renamed (the UI translates typeKey).
unitzorunlu string days, half_day or hours.

PlanShiftDto

AlanTürAçıklama
color string | null
endzorunlu string (date-time)
endTimezorunlu string Local end; before the start for a night shift.
idzorunlu string (uuid)
locationzorunlu string
minMinuteszorunlu integer (int32)
startzorunlu string (date-time)
startTimezorunlu string Local start (HH:mm, the shift's zone).

Problem

RFC 9457 problem details (application/problem+json).

AlanTürAçıklama
action string | null Permission key of a 403 (teams.create).
codezorunlu string Stable snake_case error code (catalog error-codes.json).
detail string | null
errors FieldError[] | null
requiredPlan string | null Lowest plan that includes the feature (402 feature_not_in_plan).
retryAfterSeconds integer (int32) | null Seconds to wait (429, 503; also the Retry-After header).
statuszorunlu integer (int32)
titlezorunlu string English title of the code (clients translate code).
traceId string | null W3C trace id of the request.
typezorunlu string Help page of the error code: https://workify360.com/help/errors/<code>/.

ProjectAmountDto

The amounts of one currency (rates are applied per allocation day and layer).

AlanTürAçıklama
billableMinorzorunlu integer (int64) The billable hours at their rate.
costMinorzorunlu integer (int64) Every allocated hour at its rate.
currencyzorunlu string

ProjectBudgetUsageDto

The use of a project's budget, all time.

AlanTürAçıklama
budgetMinor integer (int64) | null null unless costsIncluded.
budgetMinutes integer (int64) | null
kindzorunlu string hours or amount.
projectIdzorunlu string (uuid)
usedMinor integer (int64) | null The cost in the project's currency; null unless costsIncluded.
usedMszorunlu integer (int64)
usedRatio string | null Used / budget, 4 decimals (null for an amount budget without costsIncluded).

ProjectDto

A project.

AlanTürAçıklama
accesszorunlu string everyone or members.
archivedzorunlu boolean
budget BudgetDto | null
client NamedRefDto | null
code string | null
color string | null
createdAtzorunlu string (date-time)
currencyzorunlu string The currency of the project's rates and amount budget.
description string | null
endDate string (date) | null
idzorunlu string (uuid)
isBillablezorunlu boolean
memberCountzorunlu integer (int64)
myRole string | null The caller's role in the project team (member, manager), null outside it.
namezorunlu string
permissionszorunlu ProjectPermissionsDto
spentMszorunlu integer (int64) Every allocation of the project, all time.
startDate string (date) | null
statuszorunlu string active, on_hold or completed.
taskCountzorunlu integer (int64)
updatedAtzorunlu string (date-time)

ProjectPage

GET /v1/projects.

AlanTürAçıklama
itemszorunlu ProjectDto[]
nextCursor string | null

ProjectPermissionsDto

What the caller may do with a project (decided from the current rows, §5.3).

AlanTürAçıklama
archivezorunlu boolean
deletezorunlu boolean Only a project without time.
editzorunlu boolean The project's fields (Owners and Admins).
manageMemberszorunlu boolean The team (an Admin or the project's manager; only an Admin changes managers).
manageTaskszorunlu boolean Tasks (an Admin or the project's manager).
trackzorunlu boolean The caller may track time on it now.

ProjectRefDto

A project reference of an allocation.

AlanTürAçıklama
color string | null #RRGGBB.
idzorunlu string (uuid)
namezorunlu string

ProjectReportDto

GET /v1/reports/projects.

AlanTürAçıklama
budgetszorunlu ProjectBudgetUsageDto[]
costsIncludedzorunlu boolean The caller sees rates and amounts (projects.costs.read).
fromzorunlu string (date)
groupByzorunlu string[]
rowszorunlu ProjectReportRowDto[]
tozorunlu string (date)
totalszorunlu ProjectReportTotalsDto

ProjectReportKeysDto

The dimensions of a row (the ones not grouped by are null).

AlanTürAçıklama
clientId string (uuid) | null
clientName string | null
date string (date) | null The allocation's local day (groupBy day).
projectId string (uuid) | null
projectName string | null
taskId string (uuid) | null
taskName string | null
userId string (uuid) | null
userName string | null

ProjectReportRowDto

One row of the project report.

AlanTürAçıklama
allocatedMszorunlu integer (int64)
amounts ProjectAmountDto[] | null null unless costsIncluded.
billableMszorunlu integer (int64)
keyszorunlu ProjectReportKeysDto
nonBillableMszorunlu integer (int64)
productiveMs integer (int64) | null With includeProductive only.
unratedMszorunlu integer (int64) Time without any rate (it is left out of the amounts).

ProjectReportTotalsDto

The totals of the report.

AlanTürAçıklama
allocatedMszorunlu integer (int64)
amounts ProjectAmountDto[] | null
billableMszorunlu integer (int64)
nonBillableMszorunlu integer (int64)
productiveMs integer (int64) | null
unratedMszorunlu integer (int64)

ProjectRequest

POST /v1/projects; PUT /v1/projects/{id} sends the whole body.

AlanTürAçıklama
access string | null everyone (default) or members.
budget BudgetRequest | null
clientId string (uuid) | null
code string | null [A-Za-z0-9._-]{1,32}, unique among active projects.
color string | null #RRGGBB.
currency string | null TRY, USD or EUR; locked once the project has rates or invoice lines (409 project_currency_locked).
description string | null
endDate string (date) | null
isBillable boolean | null Default true.
name string | null
startDate string (date) | null
status string | null active (default), on_hold or completed.

ReportFiguresDto

Figures of a group of users over a period (sums raw, percentages the users' average, counters user-days).

AlanTürAçıklama
absenceCreditMszorunlu integer (int64)
absentDayszorunlu integer (int32)
activeMszorunlu integer (int64)
activeUserCountzorunlu integer (int32)
effectivenessPct number (double) | null
idleMszorunlu integer (int64)
lateDayszorunlu integer (int32)
leaveDayszorunlu number (double)
leftEarlyDayszorunlu integer (int32)
neutralMszorunlu integer (int64)
offlineMszorunlu integer (int64)
overtimeDayszorunlu integer (int32)
overtimeMszorunlu integer (int64)
productiveMszorunlu integer (int64)
productivityPct number (double) | null
targetMszorunlu integer (int64)
unproductiveMszorunlu integer (int64)
userCountzorunlu integer (int32)
workedMszorunlu integer (int64)

ReportPeriodDto

One period of a grouped report: its key and bounds, then the figures.

ReportScopeDto

What the caller can see (FAZ1 AccessPolicy.ScopeOf).

AlanTürAçıklama
kindzorunlu string company, teams or self.
teamIdszorunlu string (uuid)[] The visible teams of a teams scope, sorted; empty otherwise (company = all).
unassignedFallbackzorunlu boolean A Manager without teams who sees the whole company until assigned.

ReportSubjectDto

Whom a report is about.

AlanTürAçıklama
id string (uuid) | null
kindzorunlu string company, team or user.
name string | null

RotatedWebhookSecretDto

RotatedWebhookSecretDto: the new signing secret, shown once.

AlanTürAçıklama
previousSecretExpiresAtzorunlu string Until then deliveries carry both signatures.
secretzorunlu string whsec_<base64>: shown once, never again.

ShiftBody

ShiftBody of POST /v1/shifts, the bulk items and PUT /v1/shifts/{id} (the whole body). Fields left null are filled from templateId.

AlanTürAçıklama
breakMinutes integer (int32) | null
color string | null
date string (date) | null
endTime string | null
location string | null
minMinutes integer (int32) | null null = the template's, else duration − break.
note string | null
startTime string | null
teamId string (uuid) | null Required for an open shift; ignored for an assigned one (the user's current team is written).
templateId string (uuid) | null
userId string (uuid) | null null = an open shift.

ShiftDto

A shift: local fields, UTC instants, the caller's permissions.

AlanTürAçıklama
breakMinuteszorunlu integer (int32)
color string | null
createdAtzorunlu string (date-time)
createdByzorunlu CalendarUserRefDto
crossesMidnightzorunlu boolean
datezorunlu string (date)
durationMinuteszorunlu integer (int32)
endzorunlu string (date-time)
endTimezorunlu string
idzorunlu string (uuid)
locationzorunlu string
minMinuteszorunlu integer (int32)
note string | null
openzorunlu boolean No user assigned.
permissionszorunlu ShiftPermissionsDto
sourcezorunlu string manual, template, copy or request.
startzorunlu string (date-time)
startTimezorunlu string
teamId string (uuid) | null Open shift: its team; assigned: the user's team when it was written.
teamName string | null
templateId string (uuid) | null
templateName string | null
timeZonezorunlu string
updatedAtzorunlu string (date-time)
user CalendarUserRefDto | null
userId string (uuid) | null null for an open shift.

ShiftListDto

GET /v1/shifts (the shifts **starting** in the range).

AlanTürAçıklama
itemszorunlu ShiftDto[]

ShiftPermissionsDto

AlanTürAçıklama
canDeletezorunlu boolean
canEditzorunlu boolean
canPickUpzorunlu boolean
canRequestSwapzorunlu boolean

SummaryDto

The summary of the visible users over a range.

AlanTürAçıklama
absenceCreditMszorunlu integer (int64)
absentDayszorunlu integer (int32)
activeMszorunlu integer (int64)
activeUserCountzorunlu integer (int32)
atWorkMszorunlu integer (int64)
dayszorunlu DayTotalDto[]
deletedMszorunlu integer (int64)
domainszorunlu DomainTotalDto[] Top 10.
effectivenessPct number (double) | null Average of the users' range Effectiveness % (inactive tracked users included).
fromzorunlu string (date)
holidayDayszorunlu number (double)
idleMszorunlu integer (int64)
inactiveUserszorunlu UserTotalDto[] Tracked users without activity in the range (zero totals, attendance fields), by user id.
lateDayszorunlu integer (int32)
leaveDayszorunlu number (double)
leftEarlyDayszorunlu integer (int32)
levelContextzorunlu LevelContextDto
meetingMszorunlu integer (int64)
neutralMszorunlu integer (int64)
offlineMszorunlu integer (int64)
overtimeMszorunlu integer (int64)
privateMszorunlu integer (int64)
productiveMszorunlu integer (int64)
productivityPct number (double) | null Average of the users' range Productivity %.
scopezorunlu ReportScopeDto
shiftDayszorunlu integer (int32)
teamszorunlu TeamTotalDto[] By current team: named teams by name, the teamId: null row last.
tozorunlu string (date)
topAppszorunlu AppTotalDto[] Top 10; name is "Offline time" for the reserved offline keys.
unproductiveMszorunlu integer (int64)
userszorunlu UserTotalDto[] One row per user with a computed day in the range, by activeMs.
workedMszorunlu integer (int64)

TargetItemDto

AlanTürAçıklama
activeMszorunlu integer (int64)
categoryKey string | null
categorySourcezorunlu string tenant, builtin or none.
domain string | null
levelzorunlu string
levelSourcezorunlu string team, company or default.
matchedKey string | null
namezorunlu string
percentagezorunlu number (double)
targetKeyzorunlu string
targetTypezorunlu string app for apps, domain for domains and hosts.
userCountzorunlu integer (int32)

TargetListDto

The "Apps & URLs" list.

AlanTürAçıklama
fromzorunlu string (date)
itemszorunlu TargetItemDto[] By active time descending, then key.
levelContextzorunlu LevelContextDto
nextCursor string | null
tozorunlu string (date)
totalzorunlu integer (int32) Targets matching the filters (before paging).
totalActiveMszorunlu integer (int64) Active time over every target of the type before the filters (the percentage base).
typezorunlu string app, domain or host.

TaskDto

A task.

AlanTürAçıklama
archivedzorunlu boolean
assignee NamedRefDto | null
createdAtzorunlu string (date-time)
description string | null
dueDate string (date) | null
effectiveBillablezorunlu boolean
estimateMinutes integer (int64) | null
idzorunlu string (uuid)
isBillable boolean | null null takes the project's value.
namezorunlu string
permissionszorunlu TaskPermissionsDto
projectIdzorunlu string (uuid)
sortOrderzorunlu integer (int64)
spentMszorunlu integer (int64)
statuszorunlu string open, in_progress or done.
updatedAtzorunlu string (date-time)

TaskPage

GET /v1/projects/{id}/tasks.

AlanTürAçıklama
itemszorunlu TaskDto[]
nextCursor string | null

TaskPermissionsDto

What the caller may do with a task.

AlanTürAçıklama
deletezorunlu boolean Only a task without time.
editzorunlu boolean

TaskRequest

POST /v1/projects/{id}/tasks; PUT /v1/tasks/{id} sends the whole body.

AlanTürAçıklama
assigneeUserId string (uuid) | null Must be able to track time on the project (422 project_not_trackable).
description string | null
dueDate string (date) | null
estimateMinutes integer (int64) | null 1–1 000 000.
isBillable boolean | null null takes the project's value.
name string | null
sortOrder integer (int64) | null
status string | null open (default), in_progress or done.

TeamDto

A team with its size and leads (TeamDto).

AlanTürAçıklama
archivedAt string | null
createdAtzorunlu string
description string | null
idzorunlu string (uuid)
leadszorunlu object[] TeamAdmins and Managers of the team: [{membershipId, userId, fullName, role}].
memberCountzorunlu integer (int64) Members whose primary team this is (left members excluded).
namezorunlu string
updatedAtzorunlu string

TeamPage

A page of teams (OpenAPI).

AlanTürAçıklama
itemszorunlu TeamDto[]
nextCursor string | null

TeamPeriodsDto

AlanTürAçıklama
periodszorunlu ReportPeriodDto[]
teamIdzorunlu string (uuid)
teamName string | null
totalszorunlu ReportFiguresDto

TeamTotalDto

One team row of a summary (current teams; percentages the members' average).

AlanTürAçıklama
absenceCreditMszorunlu integer (int64)
absentDayszorunlu integer (int32)
activeMszorunlu integer (int64)
activeUserCountzorunlu integer (int32)
effectivenessPct number (double) | null
holidayDayszorunlu number (double)
idleMszorunlu integer (int64)
lateDayszorunlu integer (int32)
leaveDayszorunlu number (double)
leftEarlyDayszorunlu integer (int32)
memberCountzorunlu integer (int32)
neutralMszorunlu integer (int64)
offlineMszorunlu integer (int64)
overtimeMszorunlu integer (int64)
productiveMszorunlu integer (int64)
productivityPct number (double) | null
shiftDayszorunlu integer (int32)
teamId string (uuid) | null null for the users without a team.
teamName string | null
unproductiveMszorunlu integer (int64)
workedMszorunlu integer (int64)

TimeEntryDecisionRequest

POST /v1/time-entries/{id}/decision.

AlanTürAçıklama
decision string | null approve or reject.
note string | null At most 500 characters.

TimeEntryDto

An offline entry or a deletion (design §8.2).

AlanTürAçıklama
createdAtzorunlu string (date-time)
createdByzorunlu TimeEntryUserRefDto
datezorunlu string (date) The user's local day of the entry, in the zone effective when it was written.
decidedAt string (date-time) | null
decidedBy TimeEntryUserRefDto | null
decisionNote string | null
description string | null
durationMszorunlu integer (int64)
endzorunlu string (date-time)
idzorunlu string (uuid)
kindzorunlu string offline or deletion.
level string | null Offline: productive, neutral or unproductive; deletion: null.
permissionszorunlu TimeEntryPermissionsDto
projectId string (uuid) | null Always null until projects (Phase 6).
sourcezorunlu string manual (Phase 8 adds calendar).
startzorunlu string (date-time)
statuszorunlu string pending, approved or rejected.
timeZonezorunlu string
updatedAtzorunlu string (date-time)
userIdzorunlu string (uuid)

TimeEntryPage

GET /v1/time-entries: by start.

AlanTürAçıklama
itemszorunlu TimeEntryDto[]
nextCursor string | null

TimeEntryPermissionsDto

What the caller may do with the entry (TimeEntryPolicy.PermissionsFor), the same on every endpoint.

AlanTürAçıklama
canApprovezorunlu boolean
canDeletezorunlu boolean
canEditzorunlu boolean

TimeEntryUserRefDto

A user reference of an entry (fullName from the directory; null when unknown).

AlanTürAçıklama
fullName string | null
idzorunlu string (uuid)

TimeIntervalDto

A UTC interval without any detail (e.g. a private interval).

AlanTürAçıklama
endzorunlu string (date-time)
startzorunlu string (date-time)

TimerAtRequest

POST /v1/me/timer/stop and /discard.

AlanTürAçıklama
at string (date-time) | null

TimerCommandResultDto

The result of a command (200 also when it did not apply).

AlanTürAçıklama
appliedzorunlu boolean
closedzorunlu AllocationDto[] The allocations written from the segment this command closed (may be empty).
reason string | null stale, not_running or unchanged; null when applied.
timerzorunlu TimerDto

TimerDto

GET /v1/me/timer (ETag: "v<rowVersion>", "v0" before the first command).

AlanTürAçıklama
autoStopAt string (date-time) | null startedAt + 24 hours.
effectiveBillable boolean | null
isBillable boolean | null
last TimerLastDto | null
note string | null
project TimerProjectDto | null
segmentId string (uuid) | null
serverTimezorunlu string (date-time) The server's clock (clients compute the elapsed time against it).
source string | null web, desktop or api.
startedAt string (date-time) | null
statezorunlu string running or stopped.
task NamedRefDto | null

TimerLastDto

The segment that ended last.

AlanTürAçıklama
endReasonzorunlu string stop, switch, autostop or discard.
endedAtzorunlu string (date-time)
segmentIdzorunlu string (uuid)
startedAtzorunlu string (date-time)

TimerProjectDto

The project of the running segment.

AlanTürAçıklama
clientName string | null
color string | null
idzorunlu string (uuid)
namezorunlu string

TimerStartRequest

POST /v1/me/timer/start (Idempotency-Key: the client's command id): start, or switch while running.

AlanTürAçıklama
at string (date-time) | null The client's clock when the command was given (default: the server's now; at most 5 minutes ahead, at most 7 days back).
isBillable boolean | null
note string | null
projectId string (uuid) | null
source string | null web (default), desktop or api.
taskId string (uuid) | null

UpdateTimeEntryRequest

PUT /v1/time-entries/{id}: the whole editable body (kind and user never change; If-Match instead of version).

AlanTürAçıklama
description string | null
end string (date-time) | null
level string | null
projectId string (uuid) | null
start string (date-time) | null

UpdateWebhookEndpointRequest

PATCH /v1/webhook-endpoints/{id} (If-Match).

AlanTürAçıklama
description string | null null clears it.
eventTypes string[] | null
status string | null active (also opens a disabled endpoint and resets its failure counters) or paused.
takeOver boolean | null true: the caller becomes the endpoint's owner (lifts an owner_inactive pause).
url string | null

UserDailyDto

A user's days: computed days plus the workdays without activity up to the user's today.

AlanTürAçıklama
dayszorunlu UserDayDto[]
fromzorunlu string (date)
teamId string (uuid) | null The user's current primary team (its rules classify every day).
timeZonezorunlu string
tozorunlu string (date)
userIdzorunlu string (uuid)

UserDayDto

AlanTürAçıklama
absence DayAbsenceDto | null
absenceCreditMszorunlu integer (int64)
activeMszorunlu integer (int64)
afkCoveragezorunlu boolean
arrivalAt string (date-time) | null
atWorkMszorunlu integer (int64)
attendanceStatus string | null onTime, late, absent, notStarted, dayOff, onLeave, holiday; null outside the directory.
classifiedzorunlu boolean
datezorunlu string (date)
dayOffWorkedMszorunlu integer (int64)
deletedMszorunlu integer (int64)
effectivenessPct number (double) | null
eventCountzorunlu integer (int64)
expectedWorkMszorunlu integer (int64)
holiday DailyHolidayDto | null
idleMszorunlu integer (int64)
lateByMszorunlu integer (int64)
leftAt string (date-time) | null
leftEarlyzorunlu boolean
leftEarlyByMszorunlu integer (int64)
meetingMszorunlu integer (int64)
neutralMszorunlu integer (int64)
offlineMszorunlu integer (int64)
overtimeMszorunlu integer (int64)
planKind string | null schedule, shift, dayOff or holiday.
privateMszorunlu integer (int64)
productiveMszorunlu integer (int64)
productivityPct number (double) | null
shiftCountzorunlu integer (int32)
targetMszorunlu integer (int64)
topApp string | null Display name of the app with the most active time.
unproductiveMszorunlu integer (int64)
workday boolean | null
workedMszorunlu integer (int64)

UserTotalDto

One user of a summary.

AlanTürAçıklama
absenceCreditMszorunlu integer (int64)
absentDays integer (int32) | null Only for tracked users.
activeDayszorunlu integer (int32) Local days with active time.
activeMszorunlu integer (int64)
arrivalAt string (date-time) | null Earliest arrival and latest leave in the range.
atWorkMszorunlu integer (int64)
classifiedDayszorunlu integer (int32)
dayOffWorkedMszorunlu integer (int64)
deletedMszorunlu integer (int64)
effectivenessPct number (double) | null null without a target and for users missing from the directory.
email string | null
eventCountzorunlu integer (int64)
fullName string | null
holidayDayszorunlu number (double)
idleMszorunlu integer (int64)
lateDays integer (int32) | null
leaveDayszorunlu number (double)
leftAt string (date-time) | null
leftEarlyDays integer (int32) | null
meetingMszorunlu integer (int64)
neutralMszorunlu integer (int64)
offlineMszorunlu integer (int64)
overtimeDayszorunlu integer (int32)
overtimeMszorunlu integer (int64)
privateMszorunlu integer (int64)
productiveMszorunlu integer (int64)
productivityPct number (double) | null
shiftDayszorunlu integer (int32)
targetMs integer (int64) | null
teamId string (uuid) | null
teamName string | null
timeZonezorunlu string
unproductiveMszorunlu integer (int64)
userIdzorunlu string (uuid)
workdays integer (int32) | null
workedMszorunlu integer (int64)

WebhookDeliveryDetailDto

GET /v1/webhook-endpoints/{id}/deliveries/{deliveryId}: the delivery and the body that was (or is) sent.

WebhookDeliveryDto

WebhookDeliveryDto.

AlanTürAçıklama
attemptszorunlu integer (int32)
createdAtzorunlu string
deliveredAt string | null
eventIdzorunlu string (uuid) The webhook-id header.
eventTypezorunlu string
idzorunlu string A 64-bit integer as a string.
lastDurationMs integer (int32) | null
lastError string | null timeout, connect, tls, not_allowed, http_<code>, not_in_plan, owner_inactive.
lastStatusCode integer (int32) | null
nextAttemptAt string | null
statuszorunlu string pending, succeeded, failed, dead.

WebhookDeliveryPage

GET /v1/webhook-endpoints/{id}/deliveries (newest first).

AlanTürAçıklama
itemszorunlu WebhookDeliveryDto[]
nextCursor string | null

WebhookEndpointDto

WebhookEndpointDto.

AlanTürAçıklama
createdAtzorunlu string
description string | null
eventTypeszorunlu string[]
idzorunlu string (uuid)
ownerzorunlu MemberRefDto The member who owns the endpoint (G1: a delivery needs an active Owner or Admin owner).
previousSecretExpiresAt string | null After a rotation the previous secret still signs until then (24 hours).
secretPrefixzorunlu string The first 8 characters of the signing secret (whsec_Kx); never the secret.
statszorunlu WebhookEndpointStatsDto
statuszorunlu string active, paused, disabled.
statusReason string | null manual, owner_inactive, failing, gone; null while active.
updatedAtzorunlu string
urlzorunlu string
versionzorunlu integer (int64) row_version (ETag: "v<n>", If-Match of PATCH).

WebhookEndpointPage

GET /v1/webhook-endpoints.

AlanTürAçıklama
itemszorunlu WebhookEndpointDto[]
nextCursor string | null

WebhookEndpointStatsDto

The delivery statistics of an endpoint.

AlanTürAçıklama
consecutiveFailureszorunlu integer (int32)
lastFailureAt string | null
lastSuccessAt string | null

WebhookEventDto

One event type of GET /v1/webhook-events.

AlanTürAçıklama
availablezorunlu boolean The tenant's plan has the feature: an endpoint may subscribe.
descriptionzorunlu string One English sentence (the panel translates by type).
feature string | null The plan feature the event needs (null: every plan with api_access).
objectzorunlu string The data.object of the delivery body.
typezorunlu string <object>.<verb>, e.g. time_entry.approved.

WebhookEventsDto

GET /v1/webhook-events.

AlanTürAçıklama
itemszorunlu WebhookEventDto[]

WebhookTestDto

202 of POST /v1/webhook-endpoints/{id}/test.

AlanTürAçıklama
deliveryIdzorunlu string The delivery of the test event (a string: the deliveries' id is a 64-bit integer).