Projects 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

Example request in Postman

<?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

Example request in Postman

<?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

Example request in Postman

<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 Projects 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.