Partially updates a time entry. Send only the fields you want to change.
Every field is optional and a field left out keeps its current value, so a body of {}
is accepted and returns the entry unchanged. Re-supplying a value the entry already holds is a
no-op: nothing is written, the entry’s UpdatedOn does not move and no contract hours move.
The response is the updated entry, in the same shape GET /v1/time-entries/{timeEntryId} returns.
StartedOn, EndedOn and ActualHours are merged with the entry’s current values before the same any-two-of-three rule the create applies. Send two and the third is derived from those two; send all three and they must agree. Send StartedOn or EndedOn alone and the other instant is kept, so the duration changes with it; send ActualHours alone and StartedOn is kept and EndedOn moves, so the duration is exactly what was sent.
Whenever the duration, work type, billing role, billable status or service line changes, the entry is re-priced exactly as a new entry with the merged values would be: the work type’s minimum and increment rounding, the role’s rate and the contract’s terms are applied afresh, and the hours the entry consumes from a BlockHours or LimitedHours contract are returned to the old contract and drawn from the new. UserId, BillingRoleId, WorkTypeId, ServiceLineId and BillableStatusId are validated the same way the create validates them.
The ticket an entry is logged against cannot be changed, and neither can its attachments: a
body carrying TicketId or Attachments is rejected with 400, as any unknown field
is. To move time to another ticket, delete the entry and log it against the other ticket.
Only a time entry that is still open can be changed. One that has been approved, completed or invoiced is rejected with 409, as is one that is void. The ticket’s own status does not matter: time on a closed ticket that has not yet been billed can still be corrected here, exactly as the Approve & Invoice flow corrects it, so there is nothing to reopen first. Reverse the approval and the same request succeeds. Note that deleting such an entry is still refused while its ticket is closed - correcting time and removing it are not the same act.
Autoritzacions
Your Gorelo API key. See Generate API key. If your data is hosted in Australia, click the base URL at the top of this page and select https://api.aue.gorelo.io.
Paràmetres de ruta
Time entry to update.
Cos
Fields to change.
Partial update of a time entry. Every field is optional and only the fields present in the body are applied; a field left out keeps its current value. The ticket an entry is logged against and its attachments cannot be changed here, so neither is a member: a body carrying either is rejected as malformed, the same way every other endpoint treats a field it does not know.
When the work started, as a single UTC instant.
The three time fields are merged with the entry's current values before the same any-two-of-three rule the create applies. Send two of them and the third is derived from those two alone; send all three and they must agree. Send StartedOn or EndedOn alone and the other instant is kept, so the duration changes with it. Send ActualHours alone and StartedOn is kept and EndedOn moves, so the duration is exactly what was sent. Sending null is the same as omitting it - neither instant is clearable, since an entry always has an interval.
"2026-04-28T09:00:00.0000000+00:00"
When the work finished, as a single UTC instant. Must be later than the StartedOn in force
after the merge. See StartedOn for how the three time fields combine. Sending null is
the same as omitting it.
"2026-04-28T10:30:00.0000000+00:00"
Duration worked, in decimal hours. Must be greater than 0. The work type's minimum and
increment rounding is applied on top of it, as on create. See StartedOn for how the
three time fields combine.
1.5
Billable status for this entry: 1 = Billable, 2 = No charge, 3 = Non-billable; any other value is rejected.
1
User whose time this is. Validated against the service provider. Changing it re-stamps the entry's cost rate from the new user's own rate, as the app does.
8842
Billing role to charge at. Validated against the service provider's active roles. Get valid ids from GET /v1/billing-roles.
1742
Work type to apply. Determines the rate multiplier and the minimum/increment rounding applied to the logged duration. Validated against the service provider's active work types. Get valid ids from GET /v1/work-types.
2432
Service line to bill this time against.
Omit it and the entry keeps the service line it has. Send it as null to take the entry off its contract outright, which also suppresses the automatic contract assignment that would otherwise happen when the time is approved. When supplied, the service line must belong to the entry's client, and its contract must be active today and cover labour. Moving an entry between contracts returns the hours it consumed to the old one and draws them from the new.
4720
Free-text note describing the work. Send an empty string to clear it.
"Replaced faulty NIC"
Distance travelled for this work, when the service provider bills mileage.
12.5
Resposta
OK
100, 101, 102, 103, 200, 201, 202, 203, 204, 205, 206, 207, 208, 226, 300, 301, 302, 303, 304, 305, 306, 307, 308, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 421, 422, 423, 424, 426, 428, 429, 431, 451, 500, 501, 502, 503, 504, 505, 506, 507, 508, 510, 511 Time logged against a ticket.
null