Если руками запрос почему-то отправить не получается(хотя по-хорошему надо разбиваться именно с этим), то можно перед отправкой подменить xmlhttp\fetch и получить ответ таким образом, условно:
function callback(response) {
console.log('response', response);
}
window.XMLHttpRequest.prototype.open = ((open) => function(method, url, async){
if (typeof url === 'string' && url.includes('site.ru/endpoint')) {
this.addEventListener('load', () => callback(JSON.parse(this.responseText)), {once: true});
}
return open.apply(this, arguments);
})(window.XMLHttpRequest.prototype.open);
window.fetch = ((fetch) => function(url, options){
const req = fetch.apply(this, arguments);
if (typeof url === 'string' && url.includes('site.ru/endpoint')) {
req.then(res => res.json()).then(callback);
}
return req;
})(window.fetch);