Expense Reporting

GET https://YOURACCOUNT.harvestapp.com/people/{USER_ID}/expenses?from=YYYYMMDD&to=YYYYMMDD

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

You can filter by is_closed status, for example to show only the expenses that have not yet been approved by an Administrator. Acceptable values are yes and no.

GET https://YOURACCOUNT.harvestapp.com/projects/{PROJECT_ID}/expenses?from=YYYYMMDD&to=YYYYMMDD&is_closed=no

You can also filter by updated_since. To show only the expenses that have been updated since “2015-09-25 18:30”, pass the UTC date time value (URL encoded).

GET https://YOURACCOUNT.harvestapp.com/projects/{PROJECT_ID}/expenses?from=YYYYMMDD&to=YYYYMMDD&updated_since=2015-09-25+18%3A30

HTTP Response: 200 OK

Examples

Example request in Postman

<?xml version="1.0" encoding="UTF-8"?>
<expenses type="array">
    <expense>
        <id type="integer">4</id>
        <total-cost type="decimal">100.0</total-cost>
        <units type="decimal">1.0</units>
        <created-at type="dateTime">2015-10-02T23:34:55Z</created-at>
        <updated-at type="dateTime">2015-10-02T23:34:55Z</updated-at>
        <project-id type="integer">24</project-id>
        <expense-category-id type="integer">2</expense-category-id>
        <user-id type="integer">1</user-id>
        <spent-at type="date">2015-10-02</spent-at>
        <is-closed type="boolean">false</is-closed>
        <notes>Some notes.</notes>
        <invoice-id type="integer">0</invoice-id>
        <billable type="boolean">true</billable>
        <company-id type="integer">1</company-id>
        <has-receipt type="boolean">false</has-receipt>
        <receipt-url></receipt-url>
        <is-locked type="boolean">false</is-locked>
        <locked-reason nil="true"/>
    </expense>
</expenses>
[
    {
        "expense": {
            "id": 4,
            "total_cost": 100,
            "units": 1,
            "created_at": "2015-10-02T23:34:55Z",
            "updated_at": "2015-10-02T23:34:55Z",
            "project_id": 24,
            "expense_category_id": 2,
            "user_id": 1,
            "spent_at": "2015-10-02",
            "is_closed": false,
            "notes": "Some notes.",
            "invoice_id": 0,
            "billable": true,
            "company_id": 1,
            "has_receipt": false,
            "receipt_url": "",
            "is_locked": false,
            "locked_reason": null
        }
    }
]

All project expense entries for timeframe

GET https://YOURACCOUNT.harvestapp.com/projects/{PROJECT_ID}/expenses?from=YYYYMMDD&to=YYYYMMDD

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

You can filter by is_closed, only_billed or only_unbilled status, for example to show only the expenses that have not yet been approved by an Administrator. Acceptable values are yes and no.

GET https://YOURACCOUNT.harvestapp.com/projects/{PROJECT_ID}/expenses?from=YYYYMMDD&to=YYYYMMDD&is_closed=no

GET https://YOURACCOUNT.harvestapp.com/projects/{PROJECT_ID}/expenses?from=YYYYMMDD&to=YYYYMMDD&only_billed=yes

Acceptable value for the only_billed parameter is yes. Anything else will be ignored.

GET https://YOURACCOUNT.harvestapp.com/projects/{PROJECT_ID}/expenses?from=YYYYMMDD&to=YYYYMMDD&only_unbilled=yes

Acceptable value for the only_unbilled parameter is yes. Anything else will be ignored.

You can also filter by updated_since. To show only the expenses that have been updated since “2010-09-25 18:30”, pass the UTC date time value (URL encoded).

GET https://YOURACCOUNT.harvestapp.com/projects/{PROJECT_ID}/expenses?from=YYYYMMDD&to=YYYYMMDD&updated_since=2010-09-25+18%3A30

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

HTTP Response: 200 OK

Examples

Example request in Postman

<?xml version="1.0" encoding="UTF-8"?>
<expenses type="array">
    <expense>
        <id type="integer">4</id>
        <total-cost type="decimal">100.0</total-cost>
        <units type="decimal">1.0</units>
        <created-at type="dateTime">2015-10-02T23:34:55Z</created-at>
        <updated-at type="dateTime">2015-10-02T23:48:34Z</updated-at>
        <project-id type="integer">13</project-id>
        <expense-category-id type="integer">2</expense-category-id>
        <user-id type="integer">1</user-id>
        <spent-at type="date">2015-10-02</spent-at>
        <is-closed type="boolean">false</is-closed>
        <notes>Some notes.</notes>
        <invoice-id type="integer">0</invoice-id>
        <billable type="boolean">true</billable>
        <company-id type="integer">1</company-id>
        <has-receipt type="boolean">false</has-receipt>
        <receipt-url></receipt-url>
        <is-locked type="boolean">false</is-locked>
        <locked-reason nil="true"/>
    </expense>
</expenses>
[
    {
        "expense": {
            "id": 4,
            "total_cost": 100,
            "units": 1,
            "created_at": "2015-10-02T23:34:55Z",
            "updated_at": "2015-10-02T23:48:34Z",
            "project_id": 13,
            "expense_category_id": 2,
            "user_id": 1,
            "spent_at": "2015-10-02",
            "is_closed": false,
            "notes": "Some notes.",
            "invoice_id": 0,
            "billable": true,
            "company_id": 1,
            "has_receipt": false,
            "receipt_url": "",
            "is_locked": false,
            "locked_reason": null
        }
    }
]

Still have questions? We’re happy to help!

Contact Us