Factuarea APIDevelopers
Improved

Exemption cause coherence and recurring generation conflict

Three operations change: the invoice preview accepts an optional exemption_reason, saving or issuing an invoice with a VAT-free header cause and taxed lines answers 422 exemption_cause_contradicts_taxed_lines, and generating a recurring invoice can answer a retryable 409 recurring_presentation_activation_changed.

24 October 2026 — This release adds one field to the PDF template preview, one new 422 error to the invoice operations that save or issue a draft, and one new retryable 409 to the manual generation of a recurring invoice. No operation is added or removed.

Operations in this release

OperationoperationIdMCP toolWhat changes
POST /v1/companies/{company}/pdf-template-previewspublic-api.v1.pdf_template_previews.createpreview_pdf_templateNew optional field source.form.document.exemption_reason.
POST /v1/companies/{company}/recurring-invoices/{recurring_invoice}/generatepublic-api.v1.recurring_invoices.generategenerate_recurring_invoiceNew retryable 409 recurring_presentation_activation_changed.
PATCH /v1/companies/{company}/invoices/{invoice}public-api.v1.invoices.updateupdate_invoiceNew 422 exemption_cause_contradicts_taxed_lines.
POST /v1/companies/{company}/invoices/{invoice}/issuepublic-api.v1.invoices.issueissue_invoiceNew 422 exemption_cause_contradicts_taxed_lines.
POST /v1/companies/{company}/invoices/{invoice}/sendpublic-api.v1.invoices.sendsend_invoiceNew 422 exemption_cause_contradicts_taxed_lines when the send issues a draft.
POST /v1/companies/{company}/invoices/{invoice}/mark-sentpublic-api.v1.invoices.mark_sentmark_invoice_as_sentNew 422 exemption_cause_contradicts_taxed_lines when it issues a draft.

Preview with an exemption cause

source.form.document.exemption_reason is optional and only applies to document_type invoice. It is the exemption cause of the invoice header. The catalogue is published by GET /v1/tax-catalog.

  • Its legal mention opens the automatic legal mentions of the preview, exactly as it does when the invoice is saved.
  • Omitting it, or sending null, previews the invoice without a cause.
  • An unknown cause, or a cause sent on a quote, proforma or delivery note, is rejected.
  • The preview does not reject a cause that contradicts the VAT of the lines. Saving the invoice does, with the error below.

preview_pdf_template takes the same field in the same place.

New error: exemption_cause_contradicts_taxed_lines

A draft invoice whose header carries an exemption cause that declares the operation without VAT (the exemptions of articles 20 to 26 and 140 bis of the LIVA, non-subject operations and reverse charge) cannot have an operation line, other than a disbursement, with a VAT rate above zero.

The response is 422 with error.code business_rule_violation and error.subcode exemption_cause_contradicts_taxed_lines. param is lines.N.tax_rate and line_index names the line.

The v1 API does not accept the header cause when it creates or edits an invoice, but it does edit and issue drafts created in the application that keep it. That is where the error can appear: on PATCH /v1/companies/{company}/invoices/{invoice} and on the operations that issue a draft (issue, send and mark-sent). Documents already issued do not change.

What to do:

  1. Set the VAT of the line named in param to 0 %, or remove the exemption cause from the invoice.
  2. For a mixed invoice, with lines with and without VAT, do not use a header cause. Declare the exemption on each exempt line with lines[].exemption_reason.
  3. Repeat the request. Nothing was changed by the rejected one.

New retryable conflict: recurring_presentation_activation_changed

While POST /v1/companies/{company}/recurring-invoices/{recurring_invoice}/generate generates the invoice, the company can switch its presentation system on or off twice in a row. The operation then answers 409 recurring_presentation_activation_changed.

  • Nothing was written. No invoice was created and no occurrence was consumed.
  • Repeat the request. It is a retryable conflict, not a business-rule violation.
  • Idempotency. The response is not stored for replay: repeating the call with the same Idempotency-Key runs the generation again and does not duplicate the invoice.

generate_recurring_invoice returns the same error, so an assistant only has to call the tool again.

The table below lists the operations of this release.

On this page

Need a hand?Contact support