The contract stops declaring what the server never sends
Several responses and one header were documented but never produced. They are gone from the contract, so a generated client no longer waits for them. Nothing about the server changes: it never sent them.
Several responses and one header were documented but never produced. They are gone from the contract, so a generated client no longer waits for them. Nothing about the server changes: it never sent them.
What else changed
X-Bulk-Failuresis no longer documented onPOST /v1/invoices/bulk/pdforPOST /v1/companies/{company_id}/invoices/pdf-archive. It never travelled: partial failures are reported in the response body, as they always were. If you read that header, you have been readingnullall along.- Response codes that no operation could return are withdrawn — the
409ofPOST /v1/invoices/{invoice_id}/corrective, the400ofconvert-to-invoice, and the error detail shapes documented forimport-csv-previewthat the server does not build. Every code an operation can answer stays declared,429and500included. POST /v1/webhooks/{webhook_id}/teststops documenting a parameter it does not read.- Nothing here changes behaviour: no status code, body or header that you receive today is affected. What changes is that a client generated from the spec no longer has dead branches for responses that never arrive.
Endpoints
- POST/v1/invoices/bulk/pdfX-Bulk-Failures header withdrawn from the contract; failures are in the body
- POST/v1/companies/{company_id}/invoices/pdf-archiveX-Bulk-Failures header withdrawn from the contract; failures are in the body
- POST/v1/invoices/{invoice_id}/corrective409 withdrawn: the operation does not answer it
- POST/v1/webhooks/{webhook_id}/testUndocumented parameter withdrawn
A lost update now answers 409 instead of overwriting or failing opaquely
When two updates to the same resource overlap, the one that arrives second answers `409 CONCURRENT_MODIFICATION` instead of silently discarding the other's change or surfacing an internal error. Re-read the resource and retry.
Tax breakdowns, series numbering and recurring schedules say what they mean
Breakdowns travel complete and their bases add up to the invoice base. Series publish the number they will actually assign next. Recurring invoices declare `frequency` in the request. A submission that was never sent is now `NOT_SUBMITTED` rather than absent.