Show Recently Created Invoices

GET https://YOURACCOUNT.harvestapp.com/invoices

HTTP Response: 200 OK

Example request in Postman

<?xml version="1.0" encoding="UTF-8"?>
<invoices type="array">
    <invoice>
        <id type="integer">6763297</id>
        <client-id type="integer">1929151</client-id>
        <period-start type="date" nil="true"/>
        <period-end type="date" nil="true"/>
        <number>1</number>
        <issued-at type="date">2015-04-22</issued-at>
        <due-at type="date">2015-04-22</due-at>
        <amount type="decimal">100.0</amount>
        <currency>United States Dollar - USD</currency>
        <state>open</state>
        <notes>Some notes go here.</notes>
        <purchase-order></purchase-order>
        <due-amount type="decimal">100.0</due-amount>
        <due-at-human-format>upon receipt</due-at-human-format>
        <created-at type="dateTime">2015-04-21T18:41:58Z</created-at>
        <updated-at type="dateTime">2015-04-21T18:42:02Z</updated-at>
        <tax type="decimal" nil="true"/>
        <tax-amount type="decimal">0.0</tax-amount>
        <subject></subject>
        <recurring-invoice-id type="integer" nil="true"/>
        <tax2 type="decimal" nil="true"/>
        <tax2-amount type="decimal">0.0</tax2-amount>
        <client-key>43d9342a017e262c33a395ef3b9dca294f736792</client-key>
        <estimate-id type="integer" nil="true"/>
        <discount type="decimal" nil="true"/>
        <discount-amount type="decimal">0.0</discount-amount>
        <retainer-id type="integer" nil="true"/>
        <created-by-id type="integer">508343</created-by-id>
        <client-name>Your Client!</client-name>
    </invoice>
</invoices>
[
    {
        "invoices": {
            "id": 6763297,
            "client_id": 1929151,
            "period_start": null,
            "period_end": null,
            "number": "1",
            "issued_at": "2015-04-22",
            "due_at": "2015-04-22",
            "amount": 100,
            "currency": "United States Dollar - USD",
            "state": "open",
            "notes": "Some notes go here.",
            "purchase_order": "",
            "due_amount": 100,
            "due_at_human_format": "upon receipt",
            "created_at": "2015-04-21T18:41:58Z",
            "updated_at": "2015-04-21T18:42:02Z",
            "tax": null,
            "tax_amount": 0,
            "subject": "",
            "recurring_invoice_id": null,
            "tax2": null,
            "tax2_amount": 0,
            "client_key": "43d9342a017e262c33a395ef3b9dca294f736792",
            "estimate_id": null,
            "discount": null,
            "discount_amount": 0,
            "retainer_id": null,
            "created_by_id": 508343,
            "client_name": "Your Client!"
        }
    }
]
  • The state attribute may be open for unpaid, sent invoices (either current or past due), draft, partial for invoices with partial payments, paid for paid in full invoices, or closed for written off invoices.

  • For performance reasons line item data is not shown for this call, you’ll have to use a more specific API call.

  • By default Harvest will display 50 records per page. You can get further pages by passing in a page parameter. Please note that the first page of records is numbered 1 – page 0 does not exist.

GET https://YOURACCOUNT.harvestapp.com/invoices?page=2

  • You can also query invoices by timeframe (date created) based on issue date.

GET https://YOURACCOUNT.harvestapp.com/invoices?from=YYYYMMDD&to=YYYYMMDD

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

GET https://YOURACCOUNT.harvestapp.com/invoices?updated_since=2010-09-25+18%3A30

  • Filtering by invoice state [open, partial, draft, paid, unpaid, pastdue] is also possible, for example this would return partially paid invoices:

GET https://YOURACCOUNT.harvestapp.com/invoices?status=partial

  • You can also filter by client. For example, to show only the invoices belonging to a client with the id 23445

GET https://YOURACCOUNT.harvestapp.com/invoices?client=23445

  • Each of the filters above can be combined, allowing for more powerful queries.

Show A Single Invoice

GET https://YOURACCOUNT.harvestapp.com/invoices/{INVOICEID}

HTTP Response: 200 OK

Example request in Postman

<?xml version="1.0" encoding="UTF-8"?>
<invoice>
    <id type="integer">6763297</id>
    <client-id type="integer">1929151</client-id>
    <period-start type="date" nil="true"/>
    <period-end type="date" nil="true"/>
    <number>1</number>
    <issued-at type="date">2015-04-22</issued-at>
    <due-at type="date">2015-04-22</due-at>
    <amount type="decimal">100.0</amount>
    <currency>United States Dollar - USD</currency>
    <state>open</state>
    <notes></notes>
    <purchase-order></purchase-order>
    <due-amount type="decimal">100.0</due-amount>
    <due-at-human-format>upon receipt</due-at-human-format>
    <created-at type="dateTime">2015-04-21T18:41:58Z</created-at>
    <updated-at type="dateTime">2015-04-21T18:42:02Z</updated-at>
    <tax type="decimal" nil="true"/>
    <tax-amount type="decimal">0.0</tax-amount>
    <subject></subject>
    <recurring-invoice-id type="integer" nil="true"/>
    <tax2 type="decimal" nil="true"/>
    <tax2-amount type="decimal">0.0</tax2-amount>
    <client-key>43d9342a017e262c33a395ef3b9dca294f736792</client-key>
    <estimate-id type="integer" nil="true"/>
    <discount type="decimal" nil="true"/>
    <discount-amount type="decimal">0.0</discount-amount>
    <retainer-id type="integer" nil="true"/>
    <created-by-id type="integer">508343</created-by-id>
    <csv-line-items>kind,description,quantity,unit_price,amount,taxed,taxed2,project_id
Product,A description,1.00,100.00,100.0,false,false,
</csv-line-items>
</invoice>
{
    "invoice": {
        "id": 6763297,
        "client_id": 1929151,
        "period_start": null,
        "period_end": null,
        "number": "1",
        "issued_at": "2015-04-22",
        "due_at": "2015-04-22",
        "amount": 100,
        "currency": "United States Dollar - USD",
        "state": "open",
        "notes": "",
        "purchase_order": "",
        "due_amount": 100,
        "due_at_human_format": "upon receipt",
        "created_at": "2015-04-21T18:41:58Z",
        "updated_at": "2015-04-21T18:42:02Z",
        "tax": null,
        "tax_amount": 0,
        "subject": "",
        "recurring_invoice_id": null,
        "tax2": null,
        "tax2_amount": 0,
        "client_key": "43d9342a017e262c33a395ef3b9dca294f736792",
        "estimate_id": null,
        "discount": null,
        "discount_amount": 0,
        "retainer_id": null,
        "created_by_id": 508343,
        "csv_line_items": "kind,description,quantity,unit_price,amount,taxed,taxed2,project_id\nProduct,A description,1.00,100.00,100.0,false,false,\n"
    }
}

Client Dashboard

You can build a URL to the public web invoice view using the client-key attribute:

https://YOURACCOUNT.harvestapp.com/client/invoices/{CLIENTKEY}

Update Existing Invoice

PUT https://YOURACCOUNT.harvestapp.com/invoices/{INVOICEID}

After a successful request, we’ll return HTTP Response: 200 OK, in addition to LOCATION: /invoices/{INVOICEID}.

With this request, you can update any of the user-editable fields of an invoice.

Delete Existing Invoice

DELETE https://YOURACCOUNT.harvestapp.com/invoices/{INVOICEID}

After a successful request, we’ll return HTTP Response: 200 OK.