https://api.your-domain.com/api/v1
For local development:
http://localhost:8080/api/v1
All protected endpoints require:
Authorization: Bearer <JWT_TOKEN>
Tokens are obtained via /auth/login or /auth/register.
Register a new user.
Request:
{
"email": "user@example.com",
"name": "Jane Doe",
"password": "securepassword"
}Response 201:
{
"token": "eyJhbGci...",
"user": {
"id": "uuid",
"email": "user@example.com",
"name": "Jane Doe",
"role": "user",
"created_at": "2026-01-01T00:00:00Z"
}
}Authenticate and receive a JWT token.
Request:
{
"email": "user@example.com",
"password": "securepassword"
}Response 200:
{
"token": "eyJhbGci...",
"user": { ... }
}Create a new project.
Request:
{
"name": "my-app",
"repo_url": "https://github.com/user/repo",
"branch": "main",
"build_command": "npm run build",
"start_command": "npm start",
"port": 3000,
"framework": "nextjs"
}Response 201: Project object
List all projects for the authenticated user.
Response 200:
{
"data": [ { ...project }, ... ]
}Get a single project.
Delete a project and all its deployments.
Trigger a new deployment.
Request:
{
"project_id": "uuid",
"branch": "main",
"commit_sha": "abc1234"
}Response 201: Deployment object with status: "queued"
List all deployments. Supports pagination via ?limit=20&offset=0.
Get a specific deployment.
Trigger a rollback to a previous deployment.
Get all logs for a deployment.
Response 200:
{
"data": [
{
"id": "uuid",
"deployment_id": "uuid",
"level": "info",
"stream": "system",
"message": "Build started",
"created_at": "..."
}
]
}Upgrade to WebSocket for real-time log streaming.
ws://api.localhost/api/v1/logs/{id}/stream?token=<JWT>
Each message is a JSON DeploymentLog object.
Add a custom domain.
Request:
{
"project_id": "uuid",
"domain": "app.yourdomain.com"
}List all custom domains for the user.
Remove a custom domain.
Set or update an environment variable.
Request:
{
"project_id": "uuid",
"key": "DATABASE_URL",
"value": "postgres://..."
}Note: Values are never returned in responses for security.
List all env var keys (values are masked).
Delete an environment variable.
Request:
{
"project_id": "uuid",
"key": "DATABASE_URL"
}Check system health including database and Redis.
Readiness probe for Kubernetes/Docker.
Prometheus metrics endpoint.
| Code | Meaning |
|---|---|
| 200 | OK |
| 201 | Created |
| 400 | Bad Request (validation failed) |
| 401 | Unauthorized |
| 404 | Not Found |
| 409 | Conflict (duplicate) |
| 429 | Too Many Requests (rate limited) |
| 500 | Internal Server Error |
| 503 | Service Unavailable |