Skip to main content

Apps

Manage containerized applications on the Strongly platform. Deploy, scale, start, stop, and monitor your apps programmatically.

All endpoints require a valid API key with the appropriate apps:* scope.

Base URL: https://<your-instance>/api/v1


App Object

{
"id": "app_abc123",
"name": "my-web-app",
"description": "Production web application",
"status": "running",
"image": "node:18-alpine",
"port": 3000,
"replicas": 2,
"environment": "production",
"resources": {
"cpu": "500m",
"memory": "512Mi"
},
"url": "https://my-web-app.strongly.ai",
"organizationId": "org_xyz789",
"projectId": "proj_456",
"labels": {
"team": "backend",
"version": "2.1.0"
},
"owner": {
"id": "user_001",
"email": "dev@example.com"
},
"permissions": {
"isPublic": false,
"allowedUsers": ["user_002", "user_003"]
},
"createdAt": "2025-01-15T10:30:00Z",
"updatedAt": "2025-01-20T14:22:00Z"
}

GET /api/v1/apps

List all apps accessible to the authenticated user.

Scope: apps:read

Query Parameters

ParameterTypeRequiredDefaultDescription
statusstringNoFilter by status: pending, building, running, stopped, failed
environmentstringNoFilter by environment: development, staging, production
searchstringNoSearch by app name or description
limitintegerNo20Maximum number of results to return (1-100)
offsetintegerNo0Number of results to skip for pagination
sortstringNocreatedAt:descSort field and direction, e.g. name:asc, updatedAt:desc

Response 200 OK

{
"data": [
{
"id": "app_abc123",
"name": "my-web-app",
"description": "Production web application",
"status": "running",
"image": "node:18-alpine",
"port": 3000,
"replicas": 2,
"environment": "production",
"resources": {
"cpu": "500m",
"memory": "512Mi"
},
"url": "https://my-web-app.strongly.ai",
"organizationId": "org_xyz789",
"projectId": "proj_456",
"labels": {},
"owner": {
"id": "user_001",
"email": "dev@example.com"
},
"permissions": {
"isPublic": false,
"allowedUsers": []
},
"createdAt": "2025-01-15T10:30:00Z",
"updatedAt": "2025-01-20T14:22:00Z"
}
],
"pagination": {
"total": 42,
"limit": 20,
"offset": 0,
"hasMore": true
}
}

POST /api/v1/apps

Create a new application.

Scope: apps:write

Request Body

FieldTypeRequiredDescription
namestringYesUnique app name (lowercase, hyphens allowed)
descriptionstringNoHuman-readable description
imagestringNoDocker image to deploy
portintegerNoContainer port to expose (default: 3000)
replicasintegerNoNumber of replicas (default: 1)
environmentstringNoTarget environment: development, staging, production
resourcesobjectNoCPU and memory resource limits
resources.cpustringNoCPU limit, e.g. "500m", "1"
resources.memorystringNoMemory limit, e.g. "256Mi", "1Gi"
projectIdstringNoProject to associate the app with
labelsobjectNoKey-value labels for organization
{
"name": "my-api-service",
"description": "REST API backend service",
"image": "my-registry.io/api-service:latest",
"port": 8080,
"replicas": 2,
"environment": "production",
"resources": {
"cpu": "1",
"memory": "1Gi"
},
"projectId": "proj_456",
"labels": {
"team": "backend"
}
}

Response 201 Created

{
"id": "app_def456",
"name": "my-api-service",
"description": "REST API backend service",
"status": "pending",
"image": "my-registry.io/api-service:latest",
"port": 8080,
"replicas": 2,
"environment": "production",
"resources": {
"cpu": "1",
"memory": "1Gi"
},
"url": null,
"organizationId": "org_xyz789",
"projectId": "proj_456",
"labels": {
"team": "backend"
},
"owner": {
"id": "user_001",
"email": "dev@example.com"
},
"permissions": {
"isPublic": false,
"allowedUsers": []
},
"createdAt": "2025-02-01T09:00:00Z",
"updatedAt": "2025-02-01T09:00:00Z"
}

GET /api/v1/apps/:id

Retrieve a single app by its ID.

Scope: apps:read

Path Parameters

ParameterTypeRequiredDescription
idstringYesThe app ID

Response 200 OK

{
"id": "app_abc123",
"name": "my-web-app",
"description": "Production web application",
"status": "running",
"image": "node:18-alpine",
"port": 3000,
"replicas": 2,
"environment": "production",
"resources": {
"cpu": "500m",
"memory": "512Mi"
},
"url": "https://my-web-app.strongly.ai",
"organizationId": "org_xyz789",
"projectId": "proj_456",
"labels": {
"team": "backend",
"version": "2.1.0"
},
"owner": {
"id": "user_001",
"email": "dev@example.com"
},
"permissions": {
"isPublic": false,
"allowedUsers": ["user_002"]
},
"createdAt": "2025-01-15T10:30:00Z",
"updatedAt": "2025-01-20T14:22:00Z"
}

PUT /api/v1/apps/:id

Update an existing app. Only provided fields are updated.

Scope: apps:write

Path Parameters

ParameterTypeRequiredDescription
idstringYesThe app ID

Request Body

FieldTypeRequiredDescription
namestringNoUpdated app name
descriptionstringNoUpdated description
imagestringNoUpdated Docker image
portintegerNoUpdated container port
replicasintegerNoUpdated replica count
environmentstringNoUpdated environment
resourcesobjectNoUpdated resource limits
labelsobjectNoUpdated labels (replaces all labels)
{
"replicas": 4,
"resources": {
"cpu": "2",
"memory": "2Gi"
},
"labels": {
"team": "backend",
"version": "2.2.0"
}
}

Response 200 OK

{
"id": "app_abc123",
"name": "my-web-app",
"description": "Production web application",
"status": "running",
"image": "node:18-alpine",
"port": 3000,
"replicas": 4,
"environment": "production",
"resources": {
"cpu": "2",
"memory": "2Gi"
},
"url": "https://my-web-app.strongly.ai",
"organizationId": "org_xyz789",
"projectId": "proj_456",
"labels": {
"team": "backend",
"version": "2.2.0"
},
"owner": {
"id": "user_001",
"email": "dev@example.com"
},
"permissions": {
"isPublic": false,
"allowedUsers": ["user_002"]
},
"createdAt": "2025-01-15T10:30:00Z",
"updatedAt": "2025-02-01T11:45:00Z"
}

DELETE /api/v1/apps/:id

Permanently delete an app and all associated resources.

Scope: apps:write

Path Parameters

ParameterTypeRequiredDescription
idstringYesThe app ID

Response 204 No Content

No response body.


POST /api/v1/apps/:id/deploy

Deploy or redeploy the app to the platform infrastructure.

Scope: apps:deploy

Path Parameters

ParameterTypeRequiredDescription
idstringYesThe app ID

Request Body (optional)

FieldTypeRequiredDescription
imagestringNoOverride image for this deployment
replicasintegerNoOverride replica count for this deployment
environmentobjectNoAdditional environment variables
rollbackbooleanNoRoll back to the previous deployment
{
"image": "my-registry.io/api-service:v2.3.0",
"replicas": 3,
"environment": {
"LOG_LEVEL": "info"
}
}

Response 200 OK

{
"message": "Deployment initiated",
"deploymentId": "deploy_789",
"status": "deploying",
"appId": "app_abc123"
}

POST /api/v1/apps/:id/start

Start a stopped app.

Scope: apps:deploy

Path Parameters

ParameterTypeRequiredDescription
idstringYesThe app ID

Response 200 OK

{
"message": "App starting",
"appId": "app_abc123",
"status": "starting"
}

POST /api/v1/apps/:id/stop

Stop a running app. All replicas are scaled to zero.

Scope: apps:deploy

Path Parameters

ParameterTypeRequiredDescription
idstringYesThe app ID

Response 200 OK

{
"message": "App stopping",
"appId": "app_abc123",
"status": "stopping"
}

POST /api/v1/apps/:id/restart

Restart all replicas of a running app with a rolling restart.

Scope: apps:deploy

Path Parameters

ParameterTypeRequiredDescription
idstringYesThe app ID

Response 200 OK

{
"message": "App restarting",
"appId": "app_abc123",
"status": "restarting"
}

GET /api/v1/apps/:id/status

Get the real-time runtime status of an app.

Scope: apps:read

Path Parameters

ParameterTypeRequiredDescription
idstringYesThe app ID

Response 200 OK

{
"state": "running",
"message": "All replicas healthy",
"replicas": 3,
"readyReplicas": 3,
"url": "https://my-web-app.strongly.ai"
}

GET /api/v1/apps/:id/logs

Retrieve recent logs from the app containers.

Scope: apps:read

Path Parameters

ParameterTypeRequiredDescription
idstringYesThe app ID

Query Parameters

ParameterTypeRequiredDefaultDescription
linesintegerNo100Number of log lines to return
sincestringNoReturn logs after this ISO 8601 timestamp
containerstringNoTarget a specific container by name

Response 200 OK

2025-01-20T14:22:01Z [INFO] Server started on port 3000
2025-01-20T14:22:02Z [INFO] Connected to database
2025-01-20T14:22:05Z [INFO] Health check passed
2025-01-20T14:23:00Z [INFO] Incoming request: GET /api/health

Error Responses

All endpoints may return the following error responses:

StatusDescription
400 Bad RequestInvalid request body or parameters
401 UnauthorizedMissing or invalid API key
403 ForbiddenInsufficient scope for the requested operation
404 Not FoundApp not found or not accessible
409 ConflictApp name already exists in the organization
422 Unprocessable EntityValidation error on request body
429 Too Many RequestsRate limit exceeded
500 Internal Server ErrorUnexpected server error
{
"error": {
"code": "not_found",
"message": "App with ID 'app_abc123' not found",
"status": 404
}
}