Skip to main content
This page describes the current API, which is being replaced. New integrations should follow Upload invoices in the new API.
Uploading is quick. Processing and checking the invoice continue after the upload has answered.

Upload an invoice

You need an API key with Write access and your organization ID. See authentication. Send one primary file and any attachments as multipart/form-data:
The primary file can be a PDF, Peppol BIS Billing 3.0 XML, or Finvoice 3.0 XML. The answer is 201 Created with the new invoice_id and a Location header pointing to the invoice.

Poll the invoice

The answer has two statuses:
  • processing.status tells you whether the invoice has been read.
  • alerts.processing.status tells you whether it has been checked against your agreements.
Keep polling while either one is pending or processing. If the answer has a Retry-After header, wait that many seconds before the next request.
Only trust the alert result once alerts.processing.status is completed. If it is failed, the check is incomplete, even if some alerts were already found.

Duplicates

Uploading the same primary file again answers 409 Conflict with existing_invoice_id. Use that invoice instead of uploading again. If the original invoice was deleted, the file can’t be uploaded again until an administrator removes the original permanently.

Results can change later

A finished invoice can still change, for example when an agreement is edited or an alert is reviewed. If you need to stay up to date, fetch the invoice again on your own schedule.