Builds API Reference
The Builds API manages containerization and versioning of your agents. Each build represents a specific version of your agent's code compiled into an optimized container image ready for deployment.
Build Resource
Build Object
{
"id": "build-uuid",
"agent_id": "agent-uuid",
"organization_id": "org-uuid",
"name": "market-agent-v1.2.0",
"version": "1.2.0",
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:35:00Z",
"status": "completed",
"build_time_seconds": 300,
"source": {
"github_repo": "username/market-agent",
"github_branch": "main",
"commit_sha": "abc123def456",
"commit_url": "https://github.com/username/market-agent/commit/abc123def456"
},
"config": {
"dockerfile_path": "./Dockerfile",
"working_directory": "/app",
"port": 8080,
"long_running": true,
"enable_http": false
},
"resources": {
"cpu": "0.5",
"memory": "512Mi",
"cpu_limit": "1.0",
"memory_limit": "1Gi"
},
"env_vars": {
"NODE_ENV": "production",
"LOG_LEVEL": "INFO"
},
"container": {
"image_url": "registry.agenthub.app/org-uuid/agent-uuid:build-uuid",
"image_size_mb": 245,
"layers": 8
},
"metrics": {
"instance_count": 5,
"total_deployments": 23,
"success_rate": 0.956
}
}
Build Fields
Field | Type | Description |
---|---|---|
id | string | Unique build identifier |
agent_id | string | Parent agent blueprint ID |
name | string | Human-readable build name |
version | string | Semantic version (optional) |
status | string | Current build status |
build_time_seconds | integer | Total build duration |
source.commit_sha | string | Git commit hash |
source.commit_url | string | Link to source commit |
config.* | object | Runtime configuration |
container.image_url | string | Container registry URL |
container.image_size_mb | integer | Compressed image size |
metrics.instance_count | integer | Currently running instances |
metrics.success_rate | float | Deployment success rate |
Build Status Values
Status | Description |
---|---|
queued | Build is waiting to start |
building | Container is being built |
completed | Build succeeded and is ready for deployment |
failed | Build failed due to errors |
cancelled | Build was cancelled by user |
List Builds
Retrieve builds for an agent or organization.
Request
GET /builds/by_agent_id/{agent_id}
Path Parameters
Parameter | Type | Required | Description |
---|---|---|---|
agent_id | string | Yes | Agent ID to get builds for |
Query Parameters
Parameter | Type | Default | Description |
---|---|---|---|
limit | integer | 50 | Number of builds to return (1-100) |
cursor | string | - | Pagination cursor |
status | string | all | Filter by status: completed , building , failed , all |
branch | string | - | Filter by git branch |
Response
{
"data": [
{
"id": "build-1",
"name": "market-agent-v1.2.0",
"version": "1.2.0",
"status": "completed",
"created_at": "2024-01-15T10:30:00Z",
"build_time_seconds": 180,
"source": {
"commit_sha": "abc123",
"github_branch": "main"
},
"container": {
"image_size_mb": 245
},
"metrics": {
"instance_count": 3
}
}
],
"pagination": {
"limit": 50,
"has_more": false,
"next_cursor": null
}
}
Examples
cURL
curl -H "Authorization: Bearer your-api-key" \
"https://prod-agent-hosting-api.useagenthub.com/builds/by_agent_id/agent-uuid?status=completed"
JavaScript
const response = await fetch(
'https://prod-agent-hosting-api.useagenthub.com/builds/by_agent_id/agent-uuid',
{
headers: { 'Authorization': 'Bearer your-api-key' }
}
);
const builds = await response.json();
Get Build
Retrieve a specific build with complete details.
Request
GET /builds/{build_id}
Path Parameters
Parameter | Type | Required | Description |
---|---|---|---|
build_id | string | Yes | Build ID |
Response
Returns the complete build object with all metadata and metrics.
Examples
cURL
curl -H "Authorization: Bearer your-api-key" \
https://prod-agent-hosting-api.useagenthub.com/builds/build-uuid
Create Build
Trigger a new build from the agent's GitHub repository.
Request
POST /builds
Request Body
{
"agent_id": "agent-uuid",
"organization_id": "org-uuid",
"name": "market-agent-v2.0.0",
"version": "2.0.0",
"source": {
"github_branch": "release-v2",
"commit_sha": "def456abc789"
},
"config": {
"dockerfile_path": "./production.Dockerfile",
"working_directory": "/app",
"port": 8080,
"long_running": true
},
"resources": {
"cpu": "1.0",
"memory": "1Gi",
"cpu_limit": "2.0",
"memory_limit": "2Gi"
},
"env_vars": {
"NODE_ENV": "production",
"LOG_LEVEL": "INFO",
"CACHE_ENABLED": "true"
}
}
Required Fields
Field | Type | Description |
---|---|---|
agent_id | string | Agent to build from |
organization_id | string | Organization ID |
Optional Fields
Field | Type | Default | Description |
---|---|---|---|
name | string | Auto-generated | Build display name |
version | string | timestamp | Semantic version |
source.github_branch | string | agent default | Git branch to build |
source.commit_sha | string | latest | Specific commit (optional) |
config.* | object | From agent | Override build configuration |
resources.* | object | From agent | Override resource limits |
env_vars | object | From agent | Build-time environment variables |
Response
Returns the created build object with status queued
or building
. The build process begins immediately.
Examples
cURL
curl -X POST https://prod-agent-hosting-api.useagenthub.com/builds \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"agent_id": "agent-uuid",
"organization_id": "org-uuid",
"name": "hotfix-build",
"source": {
"github_branch": "hotfix/urgent-fix"
}
}'
JavaScript
const build = await fetch('https://prod-agent-hosting-api.useagenthub.com/builds', {
method: 'POST',
headers: {
'Authorization': 'Bearer your-api-key',
'Content-Type': 'application/json'
},
body: JSON.stringify({
agent_id: 'agent-uuid',
organization_id: 'org-uuid',
name: 'production-build-v1.5',
version: '1.5.0',
source: {
github_branch: 'main'
}
})
});
Update Build
Update build metadata (name, version, etc.). Cannot modify build artifacts.
Request
PUT /builds/{build_id}
Path Parameters
Parameter | Type | Required | Description |
---|---|---|---|
build_id | string | Yes | Build ID |
Request Body
{
"name": "updated-build-name",
"version": "1.2.1"
}
Response
Returns the updated build object.
Examples
cURL
curl -X PUT https://prod-agent-hosting-api.useagenthub.com/builds/build-uuid \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"name": "stable-release-v1.2.1",
"version": "1.2.1"
}'
Delete Build
Remove a build and its associated container image.
Request
DELETE /builds/{build_id}
Path Parameters
Parameter | Type | Required | Description |
---|---|---|---|
build_id | string | Yes | Build ID |
Response
First returns deletion preview to show impact:
{
"build": {
"id": "build-uuid",
"name": "build-name",
"version": "1.0.0"
},
"impact": {
"active_instances": 5,
"total_instances_created": 23,
"container_size_mb": 245
},
"warnings": [
"This will stop 5 active instances",
"245 MB will be freed from container registry"
]
}
Force Delete
To actually delete after reviewing the preview:
curl -X DELETE "https://prod-agent-hosting-api.useagenthub.com/builds/build-uuid?force=true" \
-H "Authorization: Bearer your-api-key"
Get Build Status
Get detailed build progress and health information.
Request
GET /builds/{build_id}/status
Path Parameters
Parameter | Type | Required | Description |
---|---|---|---|
build_id | string | Yes | Build ID |
Response
{
"status": "building",
"progress": {
"current_step": "Building container image",
"completed_steps": 5,
"total_steps": 8,
"percent_complete": 62.5
},
"timeline": {
"queued_at": "2024-01-15T10:30:00Z",
"started_at": "2024-01-15T10:30:15Z",
"estimated_completion": "2024-01-15T10:35:00Z"
},
"resource_usage": {
"cpu_usage": "1.2 cores",
"memory_usage": "2.5 GB",
"disk_usage": "1.2 GB"
}
}
Examples
cURL
curl -H "Authorization: Bearer your-api-key" \
https://prod-agent-hosting-api.useagenthub.com/builds/build-uuid/status
Build Logs
Get real-time or historical build logs.
Request
GET /builds/{build_id}/logs
Path Parameters
Parameter | Type | Required | Description |
---|---|---|---|
build_id | string | Yes | Build ID |
Query Parameters
Parameter | Type | Default | Description |
---|---|---|---|
follow | boolean | false | Stream live logs (Server-Sent Events) |
lines | integer | 100 | Number of recent log lines (historical only) |
since | string | - | ISO timestamp to get logs since |
Response
Historical logs:
{
"logs": [
{
"timestamp": "2024-01-15T10:30:00Z",
"step": "clone",
"message": "Cloning repository username/market-agent..."
},
{
"timestamp": "2024-01-15T10:30:05Z",
"step": "analyze",
"message": "Detected Python application with requirements.txt"
},
{
"timestamp": "2024-01-15T10:30:10Z",
"step": "build",
"message": "Step 1/8: FROM python:3.11-slim"
}
]
}
Live logs (SSE):
data: {"timestamp": "2024-01-15T10:30:15Z", "step": "build", "message": "Step 2/8: WORKDIR /app"}
data: {"timestamp": "2024-01-15T10:30:20Z", "step": "build", "message": "Step 3/8: COPY requirements.txt ."}
data: {"timestamp": "2024-01-15T10:30:25Z", "step": "build", "message": "Step 4/8: RUN pip install -r requirements.txt"}
Examples
Get Recent Logs
curl -H "Authorization: Bearer your-api-key" \
"https://prod-agent-hosting-api.useagenthub.com/builds/build-uuid/logs?lines=50"
Stream Live Build Logs
const eventSource = new EventSource(
'https://prod-agent-hosting-api.useagenthub.com/builds/build-uuid/logs?follow=true',
{
headers: { 'Authorization': 'Bearer your-api-key' }
}
);
eventSource.onmessage = (event) => {
const logEntry = JSON.parse(event.data);
console.log(`[${logEntry.step}] ${logEntry.message}`);
};
eventSource.onerror = (error) => {
console.log('Build completed or error occurred');
eventSource.close();
};
Monitor Build Progress
import requests
import json
import time
def monitor_build(build_id, api_key):
headers = {'Authorization': f'Bearer {api_key}'}
while True:
# Check build status
status_response = requests.get(
f'https://prod-agent-hosting-api.useagenthub.com/builds/{build_id}/status',
headers=headers
)
status = status_response.json()
print(f"Status: {status['status']}")
print(f"Progress: {status['progress']['percent_complete']}%")
if status['status'] in ['completed', 'failed', 'cancelled']:
break
time.sleep(10) # Check every 10 seconds
monitor_build('build-uuid', 'your-api-key')
Automated Builds with Dockerizer
Trigger builds using AgentHub's auto-dockerizer for automatic Dockerfile generation.
Request
POST /builds/dockerize
Request Body
{
"agent_id": "agent-uuid",
"organization_id": "org-uuid",
"name": "auto-dockerized-build",
"source": {
"github_repo": "username/my-agent",
"github_branch": "main"
},
"auto_detect": true,
"optimization_level": "production"
}
Dockerizer Options
Field | Type | Default | Description |
---|---|---|---|
auto_detect | boolean | true | Automatically detect framework and dependencies |
optimization_level | string | balanced | development , balanced , production |
framework_hint | string | - | Hint: python , node , go , rust |
entry_point | string | auto | Override detected entry point |
Response
Returns Server-Sent Events stream with dockerization progress:
data: {"type": "log", "message": "Analyzing repository structure...", "timestamp": "2024-01-15T10:30:00Z"}
data: {"type": "log", "message": "Detected Python Flask application", "timestamp": "2024-01-15T10:30:05Z"}
data: {"type": "log", "message": "Generating optimized Dockerfile...", "timestamp": "2024-01-15T10:30:08Z"}
data: {"type": "log", "message": "Starting container build...", "timestamp": "2024-01-15T10:30:10Z"}
data: {"type": "success", "build_id": "build-uuid", "message": "Build completed successfully"}
Examples
Auto-Dockerize Agent
curl -X POST https://prod-agent-hosting-api.useagenthub.com/builds/dockerize \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream" \
-d '{
"agent_id": "agent-uuid",
"organization_id": "org-uuid",
"source": {
"github_repo": "username/my-python-agent"
},
"optimization_level": "production"
}'
Error Responses
Common Errors
Build Not Found (404)
{
"error": {
"code": "BUILD_NOT_FOUND",
"message": "Build with ID 'build-uuid' not found"
}
}
Build Failed (422)
{
"error": {
"code": "BUILD_FAILED",
"message": "Container build failed",
"details": {
"exit_code": 1,
"last_successful_step": "Installing dependencies",
"failure_step": "Building application",
"error_message": "ModuleNotFoundError: No module named 'requests'"
}
}
}
Repository Access Error (403)
{
"error": {
"code": "REPOSITORY_ACCESS_ERROR",
"message": "Cannot access GitHub repository",
"details": {
"repository": "username/private-repo",
"reason": "Insufficient permissions or repository does not exist"
}
}
}
Build Quota Exceeded (429)
{
"error": {
"code": "BUILD_QUOTA_EXCEEDED",
"message": "Monthly build quota exceeded",
"details": {
"current_builds": 1000,
"quota_limit": 1000,
"quota_resets_at": "2024-02-01T00:00:00Z"
}
}
}
Build Optimization Tips
Dockerfile Best Practices
Multi-stage builds:
# Build stage
FROM python:3.11-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user -r requirements.txt
# Production stage
FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY . .
CMD ["python", "main.py"]
Layer caching:
# Copy dependencies first (changes less frequently)
COPY requirements.txt package.json ./
RUN pip install -r requirements.txt
# Copy source code last (changes frequently)
COPY . .
Build Configuration
Resource allocation:
{
"build_resources": {
"cpu": "2.0", // More CPU = faster builds
"memory": "4Gi", // Prevent OOM during compilation
"timeout_minutes": 30 // Allow time for complex builds
}
}
Environment optimization:
{
"env_vars": {
"PYTHONUNBUFFERED": "1", // Python: immediate output
"NODE_ENV": "production", // Node.js: optimize builds
"CGO_ENABLED": "0" // Go: static binaries
}
}