Containers API
Create, update, inspect, and control HTTP container apps inside a project.
Manage the HTTP apps (containers) running inside a project: create them,
update their image or environment, inspect logs, and control their lifecycle
with restart, stop, and start. Each app listens on port 8080 as a non-root
process and gets an automatic *.alawadi.cloud subdomain with managed TLS.
Authorization
bearerAuth Bearer JWT obtained after Google sign-in in the portal.
In: header
Path Parameters
Response Body
application/json
curl -X GET "https://example.com/v1/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08/containers"[
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"project_id": "405d8375-3514-403b-8c43-83ae74cfe0e9",
"name": "string",
"display_name": "string",
"type": "container",
"runtime": "string",
"image": "registry.alawadi.cloud/acme/web:sha-8f31c2a",
"port": 3000,
"replicas": 0,
"status": "provisioning",
"internal_host": "web.tenant-3f2a.svc.cluster.local:3000",
"public_url": "https://my-shop.alawadi.cloud",
"public": true,
"cpu_milli": 0,
"memory_mb": 0,
"storage_gb": 0,
"env": {
"property1": "string",
"property2": "string"
},
"connection": {
"host": "orders-db-rw.tenant-3f2a.svc.cluster.local:5432",
"port": "5432",
"env_var": "DATABASE_URL",
"instructions": "string",
"requires_auth": "true"
},
"created_at": "2019-08-24T14:15:22Z",
"updated_at": "2019-08-24T14:15:22Z",
"marketplace_app": "wordpress"
}
]Authorization
bearerAuth Bearer JWT obtained after Google sign-in in the portal.
In: header
Path Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08/containers" \ -H "Content-Type: application/json" \ -d '{ "name": "string", "image": "string", "http_port": 0 }'{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"project_id": "405d8375-3514-403b-8c43-83ae74cfe0e9",
"name": "string",
"display_name": "string",
"type": "container",
"runtime": "string",
"image": "registry.alawadi.cloud/acme/web:sha-8f31c2a",
"port": 3000,
"replicas": 0,
"status": "provisioning",
"internal_host": "web.tenant-3f2a.svc.cluster.local:3000",
"public_url": "https://my-shop.alawadi.cloud",
"public": true,
"cpu_milli": 0,
"memory_mb": 0,
"storage_gb": 0,
"env": {
"property1": "string",
"property2": "string"
},
"connection": {
"host": "orders-db-rw.tenant-3f2a.svc.cluster.local:5432",
"port": "5432",
"env_var": "DATABASE_URL",
"instructions": "string",
"requires_auth": "true"
},
"created_at": "2019-08-24T14:15:22Z",
"updated_at": "2019-08-24T14:15:22Z",
"marketplace_app": "wordpress"
}{
"error": "validation failed",
"request_id": "01J9Z3K8QWERTYUIOP"
}Authorization
bearerAuth Bearer JWT obtained after Google sign-in in the portal.
In: header
Path Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X PATCH "https://example.com/v1/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08/containers/497f6eca-6276-4993-bfeb-53cbbbba6f08" \ -H "Content-Type: application/json" \ -d '{}'{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"project_id": "405d8375-3514-403b-8c43-83ae74cfe0e9",
"name": "string",
"display_name": "string",
"type": "container",
"runtime": "string",
"image": "registry.alawadi.cloud/acme/web:sha-8f31c2a",
"port": 3000,
"replicas": 0,
"status": "provisioning",
"internal_host": "web.tenant-3f2a.svc.cluster.local:3000",
"public_url": "https://my-shop.alawadi.cloud",
"public": true,
"cpu_milli": 0,
"memory_mb": 0,
"storage_gb": 0,
"env": {
"property1": "string",
"property2": "string"
},
"connection": {
"host": "orders-db-rw.tenant-3f2a.svc.cluster.local:5432",
"port": "5432",
"env_var": "DATABASE_URL",
"instructions": "string",
"requires_auth": "true"
},
"created_at": "2019-08-24T14:15:22Z",
"updated_at": "2019-08-24T14:15:22Z",
"marketplace_app": "wordpress"
}{
"error": "validation failed",
"request_id": "01J9Z3K8QWERTYUIOP"
}Authorization
bearerAuth Bearer JWT obtained after Google sign-in in the portal.
In: header
Path Parameters
Response Body
application/json
curl -X DELETE "https://example.com/v1/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08/containers/497f6eca-6276-4993-bfeb-53cbbbba6f08"{
"error": "validation failed",
"request_id": "01J9Z3K8QWERTYUIOP"
}Authorization
bearerAuth Bearer JWT obtained after Google sign-in in the portal.
In: header
Path Parameters
Response Body
text/plain
curl -X GET "https://example.com/v1/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08/containers/497f6eca-6276-4993-bfeb-53cbbbba6f08/logs""string"Authorization
bearerAuth Bearer JWT obtained after Google sign-in in the portal.
In: header
Path Parameters
Response Body
curl -X POST "https://example.com/v1/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08/containers/497f6eca-6276-4993-bfeb-53cbbbba6f08/restart"Authorization
bearerAuth Bearer JWT obtained after Google sign-in in the portal.
In: header
Path Parameters
Response Body
curl -X POST "https://example.com/v1/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08/containers/497f6eca-6276-4993-bfeb-53cbbbba6f08/stop"Authorization
bearerAuth Bearer JWT obtained after Google sign-in in the portal.
In: header
Path Parameters
Response Body
curl -X POST "https://example.com/v1/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08/containers/497f6eca-6276-4993-bfeb-53cbbbba6f08/start"Errors use a code and a message
Every failed request returns a JSON body of the shape
{ "code": "...", "message": "..." }. Codes you will see on these endpoints:
401 UNAUTHORIZED; 402 INSUFFICIENT_BALANCE or 402 ACCOUNT_NOT_INITIALIZED;
403 FORBIDDEN or 403 ACCOUNT_SUSPENDED; 404 NOT_FOUND (a resource you do
not own reads as not found, never leaked); 409 when a name is already taken,
when autoscaling owns the instance count (AUTOSCALING_OWNS_REPLICAS), or when
a lifecycle action does not apply to the service type (LIFECYCLE_UNSUPPORTED);
and 429 RATE_LIMITED. A missing or mutable image tag is rejected at deploy
time with 400 BAD_IMAGE.
Deploy, scale, and alerts
Deploying a new image is a separate, immutable step. Every release is a
container image pushed to your registry and rolled out by a unique tag, never
:latest. The portal generates the GitHub Actions workflow for you, so CI only
copies it and pushes. Autoscaling and alert policies attach to a running app and
have their own reference pages.
Deploy API
Roll a new image to an app while signed in with Google.
Deployments API
The machine-facing flow: exchange a GitHub OIDC token for a short-lived deploy token, then deploy.
Scaling & alerts API
Autoscaling policy, cost preview, scaling events, and alert-policy CRUD.
GitHub OIDC deploy guide
The end-to-end push-and-deploy walkthrough with the pre-filled workflow.
Managed databases
Dashboard or API
Managed Postgres, MySQL, and Redis have a full dashboard flow under Databases (create, link to a container, view connection). These endpoints are the API path for the same flow: see Add managed databases.
Authorization
bearerAuth Bearer JWT obtained after Google sign-in in the portal.
In: header
Path Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08/postgres" \ -H "Content-Type: application/json" \ -d '{ "name": "orders-db", "resources": { "cpu_milli": 500, "memory_mb": 1024, "storage_gb": 10 } }'{
"service": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"project_id": "405d8375-3514-403b-8c43-83ae74cfe0e9",
"name": "string",
"display_name": "string",
"type": "container",
"runtime": "string",
"image": "registry.alawadi.cloud/acme/web:sha-8f31c2a",
"port": 3000,
"replicas": 0,
"status": "provisioning",
"internal_host": "web.tenant-3f2a.svc.cluster.local:3000",
"public_url": "https://my-shop.alawadi.cloud",
"public": true,
"cpu_milli": 0,
"memory_mb": 0,
"storage_gb": 0,
"env": {
"property1": "string",
"property2": "string"
},
"connection": {
"host": "orders-db-rw.tenant-3f2a.svc.cluster.local:5432",
"port": "5432",
"env_var": "DATABASE_URL",
"instructions": "string",
"requires_auth": "true"
},
"created_at": "2019-08-24T14:15:22Z",
"updated_at": "2019-08-24T14:15:22Z",
"marketplace_app": "wordpress"
},
"connection": {
"host": "orders-db-rw.tenant-3f2a.svc.cluster.local:5432",
"port": "5432",
"env_var": "DATABASE_URL",
"instructions": "string",
"requires_auth": "true"
}
}{
"error": "validation failed",
"request_id": "01J9Z3K8QWERTYUIOP"
}{
"error": "validation failed",
"request_id": "01J9Z3K8QWERTYUIOP"
}{
"error": "validation failed",
"request_id": "01J9Z3K8QWERTYUIOP"
}Authorization
bearerAuth Bearer JWT obtained after Google sign-in in the portal.
In: header
Path Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08/mysql" \ -H "Content-Type: application/json" \ -d '{ "name": "orders-db", "resources": { "cpu_milli": 500, "memory_mb": 1024, "storage_gb": 10 } }'{
"service": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"project_id": "405d8375-3514-403b-8c43-83ae74cfe0e9",
"name": "string",
"display_name": "string",
"type": "container",
"runtime": "string",
"image": "registry.alawadi.cloud/acme/web:sha-8f31c2a",
"port": 3000,
"replicas": 0,
"status": "provisioning",
"internal_host": "web.tenant-3f2a.svc.cluster.local:3000",
"public_url": "https://my-shop.alawadi.cloud",
"public": true,
"cpu_milli": 0,
"memory_mb": 0,
"storage_gb": 0,
"env": {
"property1": "string",
"property2": "string"
},
"connection": {
"host": "orders-db-rw.tenant-3f2a.svc.cluster.local:5432",
"port": "5432",
"env_var": "DATABASE_URL",
"instructions": "string",
"requires_auth": "true"
},
"created_at": "2019-08-24T14:15:22Z",
"updated_at": "2019-08-24T14:15:22Z",
"marketplace_app": "wordpress"
},
"connection": {
"host": "orders-db-rw.tenant-3f2a.svc.cluster.local:5432",
"port": "5432",
"env_var": "DATABASE_URL",
"instructions": "string",
"requires_auth": "true"
}
}{
"error": "validation failed",
"request_id": "01J9Z3K8QWERTYUIOP"
}{
"error": "validation failed",
"request_id": "01J9Z3K8QWERTYUIOP"
}{
"error": "validation failed",
"request_id": "01J9Z3K8QWERTYUIOP"
}Authorization
bearerAuth Bearer JWT obtained after Google sign-in in the portal.
In: header
Path Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08/redis" \ -H "Content-Type: application/json" \ -d '{ "name": "cache", "resources": { "cpu_milli": 500, "memory_mb": 1024, "storage_gb": 10 } }'{
"service": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"project_id": "405d8375-3514-403b-8c43-83ae74cfe0e9",
"name": "string",
"display_name": "string",
"type": "container",
"runtime": "string",
"image": "registry.alawadi.cloud/acme/web:sha-8f31c2a",
"port": 3000,
"replicas": 0,
"status": "provisioning",
"internal_host": "web.tenant-3f2a.svc.cluster.local:3000",
"public_url": "https://my-shop.alawadi.cloud",
"public": true,
"cpu_milli": 0,
"memory_mb": 0,
"storage_gb": 0,
"env": {
"property1": "string",
"property2": "string"
},
"connection": {
"host": "orders-db-rw.tenant-3f2a.svc.cluster.local:5432",
"port": "5432",
"env_var": "DATABASE_URL",
"instructions": "string",
"requires_auth": "true"
},
"created_at": "2019-08-24T14:15:22Z",
"updated_at": "2019-08-24T14:15:22Z",
"marketplace_app": "wordpress"
},
"connection": {
"host": "orders-db-rw.tenant-3f2a.svc.cluster.local:5432",
"port": "5432",
"env_var": "DATABASE_URL",
"instructions": "string",
"requires_auth": "true"
}
}{
"error": "validation failed",
"request_id": "01J9Z3K8QWERTYUIOP"
}{
"error": "validation failed",
"request_id": "01J9Z3K8QWERTYUIOP"
}{
"error": "validation failed",
"request_id": "01J9Z3K8QWERTYUIOP"
}Authorization
bearerAuth Bearer JWT obtained after Google sign-in in the portal.
In: header
Path Parameters
Response Body
application/json
application/json
application/json
curl -X GET "https://example.com/v1/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08/service-links"{
"links": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"project_id": "405d8375-3514-403b-8c43-83ae74cfe0e9",
"consumer_service_id": "23570cdd-ac17-47d2-bcbc-c7128eb2ba97",
"provider_service_id": "17062ceb-e6d9-456f-9abb-e8f6605cc7cc",
"link_type": "http",
"injected_env": {
"property1": "string",
"property2": "string"
}
}
]
}{
"error": "validation failed",
"request_id": "01J9Z3K8QWERTYUIOP"
}{
"error": "validation failed",
"request_id": "01J9Z3K8QWERTYUIOP"
}Authorization
bearerAuth Bearer JWT obtained after Google sign-in in the portal.
In: header
Path Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08/service-links" \ -H "Content-Type: application/json" \ -d '{ "consumer_service_id": "23570cdd-ac17-47d2-bcbc-c7128eb2ba97", "provider_service_id": "17062ceb-e6d9-456f-9abb-e8f6605cc7cc", "link_type": "http" }'{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"project_id": "405d8375-3514-403b-8c43-83ae74cfe0e9",
"consumer_service_id": "23570cdd-ac17-47d2-bcbc-c7128eb2ba97",
"provider_service_id": "17062ceb-e6d9-456f-9abb-e8f6605cc7cc",
"link_type": "http",
"injected_env": {
"property1": "string",
"property2": "string"
}
}{
"error": "validation failed",
"request_id": "01J9Z3K8QWERTYUIOP"
}{
"error": "validation failed",
"request_id": "01J9Z3K8QWERTYUIOP"
}{
"error": "validation failed",
"request_id": "01J9Z3K8QWERTYUIOP"
}{
"error": "validation failed",
"request_id": "01J9Z3K8QWERTYUIOP"
}Registries
Authorization
bearerAuth Bearer JWT obtained after Google sign-in in the portal.
In: header
Response Body
application/json
curl -X GET "https://example.com/v1/registries"[
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "string",
"host": "ghcr.io",
"username": "string"
}
]Authorization
bearerAuth Bearer JWT obtained after Google sign-in in the portal.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
curl -X POST "https://example.com/v1/registries" \ -H "Content-Type: application/json" \ -d '{ "name": "string", "host": "string" }'{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "string",
"host": "ghcr.io",
"username": "string"
}Authorization
bearerAuth Bearer JWT obtained after Google sign-in in the portal.
In: header
Path Parameters
Response Body
application/json
curl -X GET "https://example.com/v1/registries/497f6eca-6276-4993-bfeb-53cbbbba6f08"{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "string",
"host": "ghcr.io",
"username": "string"
}Authorization
bearerAuth Bearer JWT obtained after Google sign-in in the portal.
In: header
Path Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
curl -X PUT "https://example.com/v1/registries/497f6eca-6276-4993-bfeb-53cbbbba6f08" \ -H "Content-Type: application/json" \ -d '{ "name": "string", "host": "string" }'{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "string",
"host": "ghcr.io",
"username": "string"
}Authorization
bearerAuth Bearer JWT obtained after Google sign-in in the portal.
In: header
Path Parameters
Response Body
curl -X DELETE "https://example.com/v1/registries/497f6eca-6276-4993-bfeb-53cbbbba6f08"