page title decoration image

List all active projects for a client

GET /api/v2/clients/{client_id}/projects

List all active projects for a client

Code samples

# You can also use wget
curl -X GET /api/v2/clients/{client_id}/projects \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer {access-token}'
GET /api/v2/clients/{client_id}/projects HTTP/1.1

Accept: application/json

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('/api/v2/clients/{client_id}/projects',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get '/api/v2/clients/{client_id}/projects',
  params: {
  }, headers: headers

p JSON.parse(result)
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('/api/v2/clients/{client_id}/projects', headers = headers)

print(r.json())
<?php

require 'vendor/autoload.php';

$headers = array(
    'Accept' => 'application/json',
    'Authorization' => 'Bearer {access-token}',
);

$client = new \GuzzleHttp\Client();

// Define array of request body.
$request_body = array();

try {
    $response = $client->request('GET','/api/v2/clients/{client_id}/projects', array(
        'headers' => $headers,
        'json' => $request_body,
       )
    );
    print_r($response->getBody()->getContents());
 }
 catch (\GuzzleHttp\Exception\BadResponseException $e) {
    // handle exception or api errors.
    print_r($e->getMessage());
 }

 // ...
URL obj = new URL("/api/v2/clients/{client_id}/projects");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "/api/v2/clients/{client_id}/projects", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /api/v2/clients/{client_id}/projects

Returns a filtered list of all active projects for the specified client. Results can be optionally filtered by permissions. Each entry contains full project metadata including status information.

Parameters

NameInTypeRequiredDescription
client_idpathintegertrueClient ID
permissionquerystringfalsePermission key to filter projects (e.g., ‘ProjectRead’ for readable projects)

Enumerated Values

ParameterValue
permissionProjectRead
permissionProjectModify
permissionProjectCreate

Example responses

200 Response

{
  "status": "success",
  "code": 200,
  "message": "Projects retrieved successfully",
  "details": [
    {
      "id": 123,
      "versionId": 5,
      "uuid": "550e8400-e29b-41d4-a716-446655440000",
      "name": "Project X",
      "description": "Project description notes",
      "start": "2023-01-15T09:00:00",
      "finish": "2023-12-31T17:00:00",
      "code": "PRJ-X-2023",
      "customer": "Acme Corporation",
      "category": "Construction",
      "priority": 1.5,
      "status": "In Progress",
      "path": "/Projects/2023/Project X",
      "folderId": 42,
      "createdAt": "2022-12-01T08:30:00",
      "createdUserId": 7,
      "createdUserName": "John Doe",
      "lockAt": "2023-02-01T10:15:00",
      "lockUserId": 8,
      "lockUserName": "Jane Smith",
      "notes": "Special handling required",
      "isTemplate": false,
      "isReadOnly": true
    }
  ]
}

401 Response

{
  "status": "error",
  "code": 401,
  "message": "Authentication failed",
  "details": "JWT token not found"
}

403 Response

{
  "status": "error",
  "code": 403,
  "message": "Access denied",
  "details": "Insufficient permissions"
}

500 Response

{
  "status": "error",
  "code": 500,
  "message": "Internal server error",
  "details": "An internal server error occurred"
}

Responses

StatusMeaningDescriptionSchema
200OKProject listInline
401UnauthorizedAuthentication error (JWT token missing/invalid)ErrorResponse
403ForbiddenAccess denied (insufficient permissions)ErrorResponse
500Internal Server ErrorInternal server errorErrorResponse

Response Schema

Status Code 200

NameTypeRequiredRestrictionsDescription
» statusstringfalsenonenone
» codeintegerfalsenonenone
» messagestringfalsenonenone
» details[ProjectItem]falsenonenone
»» idintegertruenoneUnique project ID
»» versionIdintegertruenoneVersion identifier
»» uuidstring(uuid)truenoneUnique universal identifier
»» namestringtruenoneProject name
»» descriptionstring¦nullfalsenoneDetailed project description
»» startstring(date-time)falsenoneProject start date/time
»» finishstring(date-time)falsenoneProject end date/time
»» codestring¦nullfalsenoneProject code/short identifier
»» customerstring¦nullfalsenoneCustomer name
»» categorystring¦nullfalsenoneProject category
»» prioritynumber(float)falsenoneProject priority level
»» statusstringfalsenoneCurrent project status
»» pathstringtruenoneFull virtual path of the project
»» folderIdintegertruenoneParent folder ID
»» createdAtstring(date-time)truenoneCreation timestamp
»» createdUserIdintegertruenoneID of the creating user (-1 if unknown)
»» createdUserNamestringtruenoneName of the creating user
»» lockAtstring(date-time)¦nullfalsenoneTimestamp when project was locked (empty if not locked)
»» lockUserIdintegerfalsenoneID of the user who locked the project (-1 if not locked)
»» lockUserNamestringfalsenoneName of the user who locked the project
»» notesstring¦nullfalsenoneAdditional project notes
»» isTemplatebooleantruenoneWhether this is a template project
»» isReadOnlybooleantruenoneWhether the project is read-only for current user