Tài liệu tham chiếu API công khai

API công khai của Workify360 Focus cho phép các script và công cụ của riêng bạn đọc báo cáo, dữ liệu thời gian và thực hiện thay đổi theo cùng quy tắc như bảng điều khiển. API công khai, khóa API và webhook thuộc gói Premium.

Các thao tác trên trang này được duy trì tương thích ngược. Tài liệu OpenAPI dạng máy đọc được của cùng các thao tác này:

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

Được tạo từ đặc tả API phiên bản 0.1.0 (c95fb97bb49a).

Xác thực

Gửi khóa API cá nhân trong header Authorization của mọi yêu cầu. Mỗi khóa thuộc về người đã tạo ra nó, hành động với tư cách người đó và không bao giờ làm nhiều hơn những gì vai trò hiện tại của họ cho phép. Yêu cầu thiếu khóa, sai khóa, khóa hết hạn hoặc đã bị thu hồi sẽ nhận 401 với mã unauthorized.

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

Cách tạo, giới hạn phạm vi và thu hồi khóa: Khóa API và API công khai

Phạm vi quyền

Mỗi thao tác cần một phạm vi quyền, được ghi bên cạnh thao tác đó. Một khóa truy cập được thao tác khi nó có phạm vi quyền đó và vai trò, nhóm và gói hiện tại của chủ sở hữu khóa cho phép yêu cầu, giống hệt như trên bảng điều khiển.

Phạm viCho phép gì
meHồ sơ của chính bạn và bộ đếm giờ của bạn
reports:readĐọc báo cáo, mục thời gian, vắng mặt, ca làm việc, nhóm, dự án, công việc và bản xuất
time:writeThêm và thay đổi mục thời gian, vắng mặt, ca làm việc, công việc và thời gian được gán cho công việc, và quyết định các yêu cầu
org:adminQuản lý thành viên, nhóm, lời mời và dự án
webhooks:manageQuản lý các endpoint webhook

Giới hạn tần suất

Mỗi khóa có thể gửi 600 đơn vị mỗi phút và một tổ chức 1.800 đơn vị cho tất cả các khóa cộng lại. Yêu cầu làm thay đổi dữ liệu (mọi yêu cầu ngoài GET và HEAD) được tính là hai đơn vị, mọi yêu cầu khác là một. Một khóa cũng chỉ có thể gửi tối đa 60 đơn vị cùng lúc, được nạp lại 10 đơn vị mỗi giây: hơn 60 lượt đọc (hoặc 30 lượt thay đổi) dồn dập sẽ nhận 429 ngay cả khi chưa đến 600 mỗi phút.

HeaderÝ nghĩa
RateLimit: "key";r=598;t=2Trên mọi phản hồi được tính: số đơn vị khóa còn lại và số giây cho đến khi được nạp đầy lại
RateLimit-Policy: "key";q=600;w=60, "tenant";q=1800;w=60Trên mọi phản hồi được tính: giới hạn mỗi phút của khóa và của tổ chức
Retry-After: 12Kèm 429 (mã rate_limited): số giây cần chờ trước yêu cầu tiếp theo

Lỗi

Lỗi là một tài liệu problem theo RFC 9457 (Content-Type: application/problem+json). code là mã snake_case ổn định để lập trình theo; title là văn bản tiếng Anh dùng cho log. type là địa chỉ trợ giúp của mã, https://workify360.com/help/errors/<code>/ với mỗi _ được viết thành -, mở ra bài viết trợ giúp giải thích mã đó nếu mã có bài viết.

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

Một số lỗi có thêm trường: errors (lỗi theo trường của 422 validation_failed), action (quyền mà 403 forbidden đề cập đến), requiredPlan (402 feature_not_in_plan), retryAfterSeconds (429 và 503) và traceId (hãy cung cấp khi bạn liên hệ bộ phận hỗ trợ).

Trạng tháiMãKhi nào
400 invalid_request Một tham số sai định dạng hoặc bị thiếu
401 unauthorized Khóa bị thiếu, sai, hết hạn hoặc đã bị thu hồi, hoặc chủ sở hữu khóa đã rời khỏi tổ chức
402 feature_not_in_plan, subscription_read_only Gói không bao gồm tính năng này, hoặc gói đăng ký đang ở chế độ chỉ đọc
403 forbidden, feature_not_enabled Khóa thiếu phạm vi quyền, hoặc vai trò, nhóm hay cài đặt hiện tại của chủ sở hữu khóa không cho phép yêu cầu
412 version_conflict Phiên bản If-Match không còn là phiên bản hiện tại; hãy đọc lại tài nguyên
422 validation_failed Nội dung yêu cầu không hợp lệ; errors liệt kê các trường
428 precondition_required Thao tác cần header If-Match với phiên bản bạn đã đọc
429 rate_limited Quá nhiều yêu cầu; hãy chờ số giây trong Retry-After

Các mã có bài viết trợ giúp được hiển thị dưới dạng liên kết trong danh sách thao tác.

Webhook

Thay vì hỏi API lặp đi lặp lại, một endpoint của bạn có thể nhận một yêu cầu HTTPS có chữ ký khi có thay đổi. Các sự kiện, định dạng yêu cầu, cách xác minh chữ ký bằng Node.js và Python, cơ chế thử lại và xoay vòng secret được giải thích trong bài viết trợ giúp: Webhook

Thao tác

Được nhóm theo lĩnh vực. Phần tóm tắt và mô tả trường lấy từ đặc tả API.

Vắng mặt

GET /v1/absences Phạm vi: reports:read

List absences overlapping a range.

Tham số
TênVị tríKiểuMô tả
from query string (date)
to query string (date) At most 366 days after from.
userId query string (uuid)
teamId query string (uuid)
status query string
typeId query string (uuid)
cursor query string
limit query integer (int32)
Phản hồi
200 AbsencePage
Lỗi

POST /v1/absences Phạm vi: time:write

Request (or record) an absence.

Tham số
TênVị tríKiểuMô tả
Idempotency-Keybắt buộc header string Required: the same key and body return the first answer
Nội dung yêu cầu
AbsenceRequest
Phản hồi
201 AbsenceDto
Lỗi

POST /v1/absences/{id}/decision Phạm vi: time:write

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

Tham số
TênVị tríKiểuMô tả
idbắt buộc path string (uuid) Id
If-Matchbắt buộc header string ETag of the resource ("v<n>"); missing: 428, stale: 412
Nội dung yêu cầu
CalendarDecisionRequest
Phản hồi
200 AbsenceDto
Lỗi

Hoạt động

GET /v1/activity/day Phạm vi: reports:read

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

Tham số
TênVị tríKiểuMô tả
date query string (date) The user's local day (required).
userId query string (uuid) Default: the caller; another user must be visible (else 403).
Phản hồi
200 ActivityDayDto
Lỗi

Phân bổ thời gian

GET /v1/allocations Phạm vi: 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).

Tham số
TênVị tríKiểuMô tả
userId query string (uuid) Default: the caller.
from query string (date) Local date, included.
to query string (date) Local date, included; at most 93 days after from.
projectId query string (uuid)
cursor query string
limit query integer (int32) 1–200 (default 200).
Phản hồi
200 AllocationPage
Lỗi

POST /v1/allocations Phạm vi: time:write

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

Tham số
TênVị tríKiểuMô tả
Idempotency-Key header string | null The same key and body return the first answer (a different body: 422 idempotency_key_reused)
Nội dung yêu cầu
AllocationCreateRequest
Phản hồi
201 AllocationCreatedDto
Lỗi

Bản xuất

POST /v1/exports Phạm vi: reports:read

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

Tham số
TênVị tríKiểuMô tả
Idempotency-Keybắt buộc header string Required: the same key and body return the first answer
Nội dung yêu cầu
CreateExportRequest
Phản hồi
202 ExportJobDto
Lỗi

GET /v1/exports/{id} Phạm vi: reports:read

One export job (poll every 2 s).

Tham số
TênVị tríKiểuMô tả
idbắt buộc path string (uuid) Id
Phản hồi
200 ExportJobDto
Lỗi

Tôi

GET /v1/me Phạm vi: me

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

Phản hồi
200 MeDto
Lỗi

Thành viên

GET /v1/members Phạm vi: org:admin

List members.

Tham số
TênVị tríKiểuMô tả
status query string Comma-separated statuses (default active,invited,suspended)
teamId query string (uuid) Primary team
role query string owner, admin, team_admin, manager or employee
q query string Part of the name or e-mail (Turkish case folding)
cursor query string Opaque cursor of the next page
limit query integer (int32) 1–200, default 50
Phản hồi
200 MemberPage
Lỗi
  • 403 No right

GET /v1/members/{id} Phạm vi: org:admin

One member.

Tham số
TênVị tríKiểuMô tả
idbắt buộc path string (uuid) Membership id
Phản hồi
200 MemberDto
Lỗi
  • 404 member_not_found

PATCH /v1/members/{id} Phạm vi: org:admin

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

Tham số
TênVị tríKiểuMô tả
idbắt buộc path string (uuid) Membership id
If-Matchbắt buộc header string ETag of the member ("v<n>")
Nội dung yêu cầu
PatchMember
Phản hồi
200 MemberDto
Lỗi

POST /v1/members/{id}/reactivate Phạm vi: org:admin

Reactivate a suspended member.

Tham số
TênVị tríKiểuMô tả
idbắt buộc path string (uuid) Membership id
Phản hồi
200 MemberDto

POST /v1/members/{id}/suspend Phạm vi: org:admin

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

Tham số
TênVị tríKiểuMô tả
idbắt buộc path string (uuid) Membership id
Phản hồi
200 MemberDto
Lỗi
  • 409 conflict (an invitation is revoked instead)

Dự án

GET /v1/projects Phạm vi: 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).

Tham số
TênVị tríKiểuMô tả
status query string active, on_hold or completed.
clientId query string (uuid)
q query string Name or code search (case-insensitive).
includeArchived query boolean
mine query boolean Only the projects the caller may track time on.
cursor query string
limit query integer (int32) 1–200 (default 50).
Phản hồi
200 ProjectPage
Lỗi

POST /v1/projects Phạm vi: org:admin

Add a project (Owners and Admins).

Tham số
TênVị tríKiểuMô tả
Idempotency-Key header string | null The same key and body return the first answer (a different body: 422 idempotency_key_reused)
Nội dung yêu cầu
ProjectRequest
Phản hồi
201 ProjectDto
Lỗi

PUT /v1/projects/{id} Phạm vi: org:admin

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

Tham số
TênVị tríKiểuMô tả
idbắt buộc path string (uuid) Project id
If-Matchbắt buộc header string The ETag the caller read (412 version_conflict when it changed)
Nội dung yêu cầu
ProjectRequest
Phản hồi
200 ProjectDto
Lỗi

Báo cáo

GET /v1/reports/productivity Phạm vi: reports:read

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

Tham số
TênVị tríKiểuMô tả
from query string (date)
to query string (date) day 93 days, week, month and range 366.
groupBy query string day, week, month or range.
teamId query string (uuid)
userId query string (uuid)
Phản hồi
200 PeriodReportDto
Lỗi

GET /v1/reports/projects Phạm vi: 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.

Tham số
TênVị tríKiểuMô tả
from query string (date) Local date, included.
to query string (date) Local date, included; at most 366 days after from.
groupBy query string One or two of project (default), task, user, client, day, comma separated.
projectIds query string Comma-separated project ids.
clientId query string (uuid)
userIds query string Comma-separated user ids (visible people only).
teamId query string (uuid)
billable query string all (default), billable or nonBillable.
includeProductive query boolean Also compute the productive time within the allocations (costly; default false).
Phản hồi
200 ProjectReportDto
Lỗi

GET /v1/reports/summary Phạm vi: reports:read

The summary of the visible users over a range.

Tham số
TênVị tríKiểuMô tả
from query string (date)
to query string (date) At most 93 days after from.
teamId query string (uuid) Only the team's current members; the team must be visible (else 403).
Phản hồi
200 SummaryDto
Lỗi

GET /v1/reports/targets Phạm vi: reports:read

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

Tham số
TênVị tríKiểuMô tả
from query string (date)
to query string (date)
type query string app, domain or host.
teamId query string (uuid)
userId query string (uuid)
q query string Search in the key and the name (.NET search).
level query string productive, unproductive or neutral.
categoryKey query string
unclassified query boolean Only targets without a category.
cursor query string
limit query integer (int32) 1–200, default 50.
Phản hồi
200 TargetListDto
Lỗi

GET /v1/reports/users/{userId}/daily Phạm vi: reports:read

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

Tham số
TênVị tríKiểuMô tả
userIdbắt buộc path string (uuid) User
from query string (date)
to query string (date) At most 93 days after from.
Phản hồi
200 UserDailyDto
Lỗi

Ca làm việc

GET /v1/shifts Phạm vi: reports:read

List the shifts starting in a range.

Tham số
TênVị tríKiểuMô tả
from query string (date)
to query string (date)
teamId query string (uuid)
userId query string (uuid)
includeOpen query boolean Also open shifts (default true).
Phản hồi
200 ShiftListDto
Lỗi

POST /v1/shifts Phạm vi: time:write

Create a shift (assigned or open).

Tham số
TênVị tríKiểuMô tả
Idempotency-Keybắt buộc header string Required: the same key and body return the first answer
Nội dung yêu cầu
ShiftBody
Phản hồi
201 ShiftDto
Lỗi

Công việc

GET /v1/projects/{id}/tasks Phạm vi: reports:read

A visible project's tasks, by sort order.

Tham số
TênVị tríKiểuMô tả
idbắt buộc path string (uuid) Project id
status query string open, in_progress or done.
assigneeUserId query string (uuid)
includeArchived query boolean
cursor query string
limit query integer (int32) 1–500 (default 200).
Phản hồi
200 TaskPage
Lỗi

POST /v1/projects/{id}/tasks Phạm vi: time:write

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

Tham số
TênVị tríKiểuMô tả
idbắt buộc path string (uuid) Project id
Idempotency-Key header string | null The same key and body return the first answer (a different body: 422 idempotency_key_reused)
Nội dung yêu cầu
TaskRequest
Phản hồi
201 TaskDto
Lỗi

PUT /v1/tasks/{id} Phạm vi: time:write

Change a task (the whole body).

Tham số
TênVị tríKiểuMô tả
idbắt buộc path string (uuid) Task id
If-Matchbắt buộc header string The ETag the caller read (412 version_conflict when it changed)
Nội dung yêu cầu
TaskRequest
Phản hồi
200 TaskDto
Lỗi

Nhóm

GET /v1/teams Phạm vi: reports:read

List teams.

Tham số
TênVị tríKiểuMô tả
includeArchived query boolean Also archived teams (default false)
cursor query string Opaque cursor of the next page
limit query integer (int32) 1–200, default 50
Phản hồi
200 TeamPage

POST /v1/teams Phạm vi: org:admin

Create a team (the G1 endpoint).

Nội dung yêu cầu
CreateTeam
Phản hồi
201 TeamDto
Lỗi
  • 403 forbidden (action teams.create)
  • 409 team_name_taken

PATCH /v1/teams/{id} Phạm vi: org:admin

Rename a team or change its description.

Tham số
TênVị tríKiểuMô tả
idbắt buộc path string (uuid) Team id
If-Matchbắt buộc header string ETag of the team
Nội dung yêu cầu
PatchTeam
Phản hồi
200 TeamDto
Lỗi
  • 409 team_name_taken

Mục thời gian

GET /v1/time-entries Phạm vi: reports:read

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

Tham số
TênVị tríKiểuMô tả
userId query string (uuid) Default: the caller.
from query string (date) The entry's local day, required.
to query string (date) At most 93 days after from.
kind query string offline or deletion.
status query string pending, approved or rejected.
cursor query string
limit query integer (int32) 1–500.
Phản hồi
200 TimeEntryPage
Lỗi

POST /v1/time-entries Phạm vi: time:write

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

Tham số
TênVị tríKiểuMô tả
Idempotency-Keybắt buộc header string Required: the same key and body return the first answer
Nội dung yêu cầu
CreateTimeEntryRequest
Phản hồi
201 TimeEntryDto
Lỗi

GET /v1/time-entries/{id} Phạm vi: reports:read

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

Tham số
TênVị tríKiểuMô tả
idbắt buộc path string (uuid) Entry id
Phản hồi
200 TimeEntryDto
Lỗi

PUT /v1/time-entries/{id} Phạm vi: time:write

Replace an entry's editable fields.

Tham số
TênVị tríKiểuMô tả
idbắt buộc path string (uuid) Entry id
If-Matchbắt buộc header string ETag of the resource ("v<n>"); missing: 428, stale: 412
Nội dung yêu cầu
UpdateTimeEntryRequest
Phản hồi
200 TimeEntryDto
Lỗi

DELETE /v1/time-entries/{id} Phạm vi: time:write

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

Tham số
TênVị tríKiểuMô tả
idbắt buộc path string (uuid) Entry id
If-Matchbắt buộc header string ETag of the resource ("v<n>"); missing: 428, stale: 412
Phản hồi
204 (không có nội dung)
Lỗi

POST /v1/time-entries/{id}/decision Phạm vi: time:write

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

Tham số
TênVị tríKiểuMô tả
idbắt buộc path string (uuid) Entry id
If-Matchbắt buộc header string ETag of the resource ("v<n>"); missing: 428, stale: 412
Nội dung yêu cầu
TimeEntryDecisionRequest
Phản hồi
200 TimeEntryDto
Lỗi

Bộ đếm giờ

GET /v1/me/timer Phạm vi: me

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

Tham số
TênVị tríKiểuMô tả
If-None-Match header string | null The ETag the caller holds (304 when unchanged)
Phản hồi
200 TimerDto · 304 (không có nội dung)
Lỗi

POST /v1/me/timer/start Phạm vi: me

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

Tham số
TênVị tríKiểuMô tả
Idempotency-Key header string | null The client's command id; a retry returns the first answer
Nội dung yêu cầu
TimerStartRequest
Phản hồi
200 TimerCommandResultDto
Lỗi

Webhook

PATCH /v1/webhook-endpoints/{id} Phạm vi: webhooks:manage

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

Tham số
TênVị tríKiểuMô tả
idbắt buộc path string (uuid) The endpoint
If-Matchbắt buộc header string The endpoint's ETag ("v<n>")
Nội dung yêu cầu
UpdateWebhookEndpointRequest
Phản hồi
200 WebhookEndpointDto
Lỗi

DELETE /v1/webhook-endpoints/{id} Phạm vi: webhooks:manage

Delete an endpoint and its deliveries.

Tham số
TênVị tríKiểuMô tả
idbắt buộc path string (uuid) The endpoint
Phản hồi
204 (không có nội dung)
Lỗi

GET /v1/webhook-endpoints/{id}/deliveries Phạm vi: webhooks:manage

The deliveries of an endpoint, newest first.

Tham số
TênVị tríKiểuMô tả
idbắt buộc path string (uuid) The endpoint
status query string pending, succeeded, failed, dead.
eventType query string
cursor query string Opaque cursor of the next page.
limit query integer (int32) 1–200, default 50.
Phản hồi
200 WebhookDeliveryPage
Lỗi

POST /v1/webhook-endpoints/{id}/deliveries/{deliveryId}/retry Phạm vi: webhooks:manage

Queue a failed or dead delivery again (attempts start over).

Tham số
TênVị tríKiểuMô tả
idbắt buộc path string (uuid) The endpoint
deliveryIdbắt buộc path string The delivery (a 64-bit integer)
Phản hồi
202 AcceptedDto
Lỗi

Lược đồ

Nội dung yêu cầu và phản hồi mà các thao tác sử dụng. Các trường bắt buộc được đánh dấu.

AbsenceDto

An absence.

TrườngKiểuMô tả
createdAtbắt buộc string (date-time)
createdBybắt buộc CalendarUserRefDto
daysbắt buộc 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
deductionByYearbắt buộc object The balance deduction per year, e.g. {"2026": 3.5}; empty for types that do not deduct.
endbắt buộc string (date-time)
endDatebắt buộc string (date)
endTime string | null
half string | null
idbắt buộc string (uuid)
note string | null
permissionsbắt buộc AbsencePermissionsDto
startbắt buộc string (date-time) UTC coverage start.
startDatebắt buộc string (date)
startTime string | null
statusbắt buộc string
timeZonebắt buộc string
typebắt buộc AbsenceTypeRefDto
unitbắt buộc string
updatedAtbắt buộc string (date-time)
userbắt buộc CalendarPersonDto
userIdbắt buộc string (uuid)

AbsencePage

GET /v1/absences.

TrườngKiểuMô tả
itemsbắt buộc AbsenceDto[]
nextCursor string | null

AbsencePermissionsDto

TrườngKiểuMô tả
canApprovebắt buộc boolean
canCancelbắt buộc boolean
canEditbắt buộc boolean

AbsenceRequest

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

TrườngKiểuMô tả
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.

TrườngKiểuMô tả
colorbắt buộc string
countsAsWorkedbắt buộc boolean
deductsFromBalancebắt buộc boolean
idbắt buộc string (uuid)
key string | null
namebắt buộc string
paidbắt buộc boolean
timeEffectbắt buộc string

AcceptedDto

202 Accepted of a queued job.

TrườngKiểuMô tả
acceptedbắt buộc boolean Always true.

AccessDto

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

TrườngKiểuMô tả
assignableRolesbắt buộc string[]
canManageCompanySettingsbắt buộc boolean
canManageTeamsbắt buộc boolean
canManageUsersbắt buộc boolean
manageTeamIdsbắt buộc string[]
scopebắt buộc string company, teams or self.
unassignedFallbackbắt buộc boolean
viewTeamIdsbắt buộc string[]

ActivityDayDto

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

TrườngKiểuMô tả
absenceCreditMsbắt buộc integer (int64) A worked absence tops the worked time up to the expected work.
activeMsbắt buộc integer (int64) Window time ∩ not AFK (computer time only).
afkCoveragebắt buộc boolean False when no device reported AFK data (idle unknown).
appsbắt buộc AppUsageDto[] Daily totals, largest first.
arrivalAt string (date-time) | null
atWorkMsbắt buộc integer (int64)
attendance DayAttendanceDto | null
categoriesbắt buộc CategoryUsageDto[] Active time per category (null key = uncategorized); offline time is in no category.
classifiedbắt buộc boolean False for a day written before the Phase 2 classification (all neutral).
datebắt buộc string (date)
dayEndbắt buộc string (date-time)
dayStartbắt buộc string (date-time) The day's window: local midnight, or the end of the previous day's night shift window.
deletedMsbắt buộc integer (int64) Tracked time removed by approved deletions (part of idle).
domainsbắt buộc DomainUsageDto[]
hostsbắt buộc HostUsageDto[] Hosts with a URL, at most 50, largest first.
idleMsbắt buộc integer (int64)
leftAt string (date-time) | null
meetingMsbắt buộc integer (int64) Active time the meeting apps exception turned from idle into active.
offlineMsbắt buộc integer (int64) Approved offline time outside the tracked active time.
pendingOfflineMsbắt buộc integer (int64) Pending offline entries of the day (information only).
plan DayPlanDto | null
privateIntervalsbắt buộc TimeIntervalDto[] Private intervals of the day, merged and clipped, without detail.
privateMsbắt buộc integer (int64) Private time outside active and offline time.
productivitybắt buộc DayProductivityDto
recomputingbắt buộc boolean The day waits in the recompute queue (the UI refetches every 15 s).
slotsbắt buộc 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).
timeEntriesbắt buộc TimeEntryDto[] Offline and deletion entries of every status overlapping the day's window, by start; the caller's permissions.
timeZonebắt buộc string The zone the day was computed in; the UI draws slots at their wall-clock time in it.
userIdbắt buộc string (uuid)
workedMsbắt buộc integer (int64) activeMs + offlineMs: the denominator of productivity.productivityPct.

ActivitySlotDto

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

TrườngKiểuMô tả
activeMsbắt buộc integer (int64)
appsbắt buộc AppUsageDto[]
neutralMsbắt buộc integer (int64)
offlineMsbắt buộc integer (int64)
productiveMsbắt buộc integer (int64)
slotStartbắt buộc string (date-time)
unproductiveMsbắt buộc integer (int64)

AffectedAllocationDto

An allocation replace changed.

TrườngKiểuMô tả
changebắt buộc string trimmed, split or deleted.
idbắt buộc string (uuid)

AllocationCreateRequest

POST /v1/allocations (Idempotency-Key).

TrườngKiểuMô tả
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.

TrườngKiểuMô tả
affectedbắt buộc AffectedAllocationDto[]
allocationbắt buộc AllocationDto

AllocationDto

Time on a project.

TrườngKiểuMô tả
createdAtbắt buộc string (date-time)
createdBybắt buộc NamedRefDto
durationMsbắt buộc integer (int64)
effectiveBillablebắt buộc boolean
endedAtbắt buộc string (date-time)
idbắt buộc 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.
localDatebắt buộc string (date) The start's day in the person's zone (rates, reports).
note string | null
permissionsbắt buộc AllocationPermissionsDto
projectbắt buộc ProjectRefDto
sourcebắt buộc string timer, manual or assignment.
startedAtbắt buộc string (date-time)
task NamedRefDto | null
timeZonebắt buộc string
updatedAtbắt buộc string (date-time)
userIdbắt buộc string (uuid)
versionbắt buộc integer (int64) The row version: If-Match: "v<version>" of a change (the same value as the resource's ETag).

AllocationPage

GET /v1/allocations.

TrườngKiểuMô tả
itemsbắt buộc AllocationDto[]
nextCursor string | null

AllocationPermissionsDto

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

TrườngKiểuMô tả
deletebắt buộc boolean
editbắt buộc boolean

AppTotalDto

TrườngKiểuMô tả
activeMsbắt buộc integer (int64)
appKeybắt buộc string
categoryKey string | null
level string | null Level in the response's levelContext.
namebắt buộc string
percentagebắt buộc 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".

TrườngKiểuMô tả
activeMsbắt buộc integer (int64)
appKeybắt buộc string
categoryKey string | null
level string | null The app's own rule (productive, unproductive, neutral).
levelSource string | null team, company, default or offline.
namebắt buộc string

BudgetDto

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

TrườngKiểuMô tả
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).

TrườngKiểuMô tả
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).

TrườngKiểuMô tả
decision string | null
note string | null

CalendarPersonDto

A user with the current team.

TrườngKiểuMô tả
fullName string | null
idbắt buộc string (uuid)
teamId string (uuid) | null
teamName string | null

CalendarUserRefDto

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

TrườngKiểuMô tả
fullName string | null
idbắt buộc string (uuid)

CapabilitiesDto

Subscription capabilities.

TrườngKiểuMô tả
featuresbắt buộc string[]
readOnlybắt buộc boolean

CategoryUsageDto

TrườngKiểuMô tả
activeMsbắt buộc 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.

TrườngKiểuMô tả
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.

TrườngKiểuMô tả
emailbắt buộc string
fullNamebắt buộc string
locale string | null Language of the e-mail and the acceptance page (tr, en); the organization's default otherwise.
rolebắt buộc string admin, team_admin, manager or employee.
teamId string (uuid) | null
timeZone string | null
viewerTeamIds string (uuid)[]

CreateTeam

POST /v1/teams.

TrườngKiểuMô tả
description string | null At most 500 characters.
namebắt buộc string 1–100 characters, unique among active teams (Turkish case folding).

CreateTimeEntryRequest

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

TrườngKiểuMô tả
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.

TrườngKiểuMô tả
description string | null ≤ 200 characters.
eventTypesbắt buộc string[] 1–50 catalog event types of the tenant's plan.
urlbắt buộc string https://… (≤ 2048; no user info, no fragment; every resolved address public).

CreatedWebhookEndpointDto

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

TrườngKiểuMô tả
endpointbắt buộc WebhookEndpointDto
secretbắt buộc string whsec_<base64>: shown once, never again.

DailyHolidayDto

A holiday of a daily report day.

TrườngKiểuMô tả
half string | null
keybắt buộc string
namebắt buộc string English name; nameTr is the Turkish one.
nameTrbắt buộc string

DayAbsenceDto

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

TrườngKiểuMô tả
colorbắt buộc string
fractionbắt buộc number (double) The day's approved absence coverage (0–1).
half string | null
typeKey string | null
typeName string | null
unitbắt buộc string

DayAttendanceDto

Attendance of the day on the day plan.

TrườngKiểuMô tả
expectedEnd string (date-time) | null
expectedStart string (date-time) | null
flexiblebắt buộc boolean
lateByMsbắt buộc integer (int64)
lateToleranceMinutesbắt buộc integer (int32)
leftEarlybắt buộc boolean
leftEarlyByMsbắt buộc integer (int64)
statusbắt buộc string onTime, late, absent, notStarted, dayOff, onLeave, holiday.
targetMsbắt buộc integer (int64) The plan's target (the Effectiveness % denominator).
workdaybắt buộc boolean

DayPlanDto

The day plan of one user's day.

TrườngKiểuMô tả
absencesbắt buộc PlanAbsenceDto[] Approved and pending absences covering the day (only approved ones change the numbers).
expectedEnd string (date-time) | null
expectedStart string (date-time) | null
expectedWorkMsbắt buộc integer (int64) Overtime target (base × (1 − fLeave)).
holiday HolidayRefDto | null
kindbắt buộc string schedule, shift, dayOff or holiday.
leaveFractionbắt buộc number (double) The approved absence coverage f (0–1).
shiftsbắt buộc PlanShiftDto[] Shifts starting on the day, by start.
targetMsbắt buộc integer (int64) Effectiveness % denominator (base × (1 − f)).
workdaybắt buộc boolean

DayProductivityDto

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

TrườngKiểuMô tả
effectivenessPct number (double) | null productive ÷ target × 100 (not capped); null without a target.
neutralMsbắt buộc integer (int64)
productiveMsbắt buộc integer (int64)
productivityPct number (double) | null productive ÷ worked × 100, one decimal; null without worked time.
targetMsbắt buộc integer (int64)
unproductiveMsbắt buộc integer (int64)

DayTotalDto

One local day of a summary.

TrườngKiểuMô tả
activeMsbắt buộc integer (int64)
activeUserCountbắt buộc integer (int32)
atWorkMsbắt buộc integer (int64)
datebắt buộc string (date)
idleMsbắt buộc integer (int64)
neutralMsbắt buộc integer (int64)
offlineMsbắt buộc integer (int64)
privateMsbắt buộc integer (int64)
productiveMsbắt buộc integer (int64)
productivityPct number (double) | null
unproductiveMsbắt buộc integer (int64)

DomainTotalDto

TrườngKiểuMô tả
activeMsbắt buộc integer (int64)
categoryKey string | null
domainbắt buộc string
level string | null
percentagebắt buộc number (double)

DomainUsageDto

TrườngKiểuMô tả
activeMsbắt buộc integer (int64)
categoryKey string | null
domainbắt buộc 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).

TrườngKiểuMô tả
dueAt string (date-time) | null The deadline of an unverified account (Identity__EmailVerificationGraceHours after its creation).
statebắt buộc 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}]).

TrườngKiểuMô tả
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.

TrườngKiểuMô tả
includeInactiveUsers boolean
teamId string | null
userIds string | null[] | null

ExportJobDto

An export job as the panel lists and polls it.

TrườngKiểuMô tả
createdAtbắt buộc string (date-time)
datasetbắt buộc 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
formatbắt buộc string
frombắt buộc string (date)
groupBy string | null
idbắt buộc string (uuid)
localebắt buộc string
progressbắt buộc integer (int32) 0–100.
rowCount integer (int32) | null
startedAt string (date-time) | null
statusbắt buộc 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.
tobắt buộc string (date)

ExportOptionsDto

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

TrườngKiểuMô tả
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.

TrườngKiểuMô tả
codebắt buộc string Stable snake_case code (required, too_long, invalid, ...).
fieldbắt buộc 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).

TrườngKiểuMô tả
half string | null
keybắt buộc string Built-in key (republic_day, …) or custom.
namebắt buộc string
nameEnbắt buộc string
nameTrbắt buộc string
source string | null builtin or tenant.

HostUsageDto

TrườngKiểuMô tả
activeMsbắt buộc integer (int64)
domain string | null
hostbắt buộc string
levelbắt buộc string
levelSourcebắt buộc string
matchedKey string | null Key of the matching domain rule; null for the default.

InvitationEmail

What happened to the invitation e-mail.

TrườngKiểuMô tả
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).
statusbắt buộc 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.

TrườngKiểuMô tả
expiresAtbắt buộc string
idbắt buộc string (uuid)

InvitationResult

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

TrườngKiểuMô tả
emailbắt buộc InvitationEmail
invitationbắt buộc InvitationRef
memberbắt buộc MemberDto

LevelContextDto

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

TrườngKiểuMô tả
kindbắt buộc string user (a userId filter: that user's current team), team (a teamId filter) or company.
teamId string (uuid) | null

MeDto

GET /v1/me.

TrườngKiểuMô tả
accessbắt buộc AccessDto
capabilitiesbắt buộc CapabilitiesDto
effectiveTimeZonebắt buộc string
membershipbắt buộc MeMembership
organizationbắt buộc MeOrganization
organizationsbắt buộc OrganizationChoice[]
session MeSession | null
userbắt buộc MeUser

MeMembership

The membership in the current organization.

TrườngKiểuMô tả
idbắt buộc string (uuid)
isTrackedbắt buộc boolean
joinedAt string | null
rolebắt buộc string
statusbắt buộc string
teamId string (uuid) | null
teamName string | null
timeZone string | null
viewerTeamIdsbắt buộc string (uuid)[]

MeOrganization

The current organization.

TrườngKiểuMô tả
defaultLocalebắt buộc string
idbắt buộc string (uuid)
namebắt buộc string
slugbắt buộc string
statusbắt buộc string
timeZonebắt buộc string

MeSession

The current session.

TrườngKiểuMô tả
absoluteExpiresAtbắt buộc string
amrbắt buộc string[]
authTimebắt buộc string
clientIdbắt buộc string
idbắt buộc string (uuid)
idleExpiresAtbắt buộc string

MeUser

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

TrườngKiểuMô tả
emailbắt buộc string
emailVerificationbắt buộc EmailVerificationDto The e-mail verification gate (owner decision 3 Oct 2026).
emailVerifiedbắt buộc boolean
fullName string | null
idbắt buộc string (uuid)
localebắt buộc string

MemberDto

A membership with its person (MemberDto).

TrườngKiểuMô tả
createdAtbắt buộc string
emailbắt buộc string
emailVerifiedbắt buộc boolean
fullName string | null
idbắt buộc string (uuid)
invitation MemberInvitationDto | null
isTrackedbắt buộc boolean
joinedAt string | null
localebắt buộc string
rolebắt buộc string owner, admin, team_admin, manager, employee.
statusbắt buộc string invited, active, suspended, left.
teamId string (uuid) | null
teamName string | null
timeZone string | null
unassignedManagerbắt buộc boolean A Manager with neither a team nor viewer teams (sees the whole company until assigned).
userIdbắt buộc string (uuid)
viewerTeamIdsbắt buộc string (uuid)[]

MemberInvitationDto

The invitation of an invited member.

TrườngKiểuMô tả
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.
expiresAtbắt buộc string
idbắt buộc string (uuid)
lastSentAtbắt buộc string
sentCountbắt buộc integer (int32)

MemberPage

A page of members (OpenAPI).

TrườngKiểuMô tả
itemsbắt buộc MemberDto[]
nextCursor string | null

MemberRefDto

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

TrườngKiểuMô tả
activebắt buộc boolean The membership is active and (for an endpoint or a tenant connection) still an Owner or Admin.
name string | null
userIdbắt buộc string (uuid)

NamedRefDto

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

TrườngKiểuMô tả
idbắt buộc string (uuid)
namebắt buộc string

OrganizationChoice

One organization of the person (sec.user_memberships).

TrườngKiểuMô tả
currentbắt buộc boolean
idbắt buộc string (uuid)
namebắt buộc string
rolebắt buộc string
selectablebắt buộc boolean Can this session's sign-in method open it (design §4.5.3)?

PatchMember

PATCH /v1/members/{id}.

TrườngKiểuMô tả
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}.

TrườngKiểuMô tả
description string | null
name string | null

PeriodReportDto

GET /v1/reports/productivity.

TrườngKiểuMô tả
frombắt buộc string (date)
groupBybắt buộc string
levelContextbắt buộc LevelContextDto
periodsbắt buộc ReportPeriodDto[]
subjectbắt buộc ReportSubjectDto
teamsbắt buộc TeamPeriodsDto[] Only for the company subject: every visible team over its current members.
tobắt buộc string (date)
totalsbắt buộc ReportFiguresDto

PlanAbsenceDto

TrườngKiểuMô tả
colorbắt buộc string
countsAsWorkedbắt buộc boolean timeEffect == worked.
endTime string | null
half string | null
idbắt buộc string (uuid)
startTime string | null Local start and end of an hours absence.
statusbắt buộc string approved or pending.
timeEffectbắt buộc 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).
unitbắt buộc string days, half_day or hours.

PlanShiftDto

TrườngKiểuMô tả
color string | null
endbắt buộc string (date-time)
endTimebắt buộc string Local end; before the start for a night shift.
idbắt buộc string (uuid)
locationbắt buộc string
minMinutesbắt buộc integer (int32)
startbắt buộc string (date-time)
startTimebắt buộc string Local start (HH:mm, the shift's zone).

Problem

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

TrườngKiểuMô tả
action string | null Permission key of a 403 (teams.create).
codebắt buộc 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).
statusbắt buộc integer (int32)
titlebắt buộc string English title of the code (clients translate code).
traceId string | null W3C trace id of the request.
typebắt buộc 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).

TrườngKiểuMô tả
billableMinorbắt buộc integer (int64) The billable hours at their rate.
costMinorbắt buộc integer (int64) Every allocated hour at its rate.
currencybắt buộc string

ProjectBudgetUsageDto

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

TrườngKiểuMô tả
budgetMinor integer (int64) | null null unless costsIncluded.
budgetMinutes integer (int64) | null
kindbắt buộc string hours or amount.
projectIdbắt buộc string (uuid)
usedMinor integer (int64) | null The cost in the project's currency; null unless costsIncluded.
usedMsbắt buộc integer (int64)
usedRatio string | null Used / budget, 4 decimals (null for an amount budget without costsIncluded).

ProjectDto

A project.

TrườngKiểuMô tả
accessbắt buộc string everyone or members.
archivedbắt buộc boolean
budget BudgetDto | null
client NamedRefDto | null
code string | null
color string | null
createdAtbắt buộc string (date-time)
currencybắt buộc string The currency of the project's rates and amount budget.
description string | null
endDate string (date) | null
idbắt buộc string (uuid)
isBillablebắt buộc boolean
memberCountbắt buộc integer (int64)
myRole string | null The caller's role in the project team (member, manager), null outside it.
namebắt buộc string
permissionsbắt buộc ProjectPermissionsDto
spentMsbắt buộc integer (int64) Every allocation of the project, all time.
startDate string (date) | null
statusbắt buộc string active, on_hold or completed.
taskCountbắt buộc integer (int64)
updatedAtbắt buộc string (date-time)

ProjectPage

GET /v1/projects.

TrườngKiểuMô tả
itemsbắt buộc ProjectDto[]
nextCursor string | null

ProjectPermissionsDto

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

TrườngKiểuMô tả
archivebắt buộc boolean
deletebắt buộc boolean Only a project without time.
editbắt buộc boolean The project's fields (Owners and Admins).
manageMembersbắt buộc boolean The team (an Admin or the project's manager; only an Admin changes managers).
manageTasksbắt buộc boolean Tasks (an Admin or the project's manager).
trackbắt buộc boolean The caller may track time on it now.

ProjectRefDto

A project reference of an allocation.

TrườngKiểuMô tả
color string | null #RRGGBB.
idbắt buộc string (uuid)
namebắt buộc string

ProjectReportDto

GET /v1/reports/projects.

TrườngKiểuMô tả
budgetsbắt buộc ProjectBudgetUsageDto[]
costsIncludedbắt buộc boolean The caller sees rates and amounts (projects.costs.read).
frombắt buộc string (date)
groupBybắt buộc string[]
rowsbắt buộc ProjectReportRowDto[]
tobắt buộc string (date)
totalsbắt buộc ProjectReportTotalsDto

ProjectReportKeysDto

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

TrườngKiểuMô tả
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.

TrườngKiểuMô tả
allocatedMsbắt buộc integer (int64)
amounts ProjectAmountDto[] | null null unless costsIncluded.
billableMsbắt buộc integer (int64)
keysbắt buộc ProjectReportKeysDto
nonBillableMsbắt buộc integer (int64)
productiveMs integer (int64) | null With includeProductive only.
unratedMsbắt buộc integer (int64) Time without any rate (it is left out of the amounts).

ProjectReportTotalsDto

The totals of the report.

TrườngKiểuMô tả
allocatedMsbắt buộc integer (int64)
amounts ProjectAmountDto[] | null
billableMsbắt buộc integer (int64)
nonBillableMsbắt buộc integer (int64)
productiveMs integer (int64) | null
unratedMsbắt buộc integer (int64)

ProjectRequest

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

TrườngKiểuMô tả
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).

TrườngKiểuMô tả
absenceCreditMsbắt buộc integer (int64)
absentDaysbắt buộc integer (int32)
activeMsbắt buộc integer (int64)
activeUserCountbắt buộc integer (int32)
effectivenessPct number (double) | null
idleMsbắt buộc integer (int64)
lateDaysbắt buộc integer (int32)
leaveDaysbắt buộc number (double)
leftEarlyDaysbắt buộc integer (int32)
neutralMsbắt buộc integer (int64)
offlineMsbắt buộc integer (int64)
overtimeDaysbắt buộc integer (int32)
overtimeMsbắt buộc integer (int64)
productiveMsbắt buộc integer (int64)
productivityPct number (double) | null
targetMsbắt buộc integer (int64)
unproductiveMsbắt buộc integer (int64)
userCountbắt buộc integer (int32)
workedMsbắt buộc 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).

TrườngKiểuMô tả
kindbắt buộc string company, teams or self.
teamIdsbắt buộc string (uuid)[] The visible teams of a teams scope, sorted; empty otherwise (company = all).
unassignedFallbackbắt buộc boolean A Manager without teams who sees the whole company until assigned.

ReportSubjectDto

Whom a report is about.

TrườngKiểuMô tả
id string (uuid) | null
kindbắt buộc string company, team or user.
name string | null

RotatedWebhookSecretDto

RotatedWebhookSecretDto: the new signing secret, shown once.

TrườngKiểuMô tả
previousSecretExpiresAtbắt buộc string Until then deliveries carry both signatures.
secretbắt buộc 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.

TrườngKiểuMô tả
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.

TrườngKiểuMô tả
breakMinutesbắt buộc integer (int32)
color string | null
createdAtbắt buộc string (date-time)
createdBybắt buộc CalendarUserRefDto
crossesMidnightbắt buộc boolean
datebắt buộc string (date)
durationMinutesbắt buộc integer (int32)
endbắt buộc string (date-time)
endTimebắt buộc string
idbắt buộc string (uuid)
locationbắt buộc string
minMinutesbắt buộc integer (int32)
note string | null
openbắt buộc boolean No user assigned.
permissionsbắt buộc ShiftPermissionsDto
sourcebắt buộc string manual, template, copy or request.
startbắt buộc string (date-time)
startTimebắt buộc 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
timeZonebắt buộc string
updatedAtbắt buộc 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).

TrườngKiểuMô tả
itemsbắt buộc ShiftDto[]

ShiftPermissionsDto

TrườngKiểuMô tả
canDeletebắt buộc boolean
canEditbắt buộc boolean
canPickUpbắt buộc boolean
canRequestSwapbắt buộc boolean

SummaryDto

The summary of the visible users over a range.

TrườngKiểuMô tả
absenceCreditMsbắt buộc integer (int64)
absentDaysbắt buộc integer (int32)
activeMsbắt buộc integer (int64)
activeUserCountbắt buộc integer (int32)
atWorkMsbắt buộc integer (int64)
daysbắt buộc DayTotalDto[]
deletedMsbắt buộc integer (int64)
domainsbắt buộc DomainTotalDto[] Top 10.
effectivenessPct number (double) | null Average of the users' range Effectiveness % (inactive tracked users included).
frombắt buộc string (date)
holidayDaysbắt buộc number (double)
idleMsbắt buộc integer (int64)
inactiveUsersbắt buộc UserTotalDto[] Tracked users without activity in the range (zero totals, attendance fields), by user id.
lateDaysbắt buộc integer (int32)
leaveDaysbắt buộc number (double)
leftEarlyDaysbắt buộc integer (int32)
levelContextbắt buộc LevelContextDto
meetingMsbắt buộc integer (int64)
neutralMsbắt buộc integer (int64)
offlineMsbắt buộc integer (int64)
overtimeMsbắt buộc integer (int64)
privateMsbắt buộc integer (int64)
productiveMsbắt buộc integer (int64)
productivityPct number (double) | null Average of the users' range Productivity %.
scopebắt buộc ReportScopeDto
shiftDaysbắt buộc integer (int32)
teamsbắt buộc TeamTotalDto[] By current team: named teams by name, the teamId: null row last.
tobắt buộc string (date)
topAppsbắt buộc AppTotalDto[] Top 10; name is "Offline time" for the reserved offline keys.
unproductiveMsbắt buộc integer (int64)
usersbắt buộc UserTotalDto[] One row per user with a computed day in the range, by activeMs.
workedMsbắt buộc integer (int64)

TargetItemDto

TrườngKiểuMô tả
activeMsbắt buộc integer (int64)
categoryKey string | null
categorySourcebắt buộc string tenant, builtin or none.
domain string | null
levelbắt buộc string
levelSourcebắt buộc string team, company or default.
matchedKey string | null
namebắt buộc string
percentagebắt buộc number (double)
targetKeybắt buộc string
targetTypebắt buộc string app for apps, domain for domains and hosts.
userCountbắt buộc integer (int32)

TargetListDto

The "Apps & URLs" list.

TrườngKiểuMô tả
frombắt buộc string (date)
itemsbắt buộc TargetItemDto[] By active time descending, then key.
levelContextbắt buộc LevelContextDto
nextCursor string | null
tobắt buộc string (date)
totalbắt buộc integer (int32) Targets matching the filters (before paging).
totalActiveMsbắt buộc integer (int64) Active time over every target of the type before the filters (the percentage base).
typebắt buộc string app, domain or host.

TaskDto

A task.

TrườngKiểuMô tả
archivedbắt buộc boolean
assignee NamedRefDto | null
createdAtbắt buộc string (date-time)
description string | null
dueDate string (date) | null
effectiveBillablebắt buộc boolean
estimateMinutes integer (int64) | null
idbắt buộc string (uuid)
isBillable boolean | null null takes the project's value.
namebắt buộc string
permissionsbắt buộc TaskPermissionsDto
projectIdbắt buộc string (uuid)
sortOrderbắt buộc integer (int64)
spentMsbắt buộc integer (int64)
statusbắt buộc string open, in_progress or done.
updatedAtbắt buộc string (date-time)

TaskPage

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

TrườngKiểuMô tả
itemsbắt buộc TaskDto[]
nextCursor string | null

TaskPermissionsDto

What the caller may do with a task.

TrườngKiểuMô tả
deletebắt buộc boolean Only a task without time.
editbắt buộc boolean

TaskRequest

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

TrườngKiểuMô tả
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).

TrườngKiểuMô tả
archivedAt string | null
createdAtbắt buộc string
description string | null
idbắt buộc string (uuid)
leadsbắt buộc object[] TeamAdmins and Managers of the team: [{membershipId, userId, fullName, role}].
memberCountbắt buộc integer (int64) Members whose primary team this is (left members excluded).
namebắt buộc string
updatedAtbắt buộc string

TeamPage

A page of teams (OpenAPI).

TrườngKiểuMô tả
itemsbắt buộc TeamDto[]
nextCursor string | null

TeamPeriodsDto

TrườngKiểuMô tả
periodsbắt buộc ReportPeriodDto[]
teamIdbắt buộc string (uuid)
teamName string | null
totalsbắt buộc ReportFiguresDto

TeamTotalDto

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

TrườngKiểuMô tả
absenceCreditMsbắt buộc integer (int64)
absentDaysbắt buộc integer (int32)
activeMsbắt buộc integer (int64)
activeUserCountbắt buộc integer (int32)
effectivenessPct number (double) | null
holidayDaysbắt buộc number (double)
idleMsbắt buộc integer (int64)
lateDaysbắt buộc integer (int32)
leaveDaysbắt buộc number (double)
leftEarlyDaysbắt buộc integer (int32)
memberCountbắt buộc integer (int32)
neutralMsbắt buộc integer (int64)
offlineMsbắt buộc integer (int64)
overtimeMsbắt buộc integer (int64)
productiveMsbắt buộc integer (int64)
productivityPct number (double) | null
shiftDaysbắt buộc integer (int32)
teamId string (uuid) | null null for the users without a team.
teamName string | null
unproductiveMsbắt buộc integer (int64)
workedMsbắt buộc integer (int64)

TimeEntryDecisionRequest

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

TrườngKiểuMô tả
decision string | null approve or reject.
note string | null At most 500 characters.

TimeEntryDto

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

TrườngKiểuMô tả
createdAtbắt buộc string (date-time)
createdBybắt buộc TimeEntryUserRefDto
datebắt buộc 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
durationMsbắt buộc integer (int64)
endbắt buộc string (date-time)
idbắt buộc string (uuid)
kindbắt buộc string offline or deletion.
level string | null Offline: productive, neutral or unproductive; deletion: null.
permissionsbắt buộc TimeEntryPermissionsDto
projectId string (uuid) | null Always null until projects (Phase 6).
sourcebắt buộc string manual (Phase 8 adds calendar).
startbắt buộc string (date-time)
statusbắt buộc string pending, approved or rejected.
timeZonebắt buộc string
updatedAtbắt buộc string (date-time)
userIdbắt buộc string (uuid)

TimeEntryPage

GET /v1/time-entries: by start.

TrườngKiểuMô tả
itemsbắt buộc TimeEntryDto[]
nextCursor string | null

TimeEntryPermissionsDto

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

TrườngKiểuMô tả
canApprovebắt buộc boolean
canDeletebắt buộc boolean
canEditbắt buộc boolean

TimeEntryUserRefDto

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

TrườngKiểuMô tả
fullName string | null
idbắt buộc string (uuid)

TimeIntervalDto

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

TrườngKiểuMô tả
endbắt buộc string (date-time)
startbắt buộc string (date-time)

TimerAtRequest

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

TrườngKiểuMô tả
at string (date-time) | null

TimerCommandResultDto

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

TrườngKiểuMô tả
appliedbắt buộc boolean
closedbắt buộc AllocationDto[] The allocations written from the segment this command closed (may be empty).
reason string | null stale, not_running or unchanged; null when applied.
timerbắt buộc TimerDto

TimerDto

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

TrườngKiểuMô tả
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
serverTimebắt buộc 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
statebắt buộc string running or stopped.
task NamedRefDto | null

TimerLastDto

The segment that ended last.

TrườngKiểuMô tả
endReasonbắt buộc string stop, switch, autostop or discard.
endedAtbắt buộc string (date-time)
segmentIdbắt buộc string (uuid)
startedAtbắt buộc string (date-time)

TimerProjectDto

The project of the running segment.

TrườngKiểuMô tả
clientName string | null
color string | null
idbắt buộc string (uuid)
namebắt buộc string

TimerStartRequest

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

TrườngKiểuMô tả
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).

TrườngKiểuMô tả
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).

TrườngKiểuMô tả
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.

TrườngKiểuMô tả
daysbắt buộc UserDayDto[]
frombắt buộc string (date)
teamId string (uuid) | null The user's current primary team (its rules classify every day).
timeZonebắt buộc string
tobắt buộc string (date)
userIdbắt buộc string (uuid)

UserDayDto

TrườngKiểuMô tả
absence DayAbsenceDto | null
absenceCreditMsbắt buộc integer (int64)
activeMsbắt buộc integer (int64)
afkCoveragebắt buộc boolean
arrivalAt string (date-time) | null
atWorkMsbắt buộc integer (int64)
attendanceStatus string | null onTime, late, absent, notStarted, dayOff, onLeave, holiday; null outside the directory.
classifiedbắt buộc boolean
datebắt buộc string (date)
dayOffWorkedMsbắt buộc integer (int64)
deletedMsbắt buộc integer (int64)
effectivenessPct number (double) | null
eventCountbắt buộc integer (int64)
expectedWorkMsbắt buộc integer (int64)
holiday DailyHolidayDto | null
idleMsbắt buộc integer (int64)
lateByMsbắt buộc integer (int64)
leftAt string (date-time) | null
leftEarlybắt buộc boolean
leftEarlyByMsbắt buộc integer (int64)
meetingMsbắt buộc integer (int64)
neutralMsbắt buộc integer (int64)
offlineMsbắt buộc integer (int64)
overtimeMsbắt buộc integer (int64)
planKind string | null schedule, shift, dayOff or holiday.
privateMsbắt buộc integer (int64)
productiveMsbắt buộc integer (int64)
productivityPct number (double) | null
shiftCountbắt buộc integer (int32)
targetMsbắt buộc integer (int64)
topApp string | null Display name of the app with the most active time.
unproductiveMsbắt buộc integer (int64)
workday boolean | null
workedMsbắt buộc integer (int64)

UserTotalDto

One user of a summary.

TrườngKiểuMô tả
absenceCreditMsbắt buộc integer (int64)
absentDays integer (int32) | null Only for tracked users.
activeDaysbắt buộc integer (int32) Local days with active time.
activeMsbắt buộc integer (int64)
arrivalAt string (date-time) | null Earliest arrival and latest leave in the range.
atWorkMsbắt buộc integer (int64)
classifiedDaysbắt buộc integer (int32)
dayOffWorkedMsbắt buộc integer (int64)
deletedMsbắt buộc integer (int64)
effectivenessPct number (double) | null null without a target and for users missing from the directory.
email string | null
eventCountbắt buộc integer (int64)
fullName string | null
holidayDaysbắt buộc number (double)
idleMsbắt buộc integer (int64)
lateDays integer (int32) | null
leaveDaysbắt buộc number (double)
leftAt string (date-time) | null
leftEarlyDays integer (int32) | null
meetingMsbắt buộc integer (int64)
neutralMsbắt buộc integer (int64)
offlineMsbắt buộc integer (int64)
overtimeDaysbắt buộc integer (int32)
overtimeMsbắt buộc integer (int64)
privateMsbắt buộc integer (int64)
productiveMsbắt buộc integer (int64)
productivityPct number (double) | null
shiftDaysbắt buộc integer (int32)
targetMs integer (int64) | null
teamId string (uuid) | null
teamName string | null
timeZonebắt buộc string
unproductiveMsbắt buộc integer (int64)
userIdbắt buộc string (uuid)
workdays integer (int32) | null
workedMsbắt buộc integer (int64)

WebhookDeliveryDetailDto

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

WebhookDeliveryDto

WebhookDeliveryDto.

TrườngKiểuMô tả
attemptsbắt buộc integer (int32)
createdAtbắt buộc string
deliveredAt string | null
eventIdbắt buộc string (uuid) The webhook-id header.
eventTypebắt buộc string
idbắt buộc 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
statusbắt buộc string pending, succeeded, failed, dead.

WebhookDeliveryPage

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

TrườngKiểuMô tả
itemsbắt buộc WebhookDeliveryDto[]
nextCursor string | null

WebhookEndpointDto

WebhookEndpointDto.

TrườngKiểuMô tả
createdAtbắt buộc string
description string | null
eventTypesbắt buộc string[]
idbắt buộc string (uuid)
ownerbắt buộc 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).
secretPrefixbắt buộc string The first 8 characters of the signing secret (whsec_Kx); never the secret.
statsbắt buộc WebhookEndpointStatsDto
statusbắt buộc string active, paused, disabled.
statusReason string | null manual, owner_inactive, failing, gone; null while active.
updatedAtbắt buộc string
urlbắt buộc string
versionbắt buộc integer (int64) row_version (ETag: "v<n>", If-Match of PATCH).

WebhookEndpointPage

GET /v1/webhook-endpoints.

TrườngKiểuMô tả
itemsbắt buộc WebhookEndpointDto[]
nextCursor string | null

WebhookEndpointStatsDto

The delivery statistics of an endpoint.

TrườngKiểuMô tả
consecutiveFailuresbắt buộc integer (int32)
lastFailureAt string | null
lastSuccessAt string | null

WebhookEventDto

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

TrườngKiểuMô tả
availablebắt buộc boolean The tenant's plan has the feature: an endpoint may subscribe.
descriptionbắt buộc string One English sentence (the panel translates by type).
feature string | null The plan feature the event needs (null: every plan with api_access).
objectbắt buộc string The data.object of the delivery body.
typebắt buộc string <object>.<verb>, e.g. time_entry.approved.

WebhookEventsDto

GET /v1/webhook-events.

TrườngKiểuMô tả
itemsbắt buộc WebhookEventDto[]

WebhookTestDto

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

TrườngKiểuMô tả
deliveryIdbắt buộc string The delivery of the test event (a string: the deliveries' id is a 64-bit integer).