Replaced the separate POST .../returns and PUT .../returns/{returnId} endpoints with a single idempotent PUT /v10/external-return-portals/{publicId}/returns. The return is identified by the external rma (unique per portal); TRAEDE's numeric return ID is no longer needed to mutate a return.
The PUT merges the incoming lines against the existing return: a line keeps its TRAEDE line ID when it matches an existing line, new lines are created, and existing lines that are no longer present are deleted. See Line merge behavior.
Added writable labelless_code, track_trace and track_trace_link fields to the upsert payload. TRAEDE does not book return labels for external portals; the portal books them itself and reports these values back via the PUT so TRAEDE can surface them in the UI and on downstream documents.
The response from the upsert now has a stable whitelisted shape (see Response return object) and includes a top-level created flag.
The finalize endpoint is now keyed by the external rma in the request body: POST /v10/external-return-portals/{publicId}/returns/finalize with { "rma": "...", "total_price_after_vat": ... }.