Building a non-embedded app with C# Azure functions

I have had an api integration with shopify working for the past year or so and now need to build a public app (as the old way is no long supported - custom app in the store admin).
Its mostly working now, but I am fighting the auto-checker in the partner dashboard, as its failing on the compliance webhook checks. I should have checked here before burning the last day or so trying to figure out why its failing.
Questions:
(1) For a non-embedded app, even though you have created the app in the dev dashboard, do you still need to create a toml file? Meaning… you need to download/install and use the Shopify cli so you can do the ‘shopify app deploy’ command?
My conclusion: yes
(2) Do I need also, the .toml file accessible in the root of my app?
If anyone finds this that is in a similar case, note that with Azure functions, you need to use a “work around” (a) create a root level route handler, set the route attribute to Route = “{ignored:maxlength(0)?}” , then in your host.json, use this:
“extensions”: {
“http”: {
“routePrefix”: “”
}
}

After fighting the automated checker for 2 days, I finally managed to get the checks to validate. For the longest time, none of the compliance endpoints were being hit, which i could verify with the server logs. After getting the toml file adjusted and doing ‘shopify app deploy’ and re-installing the app on a dev store a few times, I finally got the automated checks to pass.

Your conclusions are correct, and this is a useful writeup for anyone else building outside the Node.js/Remix ecosystem.

The shopify.app.toml file is required for all apps (embedded or not), and you do need to run shopify app deploy via the CLI to register your compliance webhook endpoints with Shopify. The CLI deploys your app configuration (webhook subscriptions, scopes, URLs) to Shopify’s servers. It doesn’t build or run your app, so it works regardless of your backend language. A similar thread for a Java/Spring Boot backend confirmed the same thing.

The Azure Functions routing workaround you documented is very helpful. The compliance webhook docs and app configuration reference cover the TOML setup, but nothing there addresses the Azure Functions routing specifics, so having this here will save others time. Thanks for posting @Randal_B!