---
updatedAt: 2026-06-24T13:48:50.000Z
agentTools:
  siteIndex: https://developer.paylocity.com/llms.txt
  projectIndex: https://developer.paylocity.com/integrations/llms.txt
---

# Get Employee Punch Details

**Summary Description**

The GET Punch Detail V2 endpoint provides access to detailed punch information for a single employee. It returns all associated punch data, including work and non-work time entries, to support analysis and time-record management. Punch Detail V2 uses four-decimal precision for timesheets that track time in hours rather than seconds. For example, 7.2567 hours. Users can filter Punch Detail V2 results by relative date and time, using the time zone associated with your request.

```
Filtering by Date Range
The Punch Detail API can be filtered by the relative date and time based on your time zone. For example:
Start of the day: At 00:00:00 (midnight), marking the beginning of the day.
Midday: At 12:00:00 (noon), halfway through the day.
End of the day: At 23:59:59, just a second before the next day begins.
```

A 24 hour day is represented by using:

relativeStart={{relativeStartTime}}&relativeEnd={{relativeEndTime}}

"relativeStart": "2024-03-05T00:00:00"

"relativeEnd": "2024-03-05T23:59:00"

`/Time/v2/companies/{{companyId}}/employees/{{employeeId}}/punchdetails?relativeStart={{relativeStartTime}}&relativeEnd={{relativeEndTime}}`

For more information on implementing this API, see our [Punch Details Overview](https://developer.paylocity.com/integrations/reference/punch-detail-overview)

**Use Cases**
- Retrieve a single employee's punch records for a selected timeframe.
- Use four-decimal-place hour values from work and non-work punches.
- Retrieve punch activity so managers can identify missing or irregular punches before approving timecards.

# OpenAPI definition

````json
{
  "openapi": "3.0.1",
  "info": {
    "title": "Punch detail Api",
    "description": "The Punch detail Api is designed to streamline the process of retrieving employee punch details",
    "version": "v1"
  },
  "servers": [
    {
      "url": "dc1demogwext.paylocity.com"
    }
  ],
  "paths": {
    "/apiHub/time/v2/companies/{companyId}/employees/{employeeId}/punchDetails": {
      "get": {
        "tags": [
          "Employee Punch Details"
        ],
        "summary": "Get Employee Punch Details",
        "description": "**Summary Description**\n\nThe GET Punch Detail V2 endpoint provides access to detailed punch information for a single employee. It returns all associated punch data, including work and non-work time entries, to support analysis and time-record management. Punch Detail V2 uses four-decimal precision for timesheets that track time in hours rather than seconds. For example, 7.2567 hours. Users can filter Punch Detail V2 results by relative date and time, using the time zone associated with your request.\n\n```\nFiltering by Date Range\nThe Punch Detail API can be filtered by the relative date and time based on your time zone. For example:\nStart of the day: At 00:00:00 (midnight), marking the beginning of the day.\nMidday: At 12:00:00 (noon), halfway through the day.\nEnd of the day: At 23:59:59, just a second before the next day begins.\n```\n\nA 24 hour day is represented by using:\n\nrelativeStart={{relativeStartTime}}&relativeEnd={{relativeEndTime}}\n\n\"relativeStart\": \"2024-03-05T00:00:00\"\n\n\"relativeEnd\": \"2024-03-05T23:59:00\"\n\n`/Time/v2/companies/{{companyId}}/employees/{{employeeId}}/punchdetails?relativeStart={{relativeStartTime}}&relativeEnd={{relativeEndTime}}`\n\nFor more information on implementing this API, see our [Punch Details Overview](https://developer.paylocity.com/integrations/reference/punch-detail-overview)\n\n**Use Cases**\n- Retrieve a single employee's punch records for a selected timeframe.\n- Use four-decimal-place hour values from work and non-work punches.\n- Retrieve punch activity so managers can identify missing or irregular punches before approving timecards.",
        "x-explorer-enabled": false,
        "operationId": "GET_apiHub_time_v2_companies_{companyId}_employees_{employeeId}_punchDetails",
        "parameters": [
          {
            "name": "companyId",
            "in": "path",
            "description": "The Paylocity Company ID. This is the unique value provided by Paylocity to each specific Payroll Entity.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "AB345"
          },
          {
            "name": "employeeId",
            "in": "path",
            "description": "The Paylocity Employee ID. This is a unique value per Paylocity Company ID.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "8765"
          },
          {
            "name": "relativeStart",
            "in": "query",
            "description": "The relative DateTime for the beginning of the WorkedShift. Value must not have timezone information.\r\n            **Allowable Values:**\r\n            Format: yyyy-MM-ddT00:00:00",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "example": "2023-05-01T00:01:00"
          },
          {
            "name": "relativeEnd",
            "in": "query",
            "description": "The relative DateTime for the end of the WorkedShift. Value must not have timezone information.\r\n            **Allowable Values:**\r\n            Format: yyyy-MM-ddT00:00:00",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "example": "2023-05-30T10:00:00"
          },
          {
            "name": "testFlag",
            "in": "query",
            "description": "A Boolean value that, when set to \"true\", returns mock data.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "example": false
          },
          {
            "name": "Authorization",
            "in": "header",
            "description": "Authorization token. Ex. Bearer ...",
            "required": true,
            "schema": {
              "type": "string",
              "default": "Bearer JWT_GOES_HERE"
            },
            "example": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PunchDetailRecordV2Model"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BadRequestFieldModel"
                  }
                },
                "example": [
                  {
                    "field": "$.relativeStart",
                    "message": "relative start should be less than or equal to relative end"
                  }
                ]
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "429": {
            "description": "Too Many Requests"
          },
          "500": {
            "description": "Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Error500Model"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "JWTAuthorization": []
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "CostCenterDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "unique Guid",
            "format": "uuid"
          },
          "costCenterId": {
            "type": "integer",
            "description": "Cost center id",
            "format": "int32"
          },
          "level": {
            "type": "integer",
            "description": "Cost center level",
            "format": "int32"
          },
          "code": {
            "type": "string",
            "description": "Cost center code",
            "nullable": true
          },
          "name": {
            "type": "string",
            "description": "Cost center name",
            "nullable": true
          },
          "isActive": {
            "type": "boolean",
            "description": "The boolean value indicates whether the cost center is active or not."
          }
        },
        "additionalProperties": false
      },
      "Error500Model": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "description": "A unique code, within an API, that identifies what went wrong.\r\nThis value can be used for logic branching within client code\r\nto prevent the need to parse message values.",
            "nullable": true
          },
          "message": {
            "type": "string",
            "description": "A message indicating what went wrong that can be presented to an end user.",
            "nullable": true
          },
          "moreInfoUrl": {
            "type": "string",
            "description": "When provided, this will specific a URL that can be accessed to learn more\r\nabout this specific error.",
            "nullable": true
          },
          "exception": {
            "$ref": "#/components/schemas/ExceptionModel"
          },
          "errorId": {
            "type": "string",
            "description": "A unique identifier that can be used to search the logs to find the specific\r\nerror details that highlight what occurred.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "This class represents the error model that will be used when returning\r\na 500 error (server failure) within a Paylocity RESTful API."
      },
      "BadRequestFieldModel": {
        "type": "object",
        "properties": {
          "field": {
            "type": "string",
            "description": "The JSON path of the request field that failed validation (for example, $.relativeStart).",
            "nullable": true
          },
          "message": {
            "type": "string",
            "description": "A message describing why the field failed validation.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "This class represents a single field-level validation error returned when a 400 Bad Request occurs due to invalid input."
      },
      "ExceptionModel": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "nullable": true,
            "description": "The type of the exception."
          },
          "message": {
            "type": "string",
            "nullable": true,
            "description": "The exception message."
          },
          "source": {
            "type": "string",
            "nullable": true,
            "description": "The source of the exception."
          },
          "stackTrace": {
            "type": "string",
            "nullable": true,
            "description": "The stack trace of the exception."
          },
          "innerException": {
            "$ref": "#/components/schemas/ExceptionModel"
          }
        },
        "additionalProperties": false,
        "description": "This class represents the full set of properties that could be returned\r\nas a part of an error coming back from a Paylocity RESTful API. Optional\r\nproperties will be ignored during serialization when they are null"
      },
      "PunchDetailRecordV2Model": {
        "type": "object",
        "properties": {
          "employeeId": {
            "type": "string",
            "description": "The Paylocity Employee ID. This is a unique value per Paylocity Company ID.",
            "nullable": true
          },
          "companyId": {
            "type": "string",
            "description": "The Paylocity Company ID. This is the unique value provided by Paylocity to each specific Payroll Entity.",
            "nullable": true
          },
          "badgeNumber": {
            "type": "integer",
            "description": "The Time and Labor badge number",
            "format": "int32"
          },
          "relativeStart": {
            "type": "string",
            "description": "The relative DateTime for the beginning of the WorkedShift",
            "format": "date-time",
            "nullable": true
          },
          "relativeEnd": {
            "type": "string",
            "description": "The relative DateTime for the end of the WorkedShift",
            "format": "date-time",
            "nullable": true
          },
          "segments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkedShiftsSegmentV2Model"
            },
            "description": "Breakdown of the worked shift's durations by time card entry. The entire span of time from beginning of worked shift to end of worked shift is represented in this breakdown.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "WorkedShiftsSegmentV2Model": {
        "type": "object",
        "properties": {
          "punchID": {
            "type": "string",
            "description": "A unique identifier assigned to each punch or time entry, ensuring that each entry is distinct, traceable, and easily referenced for tracking purposes.",
            "format": "uuid",
            "nullable": true
          },
          "origin": {
            "type": "string",
            "description": "The associated origin of the time entry.",
            "nullable": true
          },
          "date": {
            "type": "string",
            "description": "Date the worked shift segment took place. In the case of over night shifts, this is the date these worked hours apply to in payroll and can play a role in some overtime calculations.",
            "format": "date"
          },
          "punchType": {
            "type": "string",
            "description": "The type of punch recorded indicating whether it was recorded for categories such as work, lunch break etc",
            "nullable": true
          },
          "relativeStart": {
            "type": "string",
            "description": "Relative DateTime of the beginning of this segment after payroll policy rules are applied. Null if the segment began with a missed punch.",
            "format": "date-time",
            "nullable": true
          },
          "relativeEnd": {
            "type": "string",
            "description": "Relative DateTime of the end of this segment after payroll policy rules are applied. Null if the segment ended with a missed punch.",
            "format": "date-time",
            "nullable": true
          },
          "relativeOriginalStart": {
            "type": "string",
            "description": "Relative DateTimeOffset of the beginning of this segment before payroll policy rules are applied. Null if the segment began with a missed punch.",
            "format": "date-time",
            "nullable": true
          },
          "relativeOriginalEnd": {
            "type": "string",
            "description": "Relative DateTime of the end of this segment before payroll policy rules are applied. Null if the segment ended with a missed punch.",
            "format": "date-time",
            "nullable": true
          },
          "durationHours": {
            "type": "number",
            "description": "The total hours worked by the employee for a particular punch or time entry, reflecting the duration of their work.",
            "format": "double",
            "nullable": true
          },
          "earnings": {
            "type": "number",
            "description": "This field's use in the Paylocity product suite has been deprecated and will be removed in future versions of the API. It will always return 0.",
            "format": "double",
            "deprecated": true
          },
          "costCenters": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CostCenterDto"
            },
            "description": "List of cost centers, at most one per cost center level, that this segment of the worked shift is allocated to.",
            "nullable": true
          }
        },
        "additionalProperties": false
      }
    },
    "securitySchemes": {
      "JWTAuthorization": {
        "type": "http",
        "description": "Paste JWT here.",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    }
  }
}
````