# Returns the PSA project with the given identifier.

`GET /psa/projects/{id}`

Group: PSA › Projects · Operation ID: `getPsaProject`

Returns one PSA project with its budget, status, team, sales-arrangement links, and revenue to date. The item schema is identical to GET psa/projects.

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

## 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`. |
| `id` | path | string | yes | The unique identifier for the project to return. |

## Response

`200` Success

Under `data` (getPsaProjectOutput):

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | yes | The unique identifier for the project. |
| `lastModifiedDate` | string (date-time) | yes | The date and time the project last changed, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. |
| `name` | string | yes | The display name of the project. |
| `code` | string | no | The project code, for example 'PSA-29767'. Absent when none has been set. |
| `category` | string | yes | The project category. Possible values: 'Billable', 'Internal', 'NonBillable'. |
| `status` | string | yes | The project status. Possible values: 'Tentative', 'Planning', 'PlanningDraft', 'NotStarted', 'InProgress', 'Paused', 'Completed', 'Cancelled'. |
| `currency` | string | yes | The project's default currency. Format ISO 4217, for example 'USD'. It applies to revenueRecordedTimeToDate, revenueAccomplishedMilestones, revenueFixedFeeToDate, revenueToDate, and budgetRemaining. |
| `invoiced` | boolean | yes | Whether the project is marked as invoiced. |
| `startDate` | string (date) | yes | The project start date. Format YYYY-MM-DD. |
| `endDate` | string (date) | yes | The project end date. Format YYYY-MM-DD. |
| `notes` | string | no | Free-form notes about the project. |
| `enforceActivityDateRange` | boolean | no | Whether time entries must fall within the project's startDate and endDate. |
| `budgetAmount` | string (decimal) | no | The project budget amount, in budgetCurrency. |
| `budgetCurrency` | string | no | The currency of budgetAmount. Format ISO 4217, for example 'USD'. |
| `departmentId` | number | no | The numeric identifier of the department the project is allocated to. GET departments/:id takes a UUID, so the number cannot be used to fetch the department. |
| `teamId` | number | yes | The numeric identifier of the team assigned to this project. GET people/teams/:id takes a UUID, so the number cannot be used to fetch the team. |
| `teamName` | string | no | The display name of the team. |
| `teamStartDate` | string (date) | no | The team's start date, which may differ from startDate. Format YYYY-MM-DD. |
| `teamEndDate` | string (date) | no | The team's end date, which may differ from endDate. Format YYYY-MM-DD. |
| `salesRepresentativeId` | number | no | The numeric identifier of the sales representative, an employee. There is no endpoint for it. |
| `salesRepresentativeName` | string | no | The display name of the sales representative. |
| `projectTypeId` | number | no | The numeric identifier of the project type. GET psa/project-types/:id takes a UUID, so the number cannot be used to fetch the project type. |
| `projectTypeName` | string | no | The display name of the project type. |
| `quoteId` | number | no | The numeric identifier of the CRM quote this project was created from. GET crm/quotes/:id takes a UUID, so the number cannot be used to fetch the quote. |
| `quoteNumber` | string | no | The quote number. |
| `opportunityId` | number | no | The numeric identifier of the CRM opportunity this project is linked to. GET crm/opportunities/:id takes a UUID, so the number cannot be used to fetch the opportunity. |
| `opportunityName` | string | no | The display name of the opportunity. |
| `opportunityCurrency` | string | no | The currency of the opportunity. Format ISO 4217, for example 'USD'. |
| `salesArrangementId` | number | no | The numeric identifier of the sales arrangement that links the project to billing terms. There is no endpoint for it. |
| `salesArrangementCurrency` | string | no | The functional currency of the sales arrangement. Format ISO 4217, for example 'USD'. |
| `salesArrangementCustomerId` | number | no | The numeric identifier of the customer on the sales arrangement. GET accounting/customers/:id takes a UUID, so the number cannot be used to fetch the customer. |
| `salesArrangementCustomerName` | string | no | The display name of the customer on the sales arrangement. |
| `salesArrangementEntityId` | number | no | The numeric identifier of the legal entity on the sales arrangement. There is no endpoint for it. |
| `salesArrangementEntityName` | string | no | The display name of the legal entity on the sales arrangement. |
| `revenueRecordedTimeToDate` | string (decimal) | no | The revenue from recorded time up to today, in the project currency. Absent when the project has no time entries. |
| `revenueAccomplishedMilestones` | string (decimal) | no | The revenue from accomplished and invoiced milestones, in the project currency. Absent when the project has no completed milestones. |
| `revenueFixedFeeToDate` | string (decimal) | no | The fixed-fee revenue to date, in the project currency. Absent when the project has no fixed fees. |
| `revenueToDate` | string (decimal) | no | The total revenue to date, in the project currency: revenueRecordedTimeToDate + revenueAccomplishedMilestones + revenueFixedFeeToDate. |
| `budgetRemaining` | string (decimal) | no | The budget remaining, in the project currency: budgetAmount - revenueToDate. |

## Errors

| Code | Status |
| --- | --- |
| `NOT_FOUND` | 400 |

## Statuses

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