Just letting everying one know who uses the API withe Google Apps Script, to now remove the .json from the destination link.
https://****.ap-southeast-2.manager.io/api/***** (no .json at the end)
Something changed in Manager.io on 12/06 and my script stop working. This is the fix and it worked for me. 
1 Like
Nice troubleshooting @Arthur_Szilagyi, and thanks for presenting your quick solution.
After testing on my end, it seems that the Manager.io API still requires .json
at the end of the endpoint to function properly.
Without the .json
extension, I either get an error or no response at all. So it looks like there hasn’t been any change to how the API endpoints work.
It’s possible that something else caused your script to stop working, but as of now, the .json
is still necessary.
Interesting… On my end, after years of working flawlessly with no changes, my Google Apps Script suddenly stopped sending data from Google Sheets to Manager.io. The error in the Google Apps Script execution log was:
Jun 13, 2025, 12:12:42 PM Error Exception: Request failed for https://****.ap-southeast-2.manager.io returned code 404
at sendDataToAPI(Code:198:28)
After some troubleshooting, I found that removing the .json
extension from the API URL resolved the issue — the script now works correctly without it. (With .json
still appended, it consistently fails with a 404.)
Here’s a snippet of my script in case you’d like to take a closer look or if it’s helpful for others:
var payloadString = JSON.stringify(payload);
var url = “https://*****.ap-southeast-2.manager.io/api/*************”;
var options = {
“method”: “post”,
“payload”: payloadString,
“followRedirects”: false,
“headers”: {
“Content-Type”: “application/json; charset=UTF-8”,
“Authorization”: "Basic " + Utilities.base64Encode(“user:password”),
},
“muteHttpExceptions”: false
};
var response = UrlFetchApp.fetch(url, options);
responseText = response.getContentText();
var statusColIndex = getColIndexByName(“Status”);
Logger.log("Status column index: " + statusColIndex);
if (response.getResponseCode() == 200) {
Logger.log("Data successfully sent: " + payloadString);
Logger.log("Response: " + responseText);
}
That’s because you are using POST.
Since POST doesn’t access an object, it doesn’t require an extension. In fact, it never did.
Maybe the old implementation used to ignore .json
when posting and now it became more literal when it comes to endpoints and so it throws an error.
POST and PUT requests can function properly with or without adding .json
to the endpoint.