Справочник публичного API

Публичный API Workify360 Focus позволяет вашим собственным скриптам и инструментам читать отчёты и данные о времени и вносить изменения по тем же правилам, что и в дашборде. Публичный API, API-ключи и вебхуки входят в тариф Premium.

Операции на этой странице сохраняют обратную совместимость. Машиночитаемый документ OpenAPI с теми же операциями:

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

Сгенерировано из контракта API версии 0.1.0 (c95fb97bb49a).

Аутентификация

Передавайте персональный API-ключ в заголовке Authorization каждого запроса. Ключ принадлежит создавшему его человеку, действует от его имени и никогда не делает больше, чем позволяет его текущая роль. Запрос с отсутствующим, неверным, просроченным или отозванным ключом получает 401 с кодом unauthorized.

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

Как создавать ключи, задавать их области доступа и отзывать их: API-ключи и публичный API

Области доступа (scopes)

Каждой операции нужна одна область доступа, указанная рядом с ней. Ключ получает доступ к операции, если у него есть эта область доступа, а текущие роль, команды и тариф его владельца допускают запрос — точно так же, как в дашборде.

Область доступаЧто разрешает
meВаш профиль и таймер
reports:readЧтение отчётов, записей времени, отсутствий, смен, команд, проектов, задач и экспорта
time:writeДобавление и изменение записей времени, отсутствий, смен, задач и времени, привязанного к задачам, а также рассмотрение заявок
org:adminУправление участниками, командами, приглашениями и проектами
webhooks:manageУправление эндпоинтами вебхуков

Лимиты запросов

Каждый ключ может отправлять 600 единиц в минуту, а организация — 1 800 для всех своих ключей вместе. Запрос, который что-то изменяет (любой, кроме GET и HEAD), считается за две единицы, любой другой — за одну. Кроме того, ключ может отправить не более 60 единиц разом, с пополнением по 10 в секунду: более 60 чтений (или 30 изменений) подряд получают 429, даже если в минуту их меньше 600.

ЗаголовокЗначение
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

Коды, для которых есть справочная статья, в списке операций являются ссылками.

Вебхуки

Вместо того чтобы снова и снова опрашивать API, ваш эндпоинт может получать подписанный HTTPS-запрос, когда что-то меняется. События, формат запроса, проверка подписи в Node.js и Python, повторные попытки и ротация секрета описаны в справочной статье: Вебхуки

Операции

Сгруппированы по разделам. Краткие описания и описания полей взяты из контракта API.

Отсутствия

GET /v1/absences Область доступа: reports:read

List absences overlapping a range.

Параметры
ИмяГдеТипОписание
from строка запроса string (date)
to строка запроса string (date) At most 366 days after from.
userId строка запроса string (uuid)
teamId строка запроса string (uuid)
status строка запроса string
typeId строка запроса string (uuid)
cursor строка запроса string
limit строка запроса integer (int32)
Ответы
200 AbsencePage
Ошибки

POST /v1/absences Область доступа: time:write

Request (or record) an absence.

Параметры
ИмяГдеТипОписание
Idempotency-Keyобязательный заголовок string Required: the same key and body return the first answer
Тело запроса
AbsenceRequest
Ответы
201 AbsenceDto
Ошибки

POST /v1/absences/{id}/decision Область доступа: time:write

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

Параметры
ИмяГдеТипОписание
idобязательный путь string (uuid) Id
If-Matchобязательный заголовок string ETag of the resource ("v<n>"); missing: 428, stale: 412
Тело запроса
CalendarDecisionRequest
Ответы
200 AbsenceDto
Ошибки

Активность

GET /v1/activity/day Область доступа: reports:read

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

Параметры
ИмяГдеТипОписание
date строка запроса string (date) The user's local day (required).
userId строка запроса string (uuid) Default: the caller; another user must be visible (else 403).
Ответы
200 ActivityDayDto
Ошибки

Распределение времени

GET /v1/allocations Область доступа: reports:read

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

Параметры
ИмяГдеТипОписание
userId строка запроса string (uuid) Default: the caller.
from строка запроса string (date) Local date, included.
to строка запроса string (date) Local date, included; at most 93 days after from.
projectId строка запроса string (uuid)
cursor строка запроса string
limit строка запроса integer (int32) 1–200 (default 200).
Ответы
200 AllocationPage
Ошибки

POST /v1/allocations Область доступа: time:write

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

Параметры
ИмяГдеТипОписание
Idempotency-Key заголовок string | null The same key and body return the first answer (a different body: 422 idempotency_key_reused)
Тело запроса
AllocationCreateRequest
Ответы
201 AllocationCreatedDto
Ошибки

Экспорт

POST /v1/exports Область доступа: reports:read

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

Параметры
ИмяГдеТипОписание
Idempotency-Keyобязательный заголовок string Required: the same key and body return the first answer
Тело запроса
CreateExportRequest
Ответы
202 ExportJobDto
Ошибки

GET /v1/exports/{id} Область доступа: reports:read

One export job (poll every 2 s).

Параметры
ИмяГдеТипОписание
idобязательный путь string (uuid) Id
Ответы
200 ExportJobDto
Ошибки

Мой профиль

GET /v1/me Область доступа: me

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

Ответы
200 MeDto
Ошибки

Участники

POST /v1/invitations Область доступа: org:admin

Invite a person.

Параметры
ИмяГдеТипОписание
Idempotency-Keyобязательный заголовок string Required: 1–255 printable ASCII characters
Тело запроса
CreateInvitation
Ответы
201 InvitationResult
Ошибки

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
Ошибки

POST /v1/projects Область доступа: org:admin

Add a project (Owners and Admins).

Параметры
ИмяГдеТипОписание
Idempotency-Key заголовок string | null The same key and body return the first answer (a different body: 422 idempotency_key_reused)
Тело запроса
ProjectRequest
Ответы
201 ProjectDto
Ошибки

PUT /v1/projects/{id} Область доступа: org:admin

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

Параметры
ИмяГдеТипОписание
idобязательный путь string (uuid) Project id
If-Matchобязательный заголовок string The ETag the caller read (412 version_conflict when it changed)
Тело запроса
ProjectRequest
Ответы
200 ProjectDto
Ошибки

Отчёты

GET /v1/reports/productivity Область доступа: reports:read

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

Параметры
ИмяГдеТипОписание
from строка запроса string (date)
to строка запроса string (date) day 93 days, week, month and range 366.
groupBy строка запроса string day, week, month or range.
teamId строка запроса string (uuid)
userId строка запроса string (uuid)
Ответы
200 PeriodReportDto
Ошибки

GET /v1/reports/projects Область доступа: reports:read

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

Параметры
ИмяГдеТипОписание
from строка запроса string (date) Local date, included.
to строка запроса string (date) Local date, included; at most 366 days after from.
groupBy строка запроса string One or two of project (default), task, user, client, day, comma separated.
projectIds строка запроса string Comma-separated project ids.
clientId строка запроса string (uuid)
userIds строка запроса string Comma-separated user ids (visible people only).
teamId строка запроса string (uuid)
billable строка запроса string all (default), billable or nonBillable.
includeProductive строка запроса boolean Also compute the productive time within the allocations (costly; default false).
Ответы
200 ProjectReportDto
Ошибки

GET /v1/reports/summary Область доступа: reports:read

The summary of the visible users over a range.

Параметры
ИмяГдеТипОписание
from строка запроса string (date)
to строка запроса string (date) At most 93 days after from.
teamId строка запроса string (uuid) Only the team's current members; the team must be visible (else 403).
Ответы
200 SummaryDto
Ошибки

GET /v1/reports/targets Область доступа: reports:read

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

Параметры
ИмяГдеТипОписание
from строка запроса string (date)
to строка запроса string (date)
type строка запроса string app, domain or host.
teamId строка запроса string (uuid)
userId строка запроса string (uuid)
q строка запроса string Search in the key and the name (.NET search).
level строка запроса string productive, unproductive or neutral.
categoryKey строка запроса string
unclassified строка запроса boolean Only targets without a category.
cursor строка запроса string
limit строка запроса integer (int32) 1–200, default 50.
Ответы
200 TargetListDto
Ошибки

GET /v1/reports/users/{userId}/daily Область доступа: reports:read

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

Параметры
ИмяГдеТипОписание
userIdобязательный путь string (uuid) User
from строка запроса string (date)
to строка запроса string (date) At most 93 days after from.
Ответы
200 UserDailyDto
Ошибки

Смены

GET /v1/shifts Область доступа: reports:read

List the shifts starting in a range.

Параметры
ИмяГдеТипОписание
from строка запроса string (date)
to строка запроса string (date)
teamId строка запроса string (uuid)
userId строка запроса string (uuid)
includeOpen строка запроса boolean Also open shifts (default true).
Ответы
200 ShiftListDto
Ошибки

POST /v1/shifts Область доступа: time:write

Create a shift (assigned or open).

Параметры
ИмяГдеТипОписание
Idempotency-Keyобязательный заголовок string Required: the same key and body return the first answer
Тело запроса
ShiftBody
Ответы
201 ShiftDto
Ошибки

Задачи

GET /v1/projects/{id}/tasks Область доступа: reports:read

A visible project's tasks, by sort order.

Параметры
ИмяГдеТипОписание
idобязательный путь string (uuid) Project id
status строка запроса string open, in_progress or done.
assigneeUserId строка запроса string (uuid)
includeArchived строка запроса boolean
cursor строка запроса string
limit строка запроса integer (int32) 1–500 (default 200).
Ответы
200 TaskPage
Ошибки

POST /v1/projects/{id}/tasks Область доступа: time:write

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

Параметры
ИмяГдеТипОписание
idобязательный путь string (uuid) Project id
Idempotency-Key заголовок string | null The same key and body return the first answer (a different body: 422 idempotency_key_reused)
Тело запроса
TaskRequest
Ответы
201 TaskDto
Ошибки

PUT /v1/tasks/{id} Область доступа: time:write

Change a task (the whole body).

Параметры
ИмяГдеТипОписание
idобязательный путь string (uuid) Task id
If-Matchобязательный заголовок string The ETag the caller read (412 version_conflict when it changed)
Тело запроса
TaskRequest
Ответы
200 TaskDto
Ошибки

Команды

GET /v1/teams Область доступа: reports:read

List teams.

Параметры
ИмяГдеТипОписание
includeArchived строка запроса boolean Also archived teams (default false)
cursor строка запроса string Opaque cursor of the next page
limit строка запроса integer (int32) 1–200, default 50
Ответы
200 TeamPage

POST /v1/teams Область доступа: org:admin

Create a team (the G1 endpoint).

Тело запроса
CreateTeam
Ответы
201 TeamDto
Ошибки
  • 403 forbidden (action teams.create)
  • 409 team_name_taken

PATCH /v1/teams/{id} Область доступа: org:admin

Rename a team or change its description.

Параметры
ИмяГдеТипОписание
idобязательный путь string (uuid) Team id
If-Matchобязательный заголовок string ETag of the team
Тело запроса
PatchTeam
Ответы
200 TeamDto
Ошибки
  • 409 team_name_taken

Записи времени

GET /v1/time-entries Область доступа: reports:read

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

Параметры
ИмяГдеТипОписание
userId строка запроса string (uuid) Default: the caller.
from строка запроса string (date) The entry's local day, required.
to строка запроса string (date) At most 93 days after from.
kind строка запроса string offline or deletion.
status строка запроса string pending, approved or rejected.
cursor строка запроса string
limit строка запроса integer (int32) 1–500.
Ответы
200 TimeEntryPage
Ошибки

POST /v1/time-entries Область доступа: time:write

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

Параметры
ИмяГдеТипОписание
Idempotency-Keyобязательный заголовок string Required: the same key and body return the first answer
Тело запроса
CreateTimeEntryRequest
Ответы
201 TimeEntryDto
Ошибки

GET /v1/time-entries/{id} Область доступа: reports:read

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

Параметры
ИмяГдеТипОписание
idобязательный путь string (uuid) Entry id
Ответы
200 TimeEntryDto
Ошибки

PUT /v1/time-entries/{id} Область доступа: time:write

Replace an entry's editable fields.

Параметры
ИмяГдеТипОписание
idобязательный путь string (uuid) Entry id
If-Matchобязательный заголовок string ETag of the resource ("v<n>"); missing: 428, stale: 412
Тело запроса
UpdateTimeEntryRequest
Ответы
200 TimeEntryDto
Ошибки

DELETE /v1/time-entries/{id} Область доступа: time:write

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

Параметры
ИмяГдеТипОписание
idобязательный путь string (uuid) Entry id
If-Matchобязательный заголовок string ETag of the resource ("v<n>"); missing: 428, stale: 412
Ответы
204 (без тела)
Ошибки

POST /v1/time-entries/{id}/decision Область доступа: time:write

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

Параметры
ИмяГдеТипОписание
idобязательный путь string (uuid) Entry id
If-Matchобязательный заголовок string ETag of the resource ("v<n>"); missing: 428, stale: 412
Тело запроса
TimeEntryDecisionRequest
Ответы
200 TimeEntryDto
Ошибки

Таймер

GET /v1/me/timer Область доступа: me

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

Параметры
ИмяГдеТипОписание
If-None-Match заголовок string | null The ETag the caller holds (304 when unchanged)
Ответы
200 TimerDto · 304 (без тела)
Ошибки

POST /v1/me/timer/start Область доступа: me

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

Параметры
ИмяГдеТипОписание
Idempotency-Key заголовок string | null The client's command id; a retry returns the first answer
Тело запроса
TimerStartRequest
Ответы
200 TimerCommandResultDto
Ошибки

POST /v1/me/timer/stop Область доступа: me

Stop the running timer at at; its segment becomes allocations.

Параметры
ИмяГдеТипОписание
Idempotency-Key заголовок string | null The client's command id; a retry returns the first answer
Тело запроса
TimerAtRequest
Ответы
200 TimerCommandResultDto
Ошибки

Вебхуки

POST /v1/webhook-endpoints Область доступа: webhooks:manage

Add a webhook endpoint (its signing secret is in this answer only; no Idempotency-Key: the answer holds a secret).

Тело запроса
CreateWebhookEndpointRequest
Ответы
201 CreatedWebhookEndpointDto
Ошибки

GET /v1/webhook-endpoints/{id} Область доступа: webhooks:manage

One webhook endpoint.

Параметры
ИмяГдеТипОписание
idобязательный путь string (uuid) The endpoint
Ответы
200 WebhookEndpointDto
Ошибки

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
Ошибки

GET /v1/webhook-endpoints/{id}/deliveries/{deliveryId} Область доступа: webhooks:manage

One delivery with the body that was sent.

Параметры
ИмяГдеТипОписание
idобязательный путь string (uuid) The endpoint
deliveryIdобязательный путь string The delivery (a 64-bit integer)
Ответы
200 WebhookDeliveryDetailDto
Ошибки

POST /v1/webhook-endpoints/{id}/deliveries/{deliveryId}/retry Область доступа: webhooks:manage

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

Параметры
ИмяГдеТипОписание
idобязательный путь string (uuid) The endpoint
deliveryIdобязательный путь string The delivery (a 64-bit integer)
Ответы
202 AcceptedDto
Ошибки

POST /v1/webhook-endpoints/{id}/rotate-secret Область доступа: webhooks:manage

A new signing secret (the previous one still signs for 24 hours).

Параметры
ИмяГдеТипОписание
idобязательный путь string (uuid) The endpoint
Ответы
200 RotatedWebhookSecretDto
Ошибки

POST /v1/webhook-endpoints/{id}/test Область доступа: webhooks:manage

Send the webhook.test event (also to a paused endpoint).

Параметры
ИмяГдеТипОписание
idобязательный путь string (uuid) The endpoint
Ответы
202 WebhookTestDto
Ошибки

Схемы

Тела запросов и ответов, которые используют операции. Обязательные поля отмечены.

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