JupyterHub doesn’t provide these endpoints, Jupyter Server does. Are you sure that the single-user server is running Jupyter Server and not the legacy Notebook server? It would be the default, but you can ensure it with:
c.Spawner.environment.update({"JUPYTERHUB_SINGLEUSER_APP": "jupyter-server"})
Sharing the startup logs from jupyter-server may help (it logs which server it’s using).