Delete a sales invoice
DELETEhttps://
Soft-deletes an invoice: it is only marked deleted, and POST sales-invoices/{sales_invoice}/actions/restore reverses that.
Access
- Token scope
- api:
destroy: sales_invoices Without it:
403 insufficient-token-scope. - Permission
- sales_invoices::
delete Without it:
403 insufficient-permission. - Feature
- Needs the billing feature on your organisation.
Without it:
404 endpoint-not-found. - Rate cost
- 1 unit, write bucket.
- Also
- Accepts
If-Match. Never cached:private, no-store. Unknown query parameters are refused, never ignored.
Both are checked, scope first. A token never does more than its user. How access is checked
There is no permanent delete. A legacy invoice answers 409 state-conflict with reason locked_by_legacy, and an invoice that has already synced to the accounting system answers 409 with reason locked_by_sync: deleting it locally would leave the two systems silently out of step. Deleting an invoice releases its hours: every worklog settled against one of its rows is unlinked and returns to the uninvoiced pool, and restoring the invoice brings back its rows but not those links, so an integrator treating restore as an undo will invoice those hours twice. Deleting an already-deleted invoice answers 204, so a retry is safe.
Path parameters
Request headers
A correlation id of your own. It is recorded in our logs next to the server's request id but never returned: the response header always carries the server's id. A value that does not match the pattern is discarded silently, never rejected.
Response 204
Returns no content.
Headers
RateLimit- The IETF
httpapi-ratelimit-headersform of your remaining allowance on the tightest bucket this request touched. RateLimit-Policy- The ceiling and window of that bucket, as
<limit>;w=<seconds>. X-Request-Id- The server-generated ULID correlating this response with our logs.
Every response also carries Cache-Control, Vary, X-Content-Type-Options, X-Plnnrly-Api-Version, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Headers and versioning
Errors
409 Conflict.
412 Precondition failed.
7 errors every operation can return: 400, 401, 404, 406, 429, 500, 503
400 Bad request.
idempotency-key-requiredinvalid-cursorinvalid-query-parametermalformed-requestunsupported-parameter
401 Unauthenticated.
404 Not found.
406 Not acceptable.
429 Too many requests.
500 Server error.
503 Service unavailable.
This path allows GET, PATCH, DELETE. Anything else answers 405.
Something wrong or missing on this page? Tell us