L'objet Response renvoyé par fetch décrit la réponse HTTP : status et ok (vrai pour un statut 200 à 299), headers et le corps. Le corps se lit une seule fois par une méthode qui renvoie une promesse : json(), text() ou blob(). Il faut tester response.ok avant de lire les données.
Exemple
if (!r.ok) throw new Error(`HTTP ${r.status}`)
const data = await r.json()