The Stack API lets you automate everything you can do in the dashboard — create stacks, manage nodes, trigger deployments, and monitor status.
Base URL: http://localhost:5260/api/v1 (self-hosted) or https://stack.kombify.io/api/v1 (managed)
Quick start
1. Get an authentication token
# Authenticate via Zitadel OIDC
# 1. Obtain a token from your Zitadel instance
TOKEN=$(curl -s -X POST https://auth.kombify.dev/oauth/v2/token \
-d "grant_type=client_credentials" \
-d "client_id=YOUR_CLIENT_ID" \
-d "client_secret=YOUR_CLIENT_SECRET" \
-d "scope=openid" | jq -r '.access_token')
# 2. Use the token in API requests
curl http://localhost:5260/api/v1/stacks \
-H "Authorization: Bearer $TOKEN"
Response:
{
"access_token": "eyJhbGciOiJSUzI1NiIs...",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "openid"
}
2. Use the token in requests
curl -H "Authorization: Bearer $TOKEN" \
http://localhost:5260/api/v1/stacks
API endpoints
Stacks
Create, list, update, and delete infrastructure stacks
Workers
Manage node agents and their status
Jobs
Track deployment jobs and their progress
Validation
Validate configurations and generate IaC
Endpoint reference
| Endpoint | Method | Description |
|---|
/api/v1/health | GET | Health check and version info |
/api/v1/stacks | GET | List all stacks |
/api/v1/stacks | POST | Create a new stack |
/api/v1/stacks/{id} | GET | Get stack details |
/api/v1/stacks/{id} | PUT | Update stack configuration |
/api/v1/stacks/{id} | DELETE | Delete a stack |
/api/v1/stacks/{id}/apply | POST | Apply stack to infrastructure |
/api/v1/stacks/{id}/plan | POST | Preview changes without applying |
/api/v1/workers | GET | List registered workers |
/api/v1/workers | POST | Register a new worker |
/api/v1/workers/{id} | GET | Get worker status and details |
/api/v1/workers/{id} | DELETE | Unregister a worker |
/api/v1/jobs | GET | List all jobs |
/api/v1/jobs/{id} | GET | Get job details and logs |
/api/v1/unifier/validate | POST | Validate a kombination.yaml |
/api/v1/unifier/generate | POST | Generate IaC from configuration |
Common patterns
Create and deploy a stack
# 1. Create the stack
STACK_ID=$(curl -s -X POST http://localhost:5260/api/v1/stacks \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "my-homelab",
"stackkit": "base-kit",
"config": {
"services": ["traefik", "immich", "homepage"]
}
}' | jq -r '.id')
# 2. Preview changes
curl -X POST "http://localhost:5260/api/v1/stacks/$STACK_ID/plan" \
-H "Authorization: Bearer $TOKEN"
# 3. Apply to infrastructure
curl -X POST "http://localhost:5260/api/v1/stacks/$STACK_ID/apply" \
-H "Authorization: Bearer $TOKEN"
# 4. Check job status
curl "http://localhost:5260/api/v1/jobs?stack_id=$STACK_ID" \
-H "Authorization: Bearer $TOKEN"
# List all workers with status
curl http://localhost:5260/api/v1/workers \
-H "Authorization: Bearer $TOKEN"
Response:{
"workers": [
{
"id": "worker_abc123",
"name": "proxmox-01",
"status": "online",
"last_seen": "2026-01-26T10:30:00Z",
"resources": {
"cpu_cores": 8,
"memory_gb": 32,
"disk_gb": 500
}
}
]
}
Validate configuration before deployment
# Validate a kombination.yaml
curl -X POST http://localhost:5260/api/v1/unifier/validate \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/yaml" \
--data-binary @kombination.yaml
Response (success):{
"valid": true,
"warnings": [],
"resolved": {
"services": ["traefik", "immich", "homepage"],
"dependencies": {
"traefik": [],
"immich": ["traefik"],
"homepage": ["traefik"]
}
}
}
Response (error):{
"valid": false,
"errors": [
{
"path": "services.immich.storage",
"message": "storage path '/data/photos' does not exist on node 'proxmox-01'"
}
]
}
Error handling
All errors follow a consistent format:
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid configuration",
"details": [
{
"field": "services",
"message": "At least one service is required"
}
]
}
}
| HTTP Code | Meaning |
|---|
| 200 | Success |
| 201 | Created |
| 400 | Bad request — check your input |
| 401 | Unauthorized — token missing or invalid |
| 403 | Forbidden — insufficient permissions |
| 404 | Not found |
| 500 | Server error |
Rate limits
| Plan | Requests/minute | Requests/hour |
|---|
| Self-hosted | Unlimited | Unlimited |
| Cloud Free | 60 | 1,000 |
| Cloud Pro | 300 | 10,000 |
| Cloud Team | 1,000 | 50,000 |
Next steps
Stacks API
Full stacks endpoint documentation
Workers API
Worker management endpoints
Jobs API
Job tracking and logs
Validation API
Validation and generation