API Reference
GMeet backend REST API and Agent Zero endpoints.
GMeet Backend API
Base URL: https://meet.virtualgpt.cloud/api (or http://localhost:4000/api locally)
GET /api/health
Health check endpoint.
curl https://meet.virtualgpt.cloud/api/health
Response:
{
"status": "ok",
"uptime": 1234.56,
"meetings": 2
}
GET /api/agents
List all configured agents with their status.
curl https://meet.virtualgpt.cloud/api/agents
Response:
[
{
"id": "bmad-orchestrator",
"url": "http://localhost:50001",
"name": "BMAD",
"role": "Orchestrator",
"color": "#6366f1",
"available": true
},
{
"id": "bmad-analyst",
"name": "Mary",
"role": "Analyst",
"color": "#ec4899",
"available": true
},
...
]
POST /api/meetings
Create a new meeting with specified participants.
curl -X POST https://meet.virtualgpt.cloud/api/meetings \
-H "Content-Type: application/json" \
-d '{
"participants": ["bmad-orchestrator", "bmad-analyst", "bmad-pm"]
}'
Response:
{
"meetingId": "a1b2c3d4-...",
"participants": ["bmad-orchestrator", "bmad-analyst", "bmad-pm"],
"startedAt": "2026-02-28T12:00:00.000Z"
}
POST /api/meetings/:meetingId/message
Send a message to agents in a meeting. This is the main endpoint for interacting with agents.
curl -X POST https://meet.virtualgpt.cloud/api/meetings/a1b2c3d4/message \
-H "Content-Type: application/json" \
-d '{
"message": "Design a REST API for a todo app",
"sender": "user",
"targetAgents": ["bmad-architect"]
}'
Request body:
| Field | Type | Required | Description |
|---|---|---|---|
message | string | Yes | The message text to send |
sender | string | Yes | Sender identifier (e.g., "user") |
targetAgents | string[] | No | Array of agent IDs. If omitted, sends to all participants. |
Response:
{
"messageId": "uuid-...",
"responses": [
{
"agentId": "bmad-architect",
"response": "Here's my proposed REST API design..."
}
]
}
If an agent fails to respond, its entry will contain an error field instead:
{
"agentId": "bmad-architect",
"error": "A0 returned 500: Internal error"
}
GET /api/meetings/:meetingId
Get meeting details including transcript.
curl https://meet.virtualgpt.cloud/api/meetings/a1b2c3d4
Dashboard API
GET /api/dashboard
Returns agent health, container stats, meeting counts, and uptime.
curl https://meet.virtualgpt.cloud/api/dashboard
Response:
{
"agents": [
{
"id": "bmad-orchestrator",
"name": "BMAD",
"role": "Orchestrator",
"color": "#6366f1",
"status": "online",
"responseMs": 245,
"requests": 12,
"errors": 0,
"avgResponseMs": 3200,
"lastActive": "2026-02-28T13:00:00.000Z"
}
],
"containers": [
{ "name": "bmad-live-orchestrator", "cpu": "0.50%", "mem": "256MiB / 8GiB", "memPerc": "3.12%", "net": "1.2MB / 800KB" }
],
"meetings": { "active": 1, "totalMessages": 42 },
"uptime": 3600
}
Config API
GET /api/config
Returns environment variables from .env and per-agent settings.json files.
{
"env": {
"A0_SET_chat_model": "openrouter/anthropic/claude-sonnet-4.6",
"OPENROUTER_API_KEY": "sk-or-..."
},
"agentConfigs": {
"bmad-orchestrator": { "chat_model_kwargs": { "temperature": 0.5 } },
"bmad-analyst": { "chat_model_kwargs": { "temperature": 0.7 } }
}
}
POST /api/config/env
Update a single environment variable in .env.
curl -X POST /api/config/env \
-H "Content-Type: application/json" \
-d '{ "key": "A0_SET_chat_model", "value": "openrouter/google/gemini-3-flash-preview" }'
POST /api/config/agent/:agentId
Update an agent's settings.json. Merges provided fields with existing settings.
curl -X POST /api/config/agent/bmad-orchestrator \
-H "Content-Type: application/json" \
-d '{ "chat_model_kwargs": { "temperature": 0.6 } }'
Projects API
GET /api/projects?path=
Browse the shared projects directory. Returns directory listing or file content.
# Directory listing
curl /api/projects?path=bmad-template
# → { "type": "directory", "entries": [{ "name": "README.md", "type": "file", "size": 1234, "path": "bmad-template/README.md" }] }
# File content
curl /api/projects?path=bmad-template/README.md
# → { "type": "file", "content": "# BMAD Template\n..." }
POST /api/projects/upload?path=&filename=
Upload a file to the specified directory. Send raw file bytes as the request body.
curl -X POST "/api/projects/upload?path=bmad-template&filename=spec.md" \
--data-binary @spec.md
Diary API
GET /api/diary?agent=&limit=
Fetch diary entries. Optionally filter by agent ID and limit count.
curl /api/diary?agent=bmad-orchestrator&limit=20
Response:
{
"entries": [
{
"id": "uuid",
"agentId": "bmad-orchestrator",
"agentName": "BMAD",
"agentColor": "#6366f1",
"message": "Currently monitoring 5 agents...",
"category": "status",
"timestamp": "2026-02-28T13:00:00.000Z"
}
],
"total": 1
}
POST /api/diary
Add a manual diary entry.
curl -X POST /api/diary \
-H "Content-Type: application/json" \
-d '{ "agentId": "bmad-orchestrator", "message": "Project kickoff complete", "category": "milestone" }'
POST /api/diary/ping
Ping agents to request status updates. Responses are posted as diary entries.
# Ping all agents with default prompt
curl -X POST /api/diary/ping
# Ping specific agents with custom prompt
curl -X POST /api/diary/ping \
-H "Content-Type: application/json" \
-d '{ "agentIds": ["bmad-orchestrator"], "prompt": "What are you working on?" }'
Deploy API
GET /api/deploy/containers
List all bmad-live-* Docker containers with status.
{
"containers": [
{ "id": "abc123", "name": "bmad-live-orchestrator", "status": "Up 3 hours", "ports": "0.0.0.0:50001->80/tcp", "created": "2 days ago" }
]
}
POST /api/deploy/restart/:container
POST /api/deploy/stop/:container
POST /api/deploy/start/:container
Control container lifecycle. Container name must start with bmad-live.
curl -X POST /api/deploy/restart/bmad-live-orchestrator
GET /api/deploy/logs/:container?lines=
Fetch recent container logs (default: 50 lines).
curl /api/deploy/logs/bmad-live-orchestrator?lines=80
Brain API
GET /api/brain/stream/:agentId (SSE)
Server-Sent Events endpoint that streams real-time Docker logs. ANSI escape codes are stripped and lines are parsed into typed events.
const es = new EventSource('/api/brain/stream/bmad-orchestrator');
es.onmessage = (event) => {
const data = JSON.parse(event.data);
// data.type: 'thinking', 'tool', 'response', 'exec', 'error', 'subagent', 'json', 'log'
// data.text: cleaned log line
// data.ts: timestamp (ms)
console.log(data);
};
Nginx note: The SSE endpoint requires proxy_buffering off in Nginx for real-time streaming.
GET /api/brain/logs/:agentId?lines=
Batch fetch recent parsed logs (non-streaming). Default: 50 lines.
{
"agentId": "bmad-orchestrator",
"entries": [
{ "type": "thinking", "text": "- Analyzing user request...", "ts": 1234567890 },
{ "type": "tool", "text": "\"tool_name\": \"response\"", "ts": 1234567891 }
]
}
POST /api/brain/snapshot
Capture a snapshot of agent activity. Optionally post to diary and/or share with other agents.
curl -X POST /api/brain/snapshot \
-H "Content-Type: application/json" \
-d '{
"agentId": "bmad-orchestrator",
"postToDiary": true,
"shareToAgents": ["bmad-analyst", "bmad-dev"]
}'
| Field | Type | Default | Description |
|---|---|---|---|
agentId | string | — | Agent to snapshot |
postToDiary | boolean | true | Post snapshot as diary entry |
shareToAgents | string[] | [] | Agent IDs to send the snapshot to |
WebSocket
Real-time transcript updates are available via WebSocket on port 4001 (proxied via /ws in production).
const ws = new WebSocket('wss://meet.virtualgpt.cloud/ws');
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log(data);
};
Message Types
| Type | Description |
|---|---|
transcript_update | New message added to meeting transcript |
agent_status | Agent availability/status changed |
meeting_ended | Meeting was terminated |
diary_entry | New diary entry created (from ping or snapshot) |
Agent Zero Direct API
You can also talk to agents directly (bypassing GMeet) via Agent Zero's built-in API.
POST /api_message
Send a message directly to an Agent Zero instance. Requires X-API-KEY header.
curl -X POST http://localhost:50001/api_message \
-H "Content-Type: application/json" \
-H "X-API-KEY: your-mcp-server-token" \
-d '{
"message": "Hello, who are you?",
"lifetime_hours": 24
}'
| Field | Type | Required | Description |
|---|---|---|---|
message | string | Yes | Message text |
lifetime_hours | number | No | Chat context lifetime (default: 24) |
context_id | string | No | Continue an existing conversation |
attachments | array | No | Base64-encoded file attachments |
Authentication
Agent Zero's /api_message endpoint requires the X-API-KEY header. This token is configured in .env via A0_SET_mcp_server_token.
Error Codes
| Code | Meaning |
|---|---|
200 | Success |
400 | Bad request (missing required fields) |
403 | Forbidden (container name doesn't match bmad-live-*) |
404 | Meeting, agent, or context not found |
500 | Internal server error |