Get Project

Retrieve a specific project by ID.

Note: If the project has no title (empty or whitespace-only), the response returns the parent account’s title instead. The stored value is not modified — this is a read-time fallback only.

Authentication

x-api-keystring
API Key authentication via header

Path parameters

project_idintegerRequired
Project identifier

Query parameters

include_virtual_propertiesbooleanOptionalDefaults to false
Whether to include virtual properties in the response. Defaults to false unless explicitly set to true.
include_archivedbooleanOptionalDefaults to false

Whether to include archived (inactive) records in the response. By default only active records are returned.

include_contactsbooleanOptionalDefaults to false
Whether to include associated contacts in the response. Defaults to false unless explicitly set to true.

Response

Project details
tradeslist of enumsOptional
Array of trade types
valuedouble or nullOptional
Project value
sizedouble or nullOptional
Project size
workflowIdinteger or nullOptional
Associated workflow ID
accountIdinteger or nullOptional
Associated account ID
statusenumOptional

Status of the project:

  • ACTIVE - Project is active and in progress
  • ON_HOLD - Project is temporarily paused
  • CANCELLED - Project has been cancelled
  • COMPLETED - Project has been completed
stageobjectOptional

Current stage information (Workflows 1.0).

This object is present only for records still using the original Stage-based workflow engine. When the project is managed by Workflows 2.0 (Phase engine) the stage object and related fields (stageId, timeInStageDays, slaStatus) are omitted.

phaseobjectOptional

Current phase information (Workflows 2.0).

This object replaces stage when a project is attached to the Phase-based workflow engine. If the project is still on Workflows 1.0 this object will be omitted. Only populated on GET (list, search, get by id) — omitted on create/update responses.

phaseTimelinelist of objectsOptional

Only present on GET /projects and /projects/search when entered_phase_id/exited_phase_id is used to filter the results. Contains the project’s full phase-transition history (not just the matched phase) in compact form — use GET /projects/{project_id} for the complete phaseInstances with names, positions, and SLA info.

lineItemsUpdatedAtstring or nullOptionalformat: "date-time"

Only present on GET /projects and /projects/search when include_line_item_updates=true is passed together with updated_after and/or updated_before. The most recent updatedAt among the project’s own scope line items (estimate/scope items; line items on quotes/invoices are excluded). null if the project has no scope line items. Useful for telling whether a row matched the date window via its own updatedAt or via a line item edit.

workflowNamestringOptional
Name of the associated workflow.
contactslist of objectsOptional

Contacts associated with this project (independent of, and not inherited from, the parent account’s contacts). Set on create or update via the contacts request field. On GET requests, only populated when include_contacts=true is passed. Always populated on POST (create) and PATCH (update) responses. Ordered with the primary contact first, capped at 20 contacts.

phaseInstanceslist of objectsOptional
Ordered list of phase instances for the project

Errors

401
Unauthorized Error
404
Not Found Error