API · v1 · stabil
CODEMETA OSDeveloper Center
Konsole öffnen
Entity · tasks

Task Schema

Schema-ID
task
Collection
tasks
Permissions
  • Lesentask_view
  • Anlegentask_create
  • Änderntask_edit
  • Löschentask_delete

Felder

Task Schema

tasks4 Permissions

Schema for validating task entities

titlestringerforderlich

Task title

1–200 Zeichen
descriptionstringoptional

Task description

max 4000 Zeichennullable
statusstringerforderlich

Task status. PENDING_REVIEW is the intermediate state between IN_PROGRESS and DONE when reviewMode = hard.

TODOIN_PROGRESSIN_REVIEWPENDING_REVIEWDONECANCELLED
prioritystringerforderlich

Task priority

LOWNORMALHIGHCRITICAL
projectIdstringoptional

Project UUID (legacy, use referenceId/referenceSchema)

nullable
listIduuidoptional

Optional task-list bucket (Todoist-style, ADR 0132). Independent of projectId/referenceId — a task can belong to a project AND a personal list at the same time.

nullable
parentTaskIdstringoptional

Parent task UUID for subtasks

nullable
orderintegererforderlich

Sort order within parent/project

≥ 0
assigneeIdstringoptional

Assigned user UUID. Deprecated: mirror of assigneeIds[0] for backward compatibility. Write via assigneeIds.

nullable
assigneeIdsstring[]optional

Assigned user UUIDs (multi-assignee). Canonical assignee field.

Default: []nullable
dispatchPendingbooleanoptional

ADR 0224: set when a template-materialized task should be auto-assigned by the dispatch pipeline (assignmentRule.strategy = ai_dispatch | ai_suggest). The worker event-router enqueues a dispatch job and clears this flag.

Default: false
dispatchDecisionIdstringoptional

ADR 0224: id of the dispatch_decision that assigned this task (ai_* strategy).

nullable
orgUnitIdstringoptional

Team / organizational unit UUID

nullable
teamCanManagebooleanoptional

ADR 0421: when true, every member of `orgUnitId` may fully edit and delete this task, not just work it off. Opt-in per task — the ADR-0192 default keeps manage rights with the creator / project manager / admin. No effect when `orgUnitId` is null. Only an owner (creator / project manager / campaign owner / admin) may flip this flag.

Default: false
reporterIdstringoptional

Reporter user UUID

nullable
reviewerIdstringoptional

Optional reviewer user UUID. When set together with reviewMode=hard, only this user (or a user with task_review/admin_bypass) may transition the task from PENDING_REVIEW to DONE.

nullable
reviewModestringoptional

Review enforcement: 'hard' inserts a PENDING_REVIEW gate before DONE and restricts the final transition to the reviewer; 'soft' only notifies the reviewer when the task is completed. Null/absent = no review.

hardsoftnull
nullable
sprintIdstringoptional

Sprint UUID

nullable
boardColumnIdstringoptional

Kanban board column ID

nullable
phaseIdstringoptional

Project phase UUID for Gantt

nullable
storyPointsintegeroptional

Story points estimate

0 – 100nullable
estimatedMinutesintegeroptional

Estimated effort in minutes

≥ 0nullable
maxMinutesintegeroptional

Hard cap on logged minutes for this task (applied when limitMode=minutes). Used by project limit checks; values are not auto-enforced unless project.limits.hardBlockOnExceed is true.

≥ 0nullable
salesOrderIduuidoptional

Linked sales_order UUID (the order this task originated from)

read-onlynullable
salesOrderItemIdstringoptional

ID of the orderItem inside the linked sales_order (matches salesOrder.orderItems[].id)

read-onlynullable
salesOrderItemSourcestringoptional

Origin of the linked sales-order item — internal or weclapp

internalweclappnull
read-onlynullable
positionIduuidoptional

ADR 0310: optional project_position this task hangs under. null = free task (no position). The position aggregates this task’s effort (loggedMinutes/consumedAmount) and carries the billing model (flat_rate vs. time_and_material).

nullable
limitModestringoptional

Limit mode: minutes (cap on logged time via maxMinutes), amount (cap on consumed EUR via maxAmount), or none.

minutesamountnonenull
nullable
maxAmountstringoptional

Hard cap on consumed billable amount in EUR (decimal string)

Patternnullable
maxAmountCurrencystringoptional

ISO 4217 currency for maxAmount (default EUR when null)

Patternnullable
consumedAmountstringoptional

Sum of time_record.consumedAmount for this task (cached, auto-computed by time-record service)

Patternread-onlynullable
hardBlockOnExceedbooleanoptional

Project-less fallback for the budget hard-block. When the task has no project, this opts the task into hard-blocking time bookings past maxMinutes/maxAmount (mirrors project.limits.hardBlockOnExceed). Ignored when the task belongs to a project — the project setting wins.

Default: nullnullable
defaultServiceTypeIduuidoptional

Pre-selected service_type UUID for time bookings on this task. Not enforced — users may pick a different type.

nullable
maxMinutesOverriddenAtdatetimeoptional

Set when maxMinutes was manually overridden (via task_override_budget). Reconcile from sales-order skips this field while set.

nullable
maxAmountOverriddenAtdatetimeoptional

Set when maxAmount was manually overridden (via task_override_budget). Reconcile from sales-order skips this field while set.

nullable
overrideReasonstringoptional

Last reason for a budget override (audit trail; full history lives in history collection).

max 500 Zeichennullable
weclappTaskIdstringoptional

Linked weclapp task ID (target for time-record write-through)

read-onlynullable
weclappSyncStatestringoptional

Sync state of this task against weclapp

pendingsyncederrornull
read-onlynullable
weclappLastSyncedAtdatetimeoptional

Last successful weclapp sync timestamp

read-onlynullable
weclappLastSyncErrorstringoptional

Last weclapp sync error message

max 1000 Zeichenread-onlynullable
microsoftTodoIdstringoptional

ID of the mirrored task in Microsoft To Do (per connected user mailbox)

read-onlynullable
microsoftTodoListIdstringoptional

ID of the Microsoft To Do list this task is mirrored into

read-onlynullable
microsoftTodoEtagstringoptional

Last seen Microsoft Graph @odata.etag of the mirrored task — used for echo-suppression on inbound delta sync

read-onlynullable
todoLastSyncedAtdatetimeoptional

Last successful Microsoft To Do sync timestamp for this task

read-onlynullable
todoSyncSourcestringoptional

Which side last wrote the synced state (conflict-resolution hint)

localmicrosoftnull
read-onlynullable
startDatedateoptional

Task start date (YYYY-MM-DD)

nullable
dueDatedateoptional

Task due date (YYYY-MM-DD)

nullable
completedAtdatetimeoptional

Task completion timestamp

nullable
completedBystringoptional

User UUID of the person who marked the task as DONE (cleared on re-open)

nullable
scheduledStartAtdatetimeoptional

Optional scheduled start date-time for calendar display

nullable
scheduledEndAtdatetimeoptional

Optional scheduled end date-time for calendar display

nullable
taskTypestringerforderlich

Task type

TASKSTORYBUGEPICSUBTASKMILESTONE
labelsstring[]optional

Task labels (like Jira labels)

Default: []nullable
ticketIdstringoptional

Linked ticket UUID

nullable
assetIdsstring[]optional

Linked asset UUIDs

Default: []nullable
blockedByIdsstring[]optional

ADR 0218: predecessor task UUIDs that must reach a terminal status (DONE/CANCELLED) before this task may start. Single source of truth for task dependencies; validated server-side (existence, same-project, no cycles).

Default: []nullable
blockingIdsstring[]optional

ADR 0218: DERIVED downstream dependents (tasks whose blockedByIds reference this task). Computed on read via reverse lookup — read-only / protected, never written directly.

Default: []read-onlynullable
loggedMinutesintegeroptional

Logged time in minutes (auto-computed)

≥ 0nullable
tagsstring[]optional

Task tags

Default: []nullable
referenceIdstringoptional

Linked entity UUID

nullable
referenceSchemastringoptional

Schema type of the linked entity

nulltickethr_ticketcallback_requestprojectassetvehiclecontractpartyopportunitycoursecomplaintsales_ordersales_order_itemcampaign_itemcampaignemployee_profileonboarding_planemployee_onboardingemployee_offboarding
nullable
linkedEntitiesobject[]optional

Additional free-form cross-entity links (Mehrfachverknüpfung, 04.08.2026). UNLIKE phone_call (ADR 0386) this does NOT supersede the single reference: referenceId/referenceSchema stays the PRIMARY link (predecessor-sibling logic, partyScope/projectId query expansion, kanbans all key on it) — linkedEntities carries the secondary links, e.g. an opportunity-task also linked to the customer and a contact person. Same item shape as phone_call.linkedEntities.

Default: []nullable
entityTypestringerforderlich
ticketcallback_requestprojectopportunitycomplainttaskassetvehiclecontractpartycoursecampaign
entityIduuiderforderlich
rolestringerforderlich
linkedAgreementIduuidoptional

Set when the task was spawned from a performance_review agreement. Used to mirror task.status ↔ agreement.status. Legacy — superseded by linkedGoalId / linkedBenefitId.

nullable
linkedGoalIduuidoptional

Set when the task was spawned from a performance_review_goal. Used to mirror task.status ↔ goal.status.

nullable
linkedBenefitIduuidoptional

Set when the task was spawned from a performance_review_benefit. Used to mirror task.status ↔ benefit.status.

nullable
checklistStepRefobjectoptional
nullable
checklistIduuiderforderlich
itemIduuiderforderlich
campaignIduuidoptional

Backlink to the campaign that produced this task (CREATE_TASK action).

nullable
contractIduuidoptional

Optional link to the contract this task belongs to. Drives contract-aware lifecycle: recurrence.endDate is auto-capped to contract.endDate on creation, and worker handlers cap/cancel tasks when contract.endDate moves or contract.status transitions to SUSPENDED/CANCELLED/EXPIRED.

nullable
seriesMasterIduuidoptional

UUID of the recurring master task this exception belongs to. Mutually exclusive with `recurrence` — a series-master child cannot itself start a series. Set only by the materialization endpoint.

read-onlynullable
seriesOccurrenceDatedateoptional

YYYY-MM-DD of the specific occurrence this exception represents. Required when seriesMasterId is set; together they form the idempotency key.

read-onlynullable
seriesOccurrenceTypestringoptional

How this occurrence diverges from the master. exception = materialized instance with its own status; cancellation = skipped occurrence (hidden from the calendar but kept for audit).

exceptioncancellation
read-onlynullable
seriesOccurrenceTimeZonestringoptional

IANA TZ used when interpreting seriesOccurrenceDate. Defaults to the tenant TZ when null. Mirrors the calendar-event recurrence model.

max 100 Zeichenread-onlynullable
recurrenceobjectoptional

Recurrence configuration for recurring tasks

nullable
patternstringerforderlich

Recurrence pattern

DAILYWEEKLYMONTHLYYEARLY
intervalintegererforderlich

Repeat every N units

1 – 365
daysOfWeekinteger[]optional

Days of week (0=Sun, 6=Sat) for WEEKLY pattern

nullable
dayOfMonthintegeroptional

Day of month for MONTHLY pattern

1 – 31nullable
endDatedateoptional

Stop recurring after this date

nullable
nextDueDatedateoptional

Next calculated due date

nullable
complianceRuleIdstringoptional

Compliance rule that auto-generated this task (e.g. HU, AU, MAINTENANCE)

max 50 Zeichennullable
complianceDeadlinedateoptional

The compliance deadline date this task tracks (YYYY-MM-DD)

nullable
visibilitystringoptional

Task visibility. PRIVATE tasks are only visible to their creator and assignee.

PUBLICPRIVATE
Default: "PUBLIC"
difficultyintegeroptional

Task difficulty (0–100). Feeds the XP award formula when the task transitions to DONE. Defaults to 50 at award time if null.

0 – 100nullable
requiredSkillsobject[]optional

Structured skill requirements for this task. Drives XP awards to the task assignee on completion.

Default: []nullable
skillIduuiderforderlich

UUID of the skill_definition

minimumLevelstringoptional

Minimum proficiency level required. Null = any level.

BEGINNERINTERMEDIATEADVANCEDEXPERTnull
nullable
xpAwardedAtdatetimeoptional

Set once when XP was awarded for this task completion. Prevents duplicate XP grants on DONE→other→DONE transitions.

nullable
customerVisiblebooleanoptional

Whether this task is visible on the project customer portal (requires project.customerAccess feature viewAssignedTasks).

Default: false
customerAssigneePartyIdstringoptional

Customer party (contact or organization) this task is assigned to (public portal). Used alongside assigneeId.

nullable
customerCreatedbooleanoptional

True if the task was created by a customer via the public portal.

Default: false
templateIduuidoptional

task_template._id this task was instantiated from.

nullable
templateVersionstringoptional

Pinned template version at instantiation time (semver).

Patternnullable
templateNodeIdstringoptional

ID of the subTemplates[] link this task came from. Null on root tasks.

nullable
templatePathstringoptional

Denormalized "/slug-a/slug-b" path for fast roll-up analytics.

max 500 Zeichennullable
isTemplateRootbooleanoptional

True for the root task of a template execution.

Default: false
rootTaskIduuidoptional

Denormalized: every task in a template execution carries the root task id.

nullable
templateInputsobjectoptional

Snapshot of template input values (key → value) at instantiation time.

nullable
cancelReasonstringoptional

Reason for CANCELLED status. e.g. "template-instantiation-optional-skipped" when an optional sub-step was de-selected.

max 200 Zeichennullable
fieldServiceParkedbooleanoptional

True if the task is parked for on-site field service ("Wartestellung"). Orthogonal to status — a parked task keeps its normal workflow status.

Default: false
fieldServicePartyIduuidoptional

Anchor customer party for the on-site work. Prefilled from referenceId when referenceSchema = party. Used as the proximity origin.

nullable
fieldServiceAddressIduuidoptional

parties.addresses[]._id of the concrete on-site address (geocoding source for proximity). Falls back to the MAIN address when null.

nullable
parkedAtdatetimeoptional

Timestamp when the task was parked (cleared when un-parked).

read-onlynullable
parkedBystringoptional

User UUID who parked the task (cleared when un-parked).

read-onlynullable
linkedCalendarEventIduuidoptional

Primary calendar_event this task was scheduled into. Many parked tasks may point to one appointment. Set by the schedule-into-event endpoint. For split tasks (ADR 0219) this is the FIRST part-event; the full set lives in calendarEventIds.

read-onlynullable
calendarEventIdsuuid[]optional

All calendar_events this task was planned into (ADR 0219). For a split task the planner writes one event per part; linkedCalendarEventId mirrors [0] for backward compatibility. Readers that need every appointment should prefer this and fall back to [linkedCalendarEventId] when absent (older data). Set server-side (plan/commit + schedule-into-event); protected against direct PATCH.

read-only

Standard-Endpoints

Diese Resource folgt dem generischen CRUD-Vertrag der Plattform. Lesen Sie die Konventionen für Pagination, Idempotenz, Optimistic Locking und Audit. Die wichtigsten Endpoints:

  • GET /api/v1/tasks — Liste, paginiert + filterbar
  • GET /api/v1/tasks/<id> — Einzelne Entity
  • POST /api/v1/tasks — Anlegen
  • PATCH /api/v1/tasks/<id> — Teil-Update
  • DELETE /api/v1/tasks/<id> — Soft-Delete
  • GET /api/v1/tasks/<id>/timeline — Audit + Aktivitäten

Suche