The way my programs typically work is, angular frontend -> .NET API Backend. The API architecture usually follows something like.
App.Business Project - Contains services, business logic etc.
App.Core Project - Contains interfaces for services to enable dependency injection at the controller level and loose dependencies
App.Domain Project - Contains models for passing to UI
App.Infrastructure - when our app has a DB this is typically the EF / EF Core configurations to the scaffolding the database
App.WebApi - contains Controllers for UI (typically try to leave this as inject a service and call it, no business logic / manipulation of data at all)
In my latest case, the app does not have a database that it is calling as a source of data but instead calls a sort of wrapper layer / middleware api that is between my WebApi and a 3rd party api. The 3rd party api is very grossly written and requires a lot of manipulation of data which is why it is neccessary. The wrapper api has many consumers as well so it makes the most sense to keep the direct calls to the 3rd party api there.
I typically use a tool called Nswag OpenApi that will essentially create a connected service to generate all the API endpoints of the wrapper API within my WebApi, as well as all of the return models (saves a ridiculous amount of time).
The issue comes is that it seems like this connected service needs to live in the App.WebApi project since the wrapper api uses an on-behalf-of-user token (IPrincipal user) that needs to come from the controller. This creates a circular dependency problem with trying to move the extra business logic needed to a separate project since all of the models / pre-written api calls are living in the App.WebApi project.
Probably did not explain this the best possible but, if you have experience using another API as your main data source what have you done? My best thought is to keep the wrapper API calls in the WebApi project, map the result to a local model and then pass it to the business layer for additional logic. This would require me to rewrite every return model locally but I guess its doable if no better option.