> ## Documentation Index > Fetch the complete documentation index at: https://docs.restaurant365.com/llms.txt > Use this file to discover all available pages before exploring further. # Labor Punches > Retrieves a paginated list of labor punches. At least one date range (DateOfBusiness or ModifiedOn) must be supplied **Security** The requesting user must have **both** of the following: - Labor → Punch Edits → Add/Edit/Delete Labor Punches **or** Labor → Employees → Time → View Punches - Labor → Employees → Employment → Hourly Pay Rates → View Hourly Pay Rates **or** Labor → Employees → Employment → Salary Pay Rates → View Salary Pay Rates ## OpenAPI ````json GET /public/v1/labor/labor-punches { "openapi": "3.0.1", "info": { "title": "R365 Public API", "contact": { "name": "R365 Services Team", "email": "r365@restaurant365.com" }, "version": "1.0" }, "security": [ { "Bearer": [] } ], "paths": { "/public/v1/labor/labor-punches": { "get": { "tags": [ "labor" ], "summary": "Labor Punches", "description": "Retrieves a paginated list of labor punches. At least one date range (DateOfBusiness or ModifiedOn) must be supplied\n\n**Security**\n\nThe requesting user must have **both** of the following:\n\n- Labor → Punch Edits → Add/Edit/Delete Labor Punches **or** Labor → Employees → Time → View Punches\n- Labor → Employees → Employment → Hourly Pay Rates → View Hourly Pay Rates **or** Labor → Employees → Employment → Salary Pay Rates → View Salary Pay Rates", "parameters": [ { "$ref": "#/components/parameters/TenantId" }, { "name": "dateOfBusinessStart", "in": "query", "description": "Start of the date-of-business range, inclusive (yyyy-MM-dd). When supplied alone, scopes the query to that single day", "required": false, "schema": { "type": "string", "format": "date" } }, { "name": "dateOfBusinessEnd", "in": "query", "description": "End of the date-of-business range, inclusive (yyyy-MM-dd). When supplied alone, scopes the query to that single day", "required": false, "schema": { "type": "string", "format": "date" } }, { "name": "modifiedOnStart", "in": "query", "description": "Start of the modified-on range, inclusive (UTC). When supplied alone, scopes the query to that single day", "required": false, "schema": { "type": "string", "format": "date-time" } }, { "name": "modifiedOnEnd", "in": "query", "description": "End of the modified-on range, inclusive (UTC). When supplied alone, scopes the query to that single day", "required": false, "schema": { "type": "string", "format": "date-time" } }, { "name": "locations", "in": "query", "description": "Optional list of location identifiers to filter by. When omitted, all locations the caller has access to are returned", "required": false, "schema": { "type": "array", "items": { "type": "string", "format": "uuid" } } }, { "name": "legalEntities", "in": "query", "description": "Optional list of legal entity identifiers to filter by. When omitted, all legal entities the caller has access to are returned. Combined with locations as an additional AND filter", "required": false, "schema": { "type": "array", "items": { "type": "string", "format": "uuid" } } }, { "name": "pageSize", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "minimum": 1, "maximum": 250, "default": 250 }, "description": "Maximum number of top-level objects to return in one page." }, { "name": "continuationToken", "in": "query", "description": "Opaque continuation token from a prior response NextLink. Omit on the first request; required to fetch each subsequent page. An invalid token returns HTTP 422", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "text/plain": { "schema": { "$ref": "#/components/schemas/Response" } }, "application/json": { "schema": { "$ref": "#/components/schemas/Response" } }, "text/json": { "schema": { "$ref": "#/components/schemas/Response" } } } }, "400": { "description": "Bad Request — a parameter value is malformed, of the wrong type, or outside its allowed range." }, "401": { "description": "Unauthorized — the bearer token is missing, invalid or expired, or is not valid for the specified tenant." }, "403": { "description": "Forbidden — the caller lacks the permission required for this operation." }, "404": { "description": "Not Found — the requested resource does not exist, or the supplied continuation token is unknown or has expired." }, "409": { "description": "Conflict — the request conflicts with the current state of the resource and cannot be applied." }, "422": { "description": "Unprocessable Entity — a required parameter is missing, or a supplied parameter value is invalid." }, "429": { "description": "Too Many Requests — the caller has exceeded the rate limit; retry after a short delay." }, "500": { "description": "Internal Server Error — an unexpected error occurred while processing the request." } } } } }, "components": { "parameters": { "TenantId": { "name": "x-r365-context-tenant-id", "in": "header", "required": true, "description": "Identifies the R365 tenant the request applies to. Required on every request.", "schema": { "type": "string" } } }, "schemas": { "Response": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/LaborPunch" }, "nullable": true, "description": "Labor punches for the requested page." }, "nextLink": { "type": "string", "nullable": true, "description": "Relative URL to retrieve the next page of results. Preserves the original query parameters and appends a fresh continuationToken. Null when this is the last page." } } }, "LaborPunch": { "type": "object", "properties": { "laborId": { "type": "string", "format": "uuid", "description": "Unique identifier of the labor punch." }, "dateWorked": { "type": "string", "format": "date", "description": "Date worked (date of business)." }, "startTime": { "type": "string", "format": "date-time", "nullable": true, "description": "Punch-in time (UTC)." }, "endTime": { "type": "string", "format": "date-time", "nullable": true, "description": "Punch-out time (UTC)." }, "hours": { "type": "number", "format": "double", "nullable": true, "description": "Hours worked." }, "payRate": { "type": "number", "format": "double", "nullable": true, "description": "Pay rate applied to the punch." }, "total": { "type": "number", "format": "double", "nullable": true, "description": "Gross pay for the punch (hours multiplied by pay rate)." }, "tipDeclaredAmount": { "type": "number", "format": "double", "nullable": true, "description": "Employee-declared tip amount on the punch." }, "employee": { "$ref": "#/components/schemas/EmployeeRef", "description": "Employee who worked the punch. Null when the linked record is missing." }, "job": { "$ref": "#/components/schemas/JobRef", "description": "Job the employee worked. Null when the linked record is missing." }, "location": { "$ref": "#/components/schemas/LaborPunchEntityReference", "description": "Location the punch was recorded at. Null when the linked record is missing." }, "createdOn": { "type": "string", "format": "date-time", "nullable": true, "description": "Date and time the record was created (UTC)." }, "createdBy": { "$ref": "#/components/schemas/UserRef", "description": "User who created the record. Null when the linked record is missing." }, "modifiedOn": { "type": "string", "format": "date-time", "nullable": true, "description": "Date and time the record was last modified (UTC)." }, "modifiedBy": { "$ref": "#/components/schemas/UserRef", "description": "User who last modified the record. Null when the linked record is missing." } } }, "EmployeeRef": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "description": "R365 employee identifier." }, "name": { "type": "string", "nullable": true, "description": "Employee display name." }, "payrollId": { "type": "string", "nullable": true, "description": "Employee payroll identifier from the external payroll provider." } } }, "JobRef": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "description": "Job title identifier." }, "name": { "type": "string", "nullable": true, "description": "Job title name." }, "code": { "type": "string", "nullable": true, "description": "Job code value." }, "department": { "type": "string", "nullable": true, "description": "Department name the job belongs to." } } }, "LaborPunchEntityReference": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "description": "Location identifier." }, "name": { "type": "string", "nullable": true, "description": "Location name." }, "number": { "type": "string", "nullable": true, "description": "Location number." } } }, "UserRef": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "description": "User identifier." }, "name": { "type": "string", "nullable": true, "description": "User full name." } } } }, "securitySchemes": { "Bearer": { "type": "http", "scheme": "Bearer" } } } } ````