> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.meetstream.ai/guides/mia-meetstream-infrastructure-agents/llms.txt.
> For full documentation content, see https://docs.meetstream.ai/guides/mia-meetstream-infrastructure-agents/llms-full.txt.

# MeetStream — MIA API Reference

MIA (MeetStream Infrastructure Agent) configurations define how an AI agent behaves when deployed into a meeting. Use these endpoints to create, retrieve, update, and delete agent configurations programmatically — no dashboard required.

**Base URL:** `https://api.meetstream.ai`
**Authentication:** `Authorization: Token <YOUR_API_KEY>`
**Content-Type:** `application/json`

Applies to: **Google Meet, Zoom, Microsoft Teams**

---
<Note>
Agent configurations require that you have configured the relevant provider API keys in MeetStream. Add keys via the MeetStream dashboard → Integrations page (or the Integrations API) before creating an agent that references those providers.
</Note>

## Endpoints

| Method | Path | Description |
|--------|------|-------------|
| `POST` | `/api/v1/mia` | Create a new agent configuration |
| `GET` | `/api/v1/mia` | Retrieve one or all agent configurations |
| `PUT` | `/api/v1/mia` | Update an existing agent configuration |
| `DELETE` | `/api/v1/mia` | Delete an agent configuration |

---

## POST /api/v1/mia

Create a new agent configuration.

### Request Body

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `agent_name` | `string` | Yes | Display name for this agent configuration |
| `mode` | `string` | Yes | `"pipeline"` or `"realtime"` — see [Operating Modes](MeetStream_MIA_Reference.md#operating-modes) |
| `model` | `object` | Yes | LLM or realtime model configuration (see below) |
| `voice` | `object` | Pipeline only | TTS voice configuration (see below) |
| `transcriber` | `object` | Pipeline only | STT transcription configuration (see below) |
| `agent` | `object` | No | Agent behavior: response modality, first message, MCP servers |
| `audio` | `object` | No | Audio processing configuration |
| `wake_word` | `object` | No | Wake word gating — pipeline mode only |
| `avatar` | `object` | No | Avatar configuration (Anam provider) |

### Nested: `model` (Pipeline Mode)

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `provider` | `string` | Yes | LLM provider: `"openai"` or `"anthropic"` |
| `model` | `string` | Yes | Model name — e.g. `"gpt-4.1"`, `"gpt-4.1-mini"` |
| `system_prompt` | `string` | Yes | System prompt defining agent personality and behavior |
| `temperature` | `number` | No | LLM temperature (0–2) |
| `max_tokens` | `integer` | No | Maximum response tokens |

### Nested: `model` (Realtime Mode)

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `provider` | `string` | Yes | Realtime provider: `"openai"`, `"xai"`, or `"google"` |
| `model` | `string` | OpenAI only | Model name — e.g. `"gpt-4o-realtime-preview"` |
| `system_prompt` | `string` | Yes | System prompt defining agent personality and behavior |
| `voice` | `string` | Yes | Voice name. OpenAI: `alloy`, `ash`, `ballad`, `coral`, `echo`, `fable`, `nova`, `onyx`, `sage`, `shimmer`, `verse`. xAI: `Ara`, `Eve`, `Leo`, `Rex`, `Sal`. Google: `Puck`, `Charon`, `Kore`, `Fenrir`, `Aoede`, `Leda`, `Orus`, `Zephyr` |
| `temperature` | `number` | No | Temperature (0–2) |
| `max_response_output_tokens` | `number` | No | Max output tokens — OpenAI only, must be a positive number |
| `thinking_config` | `object` | No | Google Gemini thinking: `{ "include_thoughts": bool, "thinking_budget": int }` |

### Nested: `voice` (Pipeline Mode)

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `provider` | `string` | Yes | TTS provider: `"openai"` or `"elevenlabs"` |
| `voice_id` | `string` | Yes | Voice identifier for the chosen provider |
| `model` | `string` | No | TTS model name — e.g. `"tts-1"`, `"eleven_turbo_v2_5"` |

### Nested: `transcriber` (Pipeline Mode)

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `provider` | `string` | Yes | STT provider: `"openai"`, `"deepgram"`, or `"assemblyai"` |
| `model` | `string` | Yes | STT model name — e.g. `"nova-3"`, `"whisper-1"` |
| `language` | `string` | No | Language code — e.g. `"en"`, `"es"` |
| `boostwords` | `array[string]` | No | Words to boost recognition accuracy |

### Nested: `agent`

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `response_type` | `string` | No | `"voice"`, `"chat"`, or `"action"` — defaults to `"voice"` |
| `first_message` | `string` | No | Greeting spoken or sent as chat when the bot first joins |
| `mcp_servers` | `array[object]` | No | MCP server configurations (see below) |

### Nested: `agent.mcp_servers[]`

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `url` | `string` | Yes | Streamable HTTP MCP endpoint (must be HTTPS) |
| `headers` | `object` | No | Authentication headers — e.g. `{ "Authorization": "Bearer <token>" }` |
| `allowed_tools` | `array[string]` | No | Whitelist of tool names. Omit to allow all tools from this server |
| `timeout` | `number` | No | Per-call timeout in seconds (default: 10) |

### Nested: `wake_word` (Pipeline Mode Only)

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `enabled` | `boolean` | No | Whether wake word gating is active |
| `words` | `array[string]` or `string` | No | Trigger phrases. Comma-separated string or array — e.g. `["hey assistant", "hello bot"]` |
| `timeout` | `number` | No | Seconds the agent stays active after the wake word is heard (default: 30) |

### Nested: `avatar`

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `enabled` | `boolean` | No | Whether the avatar is active |
| `provider` | `string` | No | Avatar provider — currently `"anam"` |
| `avatar_id` | `string` | Required when provider is `"anam"` | Avatar identifier from the Anam platform |

### Example Request — Pipeline Mode

```bash
curl -X POST https://api.meetstream.ai/api/v1/mia \
  -H "Authorization: Token <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "agent_name": "Meeting Assistant",
    "mode": "pipeline",
    "model": {
      "provider": "openai",
      "model": "gpt-4.1",
      "system_prompt": "You are a helpful meeting assistant. Summarize key decisions and track action items."
    },
    "voice": {
      "provider": "openai",
      "voice_id": "nova"
    },
    "transcriber": {
      "provider": "deepgram",
      "model": "nova-3",
      "language": "en"
    },
    "agent": {
      "response_type": "voice",
      "first_message": "Hello! I am your meeting assistant. How can I help today?"
    }
  }'
```

### Example Request — Realtime Mode

```bash
curl -X POST https://api.meetstream.ai/api/v1/mia \
  -H "Authorization: Token <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "agent_name": "Fast Voice Agent",
    "mode": "realtime",
    "model": {
      "provider": "openai",
      "model": "gpt-4o-realtime-preview",
      "system_prompt": "You are a concise, helpful assistant.",
      "voice": "alloy"
    }
  }'
```

### Example Request — Realtime Mode (xAI Grok)

```bash
curl -X POST https://api.meetstream.ai/api/v1/mia \
  -H "Authorization: Token <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "agent_name": "Grok Agent",
    "mode": "realtime",
    "model": {
      "provider": "xai",
      "system_prompt": "You are a witty and helpful meeting assistant.",
      "voice": "Ara"
    }
  }'
```

### Example Request — Realtime Mode (Google Gemini)

```bash
curl -X POST https://api.meetstream.ai/api/v1/mia \
  -H "Authorization: Token <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "agent_name": "Gemini Agent",
    "mode": "realtime",
    "model": {
      "provider": "google",
      "system_prompt": "You are a thoughtful meeting assistant.",
      "voice": "Puck",
      "thinking_config": {
        "include_thoughts": true,
        "thinking_budget": 1024
      }
    }
  }'
```

### Example Request — Pipeline Mode with Wake Words

```bash
curl -X POST https://api.meetstream.ai/api/v1/mia \
  -H "Authorization: Token <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "agent_name": "Wake Word Agent",
    "mode": "pipeline",
    "model": {
      "provider": "openai",
      "model": "gpt-4.1",
      "system_prompt": "You are a helpful meeting assistant. Only respond when addressed."
    },
    "voice": {
      "provider": "elevenlabs",
      "voice_id": "21m00Tcm4TlvDq8ikWAM"
    },
    "transcriber": {
      "provider": "deepgram",
      "model": "nova-3"
    },
    "wake_word": {
      "enabled": true,
      "words": ["hey assistant", "hello bot"],
      "timeout": 30
    }
  }'
```

### Example Request — Pipeline Mode with MCP Tools

```bash
curl -X POST https://api.meetstream.ai/api/v1/mia \
  -H "Authorization: Token <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "agent_name": "Action Agent",
    "mode": "pipeline",
    "model": {
      "provider": "openai",
      "model": "gpt-4.1",
      "system_prompt": "Listen for action items. When someone says to create a ticket, use the Linear tool to create it. Do not speak unless asked."
    },
    "voice": {
      "provider": "elevenlabs",
      "voice_id": "21m00Tcm4TlvDq8ikWAM"
    },
    "transcriber": {
      "provider": "deepgram",
      "model": "nova-3"
    },
    "agent": {
      "response_type": "action",
      "mcp_servers": [
        {
          "url": "https://your-mcp-gateway.example.com/mcp",
          "headers": { "Authorization": "Bearer <MCP_TOKEN>" },
          "allowed_tools": ["create_issue", "list_issues"]
        }
      ]
    }
  }'
```

### Response — 200 OK

```json
{
  "message": "Agent configuration created successfully.",
  "agent_config_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "agent_config": {
    "AgentConfigID": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "UserID": "usr_xxxx",
    "AgentName": "Meeting Assistant",
    "Mode": "pipeline",
    "Model": {
      "provider": "openai",
      "model": "gpt-4.1",
      "system_prompt": "You are a helpful meeting assistant."
    },
    "Voice": { "provider": "openai", "voice_id": "nova" },
    "Transcriber": { "provider": "deepgram", "model": "nova-3", "language": "en" },
    "CreatedAt": "2026-04-22T10:00:00Z",
    "UpdatedAt": "2026-04-22T10:00:00Z"
  }
}
```

---

## GET /api/v1/mia

Retrieve a specific agent configuration by ID, or list all configurations for your account.

### Query Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `agent_config_id` | `string` | No | Retrieve a specific configuration by ID |

If `agent_config_id` is omitted, all configurations for your account are returned.

### Example — List All Configurations

```bash
curl -X GET https://api.meetstream.ai/api/v1/mia \
  -H "Authorization: Token <YOUR_API_KEY>"
```

**200 OK**
```json
{
  "agent_configs": [
    {
      "AgentConfigID": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "UserID": "usr_xxxx",
      "AgentName": "Meeting Assistant",
      "Mode": "pipeline",
      "Model": { "provider": "openai", "model": "gpt-4.1", "system_prompt": "..." },
      "Voice": { "provider": "openai", "voice_id": "nova" },
      "Transcriber": { "provider": "deepgram", "model": "nova-3" },
      "CreatedAt": "2026-04-22T10:00:00Z",
      "UpdatedAt": "2026-04-22T10:00:00Z"
    }
  ],
  "count": 1
}
```

### Example — Get a Specific Configuration

```bash
curl -X GET "https://api.meetstream.ai/api/v1/mia?agent_config_id=a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
  -H "Authorization: Token <YOUR_API_KEY>"
```

**200 OK**
```json
{
  "agent_config": {
    "AgentConfigID": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "UserID": "usr_xxxx",
    "AgentName": "Meeting Assistant",
    "Mode": "pipeline",
    "Model": { "provider": "openai", "model": "gpt-4.1", "system_prompt": "..." },
    "Voice": { "provider": "openai", "voice_id": "nova" },
    "Transcriber": { "provider": "deepgram", "model": "nova-3" },
    "Agent": { "response_type": "voice", "first_message": "Hello!" },
    "CreatedAt": "2026-04-22T10:00:00Z",
    "UpdatedAt": "2026-04-22T10:00:00Z"
  }
}
```

---

## PUT /api/v1/mia

Update an existing agent configuration. Only fields present in the request body are updated — omitted fields are left unchanged.

### Request Body

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `agent_config_id` | `string` | Yes | ID of the configuration to update |
| `agent_name` | `string` | No | New display name |
| `mode` | `string` | No | Change mode: `"pipeline"` or `"realtime"`. Triggers full re-validation of all mode-specific fields. |
| `model` | `object` | No | Replace the model configuration |
| `voice` | `object` | No | Replace the voice configuration (pipeline mode) |
| `transcriber` | `object` | No | Replace the transcription configuration (pipeline mode) |
| `agent` | `object` | No | Replace agent behavior settings |
| `wake_word` | `object` | No | Replace wake word configuration |
| `audio` | `object` | No | Replace audio configuration |
| `avatar` | `object` | No | Replace avatar configuration |

> **Note:** Changing `mode` triggers full re-validation. Updating individual sections like `model`, `voice`, or `transcriber` validates that you have the required provider API keys but does not re-validate the full config structure.

### Example — Update the System Prompt

```bash
curl -X PUT https://api.meetstream.ai/api/v1/mia \
  -H "Authorization: Token <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "agent_config_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "model": {
      "provider": "openai",
      "model": "gpt-4.1-mini",
      "system_prompt": "You are a concise meeting assistant. Keep answers brief."
    }
  }'
```

### Example — Update Agent Name and Wake Word

```bash
curl -X PUT https://api.meetstream.ai/api/v1/mia \
  -H "Authorization: Token <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "agent_config_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "agent_name": "Scrum Bot",
    "wake_word": {
      "enabled": true,
      "words": ["hey scrum bot"],
      "timeout": 45
    }
  }'
```

### Example — Switch from Pipeline to Realtime Mode

```bash
curl -X PUT https://api.meetstream.ai/api/v1/mia \
  -H "Authorization: Token <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "agent_config_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "mode": "realtime",
    "model": {
      "provider": "openai",
      "model": "gpt-4o-realtime-preview",
      "system_prompt": "You are a concise meeting assistant.",
      "voice": "alloy"
    }
  }'
```

### Response — 200 OK

```json
{
  "message": "Agent configuration updated successfully.",
  "agent_config": {
    "AgentConfigID": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "UserID": "usr_xxxx",
    "AgentName": "Scrum Bot",
    "Mode": "pipeline",
    "Model": { "provider": "openai", "model": "gpt-4.1-mini", "system_prompt": "..." },
    "Voice": { "provider": "openai", "voice_id": "nova" },
    "Transcriber": { "provider": "deepgram", "model": "nova-3" },
    "WakeWord": { "enabled": true, "words": ["hey scrum bot"], "timeout": 45 },
    "UpdatedAt": "2026-04-22T11:00:00Z"
  }
}
```

---

## DELETE /api/v1/mia

Permanently delete an agent configuration. This action cannot be undone.

### Query Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `agent_config_id` | `string` | Yes | ID of the configuration to delete |

### Example

```bash
curl -X DELETE "https://api.meetstream.ai/api/v1/mia?agent_config_id=a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
  -H "Authorization: Token <YOUR_API_KEY>"
```

**200 OK**
```json
{
  "message": "Agent configuration deleted successfully."
}
```

---

## Error Codes

| HTTP Status | When it occurs |
|-------------|----------------|
| `400` | Missing required field, invalid value, unsupported provider, or provider API key not configured |
| `403` | You do not own this agent configuration |
| `404` | Agent configuration or user not found |
| `405` | HTTP method not allowed on this path |
| `500` | Internal server error |

### Common Error Responses

**Missing provider API key**
```json
{
  "message": "API key not configured for: model.provider=openai (missing OpenAIAPIKey). Add it via the Integrations API first."
}
```

**Missing required field**
```json
{
  "message": "Missing agent_name."
}
```

**Invalid mode**
```json
{
  "message": "Invalid mode: batch. Must be 'pipeline' or 'realtime'."
}
```

**Unsupported provider**
```json
{
  "message": "Unsupported model provider: cohere. Supported: ['openai', 'anthropic']"
}
```

**Invalid realtime voice**
```json
{
  "message": "Invalid OpenAI realtime voice: 'shimmy'. Supported: ['alloy', 'ash', 'ballad', 'coral', 'echo', 'fable', 'nova', 'onyx', 'sage', 'shimmer', 'verse']"
}
```

**Invalid xAI voice**
```json
{
  "message": "Invalid xAI voice: 'Bob'. Supported: ['Ara', 'Eve', 'Leo', 'Rex', 'Sal']"
}
```

**Invalid Gemini voice**
```json
{
  "message": "Invalid Gemini voice: 'Zeus'. Supported: ['Aoede', 'Charon', 'Fenrir', 'Kore', 'Leda', 'Orus', 'Puck', 'Zephyr']"
}
```

**Access denied**
```json
{
  "message": "Access denied to this agent configuration."
}
```

---

## Supported Providers Quick Reference

### Realtime Mode Providers

| Provider | Voice Options | Notes |
|----------|--------------|-------|
| `openai` | `alloy`, `ash`, `ballad`, `coral`, `echo`, `fable`, `nova`, `onyx`, `sage`, `shimmer`, `verse` | Requires `model` field |
| `xai` | `Ara`, `Eve`, `Leo`, `Rex`, `Sal` | Model is hardcoded server-side |
| `google` | `Puck`, `Charon`, `Kore`, `Fenrir`, `Aoede`, `Leda`, `Orus`, `Zephyr` | Supports `thinking_config` |

### Pipeline Mode Providers

| Component | Supported Providers |
|-----------|-------------------|
| Model (LLM) | `openai`, `anthropic` |
| Voice (TTS) | `openai`, `elevenlabs` |
| Transcriber (STT) | `openai`, `deepgram`, `assemblyai` |

---

## Using an Agent Config with a Bot

Pass `agent_config_id` when creating a bot to attach the agent to a meeting session. The agent becomes active as soon as the bot joins.

```bash
curl -X POST https://api.meetstream.ai/api/v1/bots/create_bot \
  -H "Authorization: Token <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "meeting_link": "https://meet.google.com/abc-defg-hij",
    "agent_config_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "socket_connection_url": {
      "websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge"
    },
    "live_audio_required": {
      "websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio"
    }
  }'
```

See the [Create Bot Payload Reference](https://docs.meetstream.ai/api-reference/ap-is/bot-endpoints/create-bot) for all available bot creation options.

---

## Related Guides

- [Create an AI Agent (Dashboard)](/guides/mia-meetstream-infrastructure-agents/create-mia) — Step-by-step dashboard walkthrough with MCP server setup
- [Create Bot Payload Reference](https://docs.meetstream.ai/api-reference/ap-is/bot-endpoints/create-bot) — All `create_bot` fields including `agent_config_id`