From 9f1e1bb1b0cb2bff8929f622073a23501f421ee2 Mon Sep 17 00:00:00 2001 From: Tom Elliott Date: Sat, 29 Aug 2026 13:55:57 -0500 Subject: [PATCH] Show the actual JSON the API returns for a refused delete The page said the sentence arrives "as the response body", which was true of the code at the time and is no longer: the router now sends every error message as a JSON object keyed on `error`, so a script reads `.error` rather than the raw text. Shown as a literal body rather than described, because the whole reason to document this is so somebody can write the parse. Co-Authored-By: Claude --- docs/kb/reference/referential-integrity.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/docs/kb/reference/referential-integrity.md b/docs/kb/reference/referential-integrity.md index 0357ba4..7e82c8a 100644 --- a/docs/kb/reference/referential-integrity.md +++ b/docs/kb/reference/referential-integrity.md @@ -134,10 +134,15 @@ changed** — a refused delete leaves the record and everything pointing at it exactly as they were. Over the API the same message comes back as **HTTP 409 Conflict**, with the -sentence as the response body. 409 rather than a generic error is -deliberate: it means the request itself was fine and will work once the -blocking record is dealt with, so a script can tell "fix this and retry" -apart from "this request was wrong". +sentence under `error` in the response body: + +```json +{"error": "Cannot delete this storage group because a location still refers to it. Reassign or remove it first."} +``` + +409 rather than a generic error is deliberate: it means the request itself +was fine and will work once the blocking record is dealt with, so a script +can tell "fix this and retry" apart from "this request was wrong". >[!note] >Occasionally the message is the database's own instead: