Create Project

Create a new project with required and optional fields. Required fields: - `title`: Project title/name - `address`: An array containing a single string, which represents the full project location/address. Optional fields: - `trades`: Array of trade types - `accountId`: Link to existing account - `workflowId`: Link to workflow - `phaseId`: Link to phase - `primaryEmail`/`primaryPhone`: Contact information - `contacts`: Contact IDs only (no name, email, phone, etc.). The contacts must be created first via POST /contacts. - `custom`: Custom fields object Note: If primaryEmail or primaryPhone is provided, a contact will be automatically created or matched.

Authentication

x-api-keystring
API Key authentication via header

Query parameters

allow_new_optionsbooleanOptionalDefaults to false
Whether to allow creation of new dropdown options during record creation
match_byenumOptionalDefaults to title
Field to use for matching existing records
Allowed values:
match_found_strategyenumOptionalDefaults to skip
Strategy to use when a match is found
Allowed values:

Request

This endpoint expects an object.
titlestringRequired

Project title/name

addresslist of stringsRequired

An array containing a single string, which represents the full project location/address.

descriptionstring or nullOptional
Project description
tradeslist of enumsOptional
Array of trade types, defaults to 'Solar'
accountIdintegerOptional
ID of associated account
workflowIdintegerOptional
ID of associated workflow
valuedoubleOptional
Project value
sizedoubleOptional
Project size
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
primaryEmailstringOptionalformat: "email"
Primary contact email
primaryPhonestringOptional
Primary contact phone
contactslist of integersOptional

Contact IDs only (no name, email, phone, etc.). The contacts must be created first via POST /contacts. The first ID in the array is treated as the primary contact.

custommap from strings to anyOptional
Custom fields

Response

Matching project found
idintegerOptional
Unique identifier
createdAtstringOptionalformat: "date-time"
Creation timestamp
updatedAtstringOptionalformat: "date-time"
Timestamp of the most recent update to the record, including changes to its custom property values.
titlestringOptional

Record title/name

descriptionstring or nullOptional
Record description
addresslist of stringsOptional

Record location/address

isActivebooleanOptional
Whether the record is active
primaryEmailstring or nullOptionalformat: "email"
Primary contact email
primaryPhonestring or nullOptional
Primary contact phone
numberintegerOptional

Record number (e.g., 1234)

createdByobject or nullOptional

User who created the record. Null when the record was created by a non-user actor (e.g. automation or a contact).

updatedByobject or nullOptional

User who last edited a field on the record, derived from the changelog. Null when the record has never been edited or the last edit was made by a non-user actor.

custommap from strings to anyOptional
Custom fields
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.

Errors

400
Bad Request Error
401
Unauthorized Error