diff --git a/manifest.json b/manifest.json index d5897c8e6..b5034a216 100644 --- a/manifest.json +++ b/manifest.json @@ -27,6 +27,10 @@ "path": "/xero-payroll-au.yaml", "canPreview": true }, + "payrollAuV2": { + "path": "/xero-payroll-au-v2.yaml", + "canPreview": true + }, "payrollNz": { "path": "/xero-payroll-nz.yaml", "canPreview": true diff --git a/xero-payroll-au-v2.yaml b/xero-payroll-au-v2.yaml new file mode 100644 index 000000000..858191f62 --- /dev/null +++ b/xero-payroll-au-v2.yaml @@ -0,0 +1,927 @@ +openapi: 3.0.0 +info: + version: 9.3.0 + title: Xero Payroll AU API 2.0 + description: This is the Xero Payroll API 2.0 for orgs in Australia region. + termsOfService: https://developer.xero.com/xero-developer-platform-terms-conditions/ + contact: + name: Xero Platform Team + email: api@xero.com + url: https://developer.xero.com + license: + name: MIT + url: https://github.com/XeroAPI/Xero-OpenAPI/blob/master/LICENSE +servers: + - description: Xero Payroll AU API 2.0 + url: https://api.xero.com/payroll.xro/2.0 +tags: + - name: PayrollAu + description: Operations available to regular developers +paths: + /Timesheets: + parameters: + - $ref: "#/components/parameters/requiredHeader" + get: + security: + - OAuth2: + - payroll.timesheets + - payroll.timesheets.read + tags: + - PayrollAu + operationId: getTimesheets + x-hasPayrollAuProblem: true + summary: Retrieves timesheets + parameters: + - in: query + name: page + description: Page number which specifies the set of records to retrieve. By default the number of the records per set is 100. + schema: + type: integer + example: 5 + - in: query + name: filter + description: Filter by employeeId and/or payrollCalendarId + schema: + type: string + example: employeeId==00000000-0000-0000-0000-000000000000,payrollCalendarId==00000000-0000-0000-0000-000000000000 + - in: query + name: status + description: filter results by any timesheets with a matching timesheet status + schema: + type: string + example: Draft + - in: query + name: startDate + x-snake: start_date + description: filter results by any timesheets with a startDate on or after the provided date + schema: + type: string + example: "2019-01-02" + - in: query + name: endDate + x-snake: end_date + description: filter results by any timesheets with a endDate on or before the provided date + schema: + type: string + example: "2020-01-02" + - in: query + name: sort + description: sort the order of timesheets returned. The default is based on the timesheets createdDate, sorted oldest to newest. Currently, the only other option is to reverse the order based on the timesheets startDate, sorted newest to oldest. + schema: + type: string + example: startDate + responses: + "200": + description: search results matching criteria + content: + application/json: + schema: + $ref: "#/components/schemas/Timesheets" + example: + id: d81c2087-3ecb-4d91-b775-73d85f593370 + providerName: provider-name + dateTimeUTC: 2020-04-13T21:54:01.8865016 + httpStatusCode: OK + pagination: + page: 1 + pageSize: 100 + pageCount: 1 + itemCount: 1 + problem: null + timesheets: + - timesheetID: 0c94d453-3d8c-4167-8c25-b4025121d18b + payrollCalendarID: 216d80e6-af55-47b1-b718-9457c3f5d2fe + employeeID: aad6b292-7b94-408b-93f6-e489867e3fb0 + startDate: 2020-04-13T00:00:00 + endDate: 2020-04-19T00:00:00 + status: Approved + totalHours: 16 + updatedDateUTC: 2020-04-13T21:53:39 + post: + security: + - OAuth2: + - payroll.timesheets + tags: + - PayrollAu + operationId: createTimesheet + x-hasPayrollAuProblem: true + x-example: + - startDateValue: + key: startDate + keyPascal: StartDate + keySnake: start_date + is_date: true + java_datatype: LocalDate + csharp_datatype: DateTime + default: LocalDate.of(2020, Month.OCTOBER, 28) + java: LocalDate.of(2020, Month.OCTOBER, 28) + csharp: new DateTime(2020, 10, 10) + php: new DateTime('2020-10-28') + node: "'2020-10-28'" + python: dateutil.parser.parse('2020-10-28T00:00:00Z') + ruby: "'YYYY-MM-DD'" + - endDateValue: + key: endDate + keyPascal: EndDate + keySnake: end_date + is_date: true + java_datatype: LocalDate + csharp_datatype: DateTime + default: LocalDate.of(2020, Month.OCTOBER, 30) + java: LocalDate.of(2020, Month.OCTOBER, 30) + csharp: new DateTime(2020, 10, 12) + php: new DateTime('2020-10-30') + node: "'2020-10-30'" + python: dateutil.parser.parse('2020-10-30T00:00:00Z') + ruby: "'YYYY-MM-DD'" + - timesheet: + key: timesheet + keyPascal: Timesheet + keySnake: timesheet + is_object: true + - payrollCalendarID: + key: payrollCalendarID + keyPascal: PayrollCalendarID + keySnake: payroll_calendar_id + is_uuid: true + default: 00000000-0000-0000-0000-000000000000 + object: timesheet + - employeeID: + key: employeeID + keyPascal: EmployeeID + keySnake: employee_id + is_uuid: true + default: 00000000-0000-0000-0000-000000000000 + object: timesheet + - startDate: + is_variable: true + nonString: true + key: startDate + keyPascal: StartDate + keySnake: start_date + default: startDate + python: start_date + ruby: start_date + object: timesheet + - endDate: + is_last: true + is_variable: true + nonString: true + key: endDate + keyPascal: EndDate + keySnake: end_date + default: endDate + python: end_date + ruby: end_date + object: timesheet + summary: Creates a new timesheet + parameters: + - $ref: "#/components/parameters/idempotencyKey" + responses: + "200": + description: search results matching criteria + content: + application/json: + schema: + $ref: "#/components/schemas/TimesheetObject" + example: + id: ef0aa7e2-6f7f-43f6-9186-af670dce7c69 + providerName: provider-name + dateTimeUTC: 2020-04-21T03:07:37.0148822 + httpStatusCode: OK + pagination: null + problem: null + timesheet: + timesheetID: 88d2038a-06f7-4b8a-bdab-809804c0aa1d + payrollCalendarID: 216d80e6-af55-47b1-b718-9457c3f5d2fe + employeeID: aad6b292-7b94-408b-93f6-e489867e3fb0 + startDate: 2020-04-13T00:00:00 + endDate: 2020-04-19T00:00:00 + status: Draft + totalHours: 14 + updatedDateUTC: 2020-04-21T03:07:36.8132834 + timesheetLines: + - timesheetLineID: 03060d0c-b14a-4339-aced-51cb2e5313b7 + date: 2020-04-15T00:00:00 + earningsRateID: 87f5b43a-cf51-4b74-92de-94c819e82d27 + trackingItemID: null + numberOfUnits: 6 + - timesheetLineID: 53ebdb54-b604-4d15-8c42-5162a7fe88e6 + date: 2020-04-13T00:00:00 + earningsRateID: 87f5b43a-cf51-4b74-92de-94c819e82d27 + trackingItemID: null + numberOfUnits: 8 + "400": + description: validation error for a bad request + content: + application/json: + schema: + $ref: "#/components/schemas/Problem" + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/Timesheet" + example: + payrollCalendarID: 216d80e6-af55-47b1-b718-9457c3f5d2fe + employeeID: aad6b292-7b94-408b-93f6-e489867e3fb0 + startDate: "2020-04-13" + endDate: "2020-04-19" + timesheetLines: + - date: "2020-04-13" + earningsRateID: 87f5b43a-cf51-4b74-92de-94c819e82d27 + numberOfUnits: 8 + - date: "2020-04-15" + earningsRateID: 87f5b43a-cf51-4b74-92de-94c819e82d27 + numberOfUnits: 6 + /Timesheets/{TimesheetID}: + parameters: + - $ref: "#/components/parameters/requiredHeader" + get: + security: + - OAuth2: + - payroll.timesheets + - payroll.timesheets.read + tags: + - PayrollAu + operationId: getTimesheet + x-hasPayrollAuProblem: true + summary: Retrieve a specific timesheet by using a unique timesheet ID + parameters: + - in: path + name: TimesheetID + x-snake: timesheet_id + required: true + description: Identifier for the timesheet + schema: + type: string + format: uuid + responses: + "200": + description: search results matching criteria + content: + application/json: + schema: + $ref: "#/components/schemas/TimesheetObject" + example: + id: 504259ac-df26-482e-bd0a-d792d96453bb + providerName: provider-name + dateTimeUTC: 2020-04-14T16:41:00.5013526 + httpStatusCode: OK + pagination: null + problem: null + timesheet: + timesheetID: 25c59963-5df2-43c3-88f6-25a3caa63084 + payrollCalendarID: 216d80e6-af55-47b1-b718-9457c3f5d2fe + employeeID: aad6b292-7b94-408b-93f6-e489867e3fb0 + startDate: 2020-04-13T00:00:00 + endDate: 2020-04-19T00:00:00 + status: Draft + totalHours: 14 + updatedDateUTC: 2020-04-14T16:31:35 + timesheetLines: + - timesheetLineID: 6cc1e5c3-f080-4dbc-a82b-bea256ef939f + date: 2020-04-13T00:00:00 + earningsRateID: 87f5b43a-cf51-4b74-92de-94c819e82d27 + trackingItemID: null + numberOfUnits: 8 + - timesheetLineID: 3d900df1-9859-492b-9b00-155860158c0d + date: 2020-04-15T00:00:00 + earningsRateID: 87f5b43a-cf51-4b74-92de-94c819e82d27 + trackingItemID: null + numberOfUnits: 6 + delete: + security: + - OAuth2: + - payroll.timesheets + tags: + - PayrollAu + operationId: deleteTimesheet + summary: Deletes a specific timesheet + parameters: + - in: path + name: TimesheetID + x-snake: timesheet_id + required: true + description: Identifier for the timesheet + schema: + type: string + format: uuid + responses: + "200": + description: search results matching criteria + content: + application/json: + schema: + $ref: "#/components/schemas/TimesheetLine" + "400": + description: validation error for a bad request + content: + application/json: + schema: + $ref: "#/components/schemas/Problem" + /Timesheets/{TimesheetID}/Lines: + parameters: + - $ref: "#/components/parameters/requiredHeader" + post: + security: + - OAuth2: + - payroll.timesheets + tags: + - PayrollAu + operationId: createTimesheetLine + x-hasPayrollAuProblem: true + x-example: + - dateValue: + key: date + keyPascal: Date + keySnake: date + is_date: true + java_datatype: LocalDate + csharp_datatype: DateTime + default: LocalDate.of(2020, Month.OCTOBER, 28) + java: LocalDate.of(2020, Month.OCTOBER, 28) + csharp: new DateTime(2020, 10, 10) + php: new DateTime('2020-10-28') + node: "'2020-10-28'" + python: dateutil.parser.parse('2020-10-28T00:00:00Z') + ruby: "'YYYY-MM-DD'" + - timesheetLine: + key: timesheetLine + keyPascal: TimesheetLine + keySnake: timesheet_line + is_object: true + - timesheetLineID: + key: timesheetLineID + keyPascal: TimesheetLineID + keySnake: timesheet_line_id + is_uuid: true + default: 00000000-0000-0000-0000-000000000000 + object: timesheetLine + - date: + key: date + keyPascal: Date + keySnake: date + default: date + python: date + ruby: date + is_variable: true + nonString: true + object: timesheetLine + - earningsRateID: + key: earningsRateID + keyPascal: EarningsRateID + keySnake: earnings_rate_id + is_uuid: true + default: 00000000-0000-0000-0000-000000000000 + object: timesheetLine + - trackingItemID: + key: trackingItemID + keyPascal: TrackingItemID + keySnake: tracking_item_id + is_uuid: true + default: 00000000-0000-0000-0000-000000000000 + object: timesheetLine + - numberOfUnits: + key: numberOfUnits + keyPascal: NumberOfUnits + keySnake: number_of_units + default: 6 + object: timesheetLine + nonString: true + is_last: true + summary: Creates a new timesheet line for a specific timesheet using a unique timesheet ID + parameters: + - $ref: "#/components/parameters/idempotencyKey" + - in: path + name: TimesheetID + x-snake: timesheet_id + required: true + description: Identifier for the timesheet + schema: + type: string + format: uuid + responses: + "200": + description: search results matching criteria + content: + application/json: + schema: + $ref: "#/components/schemas/TimesheetLineObject" + example: + id: cf701261-529e-47cd-8156-5ec9ab3394ff + providerName: provider-name + dateTimeUTC: 2020-04-14T17:19:22.8599292 + httpStatusCode: OK + pagination: null + problem: null + timesheetLine: + timesheetLineID: 56fce87e-7f0d-4c19-8f74-7f5656651c81 + date: 2020-04-14T00:00:00 + earningsRateID: 87f5b43a-cf51-4b74-92de-94c819e82d27 + trackingItemID: null + numberOfUnits: 1 + "400": + description: validation error for a bad request + content: + application/json: + schema: + $ref: "#/components/schemas/Problem" + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/TimesheetLine" + example: + date: "2020-04-14" + earningsRateID: 87f5b43a-cf51-4b74-92de-94c819e82d27 + numberOfUnits: 1 + /Timesheets/{TimesheetID}/Approve: + parameters: + - $ref: "#/components/parameters/requiredHeader" + post: + security: + - OAuth2: + - payroll.timesheets + tags: + - PayrollAu + operationId: approveTimesheet + x-hasPayrollAuProblem: true + summary: Approves a specific timesheet + parameters: + - $ref: "#/components/parameters/idempotencyKey" + - in: path + name: TimesheetID + x-snake: timesheet_id + required: true + description: Identifier for the timesheet + schema: + type: string + format: uuid + responses: + "200": + description: search results matching criteria + content: + application/json: + schema: + $ref: "#/components/schemas/TimesheetObject" + example: + id: 94c27148-2749-4d85-bc1a-986e6de230ae + providerName: provider-name + dateTimeUTC: 2020-06-01T20:32:19.7577043 + httpStatusCode: OK + pagination: null + problem: null + timesheet: + timesheetID: 62bd8b5f-8e90-4868-a0e6-62f994f7d659 + payrollCalendarID: 216d80e6-af55-47b1-b718-9457c3f5d2fe + employeeID: aad6b292-7b94-408b-93f6-e489867e3fb0 + startDate: 2020-04-13T00:00:00 + endDate: 2020-04-19T00:00:00 + status: Approved + totalHours: 9 + updatedDateUTC: 2020-06-01T20:32:19.9534744 + timesheetLines: + - timesheetLineID: ce6db38f-efe9-49dc-ae42-7e6bad3cb167 + date: 2020-04-14T00:00:00 + earningsRateID: 87f5b43a-cf51-4b74-92de-94c819e82d27 + trackingItemID: null + numberOfUnits: 2 + - timesheetLineID: bc8004d2-5965-4f4e-8e46-0519040b4a05 + date: 2020-04-15T00:00:00 + earningsRateID: 87f5b43a-cf51-4b74-92de-94c819e82d27 + trackingItemID: null + numberOfUnits: 6 + - timesheetLineID: fd00cd5a-7d0c-4cb7-85ff-66bd3ed2439a + date: 2020-04-14T00:00:00 + earningsRateID: 87f5b43a-cf51-4b74-92de-94c819e82d27 + trackingItemID: null + numberOfUnits: 1 + "400": + description: validation error for a bad request + content: + application/json: + schema: + $ref: "#/components/schemas/Problem" + /Timesheets/{TimesheetID}/RevertToDraft: + parameters: + - $ref: "#/components/parameters/requiredHeader" + post: + security: + - OAuth2: + - payroll.timesheets + tags: + - PayrollAu + operationId: revertTimesheet + x-hasPayrollAuProblem: true + summary: Reverts a specific timesheet to draft + parameters: + - $ref: "#/components/parameters/idempotencyKey" + - in: path + name: TimesheetID + x-snake: timesheet_id + required: true + description: Identifier for the timesheet + schema: + type: string + format: uuid + responses: + "200": + description: search results matching criteria + content: + application/json: + schema: + $ref: "#/components/schemas/TimesheetObject" + example: + id: a774530a-a50c-4480-a094-358cf80a7d98 + providerName: provider-name + dateTimeUTC: 2020-04-14T17:49:23.1119111 + httpStatusCode: OK + pagination: null + problem: null + timesheet: + timesheetID: 0fd483c0-3302-48c6-bbd5-7247c9a02460 + payrollCalendarID: 216d80e6-af55-47b1-b718-9457c3f5d2fe + employeeID: aad6b292-7b94-408b-93f6-e489867e3fb0 + startDate: 2020-04-13T00:00:00 + endDate: 2020-04-19T00:00:00 + status: Draft + totalHours: 15 + updatedDateUTC: 2020-04-14T17:49:23.2188538 + timesheetLines: + - timesheetLineID: 17a08549-1ed1-416b-83e2-c65040119a02 + date: 2020-04-13T00:00:00 + earningsRateID: 87f5b43a-cf51-4b74-92de-94c819e82d27 + trackingItemID: null + numberOfUnits: 8 + - timesheetLineID: 0e912b7d-dc3f-4b95-a466-3f0f5c8581cb + date: 2020-04-15T00:00:00 + earningsRateID: 87f5b43a-cf51-4b74-92de-94c819e82d27 + trackingItemID: null + numberOfUnits: 6 + - timesheetLineID: d0faac99-f2d4-42b9-ab00-9c2bc6e8fe3a + date: 2020-04-14T00:00:00 + earningsRateID: 87f5b43a-cf51-4b74-92de-94c819e82d27 + trackingItemID: null + numberOfUnits: 1 + "400": + description: validation error for a bad request + content: + application/json: + schema: + $ref: "#/components/schemas/Problem" + /Timesheets/{TimesheetID}/Lines/{TimesheetLineID}: + parameters: + - $ref: "#/components/parameters/requiredHeader" + put: + security: + - OAuth2: + - payroll.timesheets + tags: + - PayrollAu + operationId: updateTimesheetLine + x-hasPayrollAuProblem: true + x-example: + - dateValue: + key: date + keyPascal: Date + keySnake: date + is_date: true + java_datatype: LocalDate + csharp_datatype: DateTime + default: LocalDate.of(2020, Month.OCTOBER, 28) + java: LocalDate.of(2020, Month.OCTOBER, 28) + csharp: new DateTime(2020, 10, 10) + php: new DateTime('2020-10-28') + node: "'2020-10-28'" + python: dateutil.parser.parse('2020-10-28T00:00:00Z') + ruby: "'YYYY-MM-DD'" + - timesheetLine: + key: timesheetLine + keyPascal: TimesheetLine + keySnake: timesheet_line + is_object: true + - timesheetLineID: + key: timesheetLineID + keyPascal: TimesheetLineID + keySnake: timesheet_line_id + is_uuid: true + default: 00000000-0000-0000-0000-000000000000 + object: timesheetLine + - date: + key: date + keyPascal: Date + keySnake: date + default: date + python: date + ruby: date + is_variable: true + nonString: true + object: timesheetLine + - earningsRateID: + key: earningsRateID + keyPascal: EarningsRateID + keySnake: earnings_rate_id + is_uuid: true + default: 00000000-0000-0000-0000-000000000000 + object: timesheetLine + - trackingItemID: + key: trackingItemID + keyPascal: TrackingItemID + keySnake: tracking_item_id + is_uuid: true + default: 00000000-0000-0000-0000-000000000000 + object: timesheetLine + - numberOfUnits: + key: numberOfUnits + keyPascal: NumberOfUnits + keySnake: number_of_units + default: 6 + object: timesheetLine + nonString: true + is_last: true + summary: Updates a specific timesheet line for a specific timesheet + parameters: + - $ref: "#/components/parameters/idempotencyKey" + - in: path + name: TimesheetID + x-snake: timesheet_id + required: true + description: Identifier for the timesheet + schema: + type: string + format: uuid + - in: path + name: TimesheetLineID + x-snake: timesheet_line_id + required: true + description: Identifier for the timesheet line + schema: + type: string + format: uuid + responses: + "200": + description: search results matching criteria + content: + application/json: + schema: + $ref: "#/components/schemas/TimesheetLineObject" + example: + id: 582b87a6-14f3-409b-be89-f9b9c49db983 + providerName: provider-name + dateTimeUTC: 2020-04-14T18:07:30.718153 + httpStatusCode: OK + pagination: null + problem: null + timesheetLine: + timesheetLineID: c88edcad-af32-4536-a682-9a4772c21c8d + date: 2020-04-14T00:00:00 + earningsRateID: 87f5b43a-cf51-4b74-92de-94c819e82d27 + trackingItemID: null + numberOfUnits: 2 + "400": + description: validation error for a bad request + content: + application/json: + schema: + $ref: "#/components/schemas/Problem" + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/TimesheetLine" + example: + date: "2020-04-14" + earningsRateID: 87f5b43a-cf51-4b74-92de-94c819e82d27 + numberOfUnits: 2 + delete: + security: + - OAuth2: + - payroll.timesheets + tags: + - PayrollAu + operationId: deleteTimesheetLine + summary: Deletes a specific timesheet line + parameters: + - in: path + name: TimesheetID + x-snake: timesheet_id + required: true + description: Identifier for the timesheet + schema: + type: string + format: uuid + - in: path + name: TimesheetLineID + x-snake: timesheet_line_id + required: true + description: Identifier for the timesheet line + schema: + type: string + format: uuid + responses: + "200": + description: search results matching criteria + content: + application/json: + schema: + $ref: "#/components/schemas/TimesheetLine" + "400": + description: validation error for a bad request + content: + application/json: + schema: + $ref: "#/components/schemas/Problem" +components: + securitySchemes: + OAuth2: + type: oauth2 + description: For more information visit https://developer.xero.com/documentation/oauth2/overview + flows: + authorizationCode: + authorizationUrl: https://login.xero.com/identity/connect/authorize + tokenUrl: https://identity.xero.com/connect/token + scopes: + payroll.timesheets: Grant read-write access to payroll timesheets + payroll.timesheets.read: Grant read-only access to payroll timesheets + parameters: + requiredHeader: + in: header + name: Xero-Tenant-Id + x-snake: xero_tenant_id + description: Xero identifier for Tenant + schema: + type: string + required: true + idempotencyKey: + in: header + name: Idempotency-Key + x-snake: idempotency_key + description: This allows you to safely retry requests without the risk of duplicate processing. 128 character max. + example: KEY_VALUE + schema: + type: string + schemas: + Pagination: + properties: + page: + type: integer + example: 1 + pageSize: + type: integer + example: 10 + pageCount: + type: integer + example: 1 + itemCount: + type: integer + example: 2 + Problem: + description: The object returned for a bad request + type: object + properties: + type: + description: The type of error format + type: string + example: application/problem+json + title: + description: The type of the error + type: string + example: BadRequest + status: + description: The error status code + type: string + example: 400 + detail: + description: A description of the error + type: string + example: Validation error occurred. + instance: + type: string + invalidFields: + type: array + items: + $ref: "#/components/schemas/InvalidField" + InvalidField: + type: object + properties: + name: + description: The name of the field that caused the error + type: string + example: DateOfBirth + reason: + description: The reason the error occurred + type: string + example: The Date of Birth is required. + Timesheets: + type: object + properties: + pagination: + $ref: "#/components/schemas/Pagination" + problem: + $ref: "#/components/schemas/Problem" + timesheets: + type: array + items: + $ref: "#/components/schemas/Timesheet" + TimesheetObject: + type: object + properties: + pagination: + $ref: "#/components/schemas/Pagination" + problem: + $ref: "#/components/schemas/Problem" + timesheet: + $ref: "#/components/schemas/Timesheet" + Timesheet: + type: object + required: + - payrollCalendarID + - employeeID + - startDate + - endDate + properties: + timesheetID: + description: The Xero identifier for a Timesheet + type: string + format: uuid + payrollCalendarID: + description: The Xero identifier for the Payroll Calendar that the Timesheet applies to + type: string + format: uuid + employeeID: + description: The Xero identifier for the Employee that the Timesheet is for + type: string + format: uuid + startDate: + description: The Start Date of the Timesheet period (YYYY-MM-DD) + type: string + format: date + x-is-date: true + endDate: + description: The End Date of the Timesheet period (YYYY-MM-DD) + type: string + format: date + x-is-date: true + status: + description: Status of the timesheet + type: string + enum: + - Draft + - Approved + - Completed + totalHours: + description: The Total Hours of the Timesheet + type: number + format: double + updatedDateUTC: + description: The UTC date time that the Timesheet was last updated + type: string + format: date-time + x-is-datetime: true + timesheetLines: + $ref: "#/components/schemas/TimesheetLines" + TimesheetLines: + type: array + items: + $ref: "#/components/schemas/TimesheetLine" + TimesheetLineObject: + type: object + properties: + pagination: + $ref: "#/components/schemas/Pagination" + problem: + $ref: "#/components/schemas/Problem" + timesheetLine: + $ref: "#/components/schemas/TimesheetLine" + TimesheetLine: + type: object + required: + - date + - earningsRateID + - numberOfUnits + properties: + timesheetLineID: + description: The Xero identifier for a Timesheet Line + type: string + format: uuid + date: + description: The Date that this Timesheet Line is for (YYYY-MM-DD) + type: string + format: date + x-is-date: true + earningsRateID: + description: The Xero identifier for the Earnings Rate that the Timesheet is for + type: string + format: uuid + trackingItemID: + description: The Xero identifier for the Tracking Item that the Timesheet is for + type: string + format: uuid + numberOfUnits: + description: The Number of Units of the Timesheet Line + type: number + format: double