---
title: "Create a new project"
method: POST
path: "/v1/spaces/{spaceId}/projects"
tags: ["Projects"]
---

# Create a new project

`POST /v1/spaces/{spaceId}/projects`

Creates a new project within a given space.

## Path parameters

- `spaceId` integer, required

## Headers

- `X-Org-Id` integer, required

## Request body

- ProjectCreateRequest — Request object for creating a new project
  - `name` string, required — Name of the project
  - `description` string — Description of the project
  - `isPublic` boolean — Indicates if the project is public
  - `startDate` string, date-time — Start date of the project
  - `dueDate` string, date-time — Due date of the project
  - `status` string — Status of the project
  - `priority` string — Priority of the project
  - `health` string — Health of the project
  - `projectTags` string[] — List of tags associated with the project
  - `contact` integer — Contact ID associated with the project
  - `actualStartDate` string, date-time — Actual start date of the project
  - `actualEndDate` string, date-time — Actual end date of the project
  - `allocatedBudget` number, double — Budget allocated for the project
  - `billableCost` number, double — Billable cost of the project so far
  - `nonBillableCost` number, double — Non-billable cost of the project so far
  - `actualCost` number, double — Actual cost of the project (billable + non-billable)
  - `projectType` string — Commercial model of the project. One of FIXED_FEE, TIME_AND_MATERIAL, RETAINER. Nullable for legacy/undecided projects.
  - `contractValue` number, double — Contract value for Fixed Fee projects (client-facing amount). Required semantically when projectType=FIXED_FEE.
  - `alertThresholdPercent` integer — Percentage of contract or NTE cap consumed at which the project is flagged AT_RISK. 1..100. Shared by FIXED_FEE (dollars) and TIME_AND_MATERIAL (hours).
  - `nteCapHours` integer — Not-to-exceed cap in milliseconds for Time & Material projects (matches actualHours unit). Required semantically when projectType=TIME_AND_MATERIAL.
  - `retainerBudgetPeriod` string — Retainer budget period. One of MONTHLY, QUARTERLY, ANNUALLY. Required semantically when projectType=RETAINER.
  - `retainerBudgetedHours` integer — Per-cycle hour budget in milliseconds for Retainer projects (matches actualHours unit). Required semantically when projectType=RETAINER.
  - `retainerFee` number, double — Per-cycle retainer fee in USD (base currency; converted at read). Required semantically when projectType=RETAINER.
  - `retainerCountHoursMode` string — Which time entries count toward the retainer hour bucket. One of BOTH, BILLABLE_ONLY, NON_BILLABLE_ONLY. Defaults to BOTH.
  - `retainerCountCostMode` string — Which time entries count toward the retainer cost total. One of BOTH, BILLABLE_ONLY, NON_BILLABLE_ONLY. Defaults to BOTH.
  - `retainerCycleAnchor` string, date — First day of the first retainer cycle in yyyy-MM-dd format. Falls back to project startDate, then createdTime, then today.

## Response `200`

OK

---

[API](https://skmtc.net/astravue/apis/astravue-api.md) · [All operations](https://skmtc.net/astravue/apis/astravue-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/astravue/astravue-api/revisions/2e610947dac4/schema)
