Deploy API Reference
Container deployment lifecycle — create, manage, restart, stop, and destroy hosted applications on the Buddo platform.
9 endpoints
- GET
/api/deploy/apps - POST
/api/deploy/apps - DELETE
/api/deploy/apps/{id} - GET
/api/deploy/apps/{id} - GET
/api/deploy/apps/{id}/logs - POST
/api/deploy/apps/{id}/restart - GET
/api/deploy/apps/{id}/status - POST
/api/deploy/apps/{id}/stop - GET
/api/deploy/tiers
List operator's deployments
Returns all deployments owned by the authenticated operator. Rate limited to 30 requests per minute. **Authentication:** Requires an OAuth access token (Bearer), not a JWT. Use the token returned by POST /api/oauth/token.
Authentication
OAuth2 deploy:manage
Response (Success)
| Name | Type | Required | Description |
|---|---|---|---|
deployments |
array<object> |
required |
Example Request
curl -X GET "https://api.buddo.xyz/api/deploy/apps" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Example Response
{
"deployments": [
{
"app_id": "00000000-0000-0000-0000-000000000000",
"billing_status": {},
"container_image": "string",
"container_name": "string",
"cpu_limit_millicores": 0,
"custom_domain": {},
"deploy_tier_id": "00000000-0000-0000-0000-000000000000",
"deployed_at": {},
"health_status": {},
"host_server": {},
"id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"last_health_check": {},
"memory_limit_mb": 0,
"status": "pending",
"stopped_at": {},
"subdomain": "string"
}
]
}
Create a new deployment
Creates a new container deployment on the specified tier. Rate limited to 10 requests per minute. **Authentication:** Requires an OAuth access token (Bearer), not a JWT. Use the token returned by POST /api/oauth/token.
Authentication
OAuth2 deploy:manage
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
custom_domain |
string |
optional | Optional custom domain for the deployment |
env_vars |
object<string, string> |
optional | Environment variables (max 50 keys) |
image |
string |
required | Container image — must start with harbor.buddo.xyz:4443/, docker.io/library/, or ghcr.io/ |
port |
integer |
optional | Container port to expose (default 3000) |
subdomain |
string |
required | Subdomain for the deployment (1-32 chars, lowercase alphanumeric and hyphens) |
tier |
string |
required | Deploy tier slug |
Response (Success)
| Name | Type | Required | Description |
|---|---|---|---|
deployment |
object |
required |
Example Request
curl -X POST "https://api.buddo.xyz/api/deploy/apps" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"custom_domain": "string",
"env_vars": {},
"image": "string",
"port": 1,
"subdomain": "string",
"tier": "string"
}'
Example Response
{
"deployment": {
"app_id": "00000000-0000-0000-0000-000000000000",
"billing_status": {},
"container_image": "string",
"container_name": "string",
"cpu_limit_millicores": 0,
"custom_domain": {},
"deploy_tier_id": "00000000-0000-0000-0000-000000000000",
"deployed_at": {},
"health_status": {},
"host_server": {},
"id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"last_health_check": {},
"memory_limit_mb": 0,
"status": "pending",
"stopped_at": {},
"subdomain": "string"
}
}
Destroy a deployment
Permanently destroys a deployment and its container. Rate limited to 10 requests per minute. **Authentication:** Requires an OAuth access token (Bearer), not a JWT. Use the token returned by POST /api/oauth/token.
Authentication
OAuth2 deploy:manage
Path Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) |
required | Deployment ID |
Response (Success)
| Name | Type | Required | Description |
|---|---|---|---|
id |
string (uuid) |
required | |
message |
string |
required |
Example Request
curl -X DELETE "https://api.buddo.xyz/api/deploy/apps/:id" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Example Response
{
"id": "00000000-0000-0000-0000-000000000000",
"message": "string"
}
Get a single deployment
Returns full deployment details. Rate limited to 30 requests per minute. **Authentication:** Requires an OAuth access token (Bearer), not a JWT. Use the token returned by POST /api/oauth/token.
Authentication
OAuth2 deploy:manage
Path Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) |
required | Deployment ID |
Response (Success)
| Name | Type | Required | Description |
|---|---|---|---|
deployment |
object |
required |
Example Request
curl -X GET "https://api.buddo.xyz/api/deploy/apps/:id" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Example Response
{
"deployment": {
"app_id": "00000000-0000-0000-0000-000000000000",
"billing_status": {},
"container_image": "string",
"container_name": "string",
"cpu_limit_millicores": 0,
"custom_domain": {},
"deploy_tier_id": "00000000-0000-0000-0000-000000000000",
"deployed_at": {},
"health_status": {},
"host_server": {},
"id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"last_health_check": {},
"memory_limit_mb": 0,
"status": "pending",
"stopped_at": {},
"subdomain": "string"
}
}
Get deployment action logs
Returns the audit log of actions performed on a deployment. Rate limited to 30 requests per minute. **Authentication:** Requires an OAuth access token (Bearer), not a JWT. Use the token returned by POST /api/oauth/token.
Authentication
OAuth2 deploy:manage
Path Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) |
required | Deployment ID |
Response (Success)
| Name | Type | Required | Description |
|---|---|---|---|
logs |
array<object> |
required |
Example Request
curl -X GET "https://api.buddo.xyz/api/deploy/apps/:id/logs" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Example Response
{
"logs": [
{
"action": "create",
"details": {},
"id": "00000000-0000-0000-0000-000000000000",
"initiated_by": {},
"inserted_at": "2026-01-01T00:00:00Z",
"status": "string"
}
]
}
Restart a deployment
Restarts the deployment's container. Rate limited to 10 requests per minute. **Authentication:** Requires an OAuth access token (Bearer), not a JWT. Use the token returned by POST /api/oauth/token.
Authentication
OAuth2 deploy:manage
Path Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) |
required | Deployment ID |
Response (Success)
| Name | Type | Required | Description |
|---|---|---|---|
deployment |
object |
required |
Example Request
curl -X POST "https://api.buddo.xyz/api/deploy/apps/:id/restart" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Example Response
{
"deployment": {
"app_id": "00000000-0000-0000-0000-000000000000",
"billing_status": {},
"container_image": "string",
"container_name": "string",
"cpu_limit_millicores": 0,
"custom_domain": {},
"deploy_tier_id": "00000000-0000-0000-0000-000000000000",
"deployed_at": {},
"health_status": {},
"host_server": {},
"id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"last_health_check": {},
"memory_limit_mb": 0,
"status": "pending",
"stopped_at": {},
"subdomain": "string"
}
}
Lightweight deployment status check
Returns only status and health fields — optimized for polling. Rate limited to 30 requests per minute. **Authentication:** Requires an OAuth access token (Bearer), not a JWT. Use the token returned by POST /api/oauth/token.
Authentication
OAuth2 deploy:manage
Path Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) |
required | Deployment ID |
Response (Success)
| Name | Type | Required | Description |
|---|---|---|---|
health_status |
string | null |
optional | |
id |
string (uuid) |
required | |
last_health_check |
string | null |
optional | |
status |
"pending" | "deploying" | "running" | "stopped" | "destroyed" |
required | |
subdomain |
string |
required |
Example Request
curl -X GET "https://api.buddo.xyz/api/deploy/apps/:id/status" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Example Response
{
"health_status": {},
"id": "00000000-0000-0000-0000-000000000000",
"last_health_check": {},
"status": "pending",
"subdomain": "string"
}
Stop a running deployment
Stops the deployment's container. Rate limited to 10 requests per minute. **Authentication:** Requires an OAuth access token (Bearer), not a JWT. Use the token returned by POST /api/oauth/token.
Authentication
OAuth2 deploy:manage
Path Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id |
path | string (uuid) |
required | Deployment ID |
Response (Success)
| Name | Type | Required | Description |
|---|---|---|---|
deployment |
object |
required |
Example Request
curl -X POST "https://api.buddo.xyz/api/deploy/apps/:id/stop" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Example Response
{
"deployment": {
"app_id": "00000000-0000-0000-0000-000000000000",
"billing_status": {},
"container_image": "string",
"container_name": "string",
"cpu_limit_millicores": 0,
"custom_domain": {},
"deploy_tier_id": "00000000-0000-0000-0000-000000000000",
"deployed_at": {},
"health_status": {},
"host_server": {},
"id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"last_health_check": {},
"memory_limit_mb": 0,
"status": "pending",
"stopped_at": {},
"subdomain": "string"
}
}
List available deployment tiers
Returns all deployment tiers with pricing and resource limits. Rate limited to 30 requests per minute. **Authentication:** Requires an OAuth access token (Bearer), not a JWT. Use the token returned by POST /api/oauth/token.
Authentication
OAuth2 deploy:manage
Response (Success)
| Name | Type | Required | Description |
|---|---|---|---|
tiers |
array<object> |
required |
Example Request
curl -X GET "https://api.buddo.xyz/api/deploy/tiers" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Example Response
{
"tiers": [
{
"ad_reach_multiplier": "string",
"cpu_limit_millicores": 0,
"custom_domain_allowed": false,
"id": "00000000-0000-0000-0000-000000000000",
"memory_limit_mb": 0,
"monthly_cost_points": {},
"monthly_cost_sats": {},
"monthly_stipend_points": 0,
"name": "string",
"payment_method": "buddo_points",
"slug": "string"
}
]
}