Creates or updates multiple user timesheets in a single batch request. This API is used by the Synchronization module to send multiple records in one request instead of sending each record individually, which: 1. Reduces the number of HTTP requests. 2. Improves performance and efficiency. The batch processing logic (deserialize, validation, transaction handling, saving, and logging) is handled by BatchSaveHelper. Each record will return its own ResponseResult indicating success or failure.

Request Information

URI Parameters :

None.

Body Parameters :

user_timesheet
NameDescriptionTypeAdditional information
id

Primary Key

globally unique identifier
user_id

Foreign key of the user this timesheet entry belongs to.

globally unique identifier
hour_type_id

Foreign key of the hour type

globally unique identifier

Required

date_from

Date+Time timesheet FROM

date

Required

date_from_rounded

rounded to the nearest configured interval, used for billing/display.

date

Required

date_to

Date+Time timesheet TO

date

Required

date_to_rounded

rounded to the nearest configured interval, used for billing/display.

date

Required

remark

Additional remark field

string

Max length: 4000

is_approved

Inform if this user_timesheet belongs to a week approved (readonly)

boolean
is_start_stop

Indicates this entry was recorded via a start/stop timer rather than manually keyed in.

boolean
is_time_for_money

Indicates this time is billable ("time for money") rather than purely informational.

boolean
db_table_id

Foreign key to the table timesheet is linked. Can be a jobs,project,company or empty

globally unique identifier
id_in_table

Foreign key of the object linked. Can be a jobs.id, project.id , company.id or empty

globally unique identifier
property_1_checked

Checked state of the hour type's configurable custom property #1 (see ) for this entry.

boolean
property_2_checked

Checked state of the hour type's configurable custom property #2 for this entry.

boolean
property_3_checked

Checked state of the hour type's configurable custom property #3 for this entry.

boolean
property_4_checked

Checked state of the hour type's configurable custom property #4 for this entry.

boolean
property_5_checked

Checked state of the hour type's configurable custom property #5 for this entry.

boolean
start_latitude_decimal

Latitude of the user's location when the timer was started.

decimal number
start_longitude_decimal

Longitude of the user's location when the timer was started.

decimal number
end_latitude_decimal

Latitude of the user's location when the timer was stopped.

decimal number
end_longitude_decimal

Longitude of the user's location when the timer was stopped.

decimal number
modified_dateutc

Readonly system field managed by database, filled with GetUtcDate when adding,updating

date
is_confirmed

offline field: is_confirmed flag

boolean

Request Formats :

application/json, text/json

Sample:
{
  "id": "e3c244e9-e555-422e-a87f-4bd7b60db8a9",
  "user_id": "9728a6b4-94b6-47d0-a6c4-8f55a4fdc067",
  "hour_type_id": "6d2d0b8d-cfd9-4a91-9ca6-8caf771ac3ab",
  "date_from": "2026-09-16T09:23:08.7411584+00:00",
  "date_from_rounded": "2026-09-16T09:23:08.7411584+00:00",
  "date_to": "2026-09-16T09:23:08.7411584+00:00",
  "date_to_rounded": "2026-09-16T09:23:08.7411584+00:00",
  "remark": "sample string 8",
  "is_approved": true,
  "is_start_stop": true,
  "is_time_for_money": true,
  "db_table_id": "601b7ac1-fe54-43d9-b89a-a6113d577b8d",
  "id_in_table": "1ff35815-feed-4d9b-8e34-f6a0ee93a085",
  "property_1_checked": true,
  "property_2_checked": true,
  "property_3_checked": true,
  "property_4_checked": true,
  "property_5_checked": true,
  "start_latitude_decimal": 19.0,
  "start_longitude_decimal": 20.0,
  "end_latitude_decimal": 21.0,
  "end_longitude_decimal": 22.0,
  "modified_dateutc": "2026-09-16T09:23:08.7411584+00:00",
  "is_confirmed": true
}

application/xml, text/xml

Sample:
<user_timesheet xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <date_from>2026-09-16T09:23:08.741Z</date_from>
  <date_from_rounded>2026-09-16T09:23:08.741Z</date_from_rounded>
  <date_to>2026-09-16T09:23:08.741Z</date_to>
  <date_to_rounded>2026-09-16T09:23:08.741Z</date_to_rounded>
  <db_table_id>601b7ac1-fe54-43d9-b89a-a6113d577b8d</db_table_id>
  <end_latitude_decimal>21</end_latitude_decimal>
  <end_longitude_decimal>22</end_longitude_decimal>
  <hour_type_id>6d2d0b8d-cfd9-4a91-9ca6-8caf771ac3ab</hour_type_id>
  <id>e3c244e9-e555-422e-a87f-4bd7b60db8a9</id>
  <id_in_table>1ff35815-feed-4d9b-8e34-f6a0ee93a085</id_in_table>
  <is_approved>true</is_approved>
  <is_confirmed>true</is_confirmed>
  <is_start_stop>true</is_start_stop>
  <is_time_for_money>true</is_time_for_money>
  <modified_dateutc>2026-09-16T09:23:08.741Z</modified_dateutc>
  <property_1_checked>true</property_1_checked>
  <property_2_checked>true</property_2_checked>
  <property_3_checked>true</property_3_checked>
  <property_4_checked>true</property_4_checked>
  <property_5_checked>true</property_5_checked>
  <remark>sample string 8</remark>
  <start_latitude_decimal>19</start_latitude_decimal>
  <start_longitude_decimal>20</start_longitude_decimal>
  <user_id>9728a6b4-94b6-47d0-a6c4-8f55a4fdc067</user_id>
</user_timesheet>

Response Information

Resource Description :

IHttpActionResult containing batch save results.

user_timesheet
NameDescriptionTypeAdditional information
id

Primary Key

globally unique identifier
user_id

Foreign key of the user this timesheet entry belongs to.

globally unique identifier
hour_type_id

Foreign key of the hour type

globally unique identifier

Required

date_from

Date+Time timesheet FROM

date

Required

date_from_rounded

rounded to the nearest configured interval, used for billing/display.

date

Required

date_to

Date+Time timesheet TO

date

Required

date_to_rounded

rounded to the nearest configured interval, used for billing/display.

date

Required

remark

Additional remark field

string

Max length: 4000

is_approved

Inform if this user_timesheet belongs to a week approved (readonly)

boolean
is_start_stop

Indicates this entry was recorded via a start/stop timer rather than manually keyed in.

boolean
is_time_for_money

Indicates this time is billable ("time for money") rather than purely informational.

boolean
db_table_id

Foreign key to the table timesheet is linked. Can be a jobs,project,company or empty

globally unique identifier
id_in_table

Foreign key of the object linked. Can be a jobs.id, project.id , company.id or empty

globally unique identifier
property_1_checked

Checked state of the hour type's configurable custom property #1 (see ) for this entry.

boolean
property_2_checked

Checked state of the hour type's configurable custom property #2 for this entry.

boolean
property_3_checked

Checked state of the hour type's configurable custom property #3 for this entry.

boolean
property_4_checked

Checked state of the hour type's configurable custom property #4 for this entry.

boolean
property_5_checked

Checked state of the hour type's configurable custom property #5 for this entry.

boolean
start_latitude_decimal

Latitude of the user's location when the timer was started.

decimal number
start_longitude_decimal

Longitude of the user's location when the timer was started.

decimal number
end_latitude_decimal

Latitude of the user's location when the timer was stopped.

decimal number
end_longitude_decimal

Longitude of the user's location when the timer was stopped.

decimal number
modified_dateutc

Readonly system field managed by database, filled with GetUtcDate when adding,updating

date
is_confirmed

offline field: is_confirmed flag

boolean

Response Formats

application/json, text/json

Sample:
{
  "id": "dd1bdc08-cda3-48ca-b9fd-71a55e52d94b",
  "user_id": "1eb8edff-7a08-4477-a610-1490c942fdb8",
  "hour_type_id": "502073e7-87a6-4b6d-b6f2-3c8393566868",
  "date_from": "2026-09-16T09:23:08.7411584+00:00",
  "date_from_rounded": "2026-09-16T09:23:08.7411584+00:00",
  "date_to": "2026-09-16T09:23:08.7411584+00:00",
  "date_to_rounded": "2026-09-16T09:23:08.7411584+00:00",
  "remark": "sample string 8",
  "is_approved": true,
  "is_start_stop": true,
  "is_time_for_money": true,
  "db_table_id": "3ec1e123-8ae2-4278-8c6a-f57d7ba03018",
  "id_in_table": "6779682c-2f4c-48e3-9680-cb7025a68906",
  "property_1_checked": true,
  "property_2_checked": true,
  "property_3_checked": true,
  "property_4_checked": true,
  "property_5_checked": true,
  "start_latitude_decimal": 19.0,
  "start_longitude_decimal": 20.0,
  "end_latitude_decimal": 21.0,
  "end_longitude_decimal": 22.0,
  "modified_dateutc": "2026-09-16T09:23:08.7411584+00:00",
  "is_confirmed": true
}

application/xml, text/xml

Sample:
<user_timesheet xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <date_from>2026-09-16T09:23:08.741Z</date_from>
  <date_from_rounded>2026-09-16T09:23:08.741Z</date_from_rounded>
  <date_to>2026-09-16T09:23:08.741Z</date_to>
  <date_to_rounded>2026-09-16T09:23:08.741Z</date_to_rounded>
  <db_table_id>3ec1e123-8ae2-4278-8c6a-f57d7ba03018</db_table_id>
  <end_latitude_decimal>21</end_latitude_decimal>
  <end_longitude_decimal>22</end_longitude_decimal>
  <hour_type_id>502073e7-87a6-4b6d-b6f2-3c8393566868</hour_type_id>
  <id>dd1bdc08-cda3-48ca-b9fd-71a55e52d94b</id>
  <id_in_table>6779682c-2f4c-48e3-9680-cb7025a68906</id_in_table>
  <is_approved>true</is_approved>
  <is_confirmed>true</is_confirmed>
  <is_start_stop>true</is_start_stop>
  <is_time_for_money>true</is_time_for_money>
  <modified_dateutc>2026-09-16T09:23:08.741Z</modified_dateutc>
  <property_1_checked>true</property_1_checked>
  <property_2_checked>true</property_2_checked>
  <property_3_checked>true</property_3_checked>
  <property_4_checked>true</property_4_checked>
  <property_5_checked>true</property_5_checked>
  <remark>sample string 8</remark>
  <start_latitude_decimal>19</start_latitude_decimal>
  <start_longitude_decimal>20</start_longitude_decimal>
  <user_id>1eb8edff-7a08-4477-a610-1490c942fdb8</user_id>
</user_timesheet>