公共 API 参考

借助 Workify360 Focus 公共 API,您自己的脚本和工具可以读取报表和时间数据,并按照与仪表盘相同的规则进行更改。公共 API、API 密钥和 Webhook 属于 Premium 套餐。

本页面上的操作保持向后兼容。相同操作的机器可读 OpenAPI 文档:

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

根据 API 契约版本 0.1.0(c95fb97bb49a)生成。

身份验证

在每个请求的 Authorization 标头中发送个人 API 密钥。密钥属于创建它的人,以该人的身份执行操作,且权限绝不会超出其当前角色所允许的范围。密钥缺失、错误、过期或已撤销的请求会收到 401,错误代码为 unauthorized。

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

如何创建密钥、设置权限范围和撤销密钥: API 密钥与公共 API

权限范围

每项操作都需要一个权限范围,显示在操作旁边。当密钥拥有该权限范围,且其所有者当前的角色、团队和套餐允许该请求时,密钥才能调用该操作,规则与仪表盘完全相同。

权限范围允许的操作
me您自己的个人资料和计时器
reports:read读取报表、时间条目、缺勤、班次、团队、项目、任务和导出
time:write添加和更改时间条目、缺勤、班次、任务以及分配给任务的时间,并处理申请
org:admin管理成员、团队、邀请和项目
webhooks:manage管理 Webhook 端点

速率限制

每个密钥每分钟最多可发送 600 个单位,一个组织的所有密钥合计每分钟最多 1,800 个单位。进行更改的请求(GET 和 HEAD 以外的任何请求)计为两个单位,其他请求计为一个单位。此外,一个密钥一次最多可发送 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: 12随 429(代码 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 中指定的秒数

有帮助文章的代码在操作列表中显示为链接。

Webhook

无需反复调用 API,当数据发生变化时,您的端点即可收到一个带签名的 HTTPS 请求。事件、请求格式、如何在 Node.js 和 Python 中验证签名、重试以及密钥轮换,均在以下帮助文章中说明: Webhook

操作

按领域分组。摘要和字段说明均来自 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
错误

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
错误

Webhook

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).