API Documentation

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

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>
  </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 logged by a user for a given timeframe

GET /people/#{user_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.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>
  </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 expense entries logged to a project for a given timeframe

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

HTTP Response: 200 Success
<?xml version="1.0" encoding="UTF-8"?>
<expenses>
  <expense>
    <expense-category-id type="integer">1</expense-category-id>
    <id type="integer">20</id>
    <notes>Purchase thank-you card for Harvest</notes>
    <project-id type="integer">53980</project-id>
    <spent-at type="date">2008-02-02</spent-at>
    <total-cost type="decimal">1.5</total-cost>
    <units type="decimal">1.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.


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
<?xml version="1.0" encoding="UTF-8"?>
<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.