Skip to main content
PUT
Update a project

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Path Parameters

project_id
integer
required

Body

Fields to update on a project. Include only the properties you want to change.

name
string

Project Name

client_id
integer

Client ID

brief
string

Project description or brief

start
string<date>

Project start date (YYYY-MM-DD)

end
string<date>

Project end date (YYYY-MM-DD)

pm_id
integer

Project Manager User ID

estimated_time
number

Estimated hours for the project

billable
boolean

Whether the project is billable

status
string

Project status

currency_id
integer

Currency ID

evaluation_date
string<date>

Project evaluation date (YYYY-MM-DD)

estimated
number

Estimated monetary value for the project

fee_id
integer

Fee ID

contract_id
integer

Contract ID

deliverables
string

Project deliverables description

work_order
string

Work order number or code

income_type
enum<string>

Income type for the project

Available options:
fee,
one_time,
hourly_rate,
contract
archived
boolean
default:false

Whether the project is archived

labels
(integer | object)[]

Label IDs to assign to the project. Omit this field entirely to leave existing labels unchanged. Send an empty array ([]) to remove all labels from the project. Each entry may be an integer ID or an object with an id property (for example [101, 102]). Maximum 50 labels. Use Get Categories and Labels with model=project (GET /categories/labels-model?model=project) to list project label objects for your company; use each label's id in this array.

Maximum array length: 50
estimated_by_position
boolean

When true, time estimation is split per position via the users_positions array. Mutually exclusive with estimation_by_categories.

estimation_by_categories

When truthy (true or 1), time estimation is split per category via the categories array. Mutually exclusive with estimated_by_position.

estimated_by_hourly_rates
boolean

When true, the project income is calculated from hourly rates using the assigned ratecard.

ratecard_id
integer

Ratecard ID. Alias for user_positions_header_id — if both are sent, ratecard_id takes precedence.

users_positions
object[]

Positions involved in the project with optional per-position hour estimates. Positions present in the project but absent from this array will have their estimated hours set to 0 (or be soft-deleted if no hours have been logged).

categories
object[]

Categories assigned to the project with optional per-category hour estimates.

exchange
number

Exchange rate when project currency differs from the company base currency.

currency_change_amount
number

Original estimated amount in the selected currency before exchange conversion.

Response

200 - application/json

Project updated successfully

id
integer

Unique project identifier

name
string

Project name

brief
string

Project brief/description

client_id
integer

Associated client ID

health
enum<integer>

Project health indicator: 1 (on track), 2 (at risk), 3 (delayed), 4 (critical)

Available options:
1,
2,
3,
4
status
enum<string>

Project status

Available options:
active,
finished,
suspended
start
string<date-time>

Project start date

end
string<date-time>

Project end date

estimated_time
number

Estimated hours for the project

elapsed_time
number

Hours already logged

profitability_now
number

Current profitability percentage

estimated_profitability
number

Estimated profitability percentage

archived
boolean

Whether the project is archived

billable
boolean

Whether the project is billable

income_type
enum<string>

Project billing type

Available options:
fee,
one_time,
hourly_rate,
contract
pm_id
integer

Project Manager user ID

created_by
integer

User ID who created the project

company_id
integer

Company ID

template_id
integer

Project template ID used

brand_id
integer

Associated brand ID

product_id
integer

Associated product ID

total_estimated
number

Total estimated budget

created_at
string<date-time>

Creation timestamp

updated_at
string<date-time>

Last update timestamp

labels
integer[]

IDs of labels assigned to this project. Resolve names and styling via Get Categories and Labels with model=project (GET /categories/labels-model?model=project), which returns label objects including the same id values.

client
object

Associated client object

pm
object

Project Manager details

estimated_by_position
boolean

Whether time estimation is split per position

estimation_by_categories

Whether time estimation is split per category

estimated_by_hourly_rates

Whether income is calculated from hourly rates using a ratecard

user_positions_header_id
integer | null

ID of the ratecard assigned to this project

fee_id
integer | null

Associated fee ID

contract_id
integer | null

Associated contract ID

usersPositionsProject
object[]

Positions assigned to the project with their estimated and logged hours. Only present when fetching a single project (GET /projects/{project_id}).

categoriesProject
object[]

Categories assigned to the project with their estimated and logged hours. Only present when fetching a single project.

ratecard
object | null

Ratecard assigned to this project. Only present when fetching a single project.