Ideally the solution would support:
1) updating webserver config to know about new domain via an API and 2) Updating DNS to know about the domain via an API and 3) Need to support SSL (LetsEncrypt)
And I'd like to automate all of this so a person does not need to touch it.
Thanks for any insight!
1) The webserver can be configured to respond for any domain. Then your application software can look at the HTTP host header to decide which client you are working with.
2) I've used DJBDNS in the past because it's very easy to generate the necessary config files and if I recall didn't require restart (since the config is stored in a "database file" - binary flat file in this case). You could also try dynamically rewriting the BIND config and restarting it via a cronjob every 10 minutes.
3) No clue here but it should be easy to automate
The worst part of all this is having to write the DNS docs for users so they can point their domain correctly. DNS is incredibly confusing to setup for "mere mortals" due to the many different registrars with varying DNS editing capabilities. Caching and IP address perplexity makes it worse.
It can handle thousands of domains easily, with Let's Encrypt (or any other ACME CA), even if you don't control your customer's domains.
Hit up the forums if you have any questions: https://caddy.community
2: depending on the use case you may get away with an wildcard/catch all dns entry. If customers shall bring their own domain name, they will have to create an cname record anyway.