공개 API 레퍼런스

Workify360 Focus 공개 API를 사용하면 자체 스크립트와 도구에서 리포트와 시간 데이터를 읽고, 대시보드와 같은 규칙으로 변경할 수 있습니다. 공개 API, API 키, 웹훅은 Premium 요금제에 포함됩니다.

이 페이지의 엔드포인트는 하위 호환성이 유지됩니다. 같은 엔드포인트를 기계가 읽을 수 있도록 기술한 OpenAPI 문서:

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

API 계약 버전 0.1.0(c95fb97bb49a)에서 생성되었습니다.

인증

모든 요청의 Authorization 헤더에 개인 API 키를 보내세요. 키는 만든 사람에게 속하며, 그 사람으로서 동작하고, 그 사람의 현재 역할이 허용하는 범위를 절대 넘지 않습니다. 키가 없거나, 잘못되었거나, 만료되었거나, 폐기된 요청은 unauthorized 코드와 함께 401을 받습니다.

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

키를 만들고, 스코프를 지정하고, 폐기하는 방법: API 키와 공개 API

스코프

각 엔드포인트에는 옆에 표시된 하나의 스코프가 필요합니다. 키가 해당 스코프를 가지고 있고, 키 소유자의 현재 역할, 팀, 요금제가 요청을 허용할 때 엔드포인트에 접근할 수 있으며, 이는 대시보드와 똑같습니다.

스코프허용 범위
me본인 프로필과 타이머
reports:read리포트, 시간 항목, 부재, 근무 일정, 팀, 프로젝트, 작업, 내보내기 읽기
time:write시간 항목, 부재, 근무 일정, 작업, 작업에 배정된 시간의 추가 및 변경, 신청 처리
org:admin구성원, 팀, 초대, 프로젝트 관리
webhooks:manage웹훅 엔드포인트 관리

요청 한도

키 하나는 분당 600단위, 조직은 모든 키를 합쳐 분당 1,800단위까지 보낼 수 있습니다. 무언가를 변경하는 요청(GET과 HEAD 이외의 모든 요청)은 2단위, 그 외 요청은 1단위로 계산됩니다. 또한 키 하나는 한 번에 최대 60단위까지 보낼 수 있으며 초당 10단위씩 다시 채워집니다. 따라서 분당 600 미만이더라도 한꺼번에 60회를 넘는 읽기(또는 30회를 넘는 변경)는 429를 받습니다.

헤더의미
RateLimit: "key";r=598;t=2계산되는 모든 응답에 포함: 키에 남은 단위와 다시 가득 찰 때까지 남은 초
RateLimit-Policy: "key";q=600;w=60, "tenant";q=1800;w=60계산되는 모든 응답에 포함: 키와 조직의 분당 한도
Retry-After: 12429(코드 rate_limited)와 함께: 다음 요청까지 기다려야 하는 초

오류

오류는 RFC 9457 문제 문서(Content-Type: application/problem+json)입니다. code는 프로그래밍에 사용할 수 있는 안정적인 snake_case 코드이고, title은 로그용 영어 텍스트입니다. type은 해당 코드의 도움말 주소로, 각 _를 -로 바꾼 https://workify360.com/help/errors/<code>/ 형식이며, 코드에 설명 도움말 문서가 있으면 그 문서가 열립니다.

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"
}

일부 문제에는 추가 필드가 있습니다: errors(422 validation_failed의 필드 오류), action(403 forbidden이 가리키는 권한), requiredPlan(402 feature_not_in_plan), retryAfterSeconds(429 및 503), traceId(지원팀에 문의할 때 알려 주세요).

상태코드발생 조건
400 invalid_request 파라미터 형식이 잘못되었거나 누락됨
401 unauthorized 키가 없거나, 잘못되었거나, 만료되었거나, 폐기되었거나, 키 소유자가 조직을 떠남
402 feature_not_in_plan, subscription_read_only 요금제에 해당 기능이 포함되지 않았거나, 구독이 읽기 전용 상태임
403 forbidden, feature_not_enabled 키에 스코프가 없거나, 키 소유자의 현재 역할, 팀, 설정이 요청을 허용하지 않음
412 version_conflict If-Match 버전이 더 이상 최신이 아님. 리소스를 다시 읽으세요
422 validation_failed 본문이 유효하지 않음. errors에 필드가 나열됨
428 precondition_required 이 엔드포인트에는 읽은 버전을 담은 If-Match 헤더가 필요함
429 rate_limited 요청이 너무 많음. Retry-After의 초만큼 기다리세요

도움말 문서가 있는 코드는 엔드포인트 목록에서 링크로 표시됩니다.

웹훅

API에 반복해서 묻는 대신, 무언가 바뀌면 자체 엔드포인트에서 서명된 HTTPS 요청을 받을 수 있습니다. 이벤트, 요청 형식, Node.js와 Python에서 서명을 검증하는 방법, 재시도, 시크릿 교체는 도움말 문서에서 설명합니다: 웹훅

엔드포인트

영역별로 묶었습니다. 요약과 필드 설명은 API 계약에서 가져온 것입니다.

부재

GET /v1/absences 스코프: reports:read

List absences overlapping a range.

파라미터
이름위치유형설명
from 쿼리 string (date)
to 쿼리 string (date) At most 366 days after from.
userId 쿼리 string (uuid)
teamId 쿼리 string (uuid)
status 쿼리 string
typeId 쿼리 string (uuid)
cursor 쿼리 string
limit 쿼리 integer (int32)
응답
200 AbsencePage
오류

POST /v1/absences 스코프: time:write

Request (or record) an absence.

파라미터
이름위치유형설명
Idempotency-Key필수 헤더 string Required: the same key and body return the first answer
요청 본문
AbsenceRequest
응답
201 AbsenceDto
오류

POST /v1/absences/{id}/decision 스코프: time:write

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

파라미터
이름위치유형설명
id필수 경로 string (uuid) Id
If-Match필수 헤더 string ETag of the resource ("v<n>"); missing: 428, stale: 412
요청 본문
CalendarDecisionRequest
응답
200 AbsenceDto
오류

활동

GET /v1/activity/day 스코프: reports:read

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

파라미터
이름위치유형설명
date 쿼리 string (date) The user's local day (required).
userId 쿼리 string (uuid) Default: the caller; another user must be visible (else 403).
응답
200 ActivityDayDto
오류

시간 배정

GET /v1/allocations 스코프: 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).

파라미터
이름위치유형설명
userId 쿼리 string (uuid) Default: the caller.
from 쿼리 string (date) Local date, included.
to 쿼리 string (date) Local date, included; at most 93 days after from.
projectId 쿼리 string (uuid)
cursor 쿼리 string
limit 쿼리 integer (int32) 1–200 (default 200).
응답
200 AllocationPage
오류

POST /v1/allocations 스코프: time:write

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

파라미터
이름위치유형설명
Idempotency-Key 헤더 string | null The same key and body return the first answer (a different body: 422 idempotency_key_reused)
요청 본문
AllocationCreateRequest
응답
201 AllocationCreatedDto
오류

내보내기

POST /v1/exports 스코프: reports:read

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

파라미터
이름위치유형설명
Idempotency-Key필수 헤더 string Required: the same key and body return the first answer
요청 본문
CreateExportRequest
응답
202 ExportJobDto
오류

GET /v1/exports/{id} 스코프: reports:read

One export job (poll every 2 s).

파라미터
이름위치유형설명
id필수 경로 string (uuid) Id
응답
200 ExportJobDto
오류

내 정보

GET /v1/me 스코프: me

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

응답
200 MeDto
오류

구성원

GET /v1/members 스코프: org:admin

List members.

파라미터
이름위치유형설명
status 쿼리 string Comma-separated statuses (default active,invited,suspended)
teamId 쿼리 string (uuid) Primary team
role 쿼리 string owner, admin, team_admin, manager or employee
q 쿼리 string Part of the name or e-mail (Turkish case folding)
cursor 쿼리 string Opaque cursor of the next page
limit 쿼리 integer (int32) 1–200, default 50
응답
200 MemberPage
오류
  • 403 No right

GET /v1/members/{id} 스코프: org:admin

One member.

파라미터
이름위치유형설명
id필수 경로 string (uuid) Membership id
응답
200 MemberDto
오류
  • 404 member_not_found

PATCH /v1/members/{id} 스코프: org:admin

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

파라미터
이름위치유형설명
id필수 경로 string (uuid) Membership id
If-Match필수 헤더 string ETag of the member ("v<n>")
요청 본문
PatchMember
응답
200 MemberDto
오류

POST /v1/members/{id}/reactivate 스코프: org:admin

Reactivate a suspended member.

파라미터
이름위치유형설명
id필수 경로 string (uuid) Membership id
응답
200 MemberDto

POST /v1/members/{id}/suspend 스코프: org:admin

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

파라미터
이름위치유형설명
id필수 경로 string (uuid) Membership id
응답
200 MemberDto
오류
  • 409 conflict (an invitation is revoked instead)

프로젝트

GET /v1/projects 스코프: 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).

파라미터
이름위치유형설명
status 쿼리 string active, on_hold or completed.
clientId 쿼리 string (uuid)
q 쿼리 string Name or code search (case-insensitive).
includeArchived 쿼리 boolean
mine 쿼리 boolean Only the projects the caller may track time on.
cursor 쿼리 string
limit 쿼리 integer (int32) 1–200 (default 50).
응답
200 ProjectPage
오류

PUT /v1/projects/{id} 스코프: org:admin

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

파라미터
이름위치유형설명
id필수 경로 string (uuid) Project id
If-Match필수 헤더 string The ETag the caller read (412 version_conflict when it changed)
요청 본문
ProjectRequest
응답
200 ProjectDto
오류

리포트

GET /v1/reports/productivity 스코프: reports:read

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

파라미터
이름위치유형설명
from 쿼리 string (date)
to 쿼리 string (date) day 93 days, week, month and range 366.
groupBy 쿼리 string day, week, month or range.
teamId 쿼리 string (uuid)
userId 쿼리 string (uuid)
응답
200 PeriodReportDto
오류

GET /v1/reports/projects 스코프: 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.

파라미터
이름위치유형설명
from 쿼리 string (date) Local date, included.
to 쿼리 string (date) Local date, included; at most 366 days after from.
groupBy 쿼리 string One or two of project (default), task, user, client, day, comma separated.
projectIds 쿼리 string Comma-separated project ids.
clientId 쿼리 string (uuid)
userIds 쿼리 string Comma-separated user ids (visible people only).
teamId 쿼리 string (uuid)
billable 쿼리 string all (default), billable or nonBillable.
includeProductive 쿼리 boolean Also compute the productive time within the allocations (costly; default false).
응답
200 ProjectReportDto
오류

GET /v1/reports/summary 스코프: reports:read

The summary of the visible users over a range.

파라미터
이름위치유형설명
from 쿼리 string (date)
to 쿼리 string (date) At most 93 days after from.
teamId 쿼리 string (uuid) Only the team's current members; the team must be visible (else 403).
응답
200 SummaryDto
오류

GET /v1/reports/targets 스코프: reports:read

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

파라미터
이름위치유형설명
from 쿼리 string (date)
to 쿼리 string (date)
type 쿼리 string app, domain or host.
teamId 쿼리 string (uuid)
userId 쿼리 string (uuid)
q 쿼리 string Search in the key and the name (.NET search).
level 쿼리 string productive, unproductive or neutral.
categoryKey 쿼리 string
unclassified 쿼리 boolean Only targets without a category.
cursor 쿼리 string
limit 쿼리 integer (int32) 1–200, default 50.
응답
200 TargetListDto
오류

GET /v1/reports/users/{userId}/daily 스코프: reports:read

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

파라미터
이름위치유형설명
userId필수 경로 string (uuid) User
from 쿼리 string (date)
to 쿼리 string (date) At most 93 days after from.
응답
200 UserDailyDto
오류

근무 일정

GET /v1/shifts 스코프: reports:read

List the shifts starting in a range.

파라미터
이름위치유형설명
from 쿼리 string (date)
to 쿼리 string (date)
teamId 쿼리 string (uuid)
userId 쿼리 string (uuid)
includeOpen 쿼리 boolean Also open shifts (default true).
응답
200 ShiftListDto
오류

POST /v1/shifts 스코프: time:write

Create a shift (assigned or open).

파라미터
이름위치유형설명
Idempotency-Key필수 헤더 string Required: the same key and body return the first answer
요청 본문
ShiftBody
응답
201 ShiftDto
오류

작업

GET /v1/projects/{id}/tasks 스코프: reports:read

A visible project's tasks, by sort order.

파라미터
이름위치유형설명
id필수 경로 string (uuid) Project id
status 쿼리 string open, in_progress or done.
assigneeUserId 쿼리 string (uuid)
includeArchived 쿼리 boolean
cursor 쿼리 string
limit 쿼리 integer (int32) 1–500 (default 200).
응답
200 TaskPage
오류

POST /v1/projects/{id}/tasks 스코프: time:write

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

파라미터
이름위치유형설명
id필수 경로 string (uuid) Project id
Idempotency-Key 헤더 string | null The same key and body return the first answer (a different body: 422 idempotency_key_reused)
요청 본문
TaskRequest
응답
201 TaskDto
오류

PUT /v1/tasks/{id} 스코프: time:write

Change a task (the whole body).

파라미터
이름위치유형설명
id필수 경로 string (uuid) Task id
If-Match필수 헤더 string The ETag the caller read (412 version_conflict when it changed)
요청 본문
TaskRequest
응답
200 TaskDto
오류

팀

GET /v1/teams 스코프: reports:read

List teams.

파라미터
이름위치유형설명
includeArchived 쿼리 boolean Also archived teams (default false)
cursor 쿼리 string Opaque cursor of the next page
limit 쿼리 integer (int32) 1–200, default 50
응답
200 TeamPage

POST /v1/teams 스코프: org:admin

Create a team (the G1 endpoint).

요청 본문
CreateTeam
응답
201 TeamDto
오류
  • 403 forbidden (action teams.create)
  • 409 team_name_taken

PATCH /v1/teams/{id} 스코프: org:admin

Rename a team or change its description.

파라미터
이름위치유형설명
id필수 경로 string (uuid) Team id
If-Match필수 헤더 string ETag of the team
요청 본문
PatchTeam
응답
200 TeamDto
오류
  • 409 team_name_taken

시간 항목

GET /v1/time-entries 스코프: reports:read

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

파라미터
이름위치유형설명
userId 쿼리 string (uuid) Default: the caller.
from 쿼리 string (date) The entry's local day, required.
to 쿼리 string (date) At most 93 days after from.
kind 쿼리 string offline or deletion.
status 쿼리 string pending, approved or rejected.
cursor 쿼리 string
limit 쿼리 integer (int32) 1–500.
응답
200 TimeEntryPage
오류

POST /v1/time-entries 스코프: time:write

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

파라미터
이름위치유형설명
Idempotency-Key필수 헤더 string Required: the same key and body return the first answer
요청 본문
CreateTimeEntryRequest
응답
201 TimeEntryDto
오류

GET /v1/time-entries/{id} 스코프: reports:read

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

파라미터
이름위치유형설명
id필수 경로 string (uuid) Entry id
응답
200 TimeEntryDto
오류

PUT /v1/time-entries/{id} 스코프: time:write

Replace an entry's editable fields.

파라미터
이름위치유형설명
id필수 경로 string (uuid) Entry id
If-Match필수 헤더 string ETag of the resource ("v<n>"); missing: 428, stale: 412
요청 본문
UpdateTimeEntryRequest
응답
200 TimeEntryDto
오류

DELETE /v1/time-entries/{id} 스코프: time:write

Delete an entry (deleting a deletion restores the tracked time).

파라미터
이름위치유형설명
id필수 경로 string (uuid) Entry id
If-Match필수 헤더 string ETag of the resource ("v<n>"); missing: 428, stale: 412
응답
204 (본문 없음)
오류

POST /v1/time-entries/{id}/decision 스코프: time:write

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

파라미터
이름위치유형설명
id필수 경로 string (uuid) Entry id
If-Match필수 헤더 string ETag of the resource ("v<n>"); missing: 428, stale: 412
요청 본문
TimeEntryDecisionRequest
응답
200 TimeEntryDto
오류

타이머

GET /v1/me/timer 스코프: me

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

파라미터
이름위치유형설명
If-None-Match 헤더 string | null The ETag the caller holds (304 when unchanged)
응답
200 TimerDto · 304 (본문 없음)
오류

POST /v1/me/timer/start 스코프: me

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

파라미터
이름위치유형설명
Idempotency-Key 헤더 string | null The client's command id; a retry returns the first answer
요청 본문
TimerStartRequest
응답
200 TimerCommandResultDto
오류

웹훅

PATCH /v1/webhook-endpoints/{id} 스코프: webhooks:manage

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

파라미터
이름위치유형설명
id필수 경로 string (uuid) The endpoint
If-Match필수 헤더 string The endpoint's ETag ("v<n>")
요청 본문
UpdateWebhookEndpointRequest
응답
200 WebhookEndpointDto
오류

DELETE /v1/webhook-endpoints/{id} 스코프: webhooks:manage

Delete an endpoint and its deliveries.

파라미터
이름위치유형설명
id필수 경로 string (uuid) The endpoint
응답
204 (본문 없음)
오류

GET /v1/webhook-endpoints/{id}/deliveries 스코프: webhooks:manage

The deliveries of an endpoint, newest first.

파라미터
이름위치유형설명
id필수 경로 string (uuid) The endpoint
status 쿼리 string pending, succeeded, failed, dead.
eventType 쿼리 string
cursor 쿼리 string Opaque cursor of the next page.
limit 쿼리 integer (int32) 1–200, default 50.
응답
200 WebhookDeliveryPage
오류

스키마

엔드포인트에서 사용하는 요청 및 응답 본문입니다. 필수 필드는 표시되어 있습니다.

AbsenceDto

An absence.

필드유형설명
createdAt필수 string (date-time)
createdBy필수 CalendarUserRefDto
days필수 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
deductionByYear필수 object The balance deduction per year, e.g. {"2026": 3.5}; empty for types that do not deduct.
end필수 string (date-time)
endDate필수 string (date)
endTime string | null
half string | null
id필수 string (uuid)
note string | null
permissions필수 AbsencePermissionsDto
start필수 string (date-time) UTC coverage start.
startDate필수 string (date)
startTime string | null
status필수 string
timeZone필수 string
type필수 AbsenceTypeRefDto
unit필수 string
updatedAt필수 string (date-time)
user필수 CalendarPersonDto
userId필수 string (uuid)

AbsencePage

GET /v1/absences.

필드유형설명
items필수 AbsenceDto[]
nextCursor string | null

AbsencePermissionsDto

필드유형설명
canApprove필수 boolean
canCancel필수 boolean
canEdit필수 boolean

AbsenceRequest

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

필드유형설명
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.

필드유형설명
color필수 string
countsAsWorked필수 boolean
deductsFromBalance필수 boolean
id필수 string (uuid)
key string | null
name필수 string
paid필수 boolean
timeEffect필수 string

AcceptedDto

202 Accepted of a queued job.

필드유형설명
accepted필수 boolean Always true.

AccessDto

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

필드유형설명
assignableRoles필수 string[]
canManageCompanySettings필수 boolean
canManageTeams필수 boolean
canManageUsers필수 boolean
manageTeamIds필수 string[]
scope필수 string company, teams or self.
unassignedFallback필수 boolean
viewTeamIds필수 string[]

ActivityDayDto

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

필드유형설명
absenceCreditMs필수 integer (int64) A worked absence tops the worked time up to the expected work.
activeMs필수 integer (int64) Window time ∩ not AFK (computer time only).
afkCoverage필수 boolean False when no device reported AFK data (idle unknown).
apps필수 AppUsageDto[] Daily totals, largest first.
arrivalAt string (date-time) | null
atWorkMs필수 integer (int64)
attendance DayAttendanceDto | null
categories필수 CategoryUsageDto[] Active time per category (null key = uncategorized); offline time is in no category.
classified필수 boolean False for a day written before the Phase 2 classification (all neutral).
date필수 string (date)
dayEnd필수 string (date-time)
dayStart필수 string (date-time) The day's window: local midnight, or the end of the previous day's night shift window.
deletedMs필수 integer (int64) Tracked time removed by approved deletions (part of idle).
domains필수 DomainUsageDto[]
hosts필수 HostUsageDto[] Hosts with a URL, at most 50, largest first.
idleMs필수 integer (int64)
leftAt string (date-time) | null
meetingMs필수 integer (int64) Active time the meeting apps exception turned from idle into active.
offlineMs필수 integer (int64) Approved offline time outside the tracked active time.
pendingOfflineMs필수 integer (int64) Pending offline entries of the day (information only).
plan DayPlanDto | null
privateIntervals필수 TimeIntervalDto[] Private intervals of the day, merged and clipped, without detail.
privateMs필수 integer (int64) Private time outside active and offline time.
productivity필수 DayProductivityDto
recomputing필수 boolean The day waits in the recompute queue (the UI refetches every 15 s).
slots필수 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).
timeEntries필수 TimeEntryDto[] Offline and deletion entries of every status overlapping the day's window, by start; the caller's permissions.
timeZone필수 string The zone the day was computed in; the UI draws slots at their wall-clock time in it.
userId필수 string (uuid)
workedMs필수 integer (int64) activeMs + offlineMs: the denominator of productivity.productivityPct.

ActivitySlotDto

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

필드유형설명
activeMs필수 integer (int64)
apps필수 AppUsageDto[]
neutralMs필수 integer (int64)
offlineMs필수 integer (int64)
productiveMs필수 integer (int64)
slotStart필수 string (date-time)
unproductiveMs필수 integer (int64)

AffectedAllocationDto

An allocation replace changed.

필드유형설명
change필수 string trimmed, split or deleted.
id필수 string (uuid)

AllocationCreateRequest

POST /v1/allocations (Idempotency-Key).

필드유형설명
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.

필드유형설명
affected필수 AffectedAllocationDto[]
allocation필수 AllocationDto

AllocationDto

Time on a project.

필드유형설명
createdAt필수 string (date-time)
createdBy필수 NamedRefDto
durationMs필수 integer (int64)
effectiveBillable필수 boolean
endedAt필수 string (date-time)
id필수 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.
localDate필수 string (date) The start's day in the person's zone (rates, reports).
note string | null
permissions필수 AllocationPermissionsDto
project필수 ProjectRefDto
source필수 string timer, manual or assignment.
startedAt필수 string (date-time)
task NamedRefDto | null
timeZone필수 string
updatedAt필수 string (date-time)
userId필수 string (uuid)
version필수 integer (int64) The row version: If-Match: "v<version>" of a change (the same value as the resource's ETag).

AllocationPage

GET /v1/allocations.

필드유형설명
items필수 AllocationDto[]
nextCursor string | null

AllocationPermissionsDto

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

필드유형설명
delete필수 boolean
edit필수 boolean

AppTotalDto

필드유형설명
activeMs필수 integer (int64)
appKey필수 string
categoryKey string | null
level string | null Level in the response's levelContext.
name필수 string
percentage필수 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".

필드유형설명
activeMs필수 integer (int64)
appKey필수 string
categoryKey string | null
level string | null The app's own rule (productive, unproductive, neutral).
levelSource string | null team, company, default or offline.
name필수 string

BudgetDto

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

필드유형설명
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).

필드유형설명
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).

필드유형설명
decision string | null
note string | null

CalendarPersonDto

A user with the current team.

필드유형설명
fullName string | null
id필수 string (uuid)
teamId string (uuid) | null
teamName string | null

CalendarUserRefDto

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

필드유형설명
fullName string | null
id필수 string (uuid)

CapabilitiesDto

Subscription capabilities.

필드유형설명
features필수 string[]
readOnly필수 boolean

CategoryUsageDto

필드유형설명
activeMs필수 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.

필드유형설명
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.

필드유형설명
email필수 string
fullName필수 string
locale string | null Language of the e-mail and the acceptance page (tr, en); the organization's default otherwise.
role필수 string admin, team_admin, manager or employee.
teamId string (uuid) | null
timeZone string | null
viewerTeamIds string (uuid)[]

CreateTeam

POST /v1/teams.

필드유형설명
description string | null At most 500 characters.
name필수 string 1–100 characters, unique among active teams (Turkish case folding).

CreateTimeEntryRequest

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

필드유형설명
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.

필드유형설명
description string | null ≤ 200 characters.
eventTypes필수 string[] 1–50 catalog event types of the tenant's plan.
url필수 string https://… (≤ 2048; no user info, no fragment; every resolved address public).

CreatedWebhookEndpointDto

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

필드유형설명
endpoint필수 WebhookEndpointDto
secret필수 string whsec_<base64>: shown once, never again.

DailyHolidayDto

A holiday of a daily report day.

필드유형설명
half string | null
key필수 string
name필수 string English name; nameTr is the Turkish one.
nameTr필수 string

DayAbsenceDto

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

필드유형설명
color필수 string
fraction필수 number (double) The day's approved absence coverage (0–1).
half string | null
typeKey string | null
typeName string | null
unit필수 string

DayAttendanceDto

Attendance of the day on the day plan.

필드유형설명
expectedEnd string (date-time) | null
expectedStart string (date-time) | null
flexible필수 boolean
lateByMs필수 integer (int64)
lateToleranceMinutes필수 integer (int32)
leftEarly필수 boolean
leftEarlyByMs필수 integer (int64)
status필수 string onTime, late, absent, notStarted, dayOff, onLeave, holiday.
targetMs필수 integer (int64) The plan's target (the Effectiveness % denominator).
workday필수 boolean

DayPlanDto

The day plan of one user's day.

필드유형설명
absences필수 PlanAbsenceDto[] Approved and pending absences covering the day (only approved ones change the numbers).
expectedEnd string (date-time) | null
expectedStart string (date-time) | null
expectedWorkMs필수 integer (int64) Overtime target (base × (1 − fLeave)).
holiday HolidayRefDto | null
kind필수 string schedule, shift, dayOff or holiday.
leaveFraction필수 number (double) The approved absence coverage f (0–1).
shifts필수 PlanShiftDto[] Shifts starting on the day, by start.
targetMs필수 integer (int64) Effectiveness % denominator (base × (1 − f)).
workday필수 boolean

DayProductivityDto

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

필드유형설명
effectivenessPct number (double) | null productive ÷ target × 100 (not capped); null without a target.
neutralMs필수 integer (int64)
productiveMs필수 integer (int64)
productivityPct number (double) | null productive ÷ worked × 100, one decimal; null without worked time.
targetMs필수 integer (int64)
unproductiveMs필수 integer (int64)

DayTotalDto

One local day of a summary.

필드유형설명
activeMs필수 integer (int64)
activeUserCount필수 integer (int32)
atWorkMs필수 integer (int64)
date필수 string (date)
idleMs필수 integer (int64)
neutralMs필수 integer (int64)
offlineMs필수 integer (int64)
privateMs필수 integer (int64)
productiveMs필수 integer (int64)
productivityPct number (double) | null
unproductiveMs필수 integer (int64)

DomainTotalDto

필드유형설명
activeMs필수 integer (int64)
categoryKey string | null
domain필수 string
level string | null
percentage필수 number (double)

DomainUsageDto

필드유형설명
activeMs필수 integer (int64)
categoryKey string | null
domain필수 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).

필드유형설명
dueAt string (date-time) | null The deadline of an unverified account (Identity__EmailVerificationGraceHours after its creation).
state필수 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}]).

필드유형설명
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.

필드유형설명
includeInactiveUsers boolean
teamId string | null
userIds string | null[] | null

ExportJobDto

An export job as the panel lists and polls it.

필드유형설명
createdAt필수 string (date-time)
dataset필수 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
format필수 string
from필수 string (date)
groupBy string | null
id필수 string (uuid)
locale필수 string
progress필수 integer (int32) 0–100.
rowCount integer (int32) | null
startedAt string (date-time) | null
status필수 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.
to필수 string (date)

ExportOptionsDto

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

필드유형설명
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.

필드유형설명
code필수 string Stable snake_case code (required, too_long, invalid, ...).
field필수 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).

필드유형설명
half string | null
key필수 string Built-in key (republic_day, …) or custom.
name필수 string
nameEn필수 string
nameTr필수 string
source string | null builtin or tenant.

HostUsageDto

필드유형설명
activeMs필수 integer (int64)
domain string | null
host필수 string
level필수 string
levelSource필수 string
matchedKey string | null Key of the matching domain rule; null for the default.

InvitationEmail

What happened to the invitation e-mail.

필드유형설명
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).
status필수 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.

필드유형설명
expiresAt필수 string
id필수 string (uuid)

InvitationResult

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

필드유형설명
email필수 InvitationEmail
invitation필수 InvitationRef
member필수 MemberDto

LevelContextDto

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

필드유형설명
kind필수 string user (a userId filter: that user's current team), team (a teamId filter) or company.
teamId string (uuid) | null

MeDto

GET /v1/me.

필드유형설명
access필수 AccessDto
capabilities필수 CapabilitiesDto
effectiveTimeZone필수 string
membership필수 MeMembership
organization필수 MeOrganization
organizations필수 OrganizationChoice[]
session MeSession | null
user필수 MeUser

MeMembership

The membership in the current organization.

필드유형설명
id필수 string (uuid)
isTracked필수 boolean
joinedAt string | null
role필수 string
status필수 string
teamId string (uuid) | null
teamName string | null
timeZone string | null
viewerTeamIds필수 string (uuid)[]

MeOrganization

The current organization.

필드유형설명
defaultLocale필수 string
id필수 string (uuid)
name필수 string
slug필수 string
status필수 string
timeZone필수 string

MeSession

The current session.

필드유형설명
absoluteExpiresAt필수 string
amr필수 string[]
authTime필수 string
clientId필수 string
id필수 string (uuid)
idleExpiresAt필수 string

MeUser

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

필드유형설명
email필수 string
emailVerification필수 EmailVerificationDto The e-mail verification gate (owner decision 3 Oct 2026).
emailVerified필수 boolean
fullName string | null
id필수 string (uuid)
locale필수 string

MemberDto

A membership with its person (MemberDto).

필드유형설명
createdAt필수 string
email필수 string
emailVerified필수 boolean
fullName string | null
id필수 string (uuid)
invitation MemberInvitationDto | null
isTracked필수 boolean
joinedAt string | null
locale필수 string
role필수 string owner, admin, team_admin, manager, employee.
status필수 string invited, active, suspended, left.
teamId string (uuid) | null
teamName string | null
timeZone string | null
unassignedManager필수 boolean A Manager with neither a team nor viewer teams (sees the whole company until assigned).
userId필수 string (uuid)
viewerTeamIds필수 string (uuid)[]

MemberInvitationDto

The invitation of an invited member.

필드유형설명
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.
expiresAt필수 string
id필수 string (uuid)
lastSentAt필수 string
sentCount필수 integer (int32)

MemberPage

A page of members (OpenAPI).

필드유형설명
items필수 MemberDto[]
nextCursor string | null

MemberRefDto

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

필드유형설명
active필수 boolean The membership is active and (for an endpoint or a tenant connection) still an Owner or Admin.
name string | null
userId필수 string (uuid)

NamedRefDto

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

필드유형설명
id필수 string (uuid)
name필수 string

OrganizationChoice

One organization of the person (sec.user_memberships).

필드유형설명
current필수 boolean
id필수 string (uuid)
name필수 string
role필수 string
selectable필수 boolean Can this session's sign-in method open it (design §4.5.3)?

PatchMember

PATCH /v1/members/{id}.

필드유형설명
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}.

필드유형설명
description string | null
name string | null

PeriodReportDto

GET /v1/reports/productivity.

필드유형설명
from필수 string (date)
groupBy필수 string
levelContext필수 LevelContextDto
periods필수 ReportPeriodDto[]
subject필수 ReportSubjectDto
teams필수 TeamPeriodsDto[] Only for the company subject: every visible team over its current members.
to필수 string (date)
totals필수 ReportFiguresDto

PlanAbsenceDto

필드유형설명
color필수 string
countsAsWorked필수 boolean timeEffect == worked.
endTime string | null
half string | null
id필수 string (uuid)
startTime string | null Local start and end of an hours absence.
status필수 string approved or pending.
timeEffect필수 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).
unit필수 string days, half_day or hours.

PlanShiftDto

필드유형설명
color string | null
end필수 string (date-time)
endTime필수 string Local end; before the start for a night shift.
id필수 string (uuid)
location필수 string
minMinutes필수 integer (int32)
start필수 string (date-time)
startTime필수 string Local start (HH:mm, the shift's zone).

Problem

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

필드유형설명
action string | null Permission key of a 403 (teams.create).
code필수 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).
status필수 integer (int32)
title필수 string English title of the code (clients translate code).
traceId string | null W3C trace id of the request.
type필수 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).

필드유형설명
billableMinor필수 integer (int64) The billable hours at their rate.
costMinor필수 integer (int64) Every allocated hour at its rate.
currency필수 string

ProjectBudgetUsageDto

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

필드유형설명
budgetMinor integer (int64) | null null unless costsIncluded.
budgetMinutes integer (int64) | null
kind필수 string hours or amount.
projectId필수 string (uuid)
usedMinor integer (int64) | null The cost in the project's currency; null unless costsIncluded.
usedMs필수 integer (int64)
usedRatio string | null Used / budget, 4 decimals (null for an amount budget without costsIncluded).

ProjectDto

A project.

필드유형설명
access필수 string everyone or members.
archived필수 boolean
budget BudgetDto | null
client NamedRefDto | null
code string | null
color string | null
createdAt필수 string (date-time)
currency필수 string The currency of the project's rates and amount budget.
description string | null
endDate string (date) | null
id필수 string (uuid)
isBillable필수 boolean
memberCount필수 integer (int64)
myRole string | null The caller's role in the project team (member, manager), null outside it.
name필수 string
permissions필수 ProjectPermissionsDto
spentMs필수 integer (int64) Every allocation of the project, all time.
startDate string (date) | null
status필수 string active, on_hold or completed.
taskCount필수 integer (int64)
updatedAt필수 string (date-time)

ProjectPage

GET /v1/projects.

필드유형설명
items필수 ProjectDto[]
nextCursor string | null

ProjectPermissionsDto

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

필드유형설명
archive필수 boolean
delete필수 boolean Only a project without time.
edit필수 boolean The project's fields (Owners and Admins).
manageMembers필수 boolean The team (an Admin or the project's manager; only an Admin changes managers).
manageTasks필수 boolean Tasks (an Admin or the project's manager).
track필수 boolean The caller may track time on it now.

ProjectRefDto

A project reference of an allocation.

필드유형설명
color string | null #RRGGBB.
id필수 string (uuid)
name필수 string

ProjectReportDto

GET /v1/reports/projects.

필드유형설명
budgets필수 ProjectBudgetUsageDto[]
costsIncluded필수 boolean The caller sees rates and amounts (projects.costs.read).
from필수 string (date)
groupBy필수 string[]
rows필수 ProjectReportRowDto[]
to필수 string (date)
totals필수 ProjectReportTotalsDto

ProjectReportKeysDto

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

필드유형설명
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.

필드유형설명
allocatedMs필수 integer (int64)
amounts ProjectAmountDto[] | null null unless costsIncluded.
billableMs필수 integer (int64)
keys필수 ProjectReportKeysDto
nonBillableMs필수 integer (int64)
productiveMs integer (int64) | null With includeProductive only.
unratedMs필수 integer (int64) Time without any rate (it is left out of the amounts).

ProjectReportTotalsDto

The totals of the report.

필드유형설명
allocatedMs필수 integer (int64)
amounts ProjectAmountDto[] | null
billableMs필수 integer (int64)
nonBillableMs필수 integer (int64)
productiveMs integer (int64) | null
unratedMs필수 integer (int64)

ProjectRequest

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

필드유형설명
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).

필드유형설명
absenceCreditMs필수 integer (int64)
absentDays필수 integer (int32)
activeMs필수 integer (int64)
activeUserCount필수 integer (int32)
effectivenessPct number (double) | null
idleMs필수 integer (int64)
lateDays필수 integer (int32)
leaveDays필수 number (double)
leftEarlyDays필수 integer (int32)
neutralMs필수 integer (int64)
offlineMs필수 integer (int64)
overtimeDays필수 integer (int32)
overtimeMs필수 integer (int64)
productiveMs필수 integer (int64)
productivityPct number (double) | null
targetMs필수 integer (int64)
unproductiveMs필수 integer (int64)
userCount필수 integer (int32)
workedMs필수 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).

필드유형설명
kind필수 string company, teams or self.
teamIds필수 string (uuid)[] The visible teams of a teams scope, sorted; empty otherwise (company = all).
unassignedFallback필수 boolean A Manager without teams who sees the whole company until assigned.

ReportSubjectDto

Whom a report is about.

필드유형설명
id string (uuid) | null
kind필수 string company, team or user.
name string | null

RotatedWebhookSecretDto

RotatedWebhookSecretDto: the new signing secret, shown once.

필드유형설명
previousSecretExpiresAt필수 string Until then deliveries carry both signatures.
secret필수 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.

필드유형설명
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.

필드유형설명
breakMinutes필수 integer (int32)
color string | null
createdAt필수 string (date-time)
createdBy필수 CalendarUserRefDto
crossesMidnight필수 boolean
date필수 string (date)
durationMinutes필수 integer (int32)
end필수 string (date-time)
endTime필수 string
id필수 string (uuid)
location필수 string
minMinutes필수 integer (int32)
note string | null
open필수 boolean No user assigned.
permissions필수 ShiftPermissionsDto
source필수 string manual, template, copy or request.
start필수 string (date-time)
startTime필수 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
timeZone필수 string
updatedAt필수 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).

필드유형설명
items필수 ShiftDto[]

ShiftPermissionsDto

필드유형설명
canDelete필수 boolean
canEdit필수 boolean
canPickUp필수 boolean
canRequestSwap필수 boolean

SummaryDto

The summary of the visible users over a range.

필드유형설명
absenceCreditMs필수 integer (int64)
absentDays필수 integer (int32)
activeMs필수 integer (int64)
activeUserCount필수 integer (int32)
atWorkMs필수 integer (int64)
days필수 DayTotalDto[]
deletedMs필수 integer (int64)
domains필수 DomainTotalDto[] Top 10.
effectivenessPct number (double) | null Average of the users' range Effectiveness % (inactive tracked users included).
from필수 string (date)
holidayDays필수 number (double)
idleMs필수 integer (int64)
inactiveUsers필수 UserTotalDto[] Tracked users without activity in the range (zero totals, attendance fields), by user id.
lateDays필수 integer (int32)
leaveDays필수 number (double)
leftEarlyDays필수 integer (int32)
levelContext필수 LevelContextDto
meetingMs필수 integer (int64)
neutralMs필수 integer (int64)
offlineMs필수 integer (int64)
overtimeMs필수 integer (int64)
privateMs필수 integer (int64)
productiveMs필수 integer (int64)
productivityPct number (double) | null Average of the users' range Productivity %.
scope필수 ReportScopeDto
shiftDays필수 integer (int32)
teams필수 TeamTotalDto[] By current team: named teams by name, the teamId: null row last.
to필수 string (date)
topApps필수 AppTotalDto[] Top 10; name is "Offline time" for the reserved offline keys.
unproductiveMs필수 integer (int64)
users필수 UserTotalDto[] One row per user with a computed day in the range, by activeMs.
workedMs필수 integer (int64)

TargetItemDto

필드유형설명
activeMs필수 integer (int64)
categoryKey string | null
categorySource필수 string tenant, builtin or none.
domain string | null
level필수 string
levelSource필수 string team, company or default.
matchedKey string | null
name필수 string
percentage필수 number (double)
targetKey필수 string
targetType필수 string app for apps, domain for domains and hosts.
userCount필수 integer (int32)

TargetListDto

The "Apps & URLs" list.

필드유형설명
from필수 string (date)
items필수 TargetItemDto[] By active time descending, then key.
levelContext필수 LevelContextDto
nextCursor string | null
to필수 string (date)
total필수 integer (int32) Targets matching the filters (before paging).
totalActiveMs필수 integer (int64) Active time over every target of the type before the filters (the percentage base).
type필수 string app, domain or host.

TaskDto

A task.

필드유형설명
archived필수 boolean
assignee NamedRefDto | null
createdAt필수 string (date-time)
description string | null
dueDate string (date) | null
effectiveBillable필수 boolean
estimateMinutes integer (int64) | null
id필수 string (uuid)
isBillable boolean | null null takes the project's value.
name필수 string
permissions필수 TaskPermissionsDto
projectId필수 string (uuid)
sortOrder필수 integer (int64)
spentMs필수 integer (int64)
status필수 string open, in_progress or done.
updatedAt필수 string (date-time)

TaskPage

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

필드유형설명
items필수 TaskDto[]
nextCursor string | null

TaskPermissionsDto

What the caller may do with a task.

필드유형설명
delete필수 boolean Only a task without time.
edit필수 boolean

TaskRequest

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

필드유형설명
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).

필드유형설명
archivedAt string | null
createdAt필수 string
description string | null
id필수 string (uuid)
leads필수 object[] TeamAdmins and Managers of the team: [{membershipId, userId, fullName, role}].
memberCount필수 integer (int64) Members whose primary team this is (left members excluded).
name필수 string
updatedAt필수 string

TeamPage

A page of teams (OpenAPI).

필드유형설명
items필수 TeamDto[]
nextCursor string | null

TeamPeriodsDto

필드유형설명
periods필수 ReportPeriodDto[]
teamId필수 string (uuid)
teamName string | null
totals필수 ReportFiguresDto

TeamTotalDto

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

필드유형설명
absenceCreditMs필수 integer (int64)
absentDays필수 integer (int32)
activeMs필수 integer (int64)
activeUserCount필수 integer (int32)
effectivenessPct number (double) | null
holidayDays필수 number (double)
idleMs필수 integer (int64)
lateDays필수 integer (int32)
leaveDays필수 number (double)
leftEarlyDays필수 integer (int32)
memberCount필수 integer (int32)
neutralMs필수 integer (int64)
offlineMs필수 integer (int64)
overtimeMs필수 integer (int64)
productiveMs필수 integer (int64)
productivityPct number (double) | null
shiftDays필수 integer (int32)
teamId string (uuid) | null null for the users without a team.
teamName string | null
unproductiveMs필수 integer (int64)
workedMs필수 integer (int64)

TimeEntryDecisionRequest

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

필드유형설명
decision string | null approve or reject.
note string | null At most 500 characters.

TimeEntryDto

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

필드유형설명
createdAt필수 string (date-time)
createdBy필수 TimeEntryUserRefDto
date필수 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
durationMs필수 integer (int64)
end필수 string (date-time)
id필수 string (uuid)
kind필수 string offline or deletion.
level string | null Offline: productive, neutral or unproductive; deletion: null.
permissions필수 TimeEntryPermissionsDto
projectId string (uuid) | null Always null until projects (Phase 6).
source필수 string manual (Phase 8 adds calendar).
start필수 string (date-time)
status필수 string pending, approved or rejected.
timeZone필수 string
updatedAt필수 string (date-time)
userId필수 string (uuid)

TimeEntryPage

GET /v1/time-entries: by start.

필드유형설명
items필수 TimeEntryDto[]
nextCursor string | null

TimeEntryPermissionsDto

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

필드유형설명
canApprove필수 boolean
canDelete필수 boolean
canEdit필수 boolean

TimeEntryUserRefDto

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

필드유형설명
fullName string | null
id필수 string (uuid)

TimeIntervalDto

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

필드유형설명
end필수 string (date-time)
start필수 string (date-time)

TimerAtRequest

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

필드유형설명
at string (date-time) | null

TimerCommandResultDto

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

필드유형설명
applied필수 boolean
closed필수 AllocationDto[] The allocations written from the segment this command closed (may be empty).
reason string | null stale, not_running or unchanged; null when applied.
timer필수 TimerDto

TimerDto

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

필드유형설명
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
serverTime필수 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
state필수 string running or stopped.
task NamedRefDto | null

TimerLastDto

The segment that ended last.

필드유형설명
endReason필수 string stop, switch, autostop or discard.
endedAt필수 string (date-time)
segmentId필수 string (uuid)
startedAt필수 string (date-time)

TimerProjectDto

The project of the running segment.

필드유형설명
clientName string | null
color string | null
id필수 string (uuid)
name필수 string

TimerStartRequest

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

필드유형설명
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).

필드유형설명
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).

필드유형설명
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.

필드유형설명
days필수 UserDayDto[]
from필수 string (date)
teamId string (uuid) | null The user's current primary team (its rules classify every day).
timeZone필수 string
to필수 string (date)
userId필수 string (uuid)

UserDayDto

필드유형설명
absence DayAbsenceDto | null
absenceCreditMs필수 integer (int64)
activeMs필수 integer (int64)
afkCoverage필수 boolean
arrivalAt string (date-time) | null
atWorkMs필수 integer (int64)
attendanceStatus string | null onTime, late, absent, notStarted, dayOff, onLeave, holiday; null outside the directory.
classified필수 boolean
date필수 string (date)
dayOffWorkedMs필수 integer (int64)
deletedMs필수 integer (int64)
effectivenessPct number (double) | null
eventCount필수 integer (int64)
expectedWorkMs필수 integer (int64)
holiday DailyHolidayDto | null
idleMs필수 integer (int64)
lateByMs필수 integer (int64)
leftAt string (date-time) | null
leftEarly필수 boolean
leftEarlyByMs필수 integer (int64)
meetingMs필수 integer (int64)
neutralMs필수 integer (int64)
offlineMs필수 integer (int64)
overtimeMs필수 integer (int64)
planKind string | null schedule, shift, dayOff or holiday.
privateMs필수 integer (int64)
productiveMs필수 integer (int64)
productivityPct number (double) | null
shiftCount필수 integer (int32)
targetMs필수 integer (int64)
topApp string | null Display name of the app with the most active time.
unproductiveMs필수 integer (int64)
workday boolean | null
workedMs필수 integer (int64)

UserTotalDto

One user of a summary.

필드유형설명
absenceCreditMs필수 integer (int64)
absentDays integer (int32) | null Only for tracked users.
activeDays필수 integer (int32) Local days with active time.
activeMs필수 integer (int64)
arrivalAt string (date-time) | null Earliest arrival and latest leave in the range.
atWorkMs필수 integer (int64)
classifiedDays필수 integer (int32)
dayOffWorkedMs필수 integer (int64)
deletedMs필수 integer (int64)
effectivenessPct number (double) | null null without a target and for users missing from the directory.
email string | null
eventCount필수 integer (int64)
fullName string | null
holidayDays필수 number (double)
idleMs필수 integer (int64)
lateDays integer (int32) | null
leaveDays필수 number (double)
leftAt string (date-time) | null
leftEarlyDays integer (int32) | null
meetingMs필수 integer (int64)
neutralMs필수 integer (int64)
offlineMs필수 integer (int64)
overtimeDays필수 integer (int32)
overtimeMs필수 integer (int64)
privateMs필수 integer (int64)
productiveMs필수 integer (int64)
productivityPct number (double) | null
shiftDays필수 integer (int32)
targetMs integer (int64) | null
teamId string (uuid) | null
teamName string | null
timeZone필수 string
unproductiveMs필수 integer (int64)
userId필수 string (uuid)
workdays integer (int32) | null
workedMs필수 integer (int64)

WebhookDeliveryDetailDto

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

WebhookDeliveryDto

WebhookDeliveryDto.

필드유형설명
attempts필수 integer (int32)
createdAt필수 string
deliveredAt string | null
eventId필수 string (uuid) The webhook-id header.
eventType필수 string
id필수 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
status필수 string pending, succeeded, failed, dead.

WebhookDeliveryPage

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

필드유형설명
items필수 WebhookDeliveryDto[]
nextCursor string | null

WebhookEndpointDto

WebhookEndpointDto.

필드유형설명
createdAt필수 string
description string | null
eventTypes필수 string[]
id필수 string (uuid)
owner필수 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).
secretPrefix필수 string The first 8 characters of the signing secret (whsec_Kx); never the secret.
stats필수 WebhookEndpointStatsDto
status필수 string active, paused, disabled.
statusReason string | null manual, owner_inactive, failing, gone; null while active.
updatedAt필수 string
url필수 string
version필수 integer (int64) row_version (ETag: "v<n>", If-Match of PATCH).

WebhookEndpointPage

GET /v1/webhook-endpoints.

필드유형설명
items필수 WebhookEndpointDto[]
nextCursor string | null

WebhookEndpointStatsDto

The delivery statistics of an endpoint.

필드유형설명
consecutiveFailures필수 integer (int32)
lastFailureAt string | null
lastSuccessAt string | null

WebhookEventDto

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

필드유형설명
available필수 boolean The tenant's plan has the feature: an endpoint may subscribe.
description필수 string One English sentence (the panel translates by type).
feature string | null The plan feature the event needs (null: every plan with api_access).
object필수 string The data.object of the delivery body.
type필수 string <object>.<verb>, e.g. time_entry.approved.

WebhookEventsDto

GET /v1/webhook-events.

필드유형설명
items필수 WebhookEventDto[]

WebhookTestDto

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

필드유형설명
deliveryId필수 string The delivery of the test event (a string: the deliveries' id is a 64-bit integer).