Retrieve a position
Operation ID: getPsaPosition
Group: PSA › Positions
Open in the interactive reference
GET /psa/positions/{id}
Read-only: Reads and returns; changes nothing.
Retrieves a position. The psaProjectId and the other reference ids on a position are numeric ids, not UUIDs, so you can't use them to read the project or any other record they point to.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
Api-Version |
header | string · 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 of the position you want to retrieve. Example: "7c2e91a4-58fd-4b30-9e17-3a6d05fb824c". |
Response
200 Success
Under data (getPsaPositionOutput):
| Field | Type | Required | Description |
|---|---|---|---|
id |
string | yes | The unique identifier for the position. Example: "7c2e91a4-58fd-4b30-9e17-3a6d05fb824c". |
psaProjectId |
number | yes | The id of the PSA project this position belongs to. It is a numeric key, not the UUID that GET psa/projects/:id takes. Example: 32341. |
name |
string | no | The display name of the position. Example: "Senior Consultant". |
description |
string | no | A free-form description of the position's responsibilities. Example: "Leads the delivery workstream on site.". |
salesOrderProductLineId |
number | no | The id of the sales order product line this position fulfills. It is a numeric key. There is no endpoint for it. |
salesOrderProductLineRateCardEntryId |
number | no | The id of the sales order product line rate card entry used for billing. It is a numeric key. There is no endpoint for it. |
productId |
number | no | The id of the product this position is billed against. It is a numeric key, not the UUID that GET accounting/products/:id takes. |
productLineId |
number | no | The id of the product line this position is billed against. It is a numeric key, not the UUID that GET accounting/product-lines/:id takes. |
productLineRateCardEntryId |
number | no | The id of the product line rate card entry. It is a numeric key. There is no endpoint for it. |
billable |
boolean | no | Whether work in this position is billable to the customer. Example: true. |
unitOfMeasure |
string | no | The unit the stored bill rate, cost rate and budget are expressed in. It is a member of the UnitOfMeasureType enum, in practice 'hour' or 'day' for a position, with 'hour' the default. Example: "hour". |
hourlyBillRate |
decimal | no | The bill rate for this position, as an hourly amount, in the currency given by hourlyBillRateCurrency. Example: "185.00". |
hourlyBillRateCurrency |
string | no | The currency of hourlyBillRate. Format ISO 4217, for example 'USD'. Example: "USD". |
hourlyCostRate |
decimal | no | The cost rate for this position, as an hourly amount, in the currency given by hourlyCostRateCurrency. Example: "110.00". |
hourlyCostRateCurrency |
string | no | The currency of hourlyCostRate. Format ISO 4217, for example 'USD'. Example: "USD". |
hoursBudget |
decimal | no | The budgeted hours for this position. It is a quantity in hours and has no currency. Example: "120.00". |
invoiced |
boolean | no | Whether work in this position has been invoiced. Example: false. |
hrPositionId |
number | no | The id of the HR position this PSA position maps to. It is a numeric key, not the UUID that GET people/positions/:id takes. |
skillLevelId |
number | no | The id of the skill level (position seniority) this PSA position maps to. It is a numeric key. There is no endpoint for it. |
lastModifiedDate |
date-time | yes | The date and time the position record last changed, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. Example: "2026-08-14T11:20:31.004Z". |
{
"data": {
"id": "7c2e91a4-58fd-4b30-9e17-3a6d05fb824c",
"psaProjectId": 32341,
"name": "Senior Consultant",
"description": "Leads the delivery workstream on site.",
"salesOrderProductLineId": 0,
"salesOrderProductLineRateCardEntryId": 0,
"productId": 0,
"productLineId": 0,
"productLineRateCardEntryId": 0,
"billable": true,
"unitOfMeasure": "hour",
"hourlyBillRate": "185.00",
"hourlyBillRateCurrency": "USD",
"hourlyCostRate": "110.00",
"hourlyCostRateCurrency": "USD",
"hoursBudget": "120.00",
"invoiced": false,
"hrPositionId": 0,
"skillLevelId": 0,
"lastModifiedDate": "2026-08-14T11:20:31.004Z"
},
"diagnostics": [
{
"code": "<code>",
"message": "<message>",
"severity": "error",
"path": [
"<path>"
],
"details": "<details>"
}
]
}
Errors
| Code | Status |
|---|---|
NOT_FOUND |
400 |
Statuses
400— Invalid request or business failure. Codes: NOT_FOUND401— The request carries no valid access token.403— Not authorized404— Not found429— Too many requests from this client address. The response has no body and noRetry-Afterheader.500— Internal server error