API Documentation

Overview
Time Tracking

Extended REST API
Clients
Client Contacts
Projects
Tasks
People
Expenses
Expense Tracking
User Assignment
Task Assignment
Reports
Invoices
Invoice Messages
Invoice Payments
Invoice Categories


Questions? Contact support

Reporting

Harvest provides a powerful reporting interface along with CSV and QuickBooks export. If you need to get raw data in a scriptable manner, Harvest provides direct XML export through the Reporting API. You can import XML data into other systems or create your own custom reporting interfaces on top of your Harvest account's data.


Get all time entries logged to a project for a given timeframe

GET /projects/#{project_id}/entries?from=YYYYMMDD&to=YYYYMMDD

HTTP Response: 200 Success
<?xml version="1.0\" encoding="UTF-8\"?>
<day-entries>
  <day-entry>
    <hours type="decimal">0.3</hours>
    <id type="integer">755730</id>
    <notes>Follow up with Danny</notes>
    <project-id type="integer">4234</project-id>
    <spent-at type="date">2007-11-15</spent-at>
    <task-id type="integer">1</task-id>
    <user-id type="integer">5</user-id>
    <!-- was this record invoiced, or marked as invoiced -->
    <is-billed type="boolean">false</is-billed>
    <!-- was this record approved or not (for accounts with approval feature) -->
    <is-closed type="boolean">false</is-closed>
    <created_at type="datetime">Wed, 18 Oct 2006 09:53:06 -0000</created_at>
  </day-entry>
  <day-entry>
    ...
  </day-entry>
  ...
</day-entries>

This call requires parameters (from and to) to describe the timeframe to use for a report.

Get all time entries by the current user logged to a project for a given timeframe

GET /projects/#{project_id}/entries?from=YYYYMMDD&to=YYYYMMDD&user_id=#{user_id}

This call requires parameters (from, to) to describe the timeframe to use for a report. This method can be used to view your own entries on a specific project.


Get all time entries logged by a user for a given timeframe

GET /people/#{user_id}/entries?from=YYYYMMDD&to=YYYYMMDD

HTTP Response: 200 Success
<day-entries>
  <day-entry>
    <hours type="decimal">0.2</hours>
    <id type="integer">755689</id>
    <notes></notes>
    <project-id type="integer">2</project-id>
    <spent-at type="date">2007-11-19</spent-at>
    <task-id type="integer">2</task-id>
    <user-id type="integer">1</user-id>
    <!-- was this record invoiced, or marked as invoiced -->
    <is-billed type="boolean">false</is-billed>
    <!-- was this record approved or not (for accounts with approval feature) -->
    <is-closed type="boolean">false</is-closed>
    <created_at type="datetime">Wed, 18 Oct 2006 09:53:06 -0000</created_at>
  </day-entry>
  <day-entry>
   ...
  </day-entry>
  ...
<day-entries>

This call requires parameters (from and to) to describe the timeframe to use for a report.

Get all your time entries from a project and a given timeframe

GET /people/#{user_id}/entries?from=YYYYMMDD&to=YYYYMMDD&project_id=#{project_id}

HTTP Response: 200 Success

This call requires parameters (from, to and project_id) and it will return results .


Get all expense entries logged by a user for a given timeframe

GET /people/#{user_id}/expenses?from=YYYYMMDD&to=YYYYMMDD

HTTP Response: 200 Success
<expenses>
  <expense>
    <expense-category-id type="integer">50543</expense-category-id>
    <id type="integer">11</id>
    <notes>Drive to pick up office supplies</notes>
    <project-id type="integer">19034</project-id>
    <spent-at type="date">2008-01-23</spent-at>
    <total-cost type="decimal">4.85</total-cost>
    <units type="decimal">10.0</units>
    <user-id type="integer">12334</user-id>
  </expense>
  <expense>
   ...
  </expense>
  ...
<expenses>

This call requires parameters (from and to) to describe the timeframe to use for a report.


In conjunction with the reporting calls, you may wish to retrieve all users projects expense categories tasks and to convert numeric IDs to users, projects, tasks, and expense categories.