Delete Supplier Quote Attachment
Soft-delete an attachment from a SupplierQuote (Phase 4 follow-up).
Removes the given r2_key from :attr:SupplierQuote.attachment_r2_keys AND the parallel kind tag from :attr:SupplierQuote.attachment_kinds. The actual R2 object is left in place — the codebase's existing R2 retention posture is "everything is forever" (no lifecycle rules) and the audit-trail principle (plan decision D3) prefers append-only writes. An engineer can manually re-link the orphaned R2 key if a delete needs reversing.
Key-based addressing (vs index-based) makes the operation robust against racing admins: two admins viewing the same quote can each delete a different attachment without colliding on shifting indices. If the requested r2_key is not in the row's array, returns 404 — idempotent treatment (a retry after success is a no-op from the caller's POV).
Legacy rows where attachment_kinds is empty (pre-Phase-3) get the parallel array synthesized as ["quote"] * N BEFORE the delete, so the post-write parallel-array invariant holds.
Path parameters
Query parameters
Response
Successful Response
Changes
No recorded changes to this endpoint across all 1 revision of this API.