Going into it, I thought we'd be on a well traveled path, but that was far from the case...
Typescript has some decent code generation packages (although fragmented) and request validation can be hacked via AJV... But tooling around C# was halfbaked at best.
In the end, I didn't really feel like OpenApi provided the API "contract" I had originally hoped for.
If I could start over, I would probably use something like gRPC for internal service communication (would maybe still use OpenAPI for any public API)