# Returns a list of time entries.

`GET /psa/time-entries`

Group: PSA › Time Entries · Operation ID: `timeEntries`

Returns time entries for the projects where you are a team member.

The person and project identifiers on each entry (memberId, memberEmployeeId, projectPositionId and psaProjectId) are returned but cannot be filtered or sorted on. There is no endpoint that lists a specific employee's time entries.

[Open in the interactive reference](https://docs.api.lensing.ai/?op=timeEntries)

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `Api-Version` | header | `"v1"` | yes | The API version this request targets, named by its public identifier. Required on every request; omitting it, or naming a version this company does not have, is answered with 400. This document describes version `v1`. |

## Query surface

- `id` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `date` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `currency` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `submissionStatus` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `submissionDate` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `month` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `projectActivityId` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `lastModifiedDate` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- Orderable: id, date, month, hours, submissionStatus, submissionDate, currency, lastModifiedDate
- Selectable: id, date, hours, billableHours, nonBillableHours, internalValuableHours, internalNonValuableHours, invoicedHours, revenue, cost, currency, notes, submissionStatus, submissionDate, month, memberId, memberEmployeeId, memberEmployeeName, projectActivityId, projectActivityName, projectActivityCategory, projectPositionId, projectPositionName, psaProjectId, projectName, psaProjectStatus, lastModifiedDate

## Response

`200` Success

Under `data`, an array of timeEntriesRow:

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | no | The unique identifier for the time entry. |
| `date` | string (date) or null | no | The date the time was logged for. Format YYYY-MM-DD. |
| `hours` | string (decimal) or null | no | The total hours logged in this entry. |
| `billableHours` | string (decimal) or null | no | The hours classified as billable to a customer, derived from projectActivityCategory. |
| `nonBillableHours` | string (decimal) or null | no | The hours classified as non-billable to a customer, derived from projectActivityCategory. |
| `internalValuableHours` | string (decimal) or null | no | The hours classified as internal valuable work, derived from projectActivityCategory. |
| `internalNonValuableHours` | string (decimal) or null | no | The hours classified as internal non-valuable work, derived from projectActivityCategory. |
| `invoicedHours` | string (decimal) or null | no | The hours that have been invoiced, a subset of billableHours. |
| `revenue` | string (decimal) or null | no | The revenue from this time entry, in the currency given by currency. |
| `cost` | string (decimal) or null | no | The cost of this time entry, in the currency given by currency. |
| `currency` | string or null | no | The currency of revenue and cost. Format ISO 4217, for example 'USD'. It is the currency of the project position's bill rate. |
| `notes` | string or null | no | Free-form notes on the time entry. |
| `submissionStatus` | string or null | no | The submission and approval status of the entry. Possible values: 'draft', 'pending', 'approved', 'rejected', 'invoiced'. |
| `submissionDate` | string (date) or null | no | The date the entry was submitted for approval. Format YYYY-MM-DD. |
| `month` | string (date) or null | no | The first day of the month the entry is reported under. Format YYYY-MM-DD. |
| `memberId` | number or null | no | The numeric key of the PSA member assignment the time was logged for. GET psa/team-members/:id takes the member's UUID, not this key, so it cannot fetch the member. |
| `memberEmployeeId` | number or null | no | The numeric key of the employee who logged the time. There is no endpoint for it. |
| `memberEmployeeName` | string or null | no | The name of the employee who logged the time. |
| `projectActivityId` | number or null | no | The numeric key of the activity the time was logged against. GET psa/activities/:id takes the activity's UUID, not this key, so it cannot fetch the activity. |
| `projectActivityName` | string or null | no | The name of the activity the time was logged against. |
| `projectActivityCategory` | string or null | no | The billability category of the activity the time was logged against. The billable, non-billable and internal-hour fields are derived from it. See category on GET psa/activities/:id. |
| `projectPositionId` | number or null | no | The numeric key of the position the time was logged against. GET psa/positions/:id takes the position's UUID, not this key, so it cannot fetch the position. |
| `projectPositionName` | string or null | no | The name of the position the time was logged against. |
| `psaProjectId` | number or null | no | The numeric key of the PSA project the entry belongs to. GET psa/projects/:id takes the project's UUID, not this key, so it cannot fetch the project. |
| `projectName` | string or null | no | The name of the PSA project the entry belongs to. |
| `psaProjectStatus` | string or null | no | The status of the PSA project this entry belongs to. |
| `lastModifiedDate` | string (date-time) or null | no | The date and time the entry last changed, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. |

## Statuses

- `400` — Invalid request or business failure
- `401` — Missing or invalid access token
- `403` — Not authorized
- `404` — Not found
- `429` — Too many requests
- `500` — Internal server error
