Projects API

Manage projects within your companies. Projects are containers for tasks, phases, and deliverables, organized by client and company.

The Project Object

{
  "id": 123,
  "title": "Website Redesign",
  "description": "Complete redesign of the company website",
  "is_client": true,
  "is_internal": false,
  "client_project_type": "Process",
  "internal_project_type": "Board",
  "created_at": "2023-01-01T12:00:00.000000Z",
  "updated_at": "2023-01-01T12:00:00.000000Z",
  "client_id": 456,
  "client": {
    "id": 456,
    "title": "Acme Corporation"
  },
  "company": {
    "id": 789,
    "title": "Design Studio Inc"
  },
  "members": [
    { "id": 18, "name": "Ben Johnston" }
  ]
}

Attributes

Attribute Type Description
id integer Unique identifier for the project
title string The project's name
description string Description of the project (empty string when not set)
is_client boolean Whether the project has a client-facing space
is_internal boolean Whether the project has an internal space
client_project_type string Layout of the client space: "Process" or "Board"
internal_project_type string Layout of the internal space: "Process" or "Board"
client_id integer ID of the client this project belongs to
client object The client this project belongs to (id, title)
company object The agency company that owns the project (id, title)
members object[] Users with access to the project (id, name)

List Projects

Retrieves a list of projects the authenticated user has access to.

GET /api/v1/projects

Query Parameters

Parameter Type Description
company_id integer Filter projects by specific company ID
client_id integer Filter projects by specific client ID
title string Filter projects by title (partial match)
per_page integer Number of results per page (max 1000)

Example Request

GET /api/v1/projects?company_id=789&per_page=25
Authorization: Bearer YOUR_ACCESS_TOKEN
Accept: application/json

Example Response

[
  {
    "id": 123,
    "title": "Website Redesign",
    "description": "Complete redesign of the company website",
    "is_client": true,
    "is_internal": false,
    "client_project_type": "Process",
    "internal_project_type": "Board",
    "created_at": "2023-01-01T12:00:00.000000Z",
    "updated_at": "2023-01-01T12:00:00.000000Z",
    "client_id": 456,
    "client": { "id": 456, "title": "Acme Corporation" },
    "company": { "id": 789, "title": "Design Studio Inc" },
    "members": [ { "id": 18, "name": "Ben Johnston" } ]
  }
]

Get a Project

Retrieves a specific project by ID.

GET /api/v1/projects/{id}

Example Request

GET /api/v1/projects/123
Authorization: Bearer YOUR_ACCESS_TOKEN
Accept: application/json

Example Response

{
  "id": 123,
  "title": "Website Redesign",
  "description": "Complete redesign of the company website",
  "is_client": true,
  "is_internal": false,
  "client_project_type": "Process",
  "internal_project_type": "Board",
  "created_at": "2023-01-01T12:00:00.000000Z",
  "updated_at": "2023-01-01T12:00:00.000000Z",
  "client_id": 456,
  "client": { "id": 456, "title": "Acme Corporation" },
  "company": { "id": 789, "title": "Design Studio Inc" },
  "members": [ { "id": 18, "name": "Ben Johnston" } ]
}

Create a Project

Creates a new project. Can be created from scratch or from a template.

POST /api/v1/projects

Request Body

Parameter Type Required Description
title string Yes The project's name
client_id integer Yes ID of the client this project belongs to
description string No Detailed description of the project
template_id integer No ID of a template project to create this project from
is_client boolean No Whether to create a client-facing space
is_internal boolean No Whether to create an internal space
client_project_type string No Client space layout: process or todos
internal_project_type string No Internal space layout: process or todos

Example Request (From Template)

POST /api/v1/projects
Authorization: Bearer YOUR_ACCESS_TOKEN
Content-Type: application/json
Accept: application/json

{
  "title": "Acme Website Redesign",
  "client_id": 456,
  "template_id": 789
}

Example Response

{
  "id": 124,
  "title": "Acme Website Redesign",
  "description": "",
  "is_client": true,
  "is_internal": false,
  "client_project_type": "Process",
  "internal_project_type": "Board",
  "created_at": "2023-02-01T10:00:00.000000Z",
  "updated_at": "2023-02-01T10:00:00.000000Z",
  "client_id": 456,
  "client": { "id": 456, "title": "Acme Corporation" },
  "company": { "id": 789, "title": "Design Studio Inc" },
  "members": [ { "id": 18, "name": "Ben Johnston" } ]
}

Update a Project

Updates an existing project's information.

PUT /api/v1/projects/{id}

Example Request

PUT /api/v1/projects/123
Authorization: Bearer YOUR_ACCESS_TOKEN
Content-Type: application/json
Accept: application/json

{
  "title": "Updated Website Redesign",
  "description": "Now includes a blog and careers section"
}

Accepted fields: title, description, and status (active, completed, on_hold, cancelled). Company members may additionally update client_id, is_client, is_internal, client_project_type, and internal_project_type.

Example Response

{
  "id": 123,
  "title": "Updated Website Redesign",
  "description": "Now includes a blog and careers section",
  "is_client": true,
  "is_internal": false,
  "client_project_type": "Process",
  "internal_project_type": "Board",
  "created_at": "2023-01-01T12:00:00.000000Z",
  "updated_at": "2023-02-01T14:30:00.000000Z",
  "client_id": 456,
  "client": { "id": 456, "title": "Acme Corporation" },
  "company": { "id": 789, "title": "Design Studio Inc" },
  "members": [ { "id": 18, "name": "Ben Johnston" } ]
}

Delete a Project

Permanently deletes a project. Only company members can delete projects.

DELETE /api/v1/projects/{id}

Warning: Deleting a project will permanently remove it along with all associated tasks and phases. This action cannot be undone and requires company member permissions.

Example Request

DELETE /api/v1/projects/123
Authorization: Bearer YOUR_ACCESS_TOKEN
Accept: application/json

Example Response

204 No Content