POST
/
timmi-project
/
api
/
v4
/
projects
Create a new Project
curl --request POST \
  --url https://{host}/timmi-project/api/v4/projects \
  --header 'Authorization: <authorization>' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "<string>",
  "code": "<string>",
  "clientId": 2,
  "ownerId": 2,
  "contractType": "nonBillable",
  "startsOn": null,
  "description": "",
  "initialDeliveryDate": null,
  "standardRateCardId": 2,
  "standardRateCard": {}
}'
{
  "id": 2,
  "name": "<string>",
  "code": "<string>",
  "client": {
    "id": 123,
    "name": "<string>",
    "code": "<string>",
    "externalCode": null
  },
  "owner": null,
  "status": "draft",
  "contractType": "nonBillable",
  "startsOn": null,
  "createdAt": "2023-11-07T05:31:56Z",
  "lastModifiedAt": "2023-11-07T05:31:56Z",
  "price": null,
  "authorizedActions": [
    "canEditAndDelete"
  ],
  "organizationId": 2,
  "description": "",
  "initialDeliveryDate": null,
  "revisedDeliveryDate": null,
  "launchedAt": null,
  "lastChargedOn": null,
  "standardRateCard": {
    "id": 2,
    "name": "<string>"
  },
  "initialTimeEstimate": null,
  "revisedTimeEstimate": null,
  "standardRate": null,
  "billRate": null,
  "initialBudget": null,
  "revisedBudget": null,
  "discount": null,
  "discountRate": null,
  "estimatedOverrun": null,
  "initialRecoveryRate": null,
  "estimatedRecoveryRate": null,
  "totalInvoiced": null,
  "risks": [
    {
      "type": "budgetOverRun",
      "label": "<string>"
    }
  ],
  "anomalies": [
    {
      "type": "noServices",
      "label": "<string>"
    }
  ],
  "invoicingWarnings": [
    {
      "type": "unapprovedItems",
      "applicableFrom": "2021-07-22",
      "preventsInvoicing": true,
      "label": "<string>"
    }
  ]
}

Headers

Authorization
string
required

API key. Value must be formatted like so: lucca application={api_key}.

Body

application/json

Definitions

Projects are the main resources in Lucca Project.

They belong to a single Client and 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.

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

name
string
required
Maximum length: 255
clientId
integer
required
Required range: x >= 1
standardRateCardId
integer
required
Required range: x >= 1
code
string | null

Defaults to an automatically generated value.

Maximum length: 255
ownerId
integer
Required range: x >= 1
contractType
enum<string>
default:nonBillable

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.
Available options:
nonBillable,
fixedPrice,
timeAndMaterials,
cappedTimeAndMaterials
startsOn
string<date> | null

Start of the project execution.

description
string | null
default:""

Optional markdown formatted description.

initialDeliveryDate
string<date> | null

Initially planned delivery date.

standardRateCard
object

Standard rate card version applicable for this project. Used for profit analysis.

Response

Created

Definitions

Projects are the main resources in Lucca Project.

They belong to a single Client and 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.

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

name
string
required
Maximum length: 255
id
integer
Required range: x >= 1
code
string | null

Defaults to an automatically generated value.

Maximum length: 255
client
object
owner
object | null

The user assigned as this project lead. Set through the ownerId field.

status
enum<string>
default:draft

Project is only available for time submission when having a "ongoing" status. Status can be updated through the "status-updates" API.

Available options:
draft,
ongoing,
completed,
cancelled,
suspended,
archived
contractType
enum<string>
default:nonBillable

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.
Available options:
nonBillable,
fixedPrice,
timeAndMaterials,
cappedTimeAndMaterials
startsOn
string<date> | null

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
object | null

Price of the project. Equal to the sum of this project's services prices. Represents an amount of money. Is a value object containing a decimal number and a currency.

authorizedActions
enum<string>[]

Actions the current user can do on the project.

organizationId
integer

Identifier of the organization this project belongs to. Inherited from the client.

Required range: x >= 1
description
string | null
default:""

Optional markdown formatted description.

initialDeliveryDate
string<date> | null

Initially planned delivery date.

revisedDeliveryDate
string<date> | null

Updated planned (or actual) delivery date.

launchedAt
string<date-time> | null

Timestamp of the project launch.

lastChargedOn
string<date> | null

Timestamp of the last time or expense allocated on the project.

standardRateCard
object

Standard rate card version applicable for this project. Used for profit analysis.

initialTimeEstimate
object | null

Initial estimate of the work duration needed to complete the project. Represents a duration in days or hours. ISO value is formatted as an ISO-8601 duration string. For example P5DT8H represents 128 hours. When sending a duration to the server, please only send either a value or an iso. In most cases, the unit is set on the project's organization and thus should not be sent in the request.

Examples:
{
"value": 128,
"iso": "P5DT8H",
"unit": "hour"
}
revisedTimeEstimate
object | null

Updated estimate of the work duration needed to complete the project. Can be modified through creating a new EstimateToComplete. Represents a duration in days or hours. ISO value is formatted as an ISO-8601 duration string. For example P5DT8H represents 128 hours. When sending a duration to the server, please only send either a value or an iso. In most cases, the unit is set on the project's organization and thus should not be sent in the request.

Examples:
{
"value": 128,
"iso": "P5DT8H",
"unit": "hour"
}
standardRate
object | null

Standard daily/hourly rate this project should be invoiced at. Equal to (price + discount) / initialTimeEstimate. Represents an amount of money per day or hour.

billRate
object | null

Actual daily/hourly rate this project will be invoiced at. Equal to price / initialTimeEstimate. Represents an amount of money per day or hour.

initialBudget
object | null

Sum of this project's services initial budgets. Represents an amount of money. Is a value object containing a decimal number and a currency.

revisedBudget
object | null

Sum of this project's services revised budgets. Represents an amount of money. Is a value object containing a decimal number and a currency.

discount
object | null

Sum of this project's services discounts. Represents an amount of money. Is a value object containing a decimal number and a currency.

discountRate
number | null
Must be a multiple of 0.1
estimatedOverrun
object | null

Difference between this project's initial budget and its revised budget. Represents the planned overrun upon completion. Represents an amount of money. Is a value object containing a decimal number and a currency.

initialRecoveryRate
number | null
estimatedRecoveryRate
number | null
totalInvoiced
object | null

Sum of all invoices issued for this project. Represents an amount of money. Is a value object containing a decimal number and a currency.

risks
object[]

List of risks this project is exposed to.

anomalies
object[]

List of anomalies this project is exposed to.

invoicingWarnings
object[]