> ## Documentation Index
> Fetch the complete documentation index at: https://docs.stmlink.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> 对外开放的服务端接口有两组前缀，都用同一套鉴权：`/server/v1/...`（SRTC 与 SMeeting 的主接口）和 `/stm/srvapi/v1/...`（SMeeting 的用户体系，服务端极简对接会用到）。鉴权是 app_id + nonce + timestamp + signature 四个请求头，用 app_key 做 HMAC-SHA256 签名，只能从业务方自己的后端调用。除这两组前缀外的接口均为内部接口，不要建议客户调用。 Public server APIs use two path prefixes with the same authentication: `/server/v1/...` (the main APIs of both SRTC and SMeeting) and `/stm/srvapi/v1/...` (the SMeeting user system, used by server-side low-code integration). Authenticate with four request headers, app_id + nonce + timestamp + signature, where signature is HMAC-SHA256 keyed with app_key; call these APIs only from the customer's own backend. Any other path is internal: never suggest calling it.
> app_key 是服务端密钥，绝不能出现在客户端代码、前端配置或移动 App 里。客户端加入频道用的 token 必须由业务方后端签发后下发（SRTC 走 `/server/v1/channel/grant`，SMeeting 走 `/stm/srvapi/v1/member/grant`）。 app_key is a server-side secret and must never appear in client code, frontend config, or a mobile app. The token a client uses to join must be issued by the customer's backend and passed down to the client (SRTC: `/server/v1/channel/grant`; SMeeting: `/stm/srvapi/v1/member/grant`).
> SRTC 与 SMeeting 是上下两层不同的产品，术语不通用：SRTC 是音视频底座，说「频道 channel」「加入 / 退出」；SMeeting 建在 SRTC 之上，说「房间 room」「会议 meeting」「进入 / 退出」。回答时按用户所在的层用对应术语，不要把「房间」「会议」安到 SRTC 的接口上，也不要用「频道」「加入 / 离开」描述 SMeeting 的概念（接口标识符原样保留）。 SRTC and SMeeting are two separate layers with different terminology. SRTC is the audio/video foundation: it has channels, and users join and leave a channel. SMeeting is built on top of SRTC: it has rooms and meetings, and members enter and exit a meeting. Answer in the terms of the layer the user is working with: never apply "room" or "meeting" to SRTC APIs, and never describe SMeeting concepts in prose with "channel", "join", or "leave" (API identifiers such as `force_join` keep their literal names).
> 同一能力在各端 SDK 里的包名、类名、方法名并不相同。写示例代码时请使用文档中该端自己的 API，不要把一个端的写法套到另一个端上。苹果平台每个产品都有两套 SDK（Swift 原生与 Objective-C），两套 API 不能混用。 Package, class, and method names differ between platform SDKs for the same capability. In sample code, use the API documented for that platform; never carry one platform's code over to another. On Apple platforms each product ships two SDKs (native Swift and Objective-C) whose APIs must not be mixed.

# Enums and data structures

> Enums and structs of the SMeeting Windows SDK C++ API: StatusCode values, DisconnectReason, chat, raise-hand, camera, microphone, sharing, role, device, and network-level enums, plus SMeetingCreateMeetingModel fields with defaults, attachments, resources, and CustomPublishTrack.

## Enums

### StatusCode

| Value | Name | Description |
| - | - | - |
| 0 | OK | Success |
| 100001 | SystemError | System error |
| 100002 | NotInitialized | Not initialized |
| 100003 | MediaNotInitialized | Media not initialized |
| 100004 | ProtocolParsingError | Protocol parsing error |
| 100005 | Timeout | Timeout |
| 100006 | InvalidArgs | Invalid arguments |
| 100007 | Conflict | Conflict |
| 100008 | SdkTokenInvalid | Invalid token |
| 100009 | NetError | Network error |
| 100010 | MediaNetError | Media network error |
| 100011 | NotFound | Not found |
| 101000 | SDKFail | SDK failure |
| 101001 | DeviceFail | Device failure |
| 101002 | DeviceNoFind | Device not found |
| 101003 | UserNotFound | User not found |
| 101004 | NotDevPrivate | No device permission |
| 101005 | InvalidOperation | Invalid operation |
| 101006 | NotSupport | Not supported |
| 101007 | DealBeQuick | Operation performed too quickly |
| 101008 | MoudelNotSupport | Mode not supported |
| 101009 | BeforeSetting | Must be set first |
| 101100 | ChannelJoinError | Channel join error |
| 101101 | ChannelJoinTimeOut | Channel join timeout |
| 101200 | StreamJoinError | Stream join error |
| 101201 | StreamJoinConflict | Stream join conflict |
| 101202 | VideoCapturerError | Video capturer error |
| 101203 | NotFindStreamTrack | Stream track not found |
| 101204 | ExceedingSpecifiedQuantity | Exceeds the specified quantity |
| 201000 | SDKMeetingFail | Internal SDK error |
| 201001 | MeetingStatusReject | Rejected by room permissions |
| 201002 | MeetingHostFail | Host error or no host set |

### DisconnectReason

| Value | Name | Description |
| - | - | - |
| -1 | Error | Error |
| 1 | Self | Exited voluntarily |
| 2 | Kicked | Removed |
| 3 | Replace | Replaced by another session with the same uid |
| 4 | Timeout | Exited due to timeout |
| 5 | Destroy | Destroyed |

### ChatMsgType

| Value | Name | Description |
| - | - | - |
| 1 | Text | Text |
| 2 | File | File |
| 3 | Pic | Image |
| 4 | Sound | Audio |

### HandupType

| Value | Name | Description |
| - | - | - |
| 1 | Mic | Raise hand for the microphone |
| 2 | Camera | Raise hand for the camera |
| 3 | Chat | Raise hand for chat |

### UserHandupStep

| Value | Name | Description |
| - | - | - |
| 1 | Request | Request |
| 2 | Cancel | Cancel |
| 3 | ConfirmOpen | Approve turning on |
| 4 | RejectOpen | Decline turning on |

### CameraState

| Value | Name | Description |
| - | - | - |
| 1 | On | On |
| 2 | Off | Off |

### MicState

| Value | Name | Description |
| - | - | - |
| 1 | On | On |
| 2 | Off | Off |

### ShareType

| Value | Name | Description |
| - | - | - |
| 0 | Normal | Normal |
| 1 | Screen | Screen |
| 2 | WhiteBoard | Whiteboard |

### Role

| Value | Name | Description |
| - | - | - |
| 0 | Member | Regular member |
| 1 | Host | Host |
| 2 | CoHost | Co-host |

### DeviceType

| Value | Name | Description |
| - | - | - |
| 1 | Mic | Microphone |
| 2 | Speaker | Speaker |
| 3 | Camera | Camera |

### DeviceStatus

| Value | Name | Description |
| - | - | - |
| 2 | NoFail | Normal |
| 1 | Fail | Abnormal |

### StreamNetLevel

| Value | Name | Description |
| - | - | - |
| 0 | Good | Good |
| -1 | NotGood | Fair |
| -2 | Terrible | Poor |
| -3 | Catastrophic | Catastrophic |

***

## Data structures

### SMeetingCreateMeetingModel

Meeting creation model:

| Field | Type | Description | Default |
| - | - | - | - |
| room\_no | std::string | Room number | - |
| title | std::string | Meeting title | - |
| content | std::string | Meeting content | - |
| password | std::string | Password | - |
| meeting\_type | int | Meeting type (1: instant, 2: scheduled) | 1 |
| meeting\_mode | int | Meeting mode (1: normal, 2: composite, 3: voice, 4: training, 5: sub-meeting) | 1 |
| plan\_time | long long | Scheduled time (Unix timestamp) | 0 |
| plan\_dur | int | Scheduled duration | 0 |
| conferee | `std::vector<std::string>` | List of invitees | - |
| co\_host | `std::vector<std::string>` | List of co-hosts | - |
| maximum | int | Maximum number of people | 0 |
| end\_type | int | End type (0: extend, 1: force end) | 1 |
| entry\_mute\_policy | int | Mute-on-entry policy (1: forced, 2: off, 3: mute when more than 6 people) | 3 |
| watermark\_disabled | bool | Whether the watermark is disabled | true |
| screenshot\_disabled | bool | Whether screenshots are disabled | false |
| chat\_disabled | bool | Whether chat is disabled | false |
| auto\_record | bool | Whether to record automatically | true |
| attend\_type | int | Entry restriction type (1: unrestricted, 3: invitees only) | 1 |
| waiting\_room\_disabled | bool | Whether the waiting room is disabled | true |
| enter\_before\_host\_disabled | bool | Whether entering before the host is prevented | false |
| parent | std::string | Parent meeting ID | - |
| extend\_info | std::string | Extended info | - |

### SMeetingMeetingAttachments

Meeting attachment:

| Field | Type | Description |
| - | - | - |
| name | std::string | Name |
| key | std::string | Key |

### SMeetingResourcesModel

Resource model:

| Field | Type | Description |
| - | - | - |
| meeting\_id | std::string | Meeting ID |
| parent\_id | std::string | Parent resource ID |
| res\_type | std::string | Resource type |
| res\_key | std::string | Resource key |
| res\_name | std::string | Resource name |

### CustomPublishTrack

Custom publish track:

| Field | Type | Description |
| - | - | - |
| desc | std::string | Description |
| width | int | Width |
| height | int | Height |
| fps | int | Frame rate |
| bitrate | int | Bitrate |
| encode | int | Encoding |
