The DevHub API is organized around the control-plane lifecycle:
- approval policies and approval requests
- projects
- services
- scaffold requests
- releases
- deployments
- plugins
- auth and users
The backend is implemented in Go under backend/internal/api/http.
Project
-> Service
-> Release
-> Deployment
Scaffold requests belong to a project and are one path to creating a new service record.
POST /auth/loginPOST /auth/logoutGET /auth/me
POST /approval-policiesGET /approval-requestsPOST /approval-requests/:approval-request/decisions
Approval decisions accept both a decision and a comment:
{
"decision": "approve",
"comment": "Validated rollout prerequisites and approved for execution."
}GET /projectsPOST /projectsGET /projects/:projectPATCH /projects/:projectDELETE /projects/:project
GET /projects/:project/services
Service state is consumed by the frontend service details page and by service-scoped release and deployment flows.
GET /teamsPOST /teamsPATCH /teams/:team
GET /projects/:project/scaffold-requestsPOST /projects/:project/scaffold-requestsGET /projects/:project/scaffold-requests/:scaffoldRequestDELETE /scaffold-requests/:scaffoldRequest
Important request shape:
{
"plugin_id": "plugin-id",
"environment": "dev",
"variables": {
"service_name": "payment",
"module_path": "github.com/acme/payment",
"port": 8080,
"database": "postgres",
"enable_logging": true
}
}GET /services/:service/releasesPOST /services/:service/releases
Example create payload:
{
"plugin_id": "releaser-plugin-id",
"tag": "v1.0.0",
"target": "main",
"name": "Payment v1.0.0",
"notes": "Initial release"
}GET /services/:service/deploymentsPOST /services/:service/deploymentsGET /deployments/:deploymentPATCH /deployments/:deploymentDELETE /deployments/:deployment
Example create payload:
{
"plugin_id": "deployer-plugin-id",
"environment": "staging",
"version": "v1.0.0"
}Deployments are service-scoped and version-based. In the frontend, version is selected from the service鈥檚 releases.
GET /pluginsPOST /pluginsGET /plugins/:pluginPATCH /plugins/:pluginDELETE /plugins/:plugin
Plugin types in active use:
scaffolderreleaserdeployer
The Vue UI uses these route-level flows:
Dashboard-> team overview and quick health snapshotApprovals-> review approval requests and leave decision commentsProjects-> list and filter projectsServices-> browse services across projectsReleases-> browse release history and release timelineProject details-> inspect services and scaffoldService details-> create release and deploy selected release versionsPlugins-> inspect plugin registry
Frontend API clients live under frontend/src/services/api.
- Release records are service-scoped.
- Deployments are service-scoped.
- Deployment
versionshould match a release tag for that service. - Worker payloads are built in Go and executed through Python plugins.