Save a questionnaire template as the Retraced admin
Changed onThe save behind the Retraced-admin template builder. The admin twin of PUT /api/questionnaires/:id/builder — same write, same service — but gated on admin:questionnaire:write, which only RETRACED_ADMIN holds. sections and questions are the complete desired content, not a patch: rows present are created or updated, rows absent are deleted along with their answers and comments. name and description are always written; status is not settable here and keeps its stored value. A template stores no deadline of its own, so dueDate is always written as null — send it as null or omit it. The questionnaire must belong to the calling company — another company's is indistinguishable from a missing one and answers 404 — and a Retraced-owned questionnaire may only be saved by a Retraced admin, which this guard already guarantees. templates names the surface, not a filter: no is_template predicate is applied, so any questionnaire the caller company owns can be saved here. Once answer requests exist, an existing question's title, type, mandatory flag and options are frozen; adding a new question instead reopens every request so it can be answered. Answers the saved questionnaire in the same shape as the template builder read.
Request
- Base URLhttps://api.retraced.com (the document declares no server; this is the origin it was published from)
- URLhttps://api.retraced.com/api/admin/questionnaires/templates/{id}
- Authnone declared
Path parameters
Request body
Response
Default Response
Changes
- info
the
//request property's maxLength was increased from500to1024 - info
the
//request property's maxLength was increased from64to1024
- info
- breaking
removed
subschema #1subschema #2from therequest propertyanyOflist - breaking
removed
subschema #1subschema #2from therequest propertyanyOflist - breaking
removed
subschema #1subschema #2from the//request propertyanyOflist - breaking
removed
subschema #1subschema #2from the//request propertyanyOflist - breaking
removed
subschema #1subschema #2from the//request propertyanyOflist - breaking
removed
subschema #1subschema #2from the//request propertyanyOflist - breaking
request property
//list-of-types was narrowed by removing typesstringfrom media typeapplication/json - breaking
added the pattern
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$to the request property - breaking
the
request property type changed from no type tostring - breaking
the
request property type changed from no type tostring, and format from no format todate-time - breaking
the
//request property type changed from no type tostring - breaking
the
//request property type changed from no type tostring - breaking
the
//request property type changed from no type tostring - breaking
the
//request property type changed from no type tostring - warning
the
//request property's maxLength was set to10000 - warning
the
//request property's maxLength was set to500 - info
the request property
became nullable - info
the request property
became nullable - info
the request property
//became nullable - info
the request property
//became nullable - info
the request property
//became nullable - info
the request property
//became nullable - info
the request property
//became nullable
- breaking