Because there's generally only a need for one "OK" code, but lots of "ERROR" codes. So when cast to boolean you've got just OK or ERROR, but if you want more detail about the error, the information's there as an int.
And extrapolating from this, the most logical value for representing that singular success case with an integer is zero, because it doesn't care one bit (no punt intended) about what type of integer it is (zero is zero, regardless of bit width, bit or byte order, or whether it's signed or not).
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.