Appearance
Project
Allowed query parameters
Filters
| Filter | Type | Description |
|---|---|---|
search | String | Full-text search |
own | Boolean | Show only own projects (as project leader) |
involved | Boolean | Show only projects where user is involved |
assigned | Boolean | Show only projects assigned to the current user |
contact | Id | Filter by Contact Id |
is_archived | Boolean | Show archived projects (completed) |
is_internal | Boolean | Show only projects without billing |
with_billable_costs | Boolean | Show only projects with billable costs |
company | Id | Filter by Company Id |
billing_type | String | Filter by billing type (flat, hourly) |
status | String | Filter by status (active, completed) |
custom_field | Key,String | Filter by Custom Field (eg. my_internal_id,42) |
Sorting
name, created_at, starts_at, company, budget_used, billable_costs, last_time_tracked
Includes
company.media, owner.user, times.rate, unbilledTimes.rate, offers, approvedOffers, expenses, invoices, rates, timesCount, offersCount, invoicesCount, expensesCount, overdueInvoicesCount, assignedMembers.user.media
Create a project
post
/project
| Attribute (* required) | Type | Description |
|---|---|---|
name * | String | Project title |
description | String | Project description |
company_id * | String | A Company Id |
member_id * | String | A Member Id |
starts_at * | Date | Start date |
billing_type | String | Billing type (flat, hourly) |
costs_limit | Number | Cost limit for the project (minimum: 0) |
assigned_member_ids | Array | Array of Member IDs assigned to the project |
status | String | Status of project (active, completed, default: active) |
custom_fields | Object? | Custom data as Custom Fields |
Example response
json
// HTTP 201 Created
{
// a project object
}Update a project
put
/project/{id}
| Attribute (* required) | Type | Description |
|---|---|---|
name | String | Project title |
description | String | Project description |
company_id | String | A Company Id |
member_id | String | A Member Id |
starts_at | Date | Start date |
billing_type | String | Billing type (flat, hourly) |
costs_limit | Number | Cost limit for the project (minimum: 0) |
assigned_member_ids | Array | Array of Member IDs assigned to the project |
status | String | Status of project (active, completed) |
custom_fields | Object? | Custom data as Custom Fields |
Example response
json
// HTTP 200 OK
{
// a project object
}Retrieve a project
get
/project/{id}
Example response
json
// HTTP 200 OK
{
"id": "EO6YGvqMRV",
"name": "CMS Upgrade",
"description": null,
"starts_at": "2022-02-09T08:52:00.000000Z",
"due_at": null,
"billing_type": "flat",
"company_id": "PQYLdqm4wR",
"company": {
// a company object
},
"owner": {
// a member object
},
"involved_members": [
// an array of member objects with user data
],
"assigned_members": [
// an array of assigned member objects
],
"assigned_member_ids": [1, 2, 3],
"times": [
// an array of time objects
],
"invoices": [
// an array of invoice objects
],
"expenses": [
// an array of expense objects
],
"times_count": 45,
"invoices_count": 3,
"expenses_count": 12,
"status": "active",
"is_archived": false,
"is_ongoing": true,
"is_internal": false,
"costs_limit": 5000.0,
"custom_fields": {},
"created_at": "2021-12-09T09:05:28.000000Z",
"updated_at": "2022-02-09T08:52:00.000000Z"
}Delete a project
delete
/project/{id}
Example response
json
// HTTP 204 No ContentList projects
get
/project
The list endpoint accepts the same parameters as in Retrieve a project and returns a paginated array of the same project object in the data property.
Read more about Pagination, Filtering, Sorting and Includes on the Introduction page.
Merge a project
post
/project/{id}/merge
Merges a project into another active, top-level project of the same company. All related resources — offers, invoices, times, expenses, media and assigned members — are moved from the source project into the target project. The source project is then archived (status set to completed).
Required Permission
This endpoint requires the supervise project permission. Users without it receive a 403 Forbidden response.
The target must be a top-level project — a sub-project can never be a merge target.
| Attribute (* required) | Type | Description |
|---|---|---|
target_project_id * | String | A Project Id to merge into. Must be an active, top-level project of the same company (a sub-project cannot be a target) |
move_sub_projects | Boolean | Re-parent the source's sub-projects under the target. If omitted or false, the sub-projects are archived together with the source project (default: false) |
Example request
json
{
"target_project_id": "PQYLdqm4wR",
"move_sub_projects": true
}Example response
The target project is returned.
json
// HTTP 200 OK
{
// a project object
}