Openbare API-referentie

Met de openbare API van Workify360 Focus kunnen je eigen scripts en tools rapporten en tijdgegevens lezen en wijzigingen aanbrengen, met dezelfde regels als het dashboard. De openbare API, API-sleutels en webhooks maken deel uit van het Premium-abonnement.

De bewerkingen op deze pagina blijven achterwaarts compatibel. Het machineleesbare OpenAPI-document van dezelfde bewerkingen:

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

Gegenereerd uit het API-contract versie 0.1.0 (c95fb97bb49a).

Authenticatie

Stuur bij elk verzoek een persoonlijke API-sleutel mee in de header Authorization. Een sleutel hoort bij de persoon die hem heeft aangemaakt, handelt als die persoon en doet nooit meer dan diens huidige rol toestaat. Een verzoek met een ontbrekende, onjuiste, verlopen of ingetrokken sleutel krijgt 401 met de code unauthorized.

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

Zo maak je sleutels aan, geef je ze scopes en trek je ze in: API-sleutels en de openbare API

Scopes

Elke bewerking vereist één scope, die ernaast staat. Een sleutel heeft toegang tot een bewerking als hij die scope heeft en de huidige rol, teams en het abonnement van de eigenaar het verzoek toestaan, precies zoals in het dashboard.

ScopeWat het toestaat
meJe eigen profiel en je timer
reports:readRapporten, tijdregistraties, afwezigheid, diensten, teams, projecten, taken en exports lezen
time:writeTijdregistraties, afwezigheid, diensten, taken en aan taken toegewezen tijd toevoegen en wijzigen, en over aanvragen beslissen
org:adminLeden, teams, uitnodigingen en projecten beheren
webhooks:manageWebhook-endpoints beheren

Rate limits

Elke sleutel mag 600 eenheden per minuut versturen en een organisatie 1.800 voor al haar sleutels samen. Een verzoek dat iets wijzigt (alles behalve GET en HEAD) telt als twee eenheden, elk ander verzoek als één. Een sleutel kan bovendien hoogstens 60 eenheden tegelijk versturen, aangevuld met 10 per seconde: meer dan 60 leesverzoeken (of 30 wijzigingen) in een piek krijgen 429, ook als het onder de 600 per minuut blijft.

HeaderBetekenis
RateLimit: "key";r=598;t=2Bij elk geteld antwoord: de eenheden die de sleutel nog over heeft en het aantal seconden totdat ze weer vol zijn
RateLimit-Policy: "key";q=600;w=60, "tenant";q=1800;w=60Bij elk geteld antwoord: de limieten per minuut van de sleutel en van de organisatie
Retry-After: 12Bij 429 (code rate_limited): het aantal seconden dat je moet wachten voor het volgende verzoek

Foutmeldingen

Een fout is een problem document volgens RFC 9457 (Content-Type: application/problem+json). code is een stabiele snake_case-code om tegen te programmeren; title is een Engelse tekst voor logs. type is het helpadres van de code, https://workify360.com/help/errors/<code>/ met elke _ geschreven als -, dat het helpartikel opent dat de code uitlegt als de code er een heeft.

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

Sommige problemen bevatten extra velden: errors (de veldfouten van 422 validation_failed), action (de toestemming waarnaar een 403 forbidden verwijst), requiredPlan (402 feature_not_in_plan), retryAfterSeconds (429 en 503) en traceId (vermeld die als je contact opneemt met support).

StatusCodeWanneer
400 invalid_request Een parameter is ongeldig of ontbreekt
401 unauthorized De sleutel ontbreekt, is onjuist, verlopen of ingetrokken, of de eigenaar heeft de organisatie verlaten
402 feature_not_in_plan, subscription_read_only Het abonnement bevat de functie niet, of het abonnement is alleen-lezen
403 forbidden, feature_not_enabled De sleutel mist de scope, of de huidige rol, teams of instellingen van de eigenaar staan het verzoek niet toe
412 version_conflict De versie in If-Match is niet meer actueel; lees de resource opnieuw
422 validation_failed De body is ongeldig; errors somt de velden op
428 precondition_required De bewerking vereist een header If-Match met de versie die je hebt gelezen
429 rate_limited Te veel verzoeken; wacht het aantal seconden uit Retry-After

Codes met een helpartikel zijn links in de lijst met bewerkingen.

Webhooks

In plaats van de API steeds opnieuw te bevragen, kan een endpoint van jou een ondertekend HTTPS-verzoek ontvangen als er iets verandert. De events, het formaat van het verzoek, hoe je de handtekening controleert in Node.js en Python, nieuwe pogingen en het roteren van het secret worden uitgelegd in het helpartikel: Webhooks

Bewerkingen

Gegroepeerd per onderwerp. De samenvattingen en veldbeschrijvingen komen uit het API-contract.

Afwezigheid

GET /v1/absences Scope: reports:read

List absences overlapping a range.

Parameters
NaamInTypeBeschrijving
from query string (date)
to query string (date) At most 366 days after from.
userId query string (uuid)
teamId query string (uuid)
status query string
typeId query string (uuid)
cursor query string
limit query integer (int32)
Responses
200 AbsencePage
Foutmeldingen

POST /v1/absences Scope: time:write

Request (or record) an absence.

Parameters
NaamInTypeBeschrijving
Idempotency-Keyverplicht header string Required: the same key and body return the first answer
Request body
AbsenceRequest
Responses
201 AbsenceDto
Foutmeldingen

POST /v1/absences/{id}/decision Scope: time:write

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

Parameters
NaamInTypeBeschrijving
idverplicht pad string (uuid) Id
If-Matchverplicht header string ETag of the resource ("v<n>"); missing: 428, stale: 412
Request body
CalendarDecisionRequest
Responses
200 AbsenceDto
Foutmeldingen

Activiteit

GET /v1/activity/day Scope: reports:read

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

Parameters
NaamInTypeBeschrijving
date query string (date) The user's local day (required).
userId query string (uuid) Default: the caller; another user must be visible (else 403).
Responses
200 ActivityDayDto
Foutmeldingen

Tijdtoewijzingen

GET /v1/allocations Scope: 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).

Parameters
NaamInTypeBeschrijving
userId query string (uuid) Default: the caller.
from query string (date) Local date, included.
to query string (date) Local date, included; at most 93 days after from.
projectId query string (uuid)
cursor query string
limit query integer (int32) 1–200 (default 200).
Responses
200 AllocationPage
Foutmeldingen

POST /v1/allocations Scope: time:write

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

Parameters
NaamInTypeBeschrijving
Idempotency-Key header string | null The same key and body return the first answer (a different body: 422 idempotency_key_reused)
Request body
AllocationCreateRequest
Responses
201 AllocationCreatedDto
Foutmeldingen

Exports

POST /v1/exports Scope: reports:read

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

Parameters
NaamInTypeBeschrijving
Idempotency-Keyverplicht header string Required: the same key and body return the first answer
Request body
CreateExportRequest
Responses
202 ExportJobDto
Foutmeldingen

GET /v1/exports/{id} Scope: reports:read

One export job (poll every 2 s).

Parameters
NaamInTypeBeschrijving
idverplicht pad string (uuid) Id
Responses
200 ExportJobDto
Foutmeldingen

Eigen profiel

GET /v1/me Scope: me

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

Responses
200 MeDto
Foutmeldingen

Leden

GET /v1/members Scope: org:admin

List members.

Parameters
NaamInTypeBeschrijving
status query string Comma-separated statuses (default active,invited,suspended)
teamId query string (uuid) Primary team
role query string owner, admin, team_admin, manager or employee
q query string Part of the name or e-mail (Turkish case folding)
cursor query string Opaque cursor of the next page
limit query integer (int32) 1–200, default 50
Responses
200 MemberPage
Foutmeldingen
  • 403 No right

GET /v1/members/{id} Scope: org:admin

One member.

Parameters
NaamInTypeBeschrijving
idverplicht pad string (uuid) Membership id
Responses
200 MemberDto
Foutmeldingen
  • 404 member_not_found

PATCH /v1/members/{id} Scope: org:admin

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

Parameters
NaamInTypeBeschrijving
idverplicht pad string (uuid) Membership id
If-Matchverplicht header string ETag of the member ("v<n>")
Request body
PatchMember
Responses
200 MemberDto
Foutmeldingen

POST /v1/members/{id}/reactivate Scope: org:admin

Reactivate a suspended member.

Parameters
NaamInTypeBeschrijving
idverplicht pad string (uuid) Membership id
Responses
200 MemberDto

POST /v1/members/{id}/suspend Scope: org:admin

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

Parameters
NaamInTypeBeschrijving
idverplicht pad string (uuid) Membership id
Responses
200 MemberDto
Foutmeldingen
  • 409 conflict (an invitation is revoked instead)

Projecten

GET /v1/projects Scope: 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).

Parameters
NaamInTypeBeschrijving
status query string active, on_hold or completed.
clientId query string (uuid)
q query string Name or code search (case-insensitive).
includeArchived query boolean
mine query boolean Only the projects the caller may track time on.
cursor query string
limit query integer (int32) 1–200 (default 50).
Responses
200 ProjectPage
Foutmeldingen

POST /v1/projects Scope: org:admin

Add a project (Owners and Admins).

Parameters
NaamInTypeBeschrijving
Idempotency-Key header string | null The same key and body return the first answer (a different body: 422 idempotency_key_reused)
Request body
ProjectRequest
Responses
201 ProjectDto
Foutmeldingen

PUT /v1/projects/{id} Scope: org:admin

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

Parameters
NaamInTypeBeschrijving
idverplicht pad string (uuid) Project id
If-Matchverplicht header string The ETag the caller read (412 version_conflict when it changed)
Request body
ProjectRequest
Responses
200 ProjectDto
Foutmeldingen

Rapporten

GET /v1/reports/productivity Scope: reports:read

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

Parameters
NaamInTypeBeschrijving
from query string (date)
to query string (date) day 93 days, week, month and range 366.
groupBy query string day, week, month or range.
teamId query string (uuid)
userId query string (uuid)
Responses
200 PeriodReportDto
Foutmeldingen

GET /v1/reports/projects Scope: 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.

Parameters
NaamInTypeBeschrijving
from query string (date) Local date, included.
to query string (date) Local date, included; at most 366 days after from.
groupBy query string One or two of project (default), task, user, client, day, comma separated.
projectIds query string Comma-separated project ids.
clientId query string (uuid)
userIds query string Comma-separated user ids (visible people only).
teamId query string (uuid)
billable query string all (default), billable or nonBillable.
includeProductive query boolean Also compute the productive time within the allocations (costly; default false).
Responses
200 ProjectReportDto
Foutmeldingen

GET /v1/reports/summary Scope: reports:read

The summary of the visible users over a range.

Parameters
NaamInTypeBeschrijving
from query string (date)
to query string (date) At most 93 days after from.
teamId query string (uuid) Only the team's current members; the team must be visible (else 403).
Responses
200 SummaryDto
Foutmeldingen

GET /v1/reports/targets Scope: reports:read

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

Parameters
NaamInTypeBeschrijving
from query string (date)
to query string (date)
type query string app, domain or host.
teamId query string (uuid)
userId query string (uuid)
q query string Search in the key and the name (.NET search).
level query string productive, unproductive or neutral.
categoryKey query string
unclassified query boolean Only targets without a category.
cursor query string
limit query integer (int32) 1–200, default 50.
Responses
200 TargetListDto
Foutmeldingen

GET /v1/reports/users/{userId}/daily Scope: reports:read

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

Parameters
NaamInTypeBeschrijving
userIdverplicht pad string (uuid) User
from query string (date)
to query string (date) At most 93 days after from.
Responses
200 UserDailyDto
Foutmeldingen

Diensten

GET /v1/shifts Scope: reports:read

List the shifts starting in a range.

Parameters
NaamInTypeBeschrijving
from query string (date)
to query string (date)
teamId query string (uuid)
userId query string (uuid)
includeOpen query boolean Also open shifts (default true).
Responses
200 ShiftListDto
Foutmeldingen

POST /v1/shifts Scope: time:write

Create a shift (assigned or open).

Parameters
NaamInTypeBeschrijving
Idempotency-Keyverplicht header string Required: the same key and body return the first answer
Request body
ShiftBody
Responses
201 ShiftDto
Foutmeldingen

Taken

GET /v1/projects/{id}/tasks Scope: reports:read

A visible project's tasks, by sort order.

Parameters
NaamInTypeBeschrijving
idverplicht pad string (uuid) Project id
status query string open, in_progress or done.
assigneeUserId query string (uuid)
includeArchived query boolean
cursor query string
limit query integer (int32) 1–500 (default 200).
Responses
200 TaskPage
Foutmeldingen

POST /v1/projects/{id}/tasks Scope: time:write

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

Parameters
NaamInTypeBeschrijving
idverplicht pad string (uuid) Project id
Idempotency-Key header string | null The same key and body return the first answer (a different body: 422 idempotency_key_reused)
Request body
TaskRequest
Responses
201 TaskDto
Foutmeldingen

PUT /v1/tasks/{id} Scope: time:write

Change a task (the whole body).

Parameters
NaamInTypeBeschrijving
idverplicht pad string (uuid) Task id
If-Matchverplicht header string The ETag the caller read (412 version_conflict when it changed)
Request body
TaskRequest
Responses
200 TaskDto
Foutmeldingen

Teams

GET /v1/teams Scope: reports:read

List teams.

Parameters
NaamInTypeBeschrijving
includeArchived query boolean Also archived teams (default false)
cursor query string Opaque cursor of the next page
limit query integer (int32) 1–200, default 50
Responses
200 TeamPage

POST /v1/teams Scope: org:admin

Create a team (the G1 endpoint).

Request body
CreateTeam
Responses
201 TeamDto
Foutmeldingen
  • 403 forbidden (action teams.create)
  • 409 team_name_taken

PATCH /v1/teams/{id} Scope: org:admin

Rename a team or change its description.

Parameters
NaamInTypeBeschrijving
idverplicht pad string (uuid) Team id
If-Matchverplicht header string ETag of the team
Request body
PatchTeam
Responses
200 TeamDto
Foutmeldingen
  • 409 team_name_taken

Tijdregistraties

GET /v1/time-entries Scope: reports:read

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

Parameters
NaamInTypeBeschrijving
userId query string (uuid) Default: the caller.
from query string (date) The entry's local day, required.
to query string (date) At most 93 days after from.
kind query string offline or deletion.
status query string pending, approved or rejected.
cursor query string
limit query integer (int32) 1–500.
Responses
200 TimeEntryPage
Foutmeldingen

POST /v1/time-entries Scope: time:write

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

Parameters
NaamInTypeBeschrijving
Idempotency-Keyverplicht header string Required: the same key and body return the first answer
Request body
CreateTimeEntryRequest
Responses
201 TimeEntryDto
Foutmeldingen

GET /v1/time-entries/{id} Scope: reports:read

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

Parameters
NaamInTypeBeschrijving
idverplicht pad string (uuid) Entry id
Responses
200 TimeEntryDto
Foutmeldingen

PUT /v1/time-entries/{id} Scope: time:write

Replace an entry's editable fields.

Parameters
NaamInTypeBeschrijving
idverplicht pad string (uuid) Entry id
If-Matchverplicht header string ETag of the resource ("v<n>"); missing: 428, stale: 412
Request body
UpdateTimeEntryRequest
Responses
200 TimeEntryDto
Foutmeldingen

DELETE /v1/time-entries/{id} Scope: time:write

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

Parameters
NaamInTypeBeschrijving
idverplicht pad string (uuid) Entry id
If-Matchverplicht header string ETag of the resource ("v<n>"); missing: 428, stale: 412
Responses
204 (geen body)
Foutmeldingen

POST /v1/time-entries/{id}/decision Scope: time:write

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

Parameters
NaamInTypeBeschrijving
idverplicht pad string (uuid) Entry id
If-Matchverplicht header string ETag of the resource ("v<n>"); missing: 428, stale: 412
Request body
TimeEntryDecisionRequest
Responses
200 TimeEntryDto
Foutmeldingen

Timer

GET /v1/me/timer Scope: me

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

Parameters
NaamInTypeBeschrijving
If-None-Match header string | null The ETag the caller holds (304 when unchanged)
Responses
200 TimerDto · 304 (geen body)
Foutmeldingen

POST /v1/me/timer/start Scope: me

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

Parameters
NaamInTypeBeschrijving
Idempotency-Key header string | null The client's command id; a retry returns the first answer
Request body
TimerStartRequest
Responses
200 TimerCommandResultDto
Foutmeldingen

Webhooks

PATCH /v1/webhook-endpoints/{id} Scope: webhooks:manage

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

Parameters
NaamInTypeBeschrijving
idverplicht pad string (uuid) The endpoint
If-Matchverplicht header string The endpoint's ETag ("v<n>")
Request body
UpdateWebhookEndpointRequest
Responses
200 WebhookEndpointDto
Foutmeldingen

DELETE /v1/webhook-endpoints/{id} Scope: webhooks:manage

Delete an endpoint and its deliveries.

Parameters
NaamInTypeBeschrijving
idverplicht pad string (uuid) The endpoint
Responses
204 (geen body)
Foutmeldingen

GET /v1/webhook-endpoints/{id}/deliveries Scope: webhooks:manage

The deliveries of an endpoint, newest first.

Parameters
NaamInTypeBeschrijving
idverplicht pad string (uuid) The endpoint
status query string pending, succeeded, failed, dead.
eventType query string
cursor query string Opaque cursor of the next page.
limit query integer (int32) 1–200, default 50.
Responses
200 WebhookDeliveryPage
Foutmeldingen

Schema's

De request- en response-bodies die de bewerkingen gebruiken. Verplichte velden zijn gemarkeerd.

AbsenceDto

An absence.

VeldTypeBeschrijving
createdAtverplicht string (date-time)
createdByverplicht CalendarUserRefDto
daysverplicht 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
deductionByYearverplicht object The balance deduction per year, e.g. {"2026": 3.5}; empty for types that do not deduct.
endverplicht string (date-time)
endDateverplicht string (date)
endTime string | null
half string | null
idverplicht string (uuid)
note string | null
permissionsverplicht AbsencePermissionsDto
startverplicht string (date-time) UTC coverage start.
startDateverplicht string (date)
startTime string | null
statusverplicht string
timeZoneverplicht string
typeverplicht AbsenceTypeRefDto
unitverplicht string
updatedAtverplicht string (date-time)
userverplicht CalendarPersonDto
userIdverplicht string (uuid)

AbsencePage

GET /v1/absences.

VeldTypeBeschrijving
itemsverplicht AbsenceDto[]
nextCursor string | null

AbsencePermissionsDto

VeldTypeBeschrijving
canApproveverplicht boolean
canCancelverplicht boolean
canEditverplicht boolean

AbsenceRequest

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

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

VeldTypeBeschrijving
colorverplicht string
countsAsWorkedverplicht boolean
deductsFromBalanceverplicht boolean
idverplicht string (uuid)
key string | null
nameverplicht string
paidverplicht boolean
timeEffectverplicht string

AcceptedDto

202 Accepted of a queued job.

VeldTypeBeschrijving
acceptedverplicht boolean Always true.

AccessDto

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

VeldTypeBeschrijving
assignableRolesverplicht string[]
canManageCompanySettingsverplicht boolean
canManageTeamsverplicht boolean
canManageUsersverplicht boolean
manageTeamIdsverplicht string[]
scopeverplicht string company, teams or self.
unassignedFallbackverplicht boolean
viewTeamIdsverplicht string[]

ActivityDayDto

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

VeldTypeBeschrijving
absenceCreditMsverplicht integer (int64) A worked absence tops the worked time up to the expected work.
activeMsverplicht integer (int64) Window time ∩ not AFK (computer time only).
afkCoverageverplicht boolean False when no device reported AFK data (idle unknown).
appsverplicht AppUsageDto[] Daily totals, largest first.
arrivalAt string (date-time) | null
atWorkMsverplicht integer (int64)
attendance DayAttendanceDto | null
categoriesverplicht CategoryUsageDto[] Active time per category (null key = uncategorized); offline time is in no category.
classifiedverplicht boolean False for a day written before the Phase 2 classification (all neutral).
dateverplicht string (date)
dayEndverplicht string (date-time)
dayStartverplicht string (date-time) The day's window: local midnight, or the end of the previous day's night shift window.
deletedMsverplicht integer (int64) Tracked time removed by approved deletions (part of idle).
domainsverplicht DomainUsageDto[]
hostsverplicht HostUsageDto[] Hosts with a URL, at most 50, largest first.
idleMsverplicht integer (int64)
leftAt string (date-time) | null
meetingMsverplicht integer (int64) Active time the meeting apps exception turned from idle into active.
offlineMsverplicht integer (int64) Approved offline time outside the tracked active time.
pendingOfflineMsverplicht integer (int64) Pending offline entries of the day (information only).
plan DayPlanDto | null
privateIntervalsverplicht TimeIntervalDto[] Private intervals of the day, merged and clipped, without detail.
privateMsverplicht integer (int64) Private time outside active and offline time.
productivityverplicht DayProductivityDto
recomputingverplicht boolean The day waits in the recompute queue (the UI refetches every 15 s).
slotsverplicht 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).
timeEntriesverplicht TimeEntryDto[] Offline and deletion entries of every status overlapping the day's window, by start; the caller's permissions.
timeZoneverplicht string The zone the day was computed in; the UI draws slots at their wall-clock time in it.
userIdverplicht string (uuid)
workedMsverplicht integer (int64) activeMs + offlineMs: the denominator of productivity.productivityPct.

ActivitySlotDto

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

VeldTypeBeschrijving
activeMsverplicht integer (int64)
appsverplicht AppUsageDto[]
neutralMsverplicht integer (int64)
offlineMsverplicht integer (int64)
productiveMsverplicht integer (int64)
slotStartverplicht string (date-time)
unproductiveMsverplicht integer (int64)

AffectedAllocationDto

An allocation replace changed.

VeldTypeBeschrijving
changeverplicht string trimmed, split or deleted.
idverplicht string (uuid)

AllocationCreateRequest

POST /v1/allocations (Idempotency-Key).

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

VeldTypeBeschrijving
affectedverplicht AffectedAllocationDto[]
allocationverplicht AllocationDto

AllocationDto

Time on a project.

VeldTypeBeschrijving
createdAtverplicht string (date-time)
createdByverplicht NamedRefDto
durationMsverplicht integer (int64)
effectiveBillableverplicht boolean
endedAtverplicht string (date-time)
idverplicht 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.
localDateverplicht string (date) The start's day in the person's zone (rates, reports).
note string | null
permissionsverplicht AllocationPermissionsDto
projectverplicht ProjectRefDto
sourceverplicht string timer, manual or assignment.
startedAtverplicht string (date-time)
task NamedRefDto | null
timeZoneverplicht string
updatedAtverplicht string (date-time)
userIdverplicht string (uuid)
versionverplicht integer (int64) The row version: If-Match: "v<version>" of a change (the same value as the resource's ETag).

AllocationPage

GET /v1/allocations.

VeldTypeBeschrijving
itemsverplicht AllocationDto[]
nextCursor string | null

AllocationPermissionsDto

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

VeldTypeBeschrijving
deleteverplicht boolean
editverplicht boolean

AppTotalDto

VeldTypeBeschrijving
activeMsverplicht integer (int64)
appKeyverplicht string
categoryKey string | null
level string | null Level in the response's levelContext.
nameverplicht string
percentageverplicht 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".

VeldTypeBeschrijving
activeMsverplicht integer (int64)
appKeyverplicht string
categoryKey string | null
level string | null The app's own rule (productive, unproductive, neutral).
levelSource string | null team, company, default or offline.
nameverplicht string

BudgetDto

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

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

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

VeldTypeBeschrijving
decision string | null
note string | null

CalendarPersonDto

A user with the current team.

VeldTypeBeschrijving
fullName string | null
idverplicht string (uuid)
teamId string (uuid) | null
teamName string | null

CalendarUserRefDto

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

VeldTypeBeschrijving
fullName string | null
idverplicht string (uuid)

CapabilitiesDto

Subscription capabilities.

VeldTypeBeschrijving
featuresverplicht string[]
readOnlyverplicht boolean

CategoryUsageDto

VeldTypeBeschrijving
activeMsverplicht 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.

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

VeldTypeBeschrijving
emailverplicht string
fullNameverplicht string
locale string | null Language of the e-mail and the acceptance page (tr, en); the organization's default otherwise.
roleverplicht string admin, team_admin, manager or employee.
teamId string (uuid) | null
timeZone string | null
viewerTeamIds string (uuid)[]

CreateTeam

POST /v1/teams.

VeldTypeBeschrijving
description string | null At most 500 characters.
nameverplicht string 1–100 characters, unique among active teams (Turkish case folding).

CreateTimeEntryRequest

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

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

VeldTypeBeschrijving
description string | null ≤ 200 characters.
eventTypesverplicht string[] 1–50 catalog event types of the tenant's plan.
urlverplicht string https://… (≤ 2048; no user info, no fragment; every resolved address public).

CreatedWebhookEndpointDto

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

VeldTypeBeschrijving
endpointverplicht WebhookEndpointDto
secretverplicht string whsec_<base64>: shown once, never again.

DailyHolidayDto

A holiday of a daily report day.

VeldTypeBeschrijving
half string | null
keyverplicht string
nameverplicht string English name; nameTr is the Turkish one.
nameTrverplicht string

DayAbsenceDto

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

VeldTypeBeschrijving
colorverplicht string
fractionverplicht number (double) The day's approved absence coverage (0–1).
half string | null
typeKey string | null
typeName string | null
unitverplicht string

DayAttendanceDto

Attendance of the day on the day plan.

VeldTypeBeschrijving
expectedEnd string (date-time) | null
expectedStart string (date-time) | null
flexibleverplicht boolean
lateByMsverplicht integer (int64)
lateToleranceMinutesverplicht integer (int32)
leftEarlyverplicht boolean
leftEarlyByMsverplicht integer (int64)
statusverplicht string onTime, late, absent, notStarted, dayOff, onLeave, holiday.
targetMsverplicht integer (int64) The plan's target (the Effectiveness % denominator).
workdayverplicht boolean

DayPlanDto

The day plan of one user's day.

VeldTypeBeschrijving
absencesverplicht PlanAbsenceDto[] Approved and pending absences covering the day (only approved ones change the numbers).
expectedEnd string (date-time) | null
expectedStart string (date-time) | null
expectedWorkMsverplicht integer (int64) Overtime target (base × (1 − fLeave)).
holiday HolidayRefDto | null
kindverplicht string schedule, shift, dayOff or holiday.
leaveFractionverplicht number (double) The approved absence coverage f (0–1).
shiftsverplicht PlanShiftDto[] Shifts starting on the day, by start.
targetMsverplicht integer (int64) Effectiveness % denominator (base × (1 − f)).
workdayverplicht boolean

DayProductivityDto

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

VeldTypeBeschrijving
effectivenessPct number (double) | null productive ÷ target × 100 (not capped); null without a target.
neutralMsverplicht integer (int64)
productiveMsverplicht integer (int64)
productivityPct number (double) | null productive ÷ worked × 100, one decimal; null without worked time.
targetMsverplicht integer (int64)
unproductiveMsverplicht integer (int64)

DayTotalDto

One local day of a summary.

VeldTypeBeschrijving
activeMsverplicht integer (int64)
activeUserCountverplicht integer (int32)
atWorkMsverplicht integer (int64)
dateverplicht string (date)
idleMsverplicht integer (int64)
neutralMsverplicht integer (int64)
offlineMsverplicht integer (int64)
privateMsverplicht integer (int64)
productiveMsverplicht integer (int64)
productivityPct number (double) | null
unproductiveMsverplicht integer (int64)

DomainTotalDto

VeldTypeBeschrijving
activeMsverplicht integer (int64)
categoryKey string | null
domainverplicht string
level string | null
percentageverplicht number (double)

DomainUsageDto

VeldTypeBeschrijving
activeMsverplicht integer (int64)
categoryKey string | null
domainverplicht 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).

VeldTypeBeschrijving
dueAt string (date-time) | null The deadline of an unverified account (Identity__EmailVerificationGraceHours after its creation).
stateverplicht 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}]).

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

VeldTypeBeschrijving
includeInactiveUsers boolean
teamId string | null
userIds string | null[] | null

ExportJobDto

An export job as the panel lists and polls it.

VeldTypeBeschrijving
createdAtverplicht string (date-time)
datasetverplicht 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
formatverplicht string
fromverplicht string (date)
groupBy string | null
idverplicht string (uuid)
localeverplicht string
progressverplicht integer (int32) 0–100.
rowCount integer (int32) | null
startedAt string (date-time) | null
statusverplicht 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.
toverplicht string (date)

ExportOptionsDto

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

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

VeldTypeBeschrijving
codeverplicht string Stable snake_case code (required, too_long, invalid, ...).
fieldverplicht 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).

VeldTypeBeschrijving
half string | null
keyverplicht string Built-in key (republic_day, …) or custom.
nameverplicht string
nameEnverplicht string
nameTrverplicht string
source string | null builtin or tenant.

HostUsageDto

VeldTypeBeschrijving
activeMsverplicht integer (int64)
domain string | null
hostverplicht string
levelverplicht string
levelSourceverplicht string
matchedKey string | null Key of the matching domain rule; null for the default.

InvitationEmail

What happened to the invitation e-mail.

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

VeldTypeBeschrijving
expiresAtverplicht string
idverplicht string (uuid)

InvitationResult

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

VeldTypeBeschrijving
emailverplicht InvitationEmail
invitationverplicht InvitationRef
memberverplicht MemberDto

LevelContextDto

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

VeldTypeBeschrijving
kindverplicht string user (a userId filter: that user's current team), team (a teamId filter) or company.
teamId string (uuid) | null

MeDto

GET /v1/me.

VeldTypeBeschrijving
accessverplicht AccessDto
capabilitiesverplicht CapabilitiesDto
effectiveTimeZoneverplicht string
membershipverplicht MeMembership
organizationverplicht MeOrganization
organizationsverplicht OrganizationChoice[]
session MeSession | null
userverplicht MeUser

MeMembership

The membership in the current organization.

VeldTypeBeschrijving
idverplicht string (uuid)
isTrackedverplicht boolean
joinedAt string | null
roleverplicht string
statusverplicht string
teamId string (uuid) | null
teamName string | null
timeZone string | null
viewerTeamIdsverplicht string (uuid)[]

MeOrganization

The current organization.

VeldTypeBeschrijving
defaultLocaleverplicht string
idverplicht string (uuid)
nameverplicht string
slugverplicht string
statusverplicht string
timeZoneverplicht string

MeSession

The current session.

VeldTypeBeschrijving
absoluteExpiresAtverplicht string
amrverplicht string[]
authTimeverplicht string
clientIdverplicht string
idverplicht string (uuid)
idleExpiresAtverplicht string

MeUser

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

VeldTypeBeschrijving
emailverplicht string
emailVerificationverplicht EmailVerificationDto The e-mail verification gate (owner decision 3 Oct 2026).
emailVerifiedverplicht boolean
fullName string | null
idverplicht string (uuid)
localeverplicht string

MemberDto

A membership with its person (MemberDto).

VeldTypeBeschrijving
createdAtverplicht string
emailverplicht string
emailVerifiedverplicht boolean
fullName string | null
idverplicht string (uuid)
invitation MemberInvitationDto | null
isTrackedverplicht boolean
joinedAt string | null
localeverplicht string
roleverplicht string owner, admin, team_admin, manager, employee.
statusverplicht string invited, active, suspended, left.
teamId string (uuid) | null
teamName string | null
timeZone string | null
unassignedManagerverplicht boolean A Manager with neither a team nor viewer teams (sees the whole company until assigned).
userIdverplicht string (uuid)
viewerTeamIdsverplicht string (uuid)[]

MemberInvitationDto

The invitation of an invited member.

VeldTypeBeschrijving
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.
expiresAtverplicht string
idverplicht string (uuid)
lastSentAtverplicht string
sentCountverplicht integer (int32)

MemberPage

A page of members (OpenAPI).

VeldTypeBeschrijving
itemsverplicht MemberDto[]
nextCursor string | null

MemberRefDto

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

VeldTypeBeschrijving
activeverplicht boolean The membership is active and (for an endpoint or a tenant connection) still an Owner or Admin.
name string | null
userIdverplicht string (uuid)

NamedRefDto

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

VeldTypeBeschrijving
idverplicht string (uuid)
nameverplicht string

OrganizationChoice

One organization of the person (sec.user_memberships).

VeldTypeBeschrijving
currentverplicht boolean
idverplicht string (uuid)
nameverplicht string
roleverplicht string
selectableverplicht boolean Can this session's sign-in method open it (design §4.5.3)?

PatchMember

PATCH /v1/members/{id}.

VeldTypeBeschrijving
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}.

VeldTypeBeschrijving
description string | null
name string | null

PeriodReportDto

GET /v1/reports/productivity.

VeldTypeBeschrijving
fromverplicht string (date)
groupByverplicht string
levelContextverplicht LevelContextDto
periodsverplicht ReportPeriodDto[]
subjectverplicht ReportSubjectDto
teamsverplicht TeamPeriodsDto[] Only for the company subject: every visible team over its current members.
toverplicht string (date)
totalsverplicht ReportFiguresDto

PlanAbsenceDto

VeldTypeBeschrijving
colorverplicht string
countsAsWorkedverplicht boolean timeEffect == worked.
endTime string | null
half string | null
idverplicht string (uuid)
startTime string | null Local start and end of an hours absence.
statusverplicht string approved or pending.
timeEffectverplicht 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).
unitverplicht string days, half_day or hours.

PlanShiftDto

VeldTypeBeschrijving
color string | null
endverplicht string (date-time)
endTimeverplicht string Local end; before the start for a night shift.
idverplicht string (uuid)
locationverplicht string
minMinutesverplicht integer (int32)
startverplicht string (date-time)
startTimeverplicht string Local start (HH:mm, the shift's zone).

Problem

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

VeldTypeBeschrijving
action string | null Permission key of a 403 (teams.create).
codeverplicht 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).
statusverplicht integer (int32)
titleverplicht string English title of the code (clients translate code).
traceId string | null W3C trace id of the request.
typeverplicht 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).

VeldTypeBeschrijving
billableMinorverplicht integer (int64) The billable hours at their rate.
costMinorverplicht integer (int64) Every allocated hour at its rate.
currencyverplicht string

ProjectBudgetUsageDto

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

VeldTypeBeschrijving
budgetMinor integer (int64) | null null unless costsIncluded.
budgetMinutes integer (int64) | null
kindverplicht string hours or amount.
projectIdverplicht string (uuid)
usedMinor integer (int64) | null The cost in the project's currency; null unless costsIncluded.
usedMsverplicht integer (int64)
usedRatio string | null Used / budget, 4 decimals (null for an amount budget without costsIncluded).

ProjectDto

A project.

VeldTypeBeschrijving
accessverplicht string everyone or members.
archivedverplicht boolean
budget BudgetDto | null
client NamedRefDto | null
code string | null
color string | null
createdAtverplicht string (date-time)
currencyverplicht string The currency of the project's rates and amount budget.
description string | null
endDate string (date) | null
idverplicht string (uuid)
isBillableverplicht boolean
memberCountverplicht integer (int64)
myRole string | null The caller's role in the project team (member, manager), null outside it.
nameverplicht string
permissionsverplicht ProjectPermissionsDto
spentMsverplicht integer (int64) Every allocation of the project, all time.
startDate string (date) | null
statusverplicht string active, on_hold or completed.
taskCountverplicht integer (int64)
updatedAtverplicht string (date-time)

ProjectPage

GET /v1/projects.

VeldTypeBeschrijving
itemsverplicht ProjectDto[]
nextCursor string | null

ProjectPermissionsDto

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

VeldTypeBeschrijving
archiveverplicht boolean
deleteverplicht boolean Only a project without time.
editverplicht boolean The project's fields (Owners and Admins).
manageMembersverplicht boolean The team (an Admin or the project's manager; only an Admin changes managers).
manageTasksverplicht boolean Tasks (an Admin or the project's manager).
trackverplicht boolean The caller may track time on it now.

ProjectRefDto

A project reference of an allocation.

VeldTypeBeschrijving
color string | null #RRGGBB.
idverplicht string (uuid)
nameverplicht string

ProjectReportDto

GET /v1/reports/projects.

VeldTypeBeschrijving
budgetsverplicht ProjectBudgetUsageDto[]
costsIncludedverplicht boolean The caller sees rates and amounts (projects.costs.read).
fromverplicht string (date)
groupByverplicht string[]
rowsverplicht ProjectReportRowDto[]
toverplicht string (date)
totalsverplicht ProjectReportTotalsDto

ProjectReportKeysDto

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

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

VeldTypeBeschrijving
allocatedMsverplicht integer (int64)
amounts ProjectAmountDto[] | null null unless costsIncluded.
billableMsverplicht integer (int64)
keysverplicht ProjectReportKeysDto
nonBillableMsverplicht integer (int64)
productiveMs integer (int64) | null With includeProductive only.
unratedMsverplicht integer (int64) Time without any rate (it is left out of the amounts).

ProjectReportTotalsDto

The totals of the report.

VeldTypeBeschrijving
allocatedMsverplicht integer (int64)
amounts ProjectAmountDto[] | null
billableMsverplicht integer (int64)
nonBillableMsverplicht integer (int64)
productiveMs integer (int64) | null
unratedMsverplicht integer (int64)

ProjectRequest

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

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

VeldTypeBeschrijving
absenceCreditMsverplicht integer (int64)
absentDaysverplicht integer (int32)
activeMsverplicht integer (int64)
activeUserCountverplicht integer (int32)
effectivenessPct number (double) | null
idleMsverplicht integer (int64)
lateDaysverplicht integer (int32)
leaveDaysverplicht number (double)
leftEarlyDaysverplicht integer (int32)
neutralMsverplicht integer (int64)
offlineMsverplicht integer (int64)
overtimeDaysverplicht integer (int32)
overtimeMsverplicht integer (int64)
productiveMsverplicht integer (int64)
productivityPct number (double) | null
targetMsverplicht integer (int64)
unproductiveMsverplicht integer (int64)
userCountverplicht integer (int32)
workedMsverplicht 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).

VeldTypeBeschrijving
kindverplicht string company, teams or self.
teamIdsverplicht string (uuid)[] The visible teams of a teams scope, sorted; empty otherwise (company = all).
unassignedFallbackverplicht boolean A Manager without teams who sees the whole company until assigned.

ReportSubjectDto

Whom a report is about.

VeldTypeBeschrijving
id string (uuid) | null
kindverplicht string company, team or user.
name string | null

RotatedWebhookSecretDto

RotatedWebhookSecretDto: the new signing secret, shown once.

VeldTypeBeschrijving
previousSecretExpiresAtverplicht string Until then deliveries carry both signatures.
secretverplicht 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.

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

VeldTypeBeschrijving
breakMinutesverplicht integer (int32)
color string | null
createdAtverplicht string (date-time)
createdByverplicht CalendarUserRefDto
crossesMidnightverplicht boolean
dateverplicht string (date)
durationMinutesverplicht integer (int32)
endverplicht string (date-time)
endTimeverplicht string
idverplicht string (uuid)
locationverplicht string
minMinutesverplicht integer (int32)
note string | null
openverplicht boolean No user assigned.
permissionsverplicht ShiftPermissionsDto
sourceverplicht string manual, template, copy or request.
startverplicht string (date-time)
startTimeverplicht 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
timeZoneverplicht string
updatedAtverplicht 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).

VeldTypeBeschrijving
itemsverplicht ShiftDto[]

ShiftPermissionsDto

VeldTypeBeschrijving
canDeleteverplicht boolean
canEditverplicht boolean
canPickUpverplicht boolean
canRequestSwapverplicht boolean

SummaryDto

The summary of the visible users over a range.

VeldTypeBeschrijving
absenceCreditMsverplicht integer (int64)
absentDaysverplicht integer (int32)
activeMsverplicht integer (int64)
activeUserCountverplicht integer (int32)
atWorkMsverplicht integer (int64)
daysverplicht DayTotalDto[]
deletedMsverplicht integer (int64)
domainsverplicht DomainTotalDto[] Top 10.
effectivenessPct number (double) | null Average of the users' range Effectiveness % (inactive tracked users included).
fromverplicht string (date)
holidayDaysverplicht number (double)
idleMsverplicht integer (int64)
inactiveUsersverplicht UserTotalDto[] Tracked users without activity in the range (zero totals, attendance fields), by user id.
lateDaysverplicht integer (int32)
leaveDaysverplicht number (double)
leftEarlyDaysverplicht integer (int32)
levelContextverplicht LevelContextDto
meetingMsverplicht integer (int64)
neutralMsverplicht integer (int64)
offlineMsverplicht integer (int64)
overtimeMsverplicht integer (int64)
privateMsverplicht integer (int64)
productiveMsverplicht integer (int64)
productivityPct number (double) | null Average of the users' range Productivity %.
scopeverplicht ReportScopeDto
shiftDaysverplicht integer (int32)
teamsverplicht TeamTotalDto[] By current team: named teams by name, the teamId: null row last.
toverplicht string (date)
topAppsverplicht AppTotalDto[] Top 10; name is "Offline time" for the reserved offline keys.
unproductiveMsverplicht integer (int64)
usersverplicht UserTotalDto[] One row per user with a computed day in the range, by activeMs.
workedMsverplicht integer (int64)

TargetItemDto

VeldTypeBeschrijving
activeMsverplicht integer (int64)
categoryKey string | null
categorySourceverplicht string tenant, builtin or none.
domain string | null
levelverplicht string
levelSourceverplicht string team, company or default.
matchedKey string | null
nameverplicht string
percentageverplicht number (double)
targetKeyverplicht string
targetTypeverplicht string app for apps, domain for domains and hosts.
userCountverplicht integer (int32)

TargetListDto

The "Apps & URLs" list.

VeldTypeBeschrijving
fromverplicht string (date)
itemsverplicht TargetItemDto[] By active time descending, then key.
levelContextverplicht LevelContextDto
nextCursor string | null
toverplicht string (date)
totalverplicht integer (int32) Targets matching the filters (before paging).
totalActiveMsverplicht integer (int64) Active time over every target of the type before the filters (the percentage base).
typeverplicht string app, domain or host.

TaskDto

A task.

VeldTypeBeschrijving
archivedverplicht boolean
assignee NamedRefDto | null
createdAtverplicht string (date-time)
description string | null
dueDate string (date) | null
effectiveBillableverplicht boolean
estimateMinutes integer (int64) | null
idverplicht string (uuid)
isBillable boolean | null null takes the project's value.
nameverplicht string
permissionsverplicht TaskPermissionsDto
projectIdverplicht string (uuid)
sortOrderverplicht integer (int64)
spentMsverplicht integer (int64)
statusverplicht string open, in_progress or done.
updatedAtverplicht string (date-time)

TaskPage

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

VeldTypeBeschrijving
itemsverplicht TaskDto[]
nextCursor string | null

TaskPermissionsDto

What the caller may do with a task.

VeldTypeBeschrijving
deleteverplicht boolean Only a task without time.
editverplicht boolean

TaskRequest

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

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

VeldTypeBeschrijving
archivedAt string | null
createdAtverplicht string
description string | null
idverplicht string (uuid)
leadsverplicht object[] TeamAdmins and Managers of the team: [{membershipId, userId, fullName, role}].
memberCountverplicht integer (int64) Members whose primary team this is (left members excluded).
nameverplicht string
updatedAtverplicht string

TeamPage

A page of teams (OpenAPI).

VeldTypeBeschrijving
itemsverplicht TeamDto[]
nextCursor string | null

TeamPeriodsDto

VeldTypeBeschrijving
periodsverplicht ReportPeriodDto[]
teamIdverplicht string (uuid)
teamName string | null
totalsverplicht ReportFiguresDto

TeamTotalDto

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

VeldTypeBeschrijving
absenceCreditMsverplicht integer (int64)
absentDaysverplicht integer (int32)
activeMsverplicht integer (int64)
activeUserCountverplicht integer (int32)
effectivenessPct number (double) | null
holidayDaysverplicht number (double)
idleMsverplicht integer (int64)
lateDaysverplicht integer (int32)
leaveDaysverplicht number (double)
leftEarlyDaysverplicht integer (int32)
memberCountverplicht integer (int32)
neutralMsverplicht integer (int64)
offlineMsverplicht integer (int64)
overtimeMsverplicht integer (int64)
productiveMsverplicht integer (int64)
productivityPct number (double) | null
shiftDaysverplicht integer (int32)
teamId string (uuid) | null null for the users without a team.
teamName string | null
unproductiveMsverplicht integer (int64)
workedMsverplicht integer (int64)

TimeEntryDecisionRequest

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

VeldTypeBeschrijving
decision string | null approve or reject.
note string | null At most 500 characters.

TimeEntryDto

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

VeldTypeBeschrijving
createdAtverplicht string (date-time)
createdByverplicht TimeEntryUserRefDto
dateverplicht 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
durationMsverplicht integer (int64)
endverplicht string (date-time)
idverplicht string (uuid)
kindverplicht string offline or deletion.
level string | null Offline: productive, neutral or unproductive; deletion: null.
permissionsverplicht TimeEntryPermissionsDto
projectId string (uuid) | null Always null until projects (Phase 6).
sourceverplicht string manual (Phase 8 adds calendar).
startverplicht string (date-time)
statusverplicht string pending, approved or rejected.
timeZoneverplicht string
updatedAtverplicht string (date-time)
userIdverplicht string (uuid)

TimeEntryPage

GET /v1/time-entries: by start.

VeldTypeBeschrijving
itemsverplicht TimeEntryDto[]
nextCursor string | null

TimeEntryPermissionsDto

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

VeldTypeBeschrijving
canApproveverplicht boolean
canDeleteverplicht boolean
canEditverplicht boolean

TimeEntryUserRefDto

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

VeldTypeBeschrijving
fullName string | null
idverplicht string (uuid)

TimeIntervalDto

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

VeldTypeBeschrijving
endverplicht string (date-time)
startverplicht string (date-time)

TimerAtRequest

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

VeldTypeBeschrijving
at string (date-time) | null

TimerCommandResultDto

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

VeldTypeBeschrijving
appliedverplicht boolean
closedverplicht AllocationDto[] The allocations written from the segment this command closed (may be empty).
reason string | null stale, not_running or unchanged; null when applied.
timerverplicht TimerDto

TimerDto

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

VeldTypeBeschrijving
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
serverTimeverplicht 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
stateverplicht string running or stopped.
task NamedRefDto | null

TimerLastDto

The segment that ended last.

VeldTypeBeschrijving
endReasonverplicht string stop, switch, autostop or discard.
endedAtverplicht string (date-time)
segmentIdverplicht string (uuid)
startedAtverplicht string (date-time)

TimerProjectDto

The project of the running segment.

VeldTypeBeschrijving
clientName string | null
color string | null
idverplicht string (uuid)
nameverplicht string

TimerStartRequest

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

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

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

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

VeldTypeBeschrijving
daysverplicht UserDayDto[]
fromverplicht string (date)
teamId string (uuid) | null The user's current primary team (its rules classify every day).
timeZoneverplicht string
toverplicht string (date)
userIdverplicht string (uuid)

UserDayDto

VeldTypeBeschrijving
absence DayAbsenceDto | null
absenceCreditMsverplicht integer (int64)
activeMsverplicht integer (int64)
afkCoverageverplicht boolean
arrivalAt string (date-time) | null
atWorkMsverplicht integer (int64)
attendanceStatus string | null onTime, late, absent, notStarted, dayOff, onLeave, holiday; null outside the directory.
classifiedverplicht boolean
dateverplicht string (date)
dayOffWorkedMsverplicht integer (int64)
deletedMsverplicht integer (int64)
effectivenessPct number (double) | null
eventCountverplicht integer (int64)
expectedWorkMsverplicht integer (int64)
holiday DailyHolidayDto | null
idleMsverplicht integer (int64)
lateByMsverplicht integer (int64)
leftAt string (date-time) | null
leftEarlyverplicht boolean
leftEarlyByMsverplicht integer (int64)
meetingMsverplicht integer (int64)
neutralMsverplicht integer (int64)
offlineMsverplicht integer (int64)
overtimeMsverplicht integer (int64)
planKind string | null schedule, shift, dayOff or holiday.
privateMsverplicht integer (int64)
productiveMsverplicht integer (int64)
productivityPct number (double) | null
shiftCountverplicht integer (int32)
targetMsverplicht integer (int64)
topApp string | null Display name of the app with the most active time.
unproductiveMsverplicht integer (int64)
workday boolean | null
workedMsverplicht integer (int64)

UserTotalDto

One user of a summary.

VeldTypeBeschrijving
absenceCreditMsverplicht integer (int64)
absentDays integer (int32) | null Only for tracked users.
activeDaysverplicht integer (int32) Local days with active time.
activeMsverplicht integer (int64)
arrivalAt string (date-time) | null Earliest arrival and latest leave in the range.
atWorkMsverplicht integer (int64)
classifiedDaysverplicht integer (int32)
dayOffWorkedMsverplicht integer (int64)
deletedMsverplicht integer (int64)
effectivenessPct number (double) | null null without a target and for users missing from the directory.
email string | null
eventCountverplicht integer (int64)
fullName string | null
holidayDaysverplicht number (double)
idleMsverplicht integer (int64)
lateDays integer (int32) | null
leaveDaysverplicht number (double)
leftAt string (date-time) | null
leftEarlyDays integer (int32) | null
meetingMsverplicht integer (int64)
neutralMsverplicht integer (int64)
offlineMsverplicht integer (int64)
overtimeDaysverplicht integer (int32)
overtimeMsverplicht integer (int64)
privateMsverplicht integer (int64)
productiveMsverplicht integer (int64)
productivityPct number (double) | null
shiftDaysverplicht integer (int32)
targetMs integer (int64) | null
teamId string (uuid) | null
teamName string | null
timeZoneverplicht string
unproductiveMsverplicht integer (int64)
userIdverplicht string (uuid)
workdays integer (int32) | null
workedMsverplicht integer (int64)

WebhookDeliveryDetailDto

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

WebhookDeliveryDto

WebhookDeliveryDto.

VeldTypeBeschrijving
attemptsverplicht integer (int32)
createdAtverplicht string
deliveredAt string | null
eventIdverplicht string (uuid) The webhook-id header.
eventTypeverplicht string
idverplicht 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
statusverplicht string pending, succeeded, failed, dead.

WebhookDeliveryPage

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

VeldTypeBeschrijving
itemsverplicht WebhookDeliveryDto[]
nextCursor string | null

WebhookEndpointDto

WebhookEndpointDto.

VeldTypeBeschrijving
createdAtverplicht string
description string | null
eventTypesverplicht string[]
idverplicht string (uuid)
ownerverplicht 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).
secretPrefixverplicht string The first 8 characters of the signing secret (whsec_Kx); never the secret.
statsverplicht WebhookEndpointStatsDto
statusverplicht string active, paused, disabled.
statusReason string | null manual, owner_inactive, failing, gone; null while active.
updatedAtverplicht string
urlverplicht string
versionverplicht integer (int64) row_version (ETag: "v<n>", If-Match of PATCH).

WebhookEndpointPage

GET /v1/webhook-endpoints.

VeldTypeBeschrijving
itemsverplicht WebhookEndpointDto[]
nextCursor string | null

WebhookEndpointStatsDto

The delivery statistics of an endpoint.

VeldTypeBeschrijving
consecutiveFailuresverplicht integer (int32)
lastFailureAt string | null
lastSuccessAt string | null

WebhookEventDto

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

VeldTypeBeschrijving
availableverplicht boolean The tenant's plan has the feature: an endpoint may subscribe.
descriptionverplicht string One English sentence (the panel translates by type).
feature string | null The plan feature the event needs (null: every plan with api_access).
objectverplicht string The data.object of the delivery body.
typeverplicht string <object>.<verb>, e.g. time_entry.approved.

WebhookEventsDto

GET /v1/webhook-events.

VeldTypeBeschrijving
itemsverplicht WebhookEventDto[]

WebhookTestDto

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

VeldTypeBeschrijving
deliveryIdverplicht string The delivery of the test event (a string: the deliveries' id is a 64-bit integer).