If no ID is specified, create a new timesheet for the employee. Otherwise, update the timesheet with the specified ID.


POST https://keypay.yourpayroll.com.au/api/v2/ess/{employeeId}/timesheet

Path parameters

Parameter name Value Description Additional
employeeId string Required

Request body

The request body takes a complete TimesheetLineViewModel resource, containing the following writable properties:

    "attachment": {
        "dateCreated": "date-time",
        "friendlyName": "string",
        "id": "int32",
        "url": "string"
    "breaks": [
            "end": "date-time",
            "id": "int32",
            "start": "date-time",
            "submittedEnd": "date-time",
            "submittedStart": "date-time"
    "classificationId": "int32",
    "classificationName": "string",
    "comments": "string",
    "cost": "double",
    "costingData": {
        "allowances": [
                "cost": "double",
                "option": "string",
                "payCategory": "string",
                "payCategoryId": "int32",
                "rateMultiplier": "double",
                "type": "string",
                "units": "double"
        "isConsolidated": "boolean",
        "liabilities": [
                "amount": "double",
                "cost": "double",
                "includeInShiftCost": "boolean",
                "liabilityCategoryId": "int32",
                "liabilityCategoryName": "string",
                "option": "string"
        "shiftParts": [
                "actualDuration": "string",
                "baseRate": "double",
                "calculatedRate": "double",
                "classification": {
                    "id": "int32",
                    "name": "string",
                    "rank": "int32"
                "cost": "double",
                "effectiveDuration": "string",
                "endTime": "date-time",
                "isBreak": "boolean",
                "leaveCategory": {
                    "id": "int32",
                    "name": "string"
                "payCategory": "string",
                "payCategoryId": "int32",
                "rateMultiplier": "double",
                "startTime": "date-time",
                "workType": {
                    "id": "int32",
                    "linkType": "string",
                    "name": "string"
    "discard": "boolean",
    "durationOverride": "string",
    "employeeId": "int32",
    "employeeName": "string",
    "end": "date-time",
    "externalReferenceId": "string",
    "id": "int32",
    "isLocked": "boolean",
    "isOverlapping": "boolean",
    "isUnitBasedWorkType": "boolean",
    "leaveCategoryId": "int32",
    "leaveRequestId": "int32",
    "locationId": "int32",
    "locationName": "string",
    "overdrawsLeave": "boolean",
    "payCategoryId": "int32",
    "payRunId": "int32",
    "paySlipUrl": "string",
    "rate": "double",
    "reviewedBy": "string",
    "shiftConditionIds": [
    "source": "string",
    "start": "date-time",
    "status": "string",
    "submittedEnd": "date-time",
    "submittedStart": "date-time",
    "unitType": "string",
    "units": "double",
    "workTypeId": "int32",
    "workTypeName": "string"


Name Type Description
attachment object AttachmentModel
attachment.dateCreated date-time Nullable
attachment.friendlyName string String
attachment.id int32 Nullable
attachment.url string String
breaks[] array
breaks[].end date-time Nullable
breaks[].id int32 Int32
breaks[].start date-time Nullable
breaks[].submittedEnd date-time Nullable
breaks[].submittedStart date-time Nullable
classificationId int32 Nullable
classificationName string String
comments string String
cost double Nullable
costingData object ShiftCostingData
costingData.allowances[] array
costingData.allowances[].cost double Decimal
costingData.allowances[].option string ShiftAllowanceOption

Possible values are:

  • Fixed
  • PerHourWorked
  • PercentageOfShiftCost
  • PerShiftUnit
costingData.allowances[].payCategory string String
costingData.allowances[].payCategoryId int32 Int32
costingData.allowances[].rateMultiplier double Decimal
costingData.allowances[].type string ShiftAllowanceType

Possible values are:

  • Standard
  • AllPurpose
costingData.allowances[].units double Decimal
costingData.isConsolidated boolean Boolean
costingData.liabilities[] array
costingData.liabilities[].amount double Decimal
costingData.liabilities[].cost double Decimal
costingData.liabilities[].includeInShiftCost boolean Boolean
costingData.liabilities[].liabilityCategoryId int32 Int32
costingData.liabilities[].liabilityCategoryName string String
costingData.liabilities[].option string ShiftAllowanceOption

Possible values are:

  • Fixed
  • PerHourWorked
  • PercentageOfShiftCost
  • PerShiftUnit
costingData.shiftParts[] array
costingData.shiftParts[].actualDuration string TimeSpan
costingData.shiftParts[].baseRate double Decimal
costingData.shiftParts[].calculatedRate double Decimal
costingData.shiftParts[].classification object NominalClassification
costingData.shiftParts[].classification.id int32 Int32
costingData.shiftParts[].classification.name string String
costingData.shiftParts[].classification.rank int32 Int32
costingData.shiftParts[].cost double Decimal
costingData.shiftParts[].effectiveDuration string TimeSpan
costingData.shiftParts[].endTime date-time DateTime
costingData.shiftParts[].isBreak boolean Boolean
costingData.shiftParts[].leaveCategory object NominalLeaveCategory
costingData.shiftParts[].leaveCategory.id int32 Int32
costingData.shiftParts[].leaveCategory.name string String
costingData.shiftParts[].payCategory string String
costingData.shiftParts[].payCategoryId int32 Int32
costingData.shiftParts[].rateMultiplier double Nullable
costingData.shiftParts[].startTime date-time DateTime
costingData.shiftParts[].workType object NominalWorkType
costingData.shiftParts[].workType.id int32 Int32
costingData.shiftParts[].workType.linkType string WorkTypeLinkTypeRestriction

Possible values are:

  • PayCategory
  • LeaveCategory
  • ShiftCondition
costingData.shiftParts[].workType.name string String
discard boolean Boolean
durationOverride string Nullable
employeeId int32 Int32
employeeName string String
end date-time Nullable
externalReferenceId string String
id int32 Int32
isLocked boolean Boolean
isOverlapping boolean Boolean
isUnitBasedWorkType boolean Boolean
leaveCategoryId int32 Nullable
leaveRequestId int32 Nullable
locationId int32 Nullable
locationName string String
overdrawsLeave boolean Boolean
payCategoryId int32 Nullable
payRunId int32 Nullable
paySlipUrl string String
rate double Nullable
reviewedBy string String
shiftConditionIds[] array of int32
source string ExternalService

Possible values are:

  • None
  • Saasu
  • Xero
  • MYOB
  • Deputy
  • EmployeeTimePunch
  • ClickSuper
  • IntegratedTimesheets
  • FileImport
  • FileExport
  • QuickBooks
  • Harmony
  • AwardStore
  • Attache
  • IntegratedRostering
  • ReckonAccounts
  • API
  • MicroPower
  • RosterLive
  • NetSuite
  • Kounta
  • TimeAndAttendanceKiosk
  • DetailedFileExport
  • JonasPremier
  • WageEasy
  • Maestrano
  • WorkZone
  • EmployeePortal
  • RosterTemplate
  • Onboarding
  • Admin
  • WorkZoneClockOnOff
start date-time Nullable
status string TimesheetLineStatusType

Possible values are:

  • Missing
  • Submitted
  • Approved
  • Rejected
  • Processed
submittedEnd date-time Nullable
submittedStart date-time Nullable
unitType string String
units double Nullable
workTypeId int32 Nullable
workTypeName string String


The following HTTP status codes may be returned, optionally with a response resource.

Status code Description Resource
200 OK