Project Profitability & Time Estimation
When creating or updating a project, the Profitability section controls how time and income are estimated. These settings are sent as part ofPOST /projects and PUT /projects/{project_id}.
Time estimation modes
Projects support three mutually exclusive time estimation modes. Only one should be active at a time.1. Total hours (default)
Send a singleestimated_time value (in hours). Do not set estimated_by_position or estimation_by_categories.
2. Estimation by positions
Setestimated_by_position: true and provide a users_positions array where each entry contains a unified position id and its estimated_time in hours.
estimated_by_position is false, you may still send users_positions with only the id field to associate positions to the project without per-position hour estimates.
On update (
PUT), positions that exist in the project but are absent from the users_positions array will have their estimated_hours set to 0. If no hours have been logged against them, they are soft-deleted.3. Estimation by categories
Setestimation_by_categories: 1 (or true) and provide a categories array with id and estimated_time.
Income types and ratecards
Theincome_type field determines how the project revenue is modeled:
When using
hourly_rate, set estimated_by_hourly_rates: true and assign a ratecard:
ratecard_id field is an alias for user_positions_header_id — either name is accepted, but ratecard_id takes precedence if both are sent. Use GET /ratecards to list available ratecards for your company.
Reading profitability data
When you fetch a single project withGET /projects/{project_id}, the response includes:

