Deze referentie is alleen in het Engels. Naar het Nederlandse REST API-overzicht

Diese Referenz gibt es nur auf Englisch. Zur deutschen REST-API-Übersicht

Cette référence existe uniquement en anglais. Aller à la présentation de l'API REST en français

Esta referencia solo está en inglés. Ir a la introducción de la API REST en español

POST/sales-invoices/{sales_invoice}/actions/restore

Restore a deleted sales invoice

POSThttps://<your-url>/api/v2/sales-invoices/{sales_invoice}/actions/restore

MCP id sales-invoices.actions.restore

View as Markdown openapi.json

Clears the soft-delete marker and returns the invoice in the detail view.

Access

Token scope
api:write:sales_invoices

Without it: 403 insufficient-token-scope.

Permission
sales_invoices::create

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. A write costs the same whatever view you ask for.
Also
Accepts Idempotency-Key. 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

Restoring additionally requires sales_invoices::delete as well as sales_invoices::create. Restoring is not a full undo: deleting the invoice unlinked every worklog that had been settled against its rows and returned those hours to the uninvoiced pool, and restoring brings back the invoice and its rows but not those links, so the hours can be invoiced a second time unless you check them. Restoring an invoice that is not deleted succeeds and returns an already_in_target_state warning. The restore finds a deleted invoice on its own, so the trashed parameter is not accepted.

Path parameters

sales_invoiceinteger or stringRequired

The SalesInvoice's numeric id. Or its invoice_number, matching [A-Z]+-[0-9]{2}-[0-9]{5}|L-[0-9]+. Accepts a soft-deleted record.

Query parameters

Unknown parameters are refused with 400, naming the parameter.

viewstring

Which field set to render.

summarydetaildefault

Request headers

X-Request-Idstringpattern

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.

If-Matchstring

The ETag a write is conditional on. A stale validator is 412 precondition-failed.

Idempotency-Keystring≤ 255

A caller-chosen key that makes this POST safe to retry. Replaying it returns the original response with Idempotency-Replayed: true.

Response 200

Returns a SalesInvoice in the detail view.

Headers

ETag
A strong validator of exactly this representation.
Idempotency-Replayed
true when this response was replayed from a stored Idempotency-Key rather than produced by a new write.
RateLimit
The IETF httpapi-ratelimit-headers form 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

7 errors every operation can return: 400, 401, 404, 406, 429, 500, 503

This path allows POST. Anything else answers 405.