API Documentation
Overview
Time Tracking
Extended REST API
Clients
Projects
Tasks
People
Expenses
Expense Tracking
User Assignment
Task Assignment
Reports
Invoices
Invoice Messages
Invoice Payments
Invoice Categories
Questions?
Email support@getharvest.com
Overview
Time Tracking
Extended REST API
Clients
Projects
Tasks
People
Expenses
Expense Tracking
User Assignment
Task Assignment
Reports
Invoices
Invoice Messages
Invoice Payments
Invoice Categories
Questions?
Email support@getharvest.com
Projects
Show a project
GET /projects/#{project_id}
HTTP Response: 200 Success
<project> <id type="integer">1</id> <name>SuprGlu</name> <!-- True if hours can be recorded against this project. False if project is archived/inactive --> <active type="boolean">true</active> <bill-by>none</bill-by> <client-id type="integer">2</client-id> <!-- Optional project code --> <code></code> <!-- Shows if the estimate provided by total project hours, by tasks, or none provided --> <estimate-by>none</estimate-by> <!-- Optional total estimate in hours --> <estimate></estimate> <!-- FOR FUTURE USE --> <fees></fees> </project>
Show all projects
GET /projects
HTTP Response: 200 Success
<projects> <project> <id type="integer">1</id> <name>SuprGlu</name> <!-- True if hours can be recorded against this project. False if project is archived/inactive --> <active type="boolean">true</active> <bill-by>none</bill-by> <client-id type="integer">2</client-id> <!-- Optional project code --> <code></code> <!-- Shows if the estimate provided by total project hours, by tasks, or none provided --> <estimate-by>none</estimate-by> <!-- Optional total estimate in hours --> <estimate></estimate> <!-- FOR FUTURE USE --> <fees></fees> </project> <project> ... </project> </projects>
Create new project
POST /projects
HTTP Response: 201 Created
Location: /projects/#{new_project_id}
You will have to post the following:
<project> <name>SuprGlu</name> <active type="boolean">true</active> <bill-by>none</bill-by> <!-- Valid and existing client id --> <client-id type="integer">2</client-id> <code></code> <estimate></estimate> <estimate-by>none</estimate-by> </project>
An error is returned if you've hit the limit in number of projects for the account's plan.
Update existing project
PUT /projects/#{project_id}
HTTP Response: 200 OK
Location: /projects/#{project_id}
Post similar XML 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
POST /projects/#{project_id}/toggle
HTTP Response: 200 Success
Location: /projects/#{project_id}
Note that if your account goes over the allowed project limit,
Harvest will return HTTP Response: 400 Bad Request,
with a Hint header.
Delete a project
DELETE /project/#{project_id}
If the project does not have any associated hours, it is deleted withHTTP Response: 200 OK.
If the project has hours, the project is note deleted and HTTP Response: 400 Bad Request is returned.