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 \n Product,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
.