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:

FieldTypeRequiredDescription
messagestringYesThe message text to send
senderstringYesSender identifier (e.g., "user")
targetAgentsstring[]NoArray 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"]
  }'
FieldTypeDefaultDescription
agentIdstringAgent to snapshot
postToDiarybooleantruePost snapshot as diary entry
shareToAgentsstring[][]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

TypeDescription
transcript_updateNew message added to meeting transcript
agent_statusAgent availability/status changed
meeting_endedMeeting was terminated
diary_entryNew 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
  }'
FieldTypeRequiredDescription
messagestringYesMessage text
lifetime_hoursnumberNoChat context lifetime (default: 24)
context_idstringNoContinue an existing conversation
attachmentsarrayNoBase64-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

CodeMeaning
200Success
400Bad request (missing required fields)
403Forbidden (container name doesn't match bmad-live-*)
404Meeting, agent, or context not found
500Internal server error