---
title: "Create a new Project"
method: POST
path: "/timmi-project/api/v4/projects"
tags: ["Projects"]
---

# Create a new Project

`POST /timmi-project/api/v4/projects`

Create a new Project

## Request body

- Project — ## Definitions Projects are the main resources in Lucca Project. They belong to a single [Client](reference/Timmi-Project.yaml/components/schemas/Client) and [Organization](reference/Timmi-Project.yaml/components/schemas/Organization). Internal (non-billable) projects may be attached to a client that represents your own company. Any billable project, whether fixed price or time and materials, must have a owner, start and end dates, and a contract: - A fixed price project must have prices set on its services. - A time and materials project must have bill rates set on its [services](reference/Timmi-Project.yaml/components/schemas/ProjectService). A Project is only available for time submission while on the **"ongoing"** status. Whenever a project is marked as complete or abandonned, all its services' estimates are adjusted to the actual spent value. A project must be valid (ie all required fields must be set) before its status can be set to "ongoing". Once ongoing, a project cannot go back to the "draft" status and can no longer be deleted. It may only be abandonned or complete. ## Fields
  - `id` integer
  - `name` string, required
  - `code` string, nullable — Defaults to an automatically generated value.
  - `clientId` integer, required
  - `client` object
    - `id` number
    - `name` string
    - `code` string
    - `externalCode` string, nullable
  - `ownerId` integer
  - `owner` object, nullable — The user assigned as this project lead. Set through the ownerId field.
    - `id` integer
    - `firstName` string
    - `lastName` string
    - `picture` object
      - `href` string, uri
    - `dtContractEnd` string, date
    - `establishmentId` integer
  - `status` 'draft' | 'ongoing' | 'completed' | 'cancelled' | 'suspended' | 'archived' — Project is only available for time submission when having a "ongoing" status. Status can be updated through the "status-updates" API.
  - `contractType` 'nonBillable' | 'fixedPrice' | 'timeAndMaterials' | 'cappedTimeAndMaterials' — Describes project contract types: - Non-billable (internal): no revenue recognized, budget estimates are optional. - Fixed price: progress-based revenue recognition, budget estimates are mandatory. - Time and Materials: time-based revenue recognition, initial estimates are indicative. - Not-to-exceed Time and Materials: time-based revenue recognition with a maximum value, initial estimate sets the maximum value.
  - `startsOn` string, date, nullable — Start of the project execution.
  - `createdAt` string, date-time — Timestamp of the project creation.
  - `lastModifiedAt` string, date-time — Timestamp of the last update to the project.
  - `price` Price — Represents an amount of money. Is a value object containing a decimal number and a currency.
    - `amount` number
    - `currencyId` 'EUR' | 'USD' | 'CAD' | '...'
  - `authorizedActions` string[] — Actions the current user can do on the project.
  - `organizationId` integer — Identifier of the organization this project belongs to. Inherited from the client.
  - `description` string, nullable — Optional markdown formatted description.
  - `initialDeliveryDate` string, date, nullable — Initially planned delivery date.
  - `revisedDeliveryDate` string, date, nullable — Updated planned (or actual) delivery date.
  - `launchedAt` string, date-time, nullable — Timestamp of the project launch.
  - `lastChargedOn` string, date, nullable — Timestamp of the last time or expense allocated on the project.
  - `standardRateCardId` integer, required
  - `standardRateCard` object — Standard rate card version applicable for this project. Used for profit analysis.
    - `id` integer
    - `name` string
  - `initialTimeEstimate` Duration
    - `iso` string, duration — ISO-8601 formatted duration.
    - `unit` 'day' | 'hour'
  - `revisedTimeEstimate` Duration
    - `iso` string, duration — ISO-8601 formatted duration.
    - `unit` 'day' | 'hour'
  - `standardRate` PriceRate — Represents an amount of money per day or hour.
    - `price` Price — Represents an amount of money. Is a value object containing a decimal number and a currency.
      - `amount` number
      - `currencyId` 'EUR' | 'USD' | 'CAD' | '...'
    - `unit` 'day' | 'hour' — Duration unit: days or hours.
  - `billRate` PriceRate — Represents an amount of money per day or hour.
    - `price` Price — Represents an amount of money. Is a value object containing a decimal number and a currency.
      - `amount` number
      - `currencyId` 'EUR' | 'USD' | 'CAD' | '...'
    - `unit` 'day' | 'hour' — Duration unit: days or hours.
  - `initialBudget` Price — Represents an amount of money. Is a value object containing a decimal number and a currency.
    - `amount` number
    - `currencyId` 'EUR' | 'USD' | 'CAD' | '...'
  - `revisedBudget` Price — Represents an amount of money. Is a value object containing a decimal number and a currency.
    - `amount` number
    - `currencyId` 'EUR' | 'USD' | 'CAD' | '...'
  - `discount` Price — Represents an amount of money. Is a value object containing a decimal number and a currency.
    - `amount` number
    - `currencyId` 'EUR' | 'USD' | 'CAD' | '...'
  - `discountRate` number, nullable
  - `estimatedOverrun` Price — Represents an amount of money. Is a value object containing a decimal number and a currency.
    - `amount` number
    - `currencyId` 'EUR' | 'USD' | 'CAD' | '...'
  - `initialRecoveryRate` number, nullable
  - `estimatedRecoveryRate` number, nullable
  - `totalInvoiced` Price — Represents an amount of money. Is a value object containing a decimal number and a currency.
    - `amount` number
    - `currencyId` 'EUR' | 'USD' | 'CAD' | '...'
  - `risks` object[] — List of risks this project is exposed to.
    - `type` 'budgetOverRun' | 'delayedDelivery' | 'highlyDiscounted' — List of all risks projects and tasks are exposed to: - **budgetOverRun**: total amount spent is greater than the inBudgetitial budget, or revised budget is greated than initial budget. - **delayedDelivery**: revised delivery date is later than initially planned or project is still ongoing but its revised delivery date is already passed. - **highlyDiscounted**: the discount amount is greater than the configured threshold.
    - `label` string
  - `anomalies` object[] — List of anomalies this project is exposed to.
    - `type` 'noServices' | 'missingOwner' | 'missingClient' | 'missingName' | 'missingCode' | 'missingStandardRateCard' | 'fixedPriceInvoicingMismatch' | 'budgetExceeded' | 'deliveryDateExceeded' | 'dueInvoiceMilestone' — List of all anomalies projects and tasks are exposed to: - **noServices**: - **missingOwner**: An owner is missing - **missingClient**: The project or the task has no Client - **missingName**: The name of the project/task is missing - **missingCode**: - **missingStandardRateCard**: - **fixedPriceInvoicingMismatch**: - **budgetExceeded**: - **deliveryDateExceeded**: - **dueInvoiceMilestone**:
    - `label` string
  - `invoicingWarnings` object[]
    - `type` 'unapprovedItems' | 'unconfirmedMilestone' | 'creditNote'
    - `applicableFrom` string, date
    - `preventsInvoicing` boolean
    - `label` string

## Response `201`

Created

- Project — ## Definitions Projects are the main resources in Lucca Project. They belong to a single [Client](reference/Timmi-Project.yaml/components/schemas/Client) and [Organization](reference/Timmi-Project.yaml/components/schemas/Organization). Internal (non-billable) projects may be attached to a client that represents your own company. Any billable project, whether fixed price or time and materials, must have a owner, start and end dates, and a contract: - A fixed price project must have prices set on its services. - A time and materials project must have bill rates set on its [services](reference/Timmi-Project.yaml/components/schemas/ProjectService). A Project is only available for time submission while on the **"ongoing"** status. Whenever a project is marked as complete or abandonned, all its services' estimates are adjusted to the actual spent value. A project must be valid (ie all required fields must be set) before its status can be set to "ongoing". Once ongoing, a project cannot go back to the "draft" status and can no longer be deleted. It may only be abandonned or complete. ## Fields
  - `id` integer
  - `name` string, required
  - `code` string, nullable — Defaults to an automatically generated value.
  - `clientId` integer, required
  - `client` object
    - `id` number
    - `name` string
    - `code` string
    - `externalCode` string, nullable
  - `ownerId` integer
  - `owner` object, nullable — The user assigned as this project lead. Set through the ownerId field.
    - `id` integer
    - `firstName` string
    - `lastName` string
    - `picture` object
      - `href` string, uri
    - `dtContractEnd` string, date
    - `establishmentId` integer
  - `status` 'draft' | 'ongoing' | 'completed' | 'cancelled' | 'suspended' | 'archived' — Project is only available for time submission when having a "ongoing" status. Status can be updated through the "status-updates" API.
  - `contractType` 'nonBillable' | 'fixedPrice' | 'timeAndMaterials' | 'cappedTimeAndMaterials' — Describes project contract types: - Non-billable (internal): no revenue recognized, budget estimates are optional. - Fixed price: progress-based revenue recognition, budget estimates are mandatory. - Time and Materials: time-based revenue recognition, initial estimates are indicative. - Not-to-exceed Time and Materials: time-based revenue recognition with a maximum value, initial estimate sets the maximum value.
  - `startsOn` string, date, nullable — Start of the project execution.
  - `createdAt` string, date-time — Timestamp of the project creation.
  - `lastModifiedAt` string, date-time — Timestamp of the last update to the project.
  - `price` Price — Represents an amount of money. Is a value object containing a decimal number and a currency.
    - `amount` number
    - `currencyId` 'EUR' | 'USD' | 'CAD' | '...'
  - `authorizedActions` string[] — Actions the current user can do on the project.
  - `organizationId` integer — Identifier of the organization this project belongs to. Inherited from the client.
  - `description` string, nullable — Optional markdown formatted description.
  - `initialDeliveryDate` string, date, nullable — Initially planned delivery date.
  - `revisedDeliveryDate` string, date, nullable — Updated planned (or actual) delivery date.
  - `launchedAt` string, date-time, nullable — Timestamp of the project launch.
  - `lastChargedOn` string, date, nullable — Timestamp of the last time or expense allocated on the project.
  - `standardRateCardId` integer, required
  - `standardRateCard` object — Standard rate card version applicable for this project. Used for profit analysis.
    - `id` integer
    - `name` string
  - `initialTimeEstimate` Duration
    - `iso` string, duration — ISO-8601 formatted duration.
    - `unit` 'day' | 'hour'
  - `revisedTimeEstimate` Duration
    - `iso` string, duration — ISO-8601 formatted duration.
    - `unit` 'day' | 'hour'
  - `standardRate` PriceRate — Represents an amount of money per day or hour.
    - `price` Price — Represents an amount of money. Is a value object containing a decimal number and a currency.
      - `amount` number
      - `currencyId` 'EUR' | 'USD' | 'CAD' | '...'
    - `unit` 'day' | 'hour' — Duration unit: days or hours.
  - `billRate` PriceRate — Represents an amount of money per day or hour.
    - `price` Price — Represents an amount of money. Is a value object containing a decimal number and a currency.
      - `amount` number
      - `currencyId` 'EUR' | 'USD' | 'CAD' | '...'
    - `unit` 'day' | 'hour' — Duration unit: days or hours.
  - `initialBudget` Price — Represents an amount of money. Is a value object containing a decimal number and a currency.
    - `amount` number
    - `currencyId` 'EUR' | 'USD' | 'CAD' | '...'
  - `revisedBudget` Price — Represents an amount of money. Is a value object containing a decimal number and a currency.
    - `amount` number
    - `currencyId` 'EUR' | 'USD' | 'CAD' | '...'
  - `discount` Price — Represents an amount of money. Is a value object containing a decimal number and a currency.
    - `amount` number
    - `currencyId` 'EUR' | 'USD' | 'CAD' | '...'
  - `discountRate` number, nullable
  - `estimatedOverrun` Price — Represents an amount of money. Is a value object containing a decimal number and a currency.
    - `amount` number
    - `currencyId` 'EUR' | 'USD' | 'CAD' | '...'
  - `initialRecoveryRate` number, nullable
  - `estimatedRecoveryRate` number, nullable
  - `totalInvoiced` Price — Represents an amount of money. Is a value object containing a decimal number and a currency.
    - `amount` number
    - `currencyId` 'EUR' | 'USD' | 'CAD' | '...'
  - `risks` object[] — List of risks this project is exposed to.
    - `type` 'budgetOverRun' | 'delayedDelivery' | 'highlyDiscounted' — List of all risks projects and tasks are exposed to: - **budgetOverRun**: total amount spent is greater than the inBudgetitial budget, or revised budget is greated than initial budget. - **delayedDelivery**: revised delivery date is later than initially planned or project is still ongoing but its revised delivery date is already passed. - **highlyDiscounted**: the discount amount is greater than the configured threshold.
    - `label` string
  - `anomalies` object[] — List of anomalies this project is exposed to.
    - `type` 'noServices' | 'missingOwner' | 'missingClient' | 'missingName' | 'missingCode' | 'missingStandardRateCard' | 'fixedPriceInvoicingMismatch' | 'budgetExceeded' | 'deliveryDateExceeded' | 'dueInvoiceMilestone' — List of all anomalies projects and tasks are exposed to: - **noServices**: - **missingOwner**: An owner is missing - **missingClient**: The project or the task has no Client - **missingName**: The name of the project/task is missing - **missingCode**: - **missingStandardRateCard**: - **fixedPriceInvoicingMismatch**: - **budgetExceeded**: - **deliveryDateExceeded**: - **dueInvoiceMilestone**:
    - `label` string
  - `invoicingWarnings` object[]
    - `type` 'unapprovedItems' | 'unconfirmedMilestone' | 'creditNote'
    - `applicableFrom` string, date
    - `preventsInvoicing` boolean
    - `label` string

## Other responses

- `400` — Problem
- `401` — Problem
- `403` — Problem
- `500` — Problem

---

[API](https://skmtc.net/luccasoftware/apis/lucca-expenses.md) · [All operations](https://skmtc.net/luccasoftware/apis/lucca-expenses/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/luccasoftware/lucca-expenses/revisions/110f9897756c/schema)
