These endpoints are RESTful. If there are no errors or warnings, you'll get a 404 because the requested resource (a file with the offending rows) does not exist.
If there are errors, you'll get a CSV response.
You'll know whether to check for warnings/errors from the response to status.json, i.e.
"numOfLeadsProcessed": 1, "numOfRowsFailed": 0, "numOfRowsWithWarning": 1, "message": "Import succeeded, 1 records imported (1 members), 1 warning."
Note the Bulk Import endpoint is generous with what it accepts without throwing exceptions (i.e. without generating an exception file). Don't expect that just because an import did not throw errors that all your data values entered the database. For example, a field that's blocked under Block Updates is not an exception. On the other hand, a malformed Email is a warning exception.
Thanks a lot for the response. If I understood you correctly, since my insertion was successful and no errors were returned, these endpoints are returning me a HTTP 404 for the given batchId since no error files are present. And thank you for the additional details. I will work on this and get back to you if I have further questions.
RESTful paths (Marketo doesn't always use them, but here they do) follow HTTP semantics. So an HTTP GET for a nonexistent resource path should return a 404. If it returned a 200 then that would misrepresent the fact that the resource does not exist.
Please mark my answer as Correct when you get a chance, thanks.