Deel subpackage_timeTracking API

The subpackage_timeTracking API from Deel — 5 operation(s) for subpackage_timetracking.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/deel-subpackage-timetracking-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

deel-subpackage-timetracking-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Endpoints subpackage_timeTracking API
  version: 1.0.0
servers:
- url: https://api.letsdeel.com/rest/v2
- url: https://api-staging.letsdeel.com/rest/v2
tags:
- name: subpackage_timeTracking
paths:
  /time_tracking/shift_rates:
    post:
      operationId: create-time-tracking-shift-rate
      summary: Create a New Shift Rate
      description: "Create a new shift rate with the specified attributes such as name, type, value, and a unique external identifier.\n **Token scopes**: `time-tracking:write`"
      tags:
      - subpackage_timeTracking
      parameters:
      - name: Authorization
        in: header
        description: "## Authentication\nThe Deel API uses bearer tokens to authenticate requests. All API calls must be made over HTTPS — calls over plain HTTP or without authentication will fail.\n\n```curl\ncurl -X GET 'https://api.letsdeel.com/rest/v2/contracts' \\\n  -H 'Authorization: Bearer YOUR-TOKEN-HERE'\n```\n\n[Learn more about authentication](/api/authentication)\n"
        required: true
        schema:
          type: string
      responses:
        '201':
          description: Shift rate created successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/time-tracking_createTimeTrackingShiftRate_Response_201'
        '401':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
        '403':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
        '404':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
      requestBody:
        description: Details of the shift rate to create.
        content:
          application/json:
            schema:
              type: object
              properties:
                data:
                  $ref: '#/components/schemas/TimeTrackingShiftRatesPostRequestBodyContentApplicationJsonSchemaData'
              required:
              - data
    get:
      operationId: get-time-tracking-shift-rates
      summary: Retrieve a Paginated List of Shift Rates
      description: "Retrieve a paginated list of shift rates, including details such as rate name, type, value, and timestamps. Pagination parameters can be used to control the size and position of the result set.\n **Token scopes**: `time-tracking:read`"
      tags:
      - subpackage_timeTracking
      parameters:
      - name: limit
        in: query
        description: The maximum number of records to return per page. For example, '10' to return up to 10 records.
        required: false
        schema:
          type: string
      - name: offset
        in: query
        description: The starting index for the records to retrieve. For example, '0' for the first page or '10' for the second page when limit=10.
        required: false
        schema:
          type: string
      - name: Authorization
        in: header
        description: "## Authentication\nThe Deel API uses bearer tokens to authenticate requests. All API calls must be made over HTTPS — calls over plain HTTP or without authentication will fail.\n\n```curl\ncurl -X GET 'https://api.letsdeel.com/rest/v2/contracts' \\\n  -H 'Authorization: Bearer YOUR-TOKEN-HERE'\n```\n\n[Learn more about authentication](/api/authentication)\n"
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Paginated list of shift rates retrieved successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/time-tracking_getTimeTrackingShiftRates_Response_200'
        '401':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
        '403':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
        '404':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
  /time_tracking/shift_rates/{external_id}:
    delete:
      operationId: delete-time-tracking-shift-rate-by-external-id
      summary: Delete a Shift Rate by external ID
      description: "Delete a Shift Rate using its external ID, which is the custom ID provided when the shift rate is created. A ShiftRate can only be deleted if it is not currently associated with any active shift.\n **Token scopes**: `time-tracking:write`"
      tags:
      - subpackage_timeTracking
      parameters:
      - name: external_id
        in: path
        description: external ID
        required: true
        schema:
          type: string
      - name: Authorization
        in: header
        description: "## Authentication\nThe Deel API uses bearer tokens to authenticate requests. All API calls must be made over HTTPS — calls over plain HTTP or without authentication will fail.\n\n```curl\ncurl -X GET 'https://api.letsdeel.com/rest/v2/contracts' \\\n  -H 'Authorization: Bearer YOUR-TOKEN-HERE'\n```\n\n[Learn more about authentication](/api/authentication)\n"
        required: true
        schema:
          type: string
      responses:
        '204':
          description: Successfully deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/time-tracking_deleteTimeTrackingShiftRateByExternalId_Response_204'
        '400':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
        '401':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
        '403':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
        '500':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
    get:
      operationId: get-time-tracking-shift-rate-by-external-id
      summary: Retrieve a Shift Rate by External ID
      description: "Retrieve details of a specific shift rate using its external ID. The response includes information such as the name, type, value, and unique identifier of the shift rate.\n **Token scopes**: `time-tracking:read`"
      tags:
      - subpackage_timeTracking
      parameters:
      - name: external_id
        in: path
        description: The unique external identifier of the shift rate to retrieve.
        required: true
        schema:
          type: string
      - name: Authorization
        in: header
        description: "## Authentication\nThe Deel API uses bearer tokens to authenticate requests. All API calls must be made over HTTPS — calls over plain HTTP or without authentication will fail.\n\n```curl\ncurl -X GET 'https://api.letsdeel.com/rest/v2/contracts' \\\n  -H 'Authorization: Bearer YOUR-TOKEN-HERE'\n```\n\n[Learn more about authentication](/api/authentication)\n"
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Shift rate retrieved successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/time-tracking_getTimeTrackingShiftRateByExternalId_Response_200'
        '401':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
        '403':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
    patch:
      operationId: update-time-tracking-shift-rate-by-external-id
      summary: Update a shift rate
      description: "Update specific fields of an existing shift rate.\n **Token scopes**: `time-tracking:write`"
      tags:
      - subpackage_timeTracking
      parameters:
      - name: external_id
        in: path
        description: Unique identifier of the shift rate to be updated.
        required: true
        schema:
          type: string
      - name: Authorization
        in: header
        description: "## Authentication\nThe Deel API uses bearer tokens to authenticate requests. All API calls must be made over HTTPS — calls over plain HTTP or without authentication will fail.\n\n```curl\ncurl -X GET 'https://api.letsdeel.com/rest/v2/contracts' \\\n  -H 'Authorization: Bearer YOUR-TOKEN-HERE'\n```\n\n[Learn more about authentication](/api/authentication)\n"
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Shift rate updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/time-tracking_updateTimeTrackingShiftRateByExternalId_Response_200'
        '400':
          description: Invalid request payload
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdateAShiftRateRequestBadRequestError'
        '401':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
        '403':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
        '404':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
        '500':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                data:
                  $ref: '#/components/schemas/TimeTrackingShiftRatesExternalIdPatchRequestBodyContentApplicationJsonSchemaData'
              required:
              - data
  /time-tracking/timesheets/upload-url:
    post:
      operationId: get-time-tracking-timesheets-upload-url
      summary: Generate timesheet upload url
      description: "Receives timesheet file metadata and generates a link to upload timesheet file. Please note that this endpoint supports EOR contracts as of now\n **Token scopes**: `time-tracking:write`"
      tags:
      - subpackage_timeTracking
      parameters:
      - name: Authorization
        in: header
        description: "## Authentication\nThe Deel API uses bearer tokens to authenticate requests. All API calls must be made over HTTPS — calls over plain HTTP or without authentication will fail.\n\n```curl\ncurl -X GET 'https://api.letsdeel.com/rest/v2/contracts' \\\n  -H 'Authorization: Bearer YOUR-TOKEN-HERE'\n```\n\n[Learn more about authentication](/api/authentication)\n"
        required: true
        schema:
          type: string
      responses:
        '201':
          description: Timesheet created successfully. Returns upload URL, upload form fields, and timesheet ID.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/time-tracking_getTimeTrackingTimesheetsUploadUrl_Response_201'
        '400':
          description: Bad request. Validation or business rule violation (e.g., non-EOR contract, invalid date range).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenerateTimesheetUploadUrl-v2026-01-01RequestBadRequestError'
        '401':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
        '403':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
        '404':
          description: Resource not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenerateTimesheetUploadUrl-v2026-01-01RequestNotFoundError'
        '422':
          description: Unprocessable entity. Business logic constraint violation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenerateTimesheetUploadUrl-v2026-01-01RequestUnprocessableEntityError'
        '500':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
      requestBody:
        description: timesheet information needed for uploading timesheet file
        content:
          application/json:
            schema:
              type: object
              properties:
                data:
                  $ref: '#/components/schemas/TimeTrackingTimesheetsUploadUrlPostRequestBodyContentApplicationJsonSchemaData'
              required:
              - data
  /time-tracking/timesheets/{timesheet_id}:
    get:
      operationId: get-time-tracking-timesheet-by-id
      summary: Retrieve a timesheet
      description: "Retrieves a timesheet by ID, including its submission, review, and processing status. When expand=file_data is provided, the response also includes file-related details such as the file name, download URL.\n **Token scopes**: `time-tracking:read`"
      tags:
      - subpackage_timeTracking
      parameters:
      - name: timesheet_id
        in: path
        description: ID of the timesheet to fetch file for
        required: true
        schema:
          type: string
          format: uuid
      - name: extend
        in: query
        description: Optional list of fields to extend in the response. Currently only `file_data` is supported, which includes file details (file_id, file_name) and download URL.
        required: false
        schema:
          type: string
      - name: Authorization
        in: header
        description: "## Authentication\nThe Deel API uses bearer tokens to authenticate requests. All API calls must be made over HTTPS — calls over plain HTTP or without authentication will fail.\n\n```curl\ncurl -X GET 'https://api.letsdeel.com/rest/v2/contracts' \\\n  -H 'Authorization: Bearer YOUR-TOKEN-HERE'\n```\n\n[Learn more about authentication](/api/authentication)\n"
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Timesheet retrieved successfully. Returns timesheet details including validation errors if applicable. When extend=file_data, also includes file_data object with file details and download URL.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/time-tracking_getTimeTrackingTimesheetById_Response_200'
        '400':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
        '401':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
        '403':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
        '404':
          description: Timesheet not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RetrieveATimesheet-v2026-01-01RequestNotFoundError'
        '500':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
  /time-tracking/timesheets/{timesheet_id}/review:
    post:
      operationId: review-time-tracking-timesheet
      summary: Review a submitted timesheet
      description: "Review a successfully submitted timesheet. Only PENDING_REVIEW timesheets can be reviewed, and all associated hours will be approved/rejected at once.\n **Token scopes**: `time-tracking:write`"
      tags:
      - subpackage_timeTracking
      parameters:
      - name: timesheet_id
        in: path
        description: ID of the timesheet to review
        required: true
        schema:
          type: string
          format: uuid
      - name: Authorization
        in: header
        description: "## Authentication\nThe Deel API uses bearer tokens to authenticate requests. All API calls must be made over HTTPS — calls over plain HTTP or without authentication will fail.\n\n```curl\ncurl -X GET 'https://api.letsdeel.com/rest/v2/contracts' \\\n  -H 'Authorization: Bearer YOUR-TOKEN-HERE'\n```\n\n[Learn more about authentication](/api/authentication)\n"
        required: true
        schema:
          type: string
      responses:
        '201':
          description: Timesheet reviewed successfully. Returns updated timesheet details with review status and review timestamp.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/time-tracking_reviewTimeTrackingTimesheet_Response_201'
        '400':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
        '401':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
        '403':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
        '404':
          description: Timesheet not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReviewASubmittedTimesheetRequestNotFoundError'
        '422':
          description: Unprocessable entity. Timesheet cannot be reviewed in its current state.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReviewASubmittedTimesheetRequestUnprocessableEntityError'
        '500':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
      requestBody:
        description: Review information for the timesheet. review_reason is required when review_status is REJECTED.
        content:
          application/json:
            schema:
              type: object
              properties:
                data:
                  $ref: '#/components/schemas/TimeTrackingTimesheetsTimesheetIdReviewPostRequestBodyContentApplicationJsonSchemaData'
              required:
              - data
components:
  schemas:
    TimeTrackingTimesheetsTimesheetIdGetResponsesContentApplicationJsonSchemaDataValidationErrorsItemsType:
      type: string
      enum:
      - EMPTY_TIMESHEET
      - INVALID_TIMESHEET_FORMAT
      - FILE_TOO_LARGE
      - INVALID_FILE_TYPE
      - INVALID_SHIFT_TIME_ORDER
      - INVALID_BREAK_TIME_ORDER
      - BREAK_OUTSIDE_SHIFT
      - OVERLAPPING_BREAKS
      - CANNOT_SUBMIT_SHIFTS
      - WORK_DURATION_MISMATCH
      - NON_WORKING_DAY_VIOLATION
      - PUBLIC_HOLIDAY_VIOLATION
      - TIME_OFF_VIOLATION
      - SHIFT_OUT_OF_CYCLE
      - DAY_UNAVAILABLE
      - INVALID_SHIFT_SUBMIT_TYPE
      - INVALID_SHIFT_ORIGIN
      - INVALID_SHIFT_TYPE
      - INVALID_SHIFT_KEEP_IN_TOUCH_DATE_INTERVAL
      - OVERLAPPING_SHIFT
      - SHIFT_CONTRACT_IN_RESTRICTED_STATUS
      - SHIFT_CONTRACT_IN_TERMINATION_STATUS
      - SHIFT_CONTRACT_COMPLETION_DATE
      - SHIFT_CONTRACT_START_DATE
      - SHIFT_MAX_SATURDAYS_PER_YEAR_VIOLATION
      - INVALID_DAY_TRACKING_DATA
      - SHIFT_MAX_WORKING_DAYS_PER_YEAR_VIOLATION
      - SHIFT_MAX_CONSECUTIVE_DAYS_STREAK_VIOLATION
      - BREAK_TYPE_NOT_AVAILABLE
      - BREAK_MISSED_OR_WAIVED
      - BREAK_DURATION_MISMATCH
      - BREAK_MAX_DURATION_EXCEEDED
      - WORK_LOCATION_VIOLATION
      - WORK_LOCATION_MISMATCH_BETWEEN_TIME_CLOCK_EVENTS_FOR_SHIFT
      - MISSING_WORK_DESCRIPTION
      description: Type of validation error
      title: TimeTrackingTimesheetsTimesheetIdGetResponsesContentApplicationJsonSchemaDataValidationErrorsItemsType
    TimeTrackingTimesheetsTimesheetIdReviewPostResponsesContentApplicationJsonSchemaErrorsItemsDetailsTimesheetReviewStatus:
      type: string
      enum:
      - PENDING_CREATION
      - PENDING_REVIEW
      - APPROVED
      - REJECTED
      description: Current status of the timesheet review
      title: TimeTrackingTimesheetsTimesheetIdReviewPostResponsesContentApplicationJsonSchemaErrorsItemsDetailsTimesheetReviewStatus
    time-tracking_getTimeTrackingTimesheetById_Response_200:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/TimeTrackingTimesheetsTimesheetIdGetResponsesContentApplicationJsonSchemaData'
          description: Timesheet data including validation errors if applicable. When extend=file_data, also includes file_data object with file details and download URL.
      required:
      - data
      title: time-tracking_getTimeTrackingTimesheetById_Response_200
    TimeTrackingShiftRatesExternalIdPatchResponsesContentApplicationJsonSchemaError:
      type: object
      properties:
        message:
          type: string
          description: Description of the error.
      title: TimeTrackingShiftRatesExternalIdPatchResponsesContentApplicationJsonSchemaError
    TimeTrackingTimesheetsTimesheetIdGetResponsesContentApplicationJsonSchemaData:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: Unique identifier for the timesheet
        end_date:
          type: string
          format: date
          description: End date of the timesheet period
        file_data:
          oneOf:
          - $ref: '#/components/schemas/TimeTrackingTimesheetsTimesheetIdGetResponsesContentApplicationJsonSchemaDataFileData'
          - type: 'null'
          description: Present only when `extend=file_data` is provided. Contains file details and download URL.
        created_at:
          type: string
          format: date-time
          description: Timestamp when the timesheet was created
        start_date:
          type: string
          format: date
          description: Start date of the timesheet period
        updated_at:
          type: string
          format: date-time
          description: Timestamp when the timesheet was last updated
        contract_id:
          type: string
          description: External id of the worker's contract associated with the timesheet
        review_status:
          $ref: '#/components/schemas/TimeTrackingTimesheetsTimesheetIdGetResponsesContentApplicationJsonSchemaDataReviewStatus'
          description: Current status of the timesheet review
        submission_status:
          $ref: '#/components/schemas/TimeTrackingTimesheetsTimesheetIdGetResponsesContentApplicationJsonSchemaDataSubmissionStatus'
          description: Current status of the timesheet submission
        validation_errors:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/TimeTrackingTimesheetsTimesheetIdGetResponsesContentApplicationJsonSchemaDataValidationErrorsItems'
          description: Array of validation errors found during timesheet processing. Null if no errors found.
      required:
      - id
      - end_date
      - created_at
      - start_date
      - updated_at
      - contract_id
      - review_status
      - submission_status
      - validation_errors
      description: Timesheet data including validation errors if applicable. When extend=file_data, also includes file_data object with file details and download URL.
      title: TimeTrackingTimesheetsTimesheetIdGetResponsesContentApplicationJsonSchemaData
    TimeTrackingTimesheetsUploadUrlPostResponsesContentApplicationJsonSchemaData:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: Unique identifier for the created timesheet
        created_at:
          type: string
          format: date-time
          description: Timestamp when the timesheet was created
        updated_at:
          type: string
          format: date-time
          description: Timestamp when the timesheet was last updated
        upload_url:
          type: string
          format: uri
          description: Pre-signed S3 URL for uploading the timesheet file
        upload_fields:
          type: object
          additionalProperties:
            description: Any type
          description: Form fields required for the multipart POST upload to S3. Include these fields alongside the file in the upload request.
      required:
      - id
      - created_at
      - updated_at
      - upload_url
      - upload_fields
      title: TimeTrackingTimesheetsUploadUrlPostResponsesContentApplicationJsonSchemaData
    TimeTrackingTimesheetsUploadUrlPostRequestBodyContentApplicationJsonSchemaData:
      type: object
      properties:
        end_date:
          type: string
          format: date
          description: End date of the timesheet period. Must be equal to or later than start_date.
        file_name:
          type: string
          description: Name of the timesheet file. Must end with .csv extension.
        start_date:
          type: string
          format: date
          description: Start date of the timesheet period. Must be equal to or earlier than end_date.
        contract_id:
          type: string
          description: Id of the worker's contract associated with the timesheet
      required:
      - end_date
      - file_name
      - start_date
      - contract_id
      title: TimeTrackingTimesheetsUploadUrlPostRequestBodyContentApplicationJsonSchemaData
    ? TimeTrackingTimesheetsTimesheetIdReviewPostResponsesContentApplicationJsonSchemaErrorsItemsDetailsTimesheetSubmissionStatus
    : type: string
      enum:
      - UPLOADING
      - UPLOAD_FAILED
      - PROCESSING
      - SUBMITTED
      - INVALID
      - FAILED
      description: Current status of the timesheet submission
      title: TimeTrackingTimesheetsTimesheetIdReviewPostResponsesContentApplicationJsonSchemaErrorsItemsDetailsTimesheetSubmissionStatus
    TimeTrackingShiftRatesPostRequestBodyContentApplicationJsonSchemaData:
      type: object
      properties:
        name:
          type: string
          description: The name of the shift rate.
        type:
          $ref: '#/components/schemas/TimeTrackingShiftRatesPostRequestBodyContentApplicationJsonSchemaDataType'
          description: The type of the shift rate.
        value:
          type: number
          format: double
          description: The value of the shift rate.
        external_id:
          type: string
          description: A unique identifier for the shift rate.
      required:
      - name
      - external_id
      title: TimeTrackingShiftRatesPostRequestBodyContentApplicationJsonSchemaData
    time-tracking_getTimeTrackingShiftRates_Response_200:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/TimeTrackingShiftRatesGetResponsesContentApplicationJsonSchemaDataItems'
        page:
          $ref: '#/components/schemas/TimeTrackingShiftRatesGetResponsesContentApplicationJsonSchemaPage'
      required:
      - data
      - page
      title: time-tracking_getTimeTrackingShiftRates_Response_200
    TimeTrackingShiftRatesPostRequestBodyContentApplicationJsonSchemaDataType:
      type: string
      enum:
      - MULTIPLIER_PERCENTAGE
      - PER_HOUR_FLAT_RATE
      - PER_UNIT_FLAT_RATE
      description: The type of the shift rate.
      title: TimeTrackingShiftRatesPostRequestBodyContentApplicationJsonSchemaDataType
    TimeTrackingTimesheetsTimesheetIdReviewPostResponsesContentApplicationJsonSchemaErrorsItemsDetailsTimesheet:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: Unique identifier for the timesheet
        contract_id:
          type: string
          description: External id of the worker's contract associated with the timesheet
        reviewed_at:
          type:
          - string
          - 'null'
          format: date-time
          description: Timestamp when the timesheet was reviewed (if already reviewed)
        review_status:
          $ref: '#/components/schemas/TimeTrackingTimesheetsTimesheetIdReviewPostResponsesContentApplicationJsonSchemaErrorsItemsDetailsTimesheetReviewStatus'
          description: Current status of the timesheet review
        submission_status:
          $ref: '#/components/schemas/TimeTrackingTimesheetsTimesheetIdReviewPostResponsesContentApplicationJsonSchemaErrorsItemsDetailsTimesheetSubmissionStatus'
          description: Current status of the timesheet submission
      required:
      - id
      - contract_id
      - review_status
      - submission_status
      description: Current state of the timesheet that cannot be reviewed
      title: TimeTrackingTimesheetsTimesheetIdReviewPostResponsesContentApplicationJsonSchemaErrorsItemsDetailsTimesheet
    TimeTrackingTimesheetsTimesheetIdReviewPostRequestBodyContentApplicationJsonSchemaData:
      type: object
      properties:
        review_reason:
          type:
          - string
          - 'null'
          description: Reason for rejecting the timesheet. Required when review_status is REJECTED, optional when APPROVED.
        review_status:
          $ref: '#/components/schemas/TimeTrackingTimesheetsTimesheetIdReviewPostRequestBodyContentApplicationJsonSchemaDataReviewStatus'
          description: The review status for the timesheet. Must be APPROVED or REJECTED.
      required:
      - review_status
      title: TimeTrackingTimesheetsTimesheetIdReviewPostRequestBodyContentApplicationJsonSchemaData
    GenerateTimesheetUploadUrl-v2026-01-01RequestBadRequestError:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/TimeTrackingTimesheetsUploadUrlPostResponsesContentApplicationJsonSchemaErrorsItems'
      required:
      - errors
      title: GenerateTimesheetUploadUrl-v2026-01-01RequestBadRequestError
    TimeTrackingTimesheetsTimesheetIdReviewPostResponsesContentApplicationJsonSchemaData:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: Unique identifier for the timesheet
        reviewed_at:
          type: string
          format: date-time
          description: Timestamp when the timesheet was reviewed
        review_reason:
          type:
          - string
          - 'null'
          description: Reason provided by the reviewer when rejecting the timesheet. Only present when review_status is REJECTED.
        review_status:
          $ref: '#/components/schemas/TimeTrackingTimesheetsTimesheetIdReviewPostResponsesContentApplicationJsonSchemaDataReviewStatus'
          description: Current status of the timesheet review
      required:
      - id
      - reviewed_at
      - review_status
      description: Updated timesheet details after review
      title: TimeTrackingTimesheetsTimesheetIdReviewPostResponsesContentApplicationJsonSchemaData
    TimeTrackingTimesheetsUpload

# --- truncated at 32 KB (48 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/deel/refs/heads/main/openapi/deel-subpackage-timetracking-api-openapi.yml