A simplified invoice can no longer name an identified recipient
Creating or updating a SIMPLIFIED invoice whose recipient has a NIF or an alternative identifier now answers 400 SIMPLIFIED_INVOICE_FORBIDS_IDENTIFIED_RECIPIENT. Issue it as STANDARD.
BeeL. no longer issues a simplified invoice that names an identified recipient: an invoice that identifies its recipient is issued as a standard one, whatever the amount. A simplified invoice that named one used to be accepted, up to 3,000 €. It is now rejected on create and on update.
This is a BeeL. rule. A simplified invoice without an identified recipient, the ticket for a final consumer, works as before.
What breaks
- The trap: a
customer_idcounts too. The check runs on the resolved recipient, so aSIMPLIFIEDinvoice that points at a stored customer with a NIF is rejected, even if the body carries no NIF of its own. - Both writes are affected.
POSTa new invoice, orPATCHa draft, withtype: SIMPLIFIEDand a recipient carryingniforalternative_id:400 SIMPLIFIED_INVOICE_FORBIDS_IDENTIFIED_RECIPIENT, where it used to succeed. Sendtype: STANDARDwith the full recipient instead.
Does this affect you?
- Grep your client for
SIMPLIFIED. Any path that sets it and also sendsnif,alternative_idor acustomer_idfor a business customer needs to switch toSTANDARD.
What else changed
- The cap is unchanged: 3,000 € (VAT included) on a simplified invoice without an identified recipient, as before (
SIMPLIFIED_INVOICE_EXCEEDS_LEGAL_LIMIT). The RD 1619/2012 sets 400 € as the general limit (art. 4.1) and 3,000 € for the operations listed in its art. 4.2, such as retail and hospitality; which one applies depends on the issuer's activity. - Invoices generated from a Stripe connection are not affected. They follow the connection's own simplified threshold, as described in the Stripe guide.
- Correctives are not affected.
Endpoints
- POST/v1/companies/{company_id}/invoices400 SIMPLIFIED_INVOICE_FORBIDS_IDENTIFIED_RECIPIENT
- PATCH/v1/companies/{company_id}/invoices/{invoice_id}Same check on the resulting draft
Where to go next
A recurring template's history lists what did not happen too
The history now includes failed runs, skipped periods and pauses, each with a `type`. For those entries `invoice_id` is `null`.
Where the contract and the API disagreed, they now agree
A check of the published contract against the live API found a dozen differences. A few were fixed in the API, and the rest in the contract.