مرجع API عمومی

API عمومی Workify360 Focus به اسکریپت‌ها و ابزارهای خود شما امکان می‌دهد گزارش‌ها و داده‌های زمانی را بخوانند و با همان قواعد داشبورد تغییراتی ایجاد کنند. API عمومی، کلیدهای API و وب‌هوک‌ها بخشی از پلن Premium هستند.

عملیات این صفحه با نسخه‌های قبلی سازگار نگه داشته می‌شوند. سند OpenAPI ماشین‌خوان همین عملیات:

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

تولیدشده از قرارداد API نسخهٔ 0.1.0 (c95fb97bb49a).

احراز هویت

در هدر Authorization هر درخواست یک کلید API شخصی بفرستید. هر کلید متعلق به فردی است که آن را ساخته، از طرف همان فرد عمل می‌کند و هرگز بیش از آنچه نقش فعلی او اجازه می‌دهد کاری انجام نمی‌دهد. درخواستی که کلیدش وجود نداشته باشد، نادرست، منقضی یا باطل‌شده باشد، پاسخ 401 با کد unauthorized دریافت می‌کند.

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

نحوهٔ ساخت، تعیین دامنهٔ دسترسی و باطل کردن کلیدها: کلیدهای API و API عمومی

دامنه‌های دسترسی (scope)

هر عملیات به یک دامنهٔ دسترسی نیاز دارد که کنار آن نمایش داده شده است. یک کلید زمانی به یک عملیات دسترسی دارد که آن دامنه را داشته باشد و نقش، تیم‌ها و پلن فعلی مالک آن اجازهٔ درخواست را بدهند، دقیقاً مانند داشبورد.

دامنهٔ دسترسیچه چیزی را مجاز می‌کند
meپروفایل و تایمر خود شما
reports:readخواندن گزارش‌ها، ورودی‌های زمان، غیبت‌ها، شیفت‌ها، تیم‌ها، پروژه‌ها، وظایف و خروجی‌ها
time:writeافزودن و تغییر ورودی‌های زمان، غیبت‌ها، شیفت‌ها، وظایف و زمان اختصاص‌یافته به وظایف، و تصمیم‌گیری دربارهٔ درخواست‌ها
org:adminمدیریت اعضا، تیم‌ها، دعوت‌نامه‌ها و پروژه‌ها
webhooks:manageمدیریت اندپوینت‌های وب‌هوک

محدودیت نرخ

هر کلید می‌تواند در هر دقیقه ۶۰۰ واحد بفرستد و هر سازمان برای همهٔ کلیدهایش روی هم ۱٬۸۰۰ واحد. درخواستی که چیزی را تغییر می‌دهد (هر چیزی غیر از GET و HEAD) دو واحد حساب می‌شود و هر درخواست دیگر یک واحد. هر کلید همچنین می‌تواند حداکثر ۶۰ واحد را یکجا بفرستد که با سرعت ۱۰ واحد در ثانیه دوباره پر می‌شود: بیش از ۶۰ خواندن (یا ۳۰ تغییر) پشت سر هم، حتی با کمتر از ۶۰۰ در دقیقه، پاسخ 429 می‌گیرد.

هدرمعنا
RateLimit: "key";r=598;t=2در هر پاسخ شمرده‌شده: واحدهای باقی‌ماندهٔ کلید و ثانیه‌هایی که تا پر شدن دوبارهٔ آن‌ها مانده است
RateLimit-Policy: "key";q=600;w=60, "tenant";q=1800;w=60در هر پاسخ شمرده‌شده: محدودیت‌های دقیقه‌ای کلید و سازمان
Retry-After: 12همراه با 429 (کد rate_limited): ثانیه‌هایی که باید پیش از درخواست بعدی صبر کنید

خطاها

هر خطا یک سند مشکل مطابق RFC 9457 است (Content-Type: application/problem+json). code یک کد پایدار snake_case است که می‌توانید در برنامه‌نویسی به آن تکیه کنید؛ title یک متن انگلیسی برای لاگ‌هاست. type نشانی راهنمای کد است، یعنی https://workify360.com/help/errors/<code>/ که در آن هر _ به‌صورت - نوشته می‌شود، و اگر کد مقالهٔ راهنما داشته باشد، همان مقاله را باز می‌کند.

HTTP/1.1 403 Forbidden
Content-Type: application/problem+json

{
  "type": "https://workify360.com/help/errors/forbidden/",
  "title": "Forbidden",
  "status": 403,
  "code": "forbidden",
  "action": "webhooks.manage",
  "traceId": "4bf92f3577b34da6a3ce929d0e0e4736"
}

برخی خطاها فیلدهای بیشتری دارند: errors (خطاهای فیلدها در 422 validation_failed)، action (مجوزی که یک 403 forbidden به آن اشاره دارد)، requiredPlan (402 feature_not_in_plan)، retryAfterSeconds (429 و 503) و traceId (هنگام تماس با پشتیبانی آن را ذکر کنید).

وضعیتکدچه زمانی
400 invalid_request یک پارامتر نادرست است یا وجود ندارد
401 unauthorized کلید وجود ندارد، نادرست، منقضی یا باطل‌شده است، یا مالک آن سازمان را ترک کرده است
402 feature_not_in_plan, subscription_read_only پلن شامل این قابلیت نیست، یا اشتراک فقط‌خواندنی است
403 forbidden, feature_not_enabled کلید دامنهٔ دسترسی لازم را ندارد، یا نقش، تیم‌ها یا تنظیمات فعلی مالک آن اجازهٔ درخواست را نمی‌دهند
412 version_conflict نسخهٔ If-Match دیگر به‌روز نیست؛ منبع را دوباره بخوانید
422 validation_failed بدنهٔ درخواست نامعتبر است؛ errors فیلدها را فهرست می‌کند
428 precondition_required این عملیات به هدر If-Match با نسخه‌ای که خوانده‌اید نیاز دارد
429 rate_limited درخواست‌ها بیش از حد است؛ به تعداد ثانیه‌های Retry-After صبر کنید

کدهایی که مقالهٔ راهنما دارند در فهرست عملیات به‌صورت پیوند نمایش داده می‌شوند.

وب‌هوک‌ها

به‌جای پرسیدن مکرر از 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
خطاها

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
خطاها

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
خطاها

اسکیماها

بدنه‌های درخواست و پاسخی که عملیات از آن‌ها استفاده می‌کنند. فیلدهای الزامی علامت‌گذاری شده‌اند.

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