Lexware Office – Gotchas

Service ID: lexware-office

German SMB cloud accounting and invoicing platform by Haufe Group, formerly known as lexoffice.

⚠️

17 gotchas across 8 resources

These are connector-specific behaviors and limitations to be aware of when integrating.

Attachments2 gotchas

allattachmentsAll

Only bill is supported as a reference_type — the equivalent endpoint on invoices and credit notes exists but always errors. name, mime_type, size, description and the timestamp fields are always null: there is no metadata endpoint for a file, only a raw download, and this connector does not download file bytes just to populate a list response.

attachmentsOne (get single attachment) is unsupported — Lexware Office exposes no per-attachment read endpoint, only a bill's own list of file ids. Use attachmentsAll to list a bill's attachments and select the file you need by id.

uploadattachmentsUpload

Only bill is supported as a reference_type; uploading against invoice or credit-note errors. The upload response returns only the file's id — no name, size or mime_type is available anywhere for a file beyond its raw downloaded bytes.

allbillCreditNotesAll

This list always excludes overdue bill credit notes — the vendor's status filter rejects any request that combines an overdue filter with other statuses. This connector does not implement any filters on this resource (including filter[status]), so there is no way to request overdue bill credit notes on their own. An overdue bill credit note is still reachable via billCreditNotesOne by id. List entries do not include line items; use billCreditNotesOne to retrieve line_items.

A few fields read back differently between the list and get-one because the vendor's per-record endpoint returns less than its list: get-one populates supplier.id only (no display_name), and its balance is derived (0 once the credit is paid, otherwise the full total_amount) rather than the true unapplied amount — so for a partially-paid credit note the list balance (the vendor's real open amount) can differ from the get-one balance.

addbillCreditNotesAdd

Bill credit notes can only be created in a finalized state — status: "draft" is rejected with a 400 explaining the limitation, rather than silently creating a finalized record. Lexware Office's own create endpoint for this document type accepts only its finalized status value, with no draft option. status is fixed at creation and cannot be changed by a later update — the vendor rejects a status transition on update, so a status sent on update is ignored. There is no delete endpoint for this document type, so billCreditNotesDelete is not supported.

Amounts are stored in EUR only; a non-EUR currency is not persisted and reads back as EUR. Line items are stored at summary level — only total_amount, tax_amount, tax_rate and ledger_account are kept; description, quantity, unit_price and discount fields sent on a line are accepted but dropped.

Bills3 gotchas

allbillsAll

This list always excludes overdue bills — the vendor's status filter rejects any request that combines an overdue filter with other statuses. This connector does not implement any filters on this resource (including filter[status]), so there is no way to request overdue bills on their own. An overdue bill is still reachable via bills.one by id.

sub_total and total_tax are not returned on this list — the vendor's list endpoint is a lighter summary view than the get-by-id response. Fetch the bill by id for those fields.

addbillsAdd

Bills can only be created in a finalized state — status: "draft" is rejected with a 400 explaining the limitation, rather than silently creating a finalized bill. Lexware Office's own create endpoint for this document type accepts only its finalized status value, with no draft option.

onebillsOne

currency is always "EUR" on this get-by-id operation, regardless of the bill's actual currency — this endpoint does not return a currency field. currency is accurate on bills.list.

Credit Notes4 gotchas

allcreditNotesAll

This list always excludes overdue credit notes — the vendor's status filter rejects any request that combines an overdue filter with other statuses, and there is no unified filter[status] on this resource to request overdue credit notes on their own. An overdue credit note is still reachable via credit-notes.one by id.

sub_total and total_tax are not returned on this list — the vendor's list endpoint is a lighter summary view than the get-by-id response. Fetch the credit note by id for those fields.

addcreditNotesAdd

line_items[].discount_percentage is silently discarded on credit notes — the request returns 201, but the line is stored at full price with no discount applied. Apply the discount to unit_price directly instead.

onecreditNotesOne

balance reports the full gross amount for any credit note that is not yet fully paid, including one that is partially applied — the vendor's status field only distinguishes finalized from paid/paidoff, with no distinct partially-paid state and no applied/ remaining amount field. A fully paid credit note correctly reports balance as 0.

updatecreditNotesUpdate

Credit notes cannot be updated through this connector once created — there is no update operation for this resource. Credit notes can only be created and read.

Customers1 gotcha

allcustomersAll

The vendor emits a single, undifferentiated contact-change webhook event for both customers and suppliers, with no role information in the notification payload. Every such event is delivered as customer.updated, including a change to a vendor-only contact (no customer role at all) — there is currently no way to distinguish or subscribe to supplier-only contact changes separately.

Invoices3 gotchas

allinvoicesAll

status can disagree between this list and a single-record read (GET /accounting/invoices/{id}) for the same invoice at the same point in time — for example one endpoint reporting unpaid while the other reports authorised for an invoice that is open but not yet overdue. Prefer the single-record read as the source of truth for status when reconciling.

This list always excludes overdue invoices — the vendor's status filter rejects any request that combines an overdue filter with other statuses, and there is no unified filter[status] on this resource to request overdue invoices on their own. An overdue invoice is still reachable via invoices.one by id.

due_date, sub_total, total_tax and billing_address are not returned on this list — the vendor's list endpoint is a lighter summary view than the get-by-id response. Fetch the invoice by id for those fields.

oneinvoicesOne

balance reports the full gross amount for any invoice that is not yet fully paid, including one that is partially paid — the vendor's status field only distinguishes finalized from paid/paidoff, with no distinct partially-paid state and no applied/ remaining amount field. A fully paid invoice correctly reports balance as 0.

updateinvoicesUpdate

Invoices cannot be updated through this connector once created — there is no update operation for this resource. To correct a mistake on an issued invoice, create a credit note against it and issue a new, corrected invoice instead.

allledgerAccountsAll

Ledger accounts map to Lexware Office's posting categories, a small, fixed, vendor-managed reference list rather than a full chart of accounts. The list is read-only: individual accounts cannot be fetched by id, and none can be created, updated or deleted through this connector.

Suppliers1 gotcha

allsuppliersAll

The vendor emits a single, undifferentiated contact-change webhook event for both customers and suppliers, with no role information in the notification payload. Every such event is delivered as customer.updated, including a change to a vendor-only contact (no customer role at all) — there is currently no way to distinguish or subscribe to supplier-only contact changes separately.