Okay, so seeing pydantic types used in every part of an app not just the API layer is normal.

Yes. It’s the only way to ensure typing in a dynamic typed world. You can attrs, you can validate, but pydantic does it all.