> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developer.projectmanager.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developer.projectmanager.com/_mcp/server.

# Retrieve Project

GET https://api.projectmanager.com/api/data/projects/{projectId}

Retrieves a project based on its unique identifier.
            
A Project is a collection of Tasks that contributes towards a goal.  Within a Project, Tasks
represent individual items of work that team members must complete.  The sum total of Tasks
within a Project represents the work to be completed for that Project.

Reference: https://developer.projectmanager.com/api-reference/project/retrieve-project

## Authentication

- `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer <token>`, where token is your auth token.

## Request

### Path parameters

- `projectId` (string, required) — The unique identifier of the Project to retrieve.

### Headers

- `x-integration-name` (string, optional) — The name of the calling system passed along as a header parameter

## Response

### 200

Success

- `error` (AstroError, optional, nullable) — If the API call failed, this will contain information about the error that occurred.
- `success` (boolean, optional) — True if the API call succeeded; false otherwise.
- `hasError` (boolean, optional) — True if the API call failed.
- `statusCode` (enum, optional) — The HTTP code of the response.
  - Allowed values: `Continue`, `SwitchingProtocols`, `Processing`, `EarlyHints`, `OK`, `Created`, `Accepted`, `NonAuthoritativeInformation`, `NoContent`, `ResetContent`, `PartialContent`, `MultiStatus`, `AlreadyReported`, `IMUsed`, `MultipleChoices`, `MovedPermanently`, `Found`, `SeeOther`, `NotModified`, `UseProxy`, `Unused`, `TemporaryRedirect`, `PermanentRedirect`, `BadRequest`, `Unauthorized`, `PaymentRequired`, `Forbidden`, `NotFound`, `MethodNotAllowed`, `NotAcceptable`, `ProxyAuthenticationRequired`, `RequestTimeout`, `Conflict`, `Gone`, `LengthRequired`, `PreconditionFailed`, `RequestEntityTooLarge`, `RequestUriTooLong`, `UnsupportedMediaType`, `RequestedRangeNotSatisfiable`, `ExpectationFailed`, `MisdirectedRequest`, `UnprocessableEntity`, `Locked`, `FailedDependency`, `UpgradeRequired`, `PreconditionRequired`, `TooManyRequests`, `RequestHeaderFieldsTooLarge`, `UnavailableForLegalReasons`, `InternalServerError`, `NotImplemented`, `BadGateway`, `ServiceUnavailable`, `GatewayTimeout`, `HttpVersionNotSupported`, `VariantAlsoNegotiates`, `InsufficientStorage`, `LoopDetected`, `NotExtended`, `NetworkAuthenticationRequired`
- `data` (ProjectDto, optional) — A Project is a collection of Tasks that contributes towards a goal. Within a Project, Tasks represent individual items of work that team members must complete. The sum total of Tasks within a Project represents the work to be completed for that Project.

## Types

### AstroError

Information about an error that occurred within the ProjectManager API.

- `technicalError` (string, optional, nullable) — A technical description of the error that occurred. Not suitable for display to end users.
- `additionalErrors` (list of string, optional, nullable) — If additional errors beyond the main error in `Message` occurred, they will be listed here as individual messages.
- `validationErrors` (map from string to list of string, optional, nullable) — This contains a dictionary of validation errors. The key is the name of the field
- `message` (string, optional, nullable) — A description of the error that occurred. If your application has a user interface, show this message to explain what went wrong.

### ProjectDto

A Project is a collection of Tasks that contributes towards a goal. Within a Project, Tasks represent individual items of work that team members must complete. The sum total of Tasks within a Project represents the work to be completed for that Project.

- `id` (string, optional) — The unique identifier of the Project. This value is set by the system and cannot be set with a CreateProject or changed with an UpdateProject call.
- `name` (string, optional) — The name of the Project.
- `description` (string, optional, nullable) — An optional description of the Project
- `shortCode` (string, optional) — A shortened name that will be used when reporting on Projects. This short name can be edited in the Project Settings page within the application and can be any text you wish.
- `shortId` (string, optional) — A short identifier that uniquely identifies this Project within your Workspace using a single letter followed by a number. This code can be used for APIs that accept Project unique identifiers. You can observe the short ID within the application by observing the URL of the page you visit when you click on this project. The page's URL will appear in the form `https://pm.app.projectmanager.com/project/board/D16` - in this example, the `ShortId` is `D16`. This code is assigned on creation and cannot be changed.
- `folder` (ProjectFolderDto, optional, nullable) — If this Project is grouped within a ProjectFolder, this contains the ProjectFolder information.
- `status` (ProjectStatusDto, optional) — The ProjectStatus chosen for this Project.
- `startDate` (string, optional, nullable) — The earliest planned or actual start date of tasks on the project. This field is calculated automatically and cannot be changed.
- `endDate` (string, optional, nullable) — The latest planned or actual finish date of tasks on the project. This field is calculated automatically and cannot be changed.
- `targetDate` (string, optional, nullable) — The target planned completion date for this Project, or null if one has not been selected. This value can be updated in the Project Settings page or the Portfolio Project page within the application.
- `plannedStartDate` (string, optional, nullable) — A calculated field of the estimated date on which this Project is expected to start. This date is calculated based on the earliest estimated start date for a Task within this Project. This value is null if no Tasks have an estimated start date within this Project.
- `plannedFinishDate` (string, optional, nullable) — A calculated field of the estimated date on which this Project is expected to finish. This date is calculated based on the latest planned finish date for a Task within this Project. This value is null if no Tasks have an estimated finish date within this Project.
- `actualStartDate` (string, optional, nullable) — A calculated field of the actual date on which this Project started. This date is calculated based on the earliest actual start date for a Task within this Project. This value is null if no Tasks have an actual start date within this Project.
- `actualFinishDate` (string, optional, nullable) — A calculated field of the actual date on which this Project finished. This date is calculated based on the latest actual finish date for a Task within this Project. This value is null if no Tasks have an actual finish date within this Project.
- `priority` (ProjectPriorityDto, optional) — The ProjectPriority level of this Project, if defined.
- `chargeCode` (ProjectChargeCodeDto, optional, nullable) — The ChargeCode of this Project, if defined.
- `manager` (ProjectManagerDto, optional, nullable) — Information about the manager of this project, if one has been assigned.
- `customer` (ProjectCustomerDto, optional, nullable) — Information about the manager of this project, if one has been specified.
- `budget` (double, optional, nullable) — The proposed budget for this Project.
- `hourlyRate` (double, optional, nullable) — The default hourly rate for work on this Project. This rate will be used if an assignee working on this Project does not have an hourly rate configured in their profile.
- `statusUpdate` (string, optional, nullable) — Contains an optional status update for Projects that can be used to summarize the status of multiple Projects at a glance. You can edit the StatusUpdate field on the Portfolio page of the application.
- `modifyDate` (string, optional) — The timestamp in UTC when the Project was most recently modified. This field is automatically determined by the system when this Project is modified and cannot be directly changed by the user.
- `createDate` (string, optional) — The timestamp in UTC when the Project was created. This field is automatically determined by the system when this Project is created and cannot be changed by the user.
- `isTemplate` (boolean, optional) — True if this Project is a template that will be reused as a framework for future Projects.
- `favorite` (boolean, optional) — True if this Project is marked as favorite for current user
- `creationTemplateId` (string, optional, nullable) — The TemplateId that this project was created from. Will be null if no template was selected at project creation.
- `members` (list of ProjectMemberDto, optional, nullable) — The members of the project
- `fieldValues` (list of ProjectFieldValueDto, optional, nullable) — Project fields array with values
- `files` (list of ProjectFileDto, optional, nullable) — The list of files associated with this Project, if any. This field will be present when you fetch a single object. When you query for multiple objects, this field is not included in results by default. To expand this field, specify the name of this field in the `$expand` parameter.
- `percentComplete` (integer, optional, nullable) — The percentage of the project tasks completed
- `updatePlannedWithActual` (boolean, optional) — True if allow actual dates to update planned dates
- `externalReferenceId` (string, optional, nullable) — An optional external reference identifier for this Project. This value can be used to link the Project to records in external systems, such as ERP, CRM, or other integrations.
- `ownerId` (string, optional, nullable) — Represents the unique identifier of the owner associated with the Project. This may be used to identify the user or entity responsible for the Project.
- `workingDays` (ProjectWorkingDaysDto, optional) — Represents the configuration of working days for the project, indicating which days of the week are considered as working days. This allows for customization of scheduling and availability based on the project's requirements.
- `fields` (map from string to any, optional, nullable, deprecated) — Obsolete - use FieldValues instead

### ProjectFolderDto

A ProjectFolder is a named storage location that can contain Projects.

- `id` (string, optional) — The unique identifier of this ProjectFolder.
- `name` (string, optional) — The name of this ProjectFolder.

### ProjectStatusDto

A ProjectStatus is a named condition used by your business to categorize the completion level of Tasks and Projects within your Workspace. You can name your ProjectStatus levels anything you like and you can reorganize the order of the ProjectPriority levels at any time.

- `id` (string, optional) — The unique identifier of this ProjectStatus.
- `name` (string, optional) — The name of this ProjectStatus.
- `isDeleted` (boolean, optional) — Is this a deleted status
- `isSystem` (boolean, optional) — Indicates whether this ProjectStatus is a system and cannot be deleted or modified.

### ProjectPriorityDto

A ProjectPriority is a named priority level used by your business to determine how to decide which Tasks are the most important. You can name your ProjectPriority levels anything you like and you can reorganize the order of the ProjectPriority levels at any time.

- `id` (string, optional) — The unique identifier of this ProjectPriority.
- `name` (string, optional) — The name of this ProjectPriority.

### ProjectChargeCodeDto

A ChargeCode is a code used to identify costs within your Projects. Each ChargeCode has a name and a unique identifier. ChargeCodes are defined per Workspace and are shared among Projects.

- `id` (string, optional) — The unique identifier of this ChargeCode
- `name` (string, optional) — The name of this ChargeCode
- `isActive` (boolean, optional) — Status of Charge Code

### ProjectManagerDto

A ProjectManager is a person who manages a Project.

- `id` (string, optional) — The unique identifier of this ProjectManager
- `name` (string, optional) — The name of this ProjectManager
- `initials` (string, optional, nullable) — Manager initials
- `avatarUrl` (string, optional, nullable) — Avatar's url
- `color` (string, optional, nullable) — Collaboration Color for this resource. eg. teal, cyan, lightblue, blurple, purple, pink, orange, gray

### ProjectCustomerDto

A ProjectCustomer is a code used to identify costs within your Projects. Each ProjectCustomer has a name and a unique identifier. ChargeCodes are defined per Workspace and are shared among Projects.

- `id` (string, optional) — The unique identifier of this ProjectCustomer
- `name` (string, optional) — The name of this ProjectCustomer

### ProjectMemberDto

A ProjectMember is a user who can collaborate on a Project. You can control permissions for what each ProjectMember can do and how they can interact with the Project using this model.

- `id` (string, optional) — The unique identifier of the user of this ProjectMember.
- `projectId` (string, optional) — The unique identifier of the project that this ProjectMember belongs to.
- `initials` (string, optional) — the initials of the user
- `name` (string, optional) — The display name of the user
- `avatarUrl` (string, optional, nullable) — Avatar URL
- `permission` (string, optional, nullable) — The current permission of the user
- `color` (string, optional) — The color for their avatar
- `permissionOptions` (PermissionOptionsDto, optional, nullable) — Specifies the permissions that you can set against the project member. This changes based on who is logged in and the role they have.
- `role` (string, optional, nullable, deprecated) — The role of the user in the project Obsolete use Permission instead

### ProjectFieldValueDto

A model that contains the value for a ProjectField.

- `id` (string, optional) — The unique identifier of this Project Field.
- `shortId` (string, optional, nullable) — The unique Short Id of this Project Field.
- `name` (string, optional) — The name of this Project Field.
- `type` (string, optional) — The type of this Project Field. Valid types are the following: * Text * Number * Date * Checkbox * Currency * Dropdown
- `value` (string, optional) — The value currently set for this Project Field Value.
- `createdDate` (string, optional) — Date and time (in UTC) that this TaskField was created.
- `modifiedDate` (string, optional) — Date and time (in UTC) that this TaskField was last modified.

### ProjectFileDto

The ProjectFile represents an attached file that is connected to a Project and can be retrieved for download.

- `id` (string, optional) — The identifier for this file
- `name` (string, optional) — The name of the file
- `url` (string, optional) — The url of the file which can be used for downloading
- `task` (ProjectFileTaskDto, optional, nullable) — The project task that this file relates to. This field will be present when you fetch a single object. When you query for multiple objects, this field is not included in results by default. To expand this field, specify the name of this field in the `$expand` parameter.
- `folder` (ProjectFileFolderDto, optional, nullable) — The folder that this file relates to. This field will be present when you fetch a single object. When you query for multiple objects, this field is not included in results by default. To expand this field, specify the name of this field in the `$expand` parameter.

### ProjectWorkingDaysDto

Indicate which days of the week are considered working days for this project. This value can be set when the project is created but may not be updated afterwards.

- `monday` (boolean, optional, default: true) — Set this value to true if Monday is considered a working day for this project.
- `tuesday` (boolean, optional, default: true) — Set this value to true if Tuesday is considered a working day for this project.
- `wednesday` (boolean, optional, default: true) — Set this value to true if Wednesday is considered a working day for this project.
- `thursday` (boolean, optional, default: true) — Set this value to true if Thursday is considered a working day for this project.
- `friday` (boolean, optional, default: true) — Set this value to true if Friday is considered a working day for this project.
- `saturday` (boolean, optional) — Set this value to true if Saturday is considered a working day for this project.
- `sunday` (boolean, optional) — Set this value to true if Sunday is considered a working day for this project.

### PermissionOptionsDto

Specifies the permissions a member can be changed to on a project. This objects values can change based on the logged in user and the role they have.

- `none` (boolean, optional) — If true, the users access can be removed
- `collaborate` (boolean, optional) — If true the user can be changed to collaborator
- `guest` (boolean, optional) — If true a user can be set as guest, a guest can only be Guest or None
- `editor` (boolean, optional) — If true the user can be changed to editor
- `manager` (boolean, optional) — If true the user can be changed to Manager

### ProjectFileTaskDto

Represents information about a Task that is relevant to a ProjectFile

- `id` (string, optional) — The unique identifier of this Task.
- `shortId` (string, optional, nullable) — A short ID that can be used to refer to this Task. This short ID is guaranteed to be unique within your Workspace.
- `name` (string, optional) — The common name of this Task.

### ProjectFileFolderDto

A Folder is a named storage location that can contain Files.

- `id` (string, optional) — The unique identifier of this Folder.
- `name` (string, optional) — The name of this Folder.

## Examples

**Response**

```json
{
  "error": {
    "technicalError": "string",
    "additionalErrors": [
      "string"
    ],
    "validationErrors": {},
    "message": "string"
  },
  "success": true,
  "hasError": true,
  "statusCode": "Continue",
  "data": {
    "id": "string",
    "name": "string",
    "description": "string",
    "shortCode": "string",
    "shortId": "string",
    "folder": {
      "id": "string",
      "name": "string"
    },
    "status": {
      "id": "string",
      "name": "string",
      "isDeleted": true,
      "isSystem": true
    },
    "startDate": "2023-01-15",
    "endDate": "2023-01-15",
    "targetDate": "2023-01-15",
    "plannedStartDate": "2023-01-15",
    "plannedFinishDate": "2023-01-15",
    "actualStartDate": "2023-01-15",
    "actualFinishDate": "2023-01-15",
    "priority": {
      "id": "string",
      "name": "string"
    },
    "chargeCode": {
      "id": "string",
      "name": "string",
      "isActive": true
    },
    "manager": {
      "id": "string",
      "name": "string",
      "initials": "string",
      "avatarUrl": "string",
      "color": "string"
    },
    "customer": {
      "id": "string",
      "name": "string"
    },
    "budget": 1.1,
    "hourlyRate": 1.1,
    "statusUpdate": "string",
    "modifyDate": "2024-01-15T09:30:00Z",
    "createDate": "2024-01-15T09:30:00Z",
    "isTemplate": true,
    "favorite": true,
    "creationTemplateId": "string",
    "members": [
      {
        "id": "string",
        "projectId": "string",
        "initials": "string",
        "name": "string",
        "avatarUrl": "string",
        "permission": "string",
        "color": "string",
        "permissionOptions": {
          "none": true,
          "collaborate": true,
          "guest": true,
          "editor": true,
          "manager": true
        },
        "role": "string"
      }
    ],
    "fieldValues": [
      {
        "id": "string",
        "shortId": "string",
        "name": "string",
        "type": "string",
        "value": "string",
        "createdDate": "2024-01-15T09:30:00Z",
        "modifiedDate": "2024-01-15T09:30:00Z"
      }
    ],
    "files": [
      {
        "id": "string",
        "name": "string",
        "url": "string",
        "task": {
          "id": "string",
          "shortId": "string",
          "name": "string"
        },
        "folder": {
          "id": "string",
          "name": "string"
        }
      }
    ],
    "percentComplete": 1,
    "updatePlannedWithActual": true,
    "externalReferenceId": "string",
    "ownerId": "string",
    "workingDays": {
      "monday": true,
      "tuesday": true,
      "wednesday": true,
      "thursday": true,
      "friday": true,
      "saturday": true,
      "sunday": true
    },
    "fields": {}
  }
}
```

**SDK Code**

```python
import requests

url = "https://api.projectmanager.com/api/data/projects/projectId"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.projectmanager.com/api/data/projects/projectId';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.projectmanager.com/api/data/projects/projectId"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.projectmanager.com/api/data/projects/projectId")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.projectmanager.com/api/data/projects/projectId")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.projectmanager.com/api/data/projects/projectId', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.projectmanager.com/api/data/projects/projectId");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.projectmanager.com/api/data/projects/projectId")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```