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

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

Still have questions? We’re happy to help!

Contact Us