An OSS line keeps the destination country's VAT
Our OSS examples set percentage: 0, which drops the destination VAT from the breakdown. The API never required it. Check your regime_key: "17" lines.
This is a documentation fix, not an API change: nothing about the server's behaviour changed today. But the guides were telling you to build the wrong payload, so a line issued by following them came out wrong.
We said an OSS line had to carry exemption_reason: NO_SUJETA_LOCALIZACION and main_tax.percentage: 0, and that the API rejected the line without that reason. Neither was true. Worse, an exemption reason forces the rate to 0 %, so the destination country's VAT disappeared from the breakdown — the cookbook example billed 480 € to a German customer with 0 € of VAT instead of 91,20 €.
What else changed
- Leave
exemption_reasonunset on OSS lines.regime_key: "17"is what classifies the operation as N2; that has always been enough. Adding a reason forces the rate to 0 % and costs you the destination VAT in the breakdown. - Keep the destination rate on the line. The regime widens the accepted rates beyond the Spanish menu, so 19 % (Germany) or 22 % (Italy) are valid on a
"17"line and would be rejected anywhere else. - Two rows in the cross-field table had the sign flipped.
regime_key: "02"withoutEXENTA_ART_21is not "allowed but unusual" — it is rejected withREGIME_REQUIRES_INCOMPATIBLE_EXEMPTION. And"17"without an exemption reason is accepted, not rejected. - What to do. If you built your OSS flow from these pages, look at any invoice issued with
regime_key: "17": a 0 % line means the destination VAT was never charged, and that is a fiscal correction, not a display one.
Where to go next
chaining_hash leaves the documentation
`verifactu.chaining_hash` was declared but never sent, so it is being withdrawn. No response changes: the server behaves exactly as before.
Recurring templates: quarterly, yearly, and an invoice cap
Templates gain quarterly and yearly cadences, an end after `max_invoices`, a `completion` reason, `draft_in_advance`, and the amount of the next invoice on every row.