projects

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.

post/projects

Request

  • Base URL: https://api.coperniq.io/v1
  • URL: https://api.coperniq.io/v1/projects
  • Auth: API key in header x-api-key

Query parameters

allow_new_optionsboolean

Whether to allow creation of new dropdown options during record creation

match_by'title' | 'primaryEmail' | 'primaryPhone' | 'address'

Field to use for matching existing records

match_found_strategy'skip' | 'replace' | 'enrich'
  • skip: Return existing record without changes
  • replace: Replace existing record with new data
  • enrich: Update only empty fields in existing record

Strategy to use when a match is found

Request body

titlestring required

Project title/name

descriptionstring nullable

Project description

addressstring[] required

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

tradesTradeType[]

Array of trade types, defaults to 'Solar'

accountIdinteger

ID of associated account

workflowIdinteger

ID of associated workflow

valuenumber double

Project value

sizenumber double

Project size

status'ACTIVE' | 'ON_HOLD' | 'CANCELLED' | 'COMPLETED'

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
primaryEmailstring email

Primary contact email

primaryPhonestring

Primary contact phone

contactsinteger[]

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.

customobject

Custom fields

Response

Matching project found

idinteger

Unique identifier

createdAtstring date-time

Creation timestamp

updatedAtstring date-time

Timestamp of the most recent update to the record, including changes to its custom property values.

titlestring

Record title/name

descriptionstring nullable

Record description

addressstring[]

Record location/address

isActiveboolean

Whether the record is active

primaryEmailstring email nullable

Primary contact email

primaryPhonestring nullable

Primary contact phone

numberinteger

Record number (e.g., 1234)

customobject

Custom fields

tradesTradeType[]

Array of trade types

valuenumber double nullable

Project value

sizenumber double nullable

Project size

workflowIdinteger nullable

Associated workflow ID

accountIdinteger nullable

Associated account ID

status'ACTIVE' | 'ON_HOLD' | 'CANCELLED' | 'COMPLETED'

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
lineItemsUpdatedAtstring date-time nullable

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.

workflowNamestring

Name of the associated workflow.

Changes

No recorded changes to this operation across all 1 revision of this API.