Create & Show Projects
Project parameters
Parameter | Description |
---|---|
ID |
Project ID |
Client-ID |
Client ID for project |
Name |
Project name |
Code |
Project code |
Active |
Whether the project is active or archived. Options: true , false . |
Billable |
Whether the project is billable or not billable. Options: true , false . |
Is-Fixed-Fee |
Whether the project type is fixed fee or not. Options: true , false . |
Fee |
Total project fee. Only present for fixed fee projects. |
Bill-By |
The method by which the project is invoiced. Options: Project , Tasks , People , or None . |
Hourly-Rate |
Rate for projects billed by Project Hourly Rate |
Budget-By |
The method by which the project is budgeted. Options: Project (Hours Per Project), Project_Cost (Total Project Fees), Task (Hours Per Task), Person (Hours Per Person), None (No Budget). |
Budget |
Budget value for the project. |
Notify-When-Over-Budget |
Option to send notification emails when a project reaches the budget threshold set in Over-Budget-Notification-Percentage Options: true , false . |
Over-Budget-Notification-Percentage |
Percentage value to trigger over budget email alerts. |
Over-Budget-Notified-At |
Date of last over budget notification. If none have been sent, this will be nil . |
Show-Budget-To-All |
Option to show project budget to all employees. Does not apply to Total Project Fee projects. Options: true , false . |
Created-At |
Date project was created. |
Updated-At |
Date project was last updated. |
Starts-On |
Start date of project. |
Ends-On |
End date of project. |
Hint-Earliest-Record-At |
Date of earliest record for this project. Updated every 24 hours. |
Hint-Latest-Record-At |
Date of most recent record for this project. Updated every 24 hours. |
Notes |
Project notes. |
Cost-Budget |
Budget value for Total Project Fees projects. |
Cost-Budget-Includes-Expenses |
Option for budget of Total Project Fees projects to include tracked expenses. |
Show a project
GET https://YOURACCOUNT.harvestapp.com/projects/{PROJECTID}
HTTP Response: 200 OK
Examples
<?xml version="1.0" encoding="UTF-8"?>
<project>
<id type="integer">3554414</id>
<client-id type="integer">3398386</client-id>
<name>Internal</name>
<code>Testing</code>
<active type="boolean">true</active>
<billable type="boolean">true</billable>
<is-fixed-fee type="boolean">true</is-fixed-fee>
<fee type="decimal">1000.0</fee>
<bill-by>People</bill-by>
<hourly-rate type="decimal">100.0</hourly-rate>
<budget type="decimal">100.0</budget>
<budget-by>project</budget-by>
<notify-when-over-budget type="boolean">true</notify-when-over-budget>
<over-budget-notification-percentage type="decimal">80.0</over-budget-notification-percentage>
<over-budget-notified-at nil="true"/>
<show-budget-to-all type="boolean">true</show-budget-to-all>
<created-at type="dateTime">2013-04-30T20:28:12Z</created-at>
<updated-at type="dateTime">2015-04-15T15:44:17Z</updated-at>
<starts-on type="date">2013-04-30</starts-on>
<ends-on type="date">2015-06-01</ends-on>
<estimate type="decimal">100.0</estimate>
<estimate-by>project</estimate-by>
<hint-earliest-record-at type="date">2013-04-30</hint-earliest-record-at>
<hint-latest-record-at type="date">2014-12-09</hint-latest-record-at>
<notes>Some project notes go here!</notes>
<cost-budget nil="true"/>
<cost-budget-include-expenses type="boolean">false</cost-budget-include-expenses>
</project>
{
"project": {
"id": 3554414,
"client_id": 3398386,
"name": "Internal",
"code": "Testing",
"active": true,
"billable": true,
"is_fixed_fee": true,
"fee": 1000,
"bill_by": "People",
"hourly_rate": 100,
"budget": 100,
"budget_by": "project",
"notify_when_over_budget": true,
"over_budget_notification_percentage": 80,
"over_budget_notified_at": null,
"show_budget_to_all": true,
"created_at": "2013-04-30T20:28:12Z",
"updated_at": "2015-04-15T15:44:17Z",
"starts_on": "2013-04-30",
"ends_on": "2015-06-01",
"estimate": 100,
"estimate_by": "project",
"hint_earliest_record_at": "2013-04-30",
"hint_latest_record_at": "2014-12-09",
"notes": "Some project notes go here!",
"cost_budget": null,
"cost_budget_include_expenses": false
}
}
Show all projects
GET https://YOURACCOUNT.harvestapp.com/projects
HTTP Response: 200 OK
Examples
<?xml version="1.0" encoding="UTF-8"?>
<projects type="array">
<project>
<id type="integer">3554414</id>
<client-id type="integer">3398386</client-id>
<name>Internal</name>
<code>Testing</code>
<active type="boolean">true</active>
<billable type="boolean">true</billable>
<is-fixed-fee type="boolean">true</is-fixed-fee>
<fee type="decimal">1000.0</fee>
<bill-by>People</bill-by>
<hourly-rate type="decimal">100.0</hourly-rate>
<budget type="decimal">100.0</budget>
<budget-by>project</budget-by>
<notify-when-over-budget type="boolean">true</notify-when-over-budget>
<over-budget-notification-percentage type="decimal">80.0</over-budget-notification-percentage>
<over-budget-notified-at nil="true"/>
<show-budget-to-all type="boolean">true</show-budget-to-all>
<created-at type="dateTime">2013-04-30T20:28:12Z</created-at>
<updated-at type="dateTime">2015-04-15T16:26:06Z</updated-at>
<starts-on type="date">2013-04-30</starts-on>
<ends-on type="date">2015-06-01</ends-on>
<estimate type="decimal">100.0</estimate>
<estimate-by>project</estimate-by>
<hint-earliest-record-at type="date">2013-04-30</hint-earliest-record-at>
<hint-latest-record-at type="date">2014-12-09</hint-latest-record-at>
<notes>Some project notes go here!</notes>
<cost-budget nil="true"/>
<cost-budget-include-expenses type="boolean">false</cost-budget-include-expenses>
</project>
</projects>
[
{
"project": {
"id": 3554414,
"client_id": 3398386,
"name": "Internal",
"code": "Testing",
"active": true,
"billable": true,
"is_fixed_fee": true,
"fee": 1000,
"bill_by": "People",
"hourly_rate": 100,
"budget": 100,
"budget_by": "project",
"notify_when_over_budget": true,
"over_budget_notification_percentage": 80,
"over_budget_notified_at": null,
"show_budget_to_all": true,
"created_at": "2013-04-30T20:28:12Z",
"updated_at": "2015-04-15T16:26:06Z",
"starts_on": "2013-04-30",
"ends_on": "2015-06-01",
"estimate": 100,
"estimate_by": "project",
"hint_earliest_record_at": "2013-04-30",
"hint_latest_record_at": "2014-12-09",
"notes": "Some project notes go here!",
"cost_budget": null,
"cost_budget_include_expenses": false
}
}
]
Filtering requests
Requests can be filtered by client_id
and updated_since
. For example:
-
GET
https://YOURACCOUNT.harvestapp.com/projects?client={CLIENTID}
-
GET
https://YOURACCOUNT.harvestapp.com/projects?updated_since=2015-03-25+18%3A30
These requests would only return projects for a specific client, or projects that have been updated since March 25th, 2015 at 18:30 UTC, respectively.
Create a new project
POST https://YOURACCOUNT.harvestapp.com/projects
HTTP Response: 201 Created
To create a new project, you’ll need to POST
the following at minimum:
Parameter | Description |
---|---|
Name |
Project name. |
Active |
If the project is active, or archived. Options: true , false . |
Bill-By |
How the project is billed. Options: Project , Tasks , People , or None . |
Client-ID |
A valid, and existing Client ID. |
Examples
<project>
<name>New Project</name>
<active type="boolean">true</active>
<client-id type="integer">3398386</client-id>
</project>
{
"project": {
"client_id": 3398386,
"name": "New Project",
"active": true
}
}
Additional Project functions
Update an existing project
PUT https://YOURACCOUNT.harvestapp.com/projects/{PROJECTID}
Post similar XML or JSON as with create a new project, but include client-id
as part of the project. For activating a project a separate method needs to be used.
(De)activate an existing Project
PUT https://YOURACCOUNT.harvestapp.com/projects/{PROJECTID}/toggle
Note: If your account is on the Free plan and reaches the two project limit, Harvest will return HTTP Response: 400 Bad Request
, with a Hint header.
Delete a project
DELETE https://YOURACCOUNT.harvestapp.com/projects/{PROJECTID}
If the project does not have any timesheet data tracked to it, it is deleted with HTTP Response: 200 OK
. If the project does have timesheet entries associated, the project is not deleted and HTTP Response: 400 Bad Request
is returned.