So, I got in touch with the Support, and here is the situation:
“This behavior typically occurs because the AppSheet API acknowledges the receipt of a valid HTTP request and returns a 200 OK status code at the transport level, but the action itself fails during internal execution. Common reasons for this silent failure include row-level validation errors, security filter restrictions, missing required fields, or attempting to modify a row key that does not exist in the targeted table.”
I’m pretty sure everything was OK because I checked multiple times things, but I admit I may have been mistaken on some points.
Here is the very interesting thing to go beyond this:
"To resolve this issue and identify the exact cause of the failure, I recommend inspecting your AppSheet application’s Audit History. You can access this in the AppSheet editor by navigating to Manage, selecting Monitor, and opening Audit History. Locating the API call entry in this log will display the specific internal error details, such as validation failures or permission blocks, that prevented the action from applying to your data.
Additionally, you can update your Apps Script code to inspect the full JSON response body returned by the AppSheet API rather than relying solely on the HTTP status code. Parsing the JSON response will allow your script to catch application-level error messages returned in the payload, enabling you to add automated error handling for these scenarios."
When re-testing, it eventually worked, so I assume things got fixed in the meantime.
Here is what I made to track this further: a piece of code to check response if status is 200, to insert in your apps script requests:
let response = UrlFetchApp.fetch(url, options);
Logger.log("status: " + response.getResponseCode())
if (response.getResponseCode() == "200" && (response.getContentText() === "" || !response.getContentText())) {
throwError_appsheetAPI_200(response)
}
and the error function:
function throwError_appsheetAPI_200(response) {
//FOR DEBUGGING PURPOSE
const responseToString = response.toString()
const responseGetContent = response.getContent()
const responseGetResponseCode = response.getResponseCode()
const responsHeaders = response.getHeaders()
const responseGetContentText = response.getContentText()
const responseGetAllheaders = response.getAllHeaders()
throw Error("False '200' response: \nAppSheet did not perform the requested operation. "
+ "\n\nPlease check:"
+ "\n- data structure in argument (including key-column property)"
+ "\n- action name if used"
+ "\n\n Here is the full JSON response: "
+ "\n\n response.toString(): " + JSON.stringify(response.toString(), null, 2)
+ "\n\n response.getContent(): " + JSON.stringify(response.getContent(), null, 2)
+ "\n\n response.getResponseCode(): " + JSON.stringify(response.getResponseCode(), null, 2)
+ "\n\n response.getHeaders(): " + JSON.stringify(response.getHeaders(), null, 2)
+ "\n\n response.getContentText(): " + JSON.stringify(response.getContentText(), null, 2)
+ "\n\n response.getAllHeaders(): " + JSON.stringify(response.getAllHeaders(), null, 2))
}//function throwError_appsheetAPI_200(response){
Hope this helps!