مرجع واجهة API العامة

تتيح واجهة API العامة في Workify360 Focus لبرامجك النصية وأدواتك قراءة التقارير وبيانات الوقت وإجراء التغييرات وفق القواعد نفسها المطبّقة في لوحة المعلومات. وواجهة API العامة ومفاتيح API وWebhooks جزء من باقة 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 العامة

النطاقات

تحتاج كل عملية إلى نطاق واحد يظهر بجانبها. ويصل المفتاح إلى العملية عندما يملك ذلك النطاق ويسمح دور مالكه الحالي وفرقه وباقته بالطلب، تمامًا كما في لوحة المعلومات.

النطاقما يسمح به
meملفك الشخصي ومؤقّتك
reports:readقراءة التقارير وإدخالات الوقت والغياب والورديات والفرق والمشاريع والمهام وعمليات التصدير
time:writeإضافة إدخالات الوقت والغياب والورديات والمهام والوقت المخصّص للمهام وتعديلها، والبتّ في الطلبات
org:adminإدارة الأعضاء والفرق والدعوات والمشاريع
webhooks:manageإدارة نقاط نهاية Webhooks

حدود المعدل

يمكن لكل مفتاح إرسال 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

الرموز التي لها مقالة مساعدة تظهر روابطَ في قائمة العمليات.

Webhooks

بدلًا من الاستعلام من API مرارًا وتكرارًا، يمكن لنقطة نهاية تابعة لك أن تتلقى طلب HTTPS موقّعًا عندما يتغيّر شيء ما. وتشرح مقالة المساعدة الأحداث، وصيغة الطلب، وكيفية التحقق من التوقيع في Node.js وPython، وإعادة المحاولة، وتدوير السر: Webhooks

العمليات

مجمّعة حسب المجال. والملخصات وأوصاف الحقول مأخوذة من عقد 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
الأخطاء

Webhooks

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
الأخطاء

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