The ESP32-OTA-Pull library defines the following error codes in its ErrorCode enum (returned by CheckForOTAUpdate()): UPDATE_AVAILABLE (-3) An update matching your board/device/config was found in the JSON, but you passed DONT_DO_UPDATE so no firmware download was performed. NO_UPDATE_PROFILE_FOUND (-2) No entry in the JSON’s Configurations array matched your board, device, or config strings. NO_UPDATE_AVAILABLE (-1) A matching profile was found, but its "Version" wasn’t newer than your current version (and downgrades weren’t allowed). UPDATE_OK (0) The update was downloaded, written to flash successfully, and (if not suppressed) the ESP32 was restarted. HTTP_FAILED (1) The HTTP GET for either the JSON descriptor or the binary returned a non-positive code (e.g. couldn’t connect). WRITE_ERROR (2) A mismatch occurred between bytes read from the server and bytes written to flash during the OTA process. JSON_PROBLEM (3) The library failed to parse the JSON descriptor you provided (malformed or too large). OTA_UPDATE_FAIL (4) The actual OTA sequence (calling Update.begin() or Update.write()) failed before completion. Additionally, if the JSON download returns a positive HTTP status other than 200 (for example 404 or 500), CheckForOTAUpdate() will return that raw HTTP code instead of one of the above