Deploy API Reference

Container deployment lifecycle — create, manage, restart, stop, and destroy hosted applications on the Buddo platform.

9 endpoints

GET /api/deploy/apps

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)

NameTypeRequiredDescription
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"
    }
  ]
}
POST /api/deploy/apps

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

NameTypeRequiredDescription
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)

NameTypeRequiredDescription
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"
  }
}
DELETE /api/deploy/apps/{id}

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

NameInTypeRequiredDescription
id path string (uuid) required Deployment ID

Response (Success)

NameTypeRequiredDescription
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 /api/deploy/apps/{id}

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

NameInTypeRequiredDescription
id path string (uuid) required Deployment ID

Response (Success)

NameTypeRequiredDescription
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 /api/deploy/apps/{id}/logs

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

NameInTypeRequiredDescription
id path string (uuid) required Deployment ID

Response (Success)

NameTypeRequiredDescription
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"
    }
  ]
}
POST /api/deploy/apps/{id}/restart

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

NameInTypeRequiredDescription
id path string (uuid) required Deployment ID

Response (Success)

NameTypeRequiredDescription
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"
  }
}
GET /api/deploy/apps/{id}/status

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

NameInTypeRequiredDescription
id path string (uuid) required Deployment ID

Response (Success)

NameTypeRequiredDescription
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"
}
POST /api/deploy/apps/{id}/stop

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

NameInTypeRequiredDescription
id path string (uuid) required Deployment ID

Response (Success)

NameTypeRequiredDescription
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"
  }
}
GET /api/deploy/tiers

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)

NameTypeRequiredDescription
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"
    }
  ]
}