Short answer
Error correction lets a scanner rebuild a damaged or covered part of a code: level L recovers about 7%, M 15%, Q 25% and H 30%. Higher levels make the code denser, so use M by default and H when you add a logo or print for rough environments.
QR codes use Reed-Solomon error correction, the same family of maths used on CDs and in space communication. Part of every code is redundant data that lets a scanner reconstruct missing pieces.
| Level | Recovers | Use it for |
|---|---|---|
| L | ~7% | Clean digital screens, very small prints where density matters |
| M | ~15% | The sensible default for print |
| Q | ~25% | Outdoor signs, industrial labels |
| H | ~30% | Codes with a logo in the centre |
A logo does not "sit on top" of a working code. It destroys the modules underneath, and error correction rebuilds them. That is why Kizmo switches to H automatically when you add a logo and warns you if the logo covers more than the level can safely recover.