Skip to main content
GET
/
timmi-project
/
api
/
v4
/
projects
/
{id}
Get Project by id
curl --request GET \
  --url https://{host}/timmi-project/api/v4/projects/{id} \
  --header 'Authorization: <authorization>'
import requests

url = "https://{host}/timmi-project/api/v4/projects/{id}"

headers = {"Authorization": "<authorization>"}

response = requests.get(url, headers=headers)

print(response.text)
const options = {method: 'GET', headers: {Authorization: '<authorization>'}};

fetch('https://{host}/timmi-project/api/v4/projects/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://{host}/timmi-project/api/v4/projects/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"net/http"
"io"
)

func main() {

url := "https://{host}/timmi-project/api/v4/projects/{id}"

req, _ := http.NewRequest("GET", url, nil)

req.Header.Add("Authorization", "<authorization>")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.get("https://{host}/timmi-project/api/v4/projects/{id}")
.header("Authorization", "<authorization>")
.asString();
require 'uri'
require 'net/http'

url = URI("https://{host}/timmi-project/api/v4/projects/{id}")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'

response = http.request(request)
puts response.read_body
{
  "name": "<string>",
  "id": 2,
  "code": "<string>",
  "client": {
    "id": 123,
    "name": "<string>",
    "code": "<string>",
    "externalCode": "<string>"
  },
  "owner": {
    "id": 2,
    "firstName": "<string>",
    "lastName": "<string>",
    "picture": {
      "href": "<string>"
    },
    "dtContractEnd": "2023-12-25",
    "establishmentId": 2
  },
  "status": "draft",
  "contractType": "nonBillable",
  "startsOn": "2023-12-25",
  "createdAt": "2023-11-07T05:31:56Z",
  "lastModifiedAt": "2023-11-07T05:31:56Z",
  "price": {
    "amount": 123
  },
  "authorizedActions": [],
  "organizationId": 2,
  "description": "",
  "initialDeliveryDate": "2023-12-25",
  "revisedDeliveryDate": "2023-12-25",
  "launchedAt": "2023-11-07T05:31:56Z",
  "lastChargedOn": "2023-12-25",
  "standardRateCard": {
    "id": 2,
    "name": "<string>"
  },
  "initialTimeEstimate": {
    "value": 128,
    "iso": "P5DT8H",
    "unit": "hour"
  },
  "revisedTimeEstimate": {
    "value": 128,
    "iso": "P5DT8H",
    "unit": "hour"
  },
  "standardRate": {
    "price": {
      "amount": 123
    }
  },
  "billRate": {
    "price": {
      "amount": 123
    }
  },
  "initialBudget": {
    "amount": 123
  },
  "revisedBudget": {
    "amount": 123
  },
  "discount": {
    "amount": 123
  },
  "discountRate": 123,
  "estimatedOverrun": {
    "amount": 123
  },
  "initialRecoveryRate": 123,
  "estimatedRecoveryRate": 123,
  "totalInvoiced": {
    "amount": 123
  },
  "risks": [
    {
      "label": "<string>"
    }
  ],
  "anomalies": [
    {
      "label": "<string>"
    }
  ],
  "invoicingWarnings": [
    {
      "applicableFrom": "2023-12-25",
      "preventsInvoicing": true,
      "label": "<string>"
    }
  ]
}
{
"type": "<string>",
"title": "<string>",
"traceId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"errors": {}
}
{
"type": "<string>",
"title": "<string>",
"traceId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"errors": {}
}
{
"type": "<string>",
"title": "<string>",
"traceId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"errors": {}
}
{
"type": "<string>",
"title": "<string>",
"traceId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"errors": {}
}

Headers

Authorization
string
required

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

Path Parameters

id
integer
required

Unique identifier of the project.

Response

OK

Definitions

Projects are the main resources in Lucca Project.

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

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 string length: 255
id
integer
read-only
Required range: x >= 1
code
string | null

Defaults to an automatically generated value.

Maximum string length: 255
client
object
read-only
owner
null | object
read-only

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

status
enum<string>
default:draft
read-only

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
null | string<date>

Start of the project execution.

createdAt
string<date-time>
read-only

Timestamp of the project creation.

lastModifiedAt
string<date-time>
read-only

Timestamp of the last update to the project.

price
null | Price · object

Price of the project. Equal to the sum of this project's services prices.

authorizedActions
enum<string>[]
read-only

Actions the current user can do on the project.

Available options:
canEditAndDelete,
canUpdateStatus
organizationId
integer
read-only

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

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

Optional markdown formatted description.

initialDeliveryDate
null | string<date>

Initially planned delivery date.

revisedDeliveryDate
null | string<date>
read-only

Updated planned (or actual) delivery date.

launchedAt
null | string<date-time>
read-only

Timestamp of the project launch.

lastChargedOn
null | string<date>
read-only

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

Initial estimate of the work duration needed to complete the project.

Example:
{
"value": 128,
"iso": "P5DT8H",
"unit": "hour"
}
revisedTimeEstimate
null | Duration · object

Updated estimate of the work duration needed to complete the project. Can be modified through creating a new EstimateToComplete [blocked].

Example:
{
"value": 128,
"iso": "P5DT8H",
"unit": "hour"
}
standardRate
null | PriceRate · object

Standard daily/hourly rate this project should be invoiced at. Equal to (price + discount) / initialTimeEstimate.

billRate
null | PriceRate · object

Actual daily/hourly rate this project will be invoiced at. Equal to price / initialTimeEstimate.

initialBudget
null | Price · object

Sum of this project's services initial budgets.

revisedBudget
null | Price · object

Sum of this project's services revised budgets.

discount
null | Price · object

Sum of this project's services discounts.

discountRate
null | number
read-only
Must be a multiple of 0.1
estimatedOverrun
null | Price · object

Difference between this project's initial budget and its revised budget. Represents the planned overrun upon completion.

initialRecoveryRate
null | number
read-only
estimatedRecoveryRate
null | number
read-only
totalInvoiced
null | Price · object

Sum of all invoices issued for this project.

risks
object[]
read-only

List of risks this project is exposed to.

anomalies
object[]
read-only

List of anomalies this project is exposed to.

invoicingWarnings
object[]
read-only