diff --git a/ironic/cmd/singleprocess.py b/ironic/cmd/singleprocess.py
index 675bd1bc29..28100efe9b 100644
--- a/ironic/cmd/singleprocess.py
+++ b/ironic/cmd/singleprocess.py
@@ -46,12 +46,12 @@ def main():
     conductor_cmd.issue_startup_warnings(CONF)
     launcher.launch_service(mgr)
 
-    wsgi = wsgi_service.WSGIService('ironic_api', CONF.api.enable_ssl_api)
-    launcher.launch_service(wsgi)
-
     # NOTE(dtantsur): handling start-up failures before launcher.wait() helps
     # notify systemd about them. Otherwise the launcher will report successful
     # service start-up before checking the threads.
     mgr.wait_for_start()
 
+    wsgi = wsgi_service.WSGIService('ironic_api', CONF.api.enable_ssl_api)
+    launcher.launch_service(wsgi)
+
     sys.exit(launcher.wait())
diff --git a/releasenotes/notes/allinone-4ca71f150a718811.yaml b/releasenotes/notes/allinone-4ca71f150a718811.yaml
new file mode 100644
index 0000000000..e99091fe12
--- /dev/null
+++ b/releasenotes/notes/allinone-4ca71f150a718811.yaml
@@ -0,0 +1,6 @@
+---
+fixes:
+  - |
+    The combined ``ironic`` executable now starts the API only after the
+    built-in conductor starts. This avoids error 500 on requests while
+    the conductor is starting.