Skip to main content
POST
/
projects
curl --request POST \
  --url https://api.projectcor.com/v1/projects \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "name": "Website Redesign",
  "client_id": 10,
  "start": "2026-05-01",
  "estimated_time": 120,
  "income_type": "fee",
  "fee_id": 5,
  "currency_id": 1
}
'
{
  "id": 123,
  "name": "<string>",
  "brief": "<string>",
  "client_id": 123,
  "health": 1,
  "status": "active",
  "start": "2023-11-07T05:31:56Z",
  "end": "2023-11-07T05:31:56Z",
  "estimated_time": 123,
  "elapsed_time": 123,
  "profitability_now": 123,
  "estimated_profitability": 123,
  "archived": true,
  "billable": true,
  "income_type": "fee",
  "pm_id": 123,
  "created_by": 123,
  "company_id": 123,
  "template_id": 123,
  "brand_id": 123,
  "product_id": 123,
  "total_estimated": 123,
  "created_at": "2023-11-07T05:31:56Z",
  "updated_at": "2023-11-07T05:31:56Z",
  "labels": [
    123
  ],
  "client": {
    "id": 123,
    "name": "<string>",
    "client_status_id": 123
  },
  "pm": {
    "id": 123,
    "first_name": "<string>",
    "last_name": "<string>",
    "email": "<string>",
    "role_id": 123
  },
  "estimated_by_position": true,
  "estimation_by_categories": true,
  "estimated_by_hourly_rates": true,
  "user_positions_header_id": 123,
  "fee_id": 123,
  "contract_id": 123,
  "usersPositionsProject": [
    {
      "id": 123,
      "user_positions_unified_id": 123,
      "project_id": 123,
      "estimated_hours": 123,
      "hours_charged": 123,
      "total_cost": 123,
      "userPositionName": {
        "name": "<string>"
      }
    }
  ],
  "categoriesProject": [
    {
      "id": 123,
      "category_id": 123,
      "estimated_hours": 123,
      "hours_charged": 123,
      "total_cost": 123
    }
  ],
  "ratecard": {
    "id": 123,
    "name": "<string>",
    "original_name": "<string>",
    "percent": 123,
    "currency_id": 123,
    "linked_to_base_price": true
  }
}

Documentation Index

Fetch the complete documentation index at: https://developers.projectcor.com/llms.txt

Use this file to discover all available pages before exploring further.

Authorizations

Authorization
string
header
required

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

Body

application/json
name
string
required

Project Name

client_id
integer
required

Client ID

template_id
integer

Project Template 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

brand_id
integer

Brand ID

product_id
integer

Product 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

estimated_by_position
boolean
default:false

When true, time estimation is split per position via the users_positions array. Mutually exclusive with estimation_by_categories. When both are false (or omitted), the project uses a single total estimated_time value.

estimation_by_categories
default:false

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
default:false

When true, the project income is calculated from hourly rates using the assigned ratecard (ratecard_id / user_positions_header_id). Requires income_type to be "hourly_rate".

ratecard_id
integer

Ratecard ID to assign to the project. This is an alias for user_positions_header_id — if both are sent, ratecard_id takes precedence. Use Get Ratecards (GET /ratecards) to list available ratecards.

users_positions
object[]

Positions involved in the project. When estimated_by_position is true, each item should include estimated_time (hours). When false, send only the position id to associate positions without per-position hour estimates.

categories
object[]

Categories assigned to the project. When estimation_by_categories is truthy, each item should include estimated_time (hours). When falsy, send only the category id.

collaborators
integer[]

User IDs to add as project collaborators.

labels
integer[]

Label IDs to assign to the project. Maximum 50 labels.

Maximum array length: 50
teams
object[]
exchange
number

Exchange rate to apply when the 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 created 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

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