Time Entries API
POST/api/v1/time-entries
Product availabilityAlgaPSA

Create time entry

Creates a time entry. Billable entries are linked to a contract line (optional `contract_line_id`; auto-resolved when exactly one line is eligible) and draw bucket/hour-block usage. Returns 400 ValidationError (VALIDATION_ERROR) with details.reason `contract_line_ambiguous` or `contract_line_not_eligible` and details.eligible_contract_lines[] (contract_line_id, contract_line_name, contract_line_type, contract_id, contract_name, has_bucket) when the line cannot be resolved.

RBAC · time_entry

Request body

Content type: application/json · schema WorkV1CreateTimeEntryBody

work_item_idstring <uuid>
Required when work_item_type is ticket or project_task (the ticket must exist). Not required for other work item types.
work_item_typestringRequired
Enum: ticketproject_tasknon_billable_categoryad_hocinteraction
start_timestring <date-time>Required
ISO 8601 datetime. Duration is computed from start_time and end_time and cannot be submitted.
end_timestring <date-time>Required
ISO 8601 datetime. Must be after start_time. Duration is computed and cannot be submitted.
notesstring
service_idstring <uuid>Required
Required (it drives billing).
tax_regionstring
tax_rate_idstring <uuid>Nullable
Optional. Stored as given, like the UI save path; the API does not compute tax.
contract_line_idstring <uuid>
Optional. Must be one of the contract lines eligible for the work item's client, the service and the work date, else 400. When omitted the line is resolved automatically; if several lines are eligible and none can be chosen the request fails with 400 (details.reason = contract_line_ambiguous, details.eligible_contract_lines) and should be resent with contract_line_id set. Ignored for non-billable entries.
is_billableboolean
default true

Response body

Success response 200 · schema WorkV1ApiSuccess

dataanyOfRequired
anyOf (option 1)object
anyOf (option 2)array of object
itemsobject
metaobject

Response codes

200
Operation succeeded.
201
Create-like operation succeeded.
400
Validation or request parsing failure.
401
API key missing/invalid or associated user missing.
403
RBAC denied for time_entry resource action.
500
Unexpected controller/service failure.