hyapp-server/docs/openapi/gateway.swagger.yaml

4456 lines
122 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

swagger: "2.0"
info:
title: HY Gateway Service API
version: "1.0.0"
description: |
gateway-service 对外暴露 HTTP + JSON API。
`/api/v1/**` 业务接口统一返回 `code/message/request_id/data` 外壳,并通过 `X-Request-ID` 贯穿 HTTP 响应和内部 gRPC RequestMeta。
`/healthz/**` 是健康检查接口,不使用业务响应外壳。
host: localhost:13000
basePath: /
schemes:
- http
consumes:
- application/json
produces:
- application/json
tags:
- name: health
description: Gateway 进程和依赖探测。
- name: auth
description: 登录、刷新、登出和密码初始化。
- name: tencent-im
description: 腾讯云 IM 登录票据和服务端回调入口。
- name: tencent-rtc
description: 腾讯 RTC 语音进房票据入口。
- name: files
description: App 文件和头像上传入口。
- name: users
description: 当前展示短号查询和变更。
- name: countries
description: App 注册页国家选择公开读接口。
- name: app-config
description: App 运行时配置公开读接口。
- name: devices
description: App 设备推送 token 绑定和失效。
- name: rooms
description: 房间命令入口,最终由 room-service 执行。
- name: wallet
description: App 钱包余额、币商转账和充值口径入口。
- name: resources
description: App 资源库、资源组、礼物配置和我的资源入口。
- name: messages
description: App 消息 tab后端只负责 system/activity inbox用户私聊来自腾讯云 IM SDK。
securityDefinitions:
BearerAuth:
type: apiKey
name: Authorization
in: header
description: 使用 `Bearer <JWT>`JWT 使用 HS256claims 中的 `user_id` 是数值型用户 ID 的字符串,避免 64 位 ID 精度丢失。
parameters:
RequestIDHeader:
name: X-Request-ID
in: header
required: false
type: string
description: 可选追踪 ID未传时 gateway 自动生成,并返回在响应 header 和 JSON `request_id`。该字段不是幂等键;需要幂等的写命令使用各自命令 ID其中创建房间由 gateway 生成内部 `command_id`。
DisplayUserIDPath:
name: display_user_id
in: path
required: true
type: string
description: 当前有效展示短号。
ResourceGroupIDPath:
name: group_id
in: path
required: true
type: integer
format: int64
description: 资源组 ID。
ResourceIDPath:
name: resource_id
in: path
required: true
type: integer
format: int64
description: 资源 ID。
TencentIMSDKAppID:
name: SdkAppid
in: query
required: true
type: integer
format: int64
description: 腾讯云 IM 回调携带的 SDKAppID当前入口接受 `SdkAppid` 查询名。
TencentIMCallbackCommand:
name: CallbackCommand
in: query
required: false
type: string
enum:
- Group.CallbackBeforeApplyJoinGroup
- Group.CallbackBeforeSendMsg
description: 腾讯云 IM 回调命令;如果 query 和 body 同时存在,二者必须一致。
TencentIMCallbackAuthToken:
name: CallbackAuthToken
in: query
required: false
type: string
description: 腾讯云 IM 回调鉴权 token也可通过 `X-Tencent-IM-Callback-Token` header 传入。
TencentIMCallbackTokenHeader:
name: X-Tencent-IM-Callback-Token
in: header
required: false
type: string
description: 腾讯云 IM 回调鉴权 token header。
TencentRTCSDKAppIDHeader:
name: SdkAppId
in: header
required: true
type: integer
format: int64
description: 腾讯 RTC 事件回调 header 中的 SDKAppID。
TencentRTCSignHeader:
name: Sign
in: header
required: true
type: string
description: 腾讯 RTC 事件回调签名,计算方式为 `base64(hmacsha256(callback_sign_key, raw_body))`。
responses:
BadRequest:
description: 请求体不是合法 JSON或下游返回非法参数常见 `code` 为 `INVALID_JSON`、`INVALID_ARGUMENT`、`DISPLAY_USER_ID_INVALID`。
schema:
$ref: "#/definitions/ErrorEnvelope"
Unauthorized:
description: 未通过 access token 校验,或下游返回认证失败。
schema:
$ref: "#/definitions/ErrorEnvelope"
Forbidden:
description: 已认证但被禁用、封禁或无权限。
schema:
$ref: "#/definitions/ErrorEnvelope"
NotFound:
description: 下游实体不存在。
schema:
$ref: "#/definitions/ErrorEnvelope"
Conflict:
description: 下游唯一键、状态、租约或冷却期冲突。
schema:
$ref: "#/definitions/ErrorEnvelope"
Internal:
description: gateway 或下游返回不可细分的内部错误。
schema:
$ref: "#/definitions/ErrorEnvelope"
UpstreamError:
description: gateway 调内部服务失败,或内部服务返回不可映射错误。
schema:
$ref: "#/definitions/ErrorEnvelope"
paths:
/healthz/live:
get:
tags:
- health
summary: 进程存活探测
operationId: gatewayLive
responses:
"200":
description: Gateway HTTP runtime 正在服务。
schema:
$ref: "#/definitions/HealthResponse"
"500":
description: Gateway HTTP runtime 不可用。
schema:
$ref: "#/definitions/HealthResponse"
/healthz/ready:
get:
tags:
- health
summary: 接流量就绪探测
operationId: gatewayReady
responses:
"200":
description: Gateway 可接新请求。
schema:
$ref: "#/definitions/HealthResponse"
"503":
description: Gateway 不应接新请求,失败详情在 `checks`。
schema:
$ref: "#/definitions/HealthResponse"
/api/v1/auth/account/login:
post:
tags:
- auth
summary: 账号密码登录
description: 账号就是用户当前有效短号。
operationId: loginAccountPassword
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/LoginPasswordRequest"
responses:
"200":
description: 登录成功,`data` 返回 token 集合。
schema:
$ref: "#/definitions/AuthTokenEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/auth/third-party/login:
post:
tags:
- auth
summary: 三方登录或注册
operationId: loginThirdParty
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/LoginThirdPartyRequest"
responses:
"200":
description: 登录或注册成功,`data` 返回 token 集合和 `is_new_user`。
schema:
$ref: "#/definitions/AuthTokenEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/auth/password/set:
post:
tags:
- auth
summary: 已登录用户首次设置密码
operationId: setPassword
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/SetPasswordRequest"
responses:
"200":
description: 密码设置成功。
schema:
$ref: "#/definitions/PasswordSetEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"409":
$ref: "#/responses/Conflict"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/auth/token/refresh:
post:
tags:
- auth
summary: 刷新 token
operationId: refreshToken
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/RefreshTokenRequest"
responses:
"200":
description: 刷新成功,`data` 返回新的 token 集合。
schema:
$ref: "#/definitions/AuthTokenEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/auth/logout:
post:
tags:
- auth
summary: 登出并失效 refresh session
operationId: logout
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/LogoutRequest"
responses:
"200":
description: 登出处理完成。
schema:
$ref: "#/definitions/LogoutEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/countries:
get:
tags:
- countries
summary: 获取 App 注册页可选国家
operationId: listRegistrationCountries
description: 公开读接口,只返回 user-service 判定的 `enabled=true` 国家,并按 `sort_order,country_code` 排序。
parameters:
- $ref: "#/parameters/RequestIDHeader"
responses:
"200":
description: 查询成功,`data.countries` 返回当前开放国家。
schema:
$ref: "#/definitions/CountryListEnvelope"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/app/bootstrap:
get:
tags:
- app-config
summary: 获取 App 启动配置摘要
operationId: getAppBootstrap
description: 公开读接口只返回版本、维护、feature flags、底部 tab 和配置版本号,不返回 banner、礼物或资源大列表。
parameters:
- $ref: "#/parameters/RequestIDHeader"
responses:
"200":
description: 查询成功,`data` 返回 App 启动状态机需要的轻量配置摘要。
schema:
$ref: "#/definitions/AppBootstrapEnvelope"
/api/v1/app/h5-links:
get:
tags:
- app-config
summary: 获取 App H5 入口地址
operationId: listAppH5Links
description: 公开读接口,返回后台管理系统 APP配置/H5配置 维护的 H5 地址。未配置 URL 的入口仍按固定 key 返回空字符串。
parameters:
- $ref: "#/parameters/RequestIDHeader"
responses:
"200":
description: 查询成功,`data.items` 返回固定 H5 入口集合。
schema:
$ref: "#/definitions/H5LinkListEnvelope"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/im/usersig:
get:
tags:
- tencent-im
summary: 获取腾讯云 IM UserSig
operationId: issueTencentIMUserSig
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
responses:
"200":
description: 签发成功,`data.user_id` 使用内部长 `user_id` 的十进制字符串。
schema:
$ref: "#/definitions/TencentIMUserSigEnvelope"
"401":
$ref: "#/responses/Unauthorized"
"500":
description: 腾讯云 IM SDKAppID、SecretKey 或 TTL 配置缺失fail-closed。
schema:
$ref: "#/definitions/ErrorEnvelope"
/api/v1/rtc/token:
post:
tags:
- tencent-rtc
summary: 获取腾讯 RTC 进房 UserSig
operationId: issueTencentRTCToken
description: |
gateway 使用 access token 中的内部 `user_id` 签发腾讯 RTC UserSig并在签发前调用 room-service `VerifyRoomPresence`。
当前只支持 TRTC 字符串房间 `strRoomId`,客户端不能把 `room_id` 转成数字 `roomId`。
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/TencentRTCTokenRequest"
responses:
"200":
description: 签发成功,`data.user_id` 和 `data.rtc_user_id` 都是内部长 `user_id` 的十进制字符串。
schema:
$ref: "#/definitions/TencentRTCTokenEnvelope"
"400":
description: "`room_id` 为空或不满足 `^[A-Za-z0-9_-]{1,48}$`。"
schema:
$ref: "#/definitions/ErrorEnvelope"
"401":
$ref: "#/responses/Unauthorized"
"403":
description: 用户不在房间、已被踢出或被封禁gateway 不返回 UserSig。
schema:
$ref: "#/definitions/ErrorEnvelope"
"404":
description: room-service guard 返回 `room_not_found`。
schema:
$ref: "#/definitions/ErrorEnvelope"
"500":
description: 腾讯 RTC 未启用、SDKAppID、SecretKey、TTL 或固定策略配置缺失fail-closed。
schema:
$ref: "#/definitions/ErrorEnvelope"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/tencent-rtc/callback:
post:
tags:
- tencent-rtc
summary: 腾讯 RTC 服务端事件回调
operationId: handleTencentRTCCallback
description: |
腾讯 RTC 控制台配置的房间/媒体事件回调入口。gateway 校验 `SdkAppId` 与 `Sign` 后,只消费房间退出 `104`、开始推送音频 `203`、停止推送音频 `204`。
该接口不使用业务 envelope成功或可忽略业务错误返回 `{"code":0}`。
parameters:
- $ref: "#/parameters/RequestIDHeader"
- $ref: "#/parameters/TencentRTCSDKAppIDHeader"
- $ref: "#/parameters/TencentRTCSignHeader"
- name: app_code
in: query
required: false
type: string
description: 多 App 部署时建议把腾讯控制台回调 URL 配置为携带 `app_code`,用于 room-service 租户路由。
- name: body
in: body
required: true
schema:
$ref: "#/definitions/TencentRTCCallbackRequest"
responses:
"200":
description: 回调已接受,未知事件或不可恢复业务错误也按成功 ACK避免无意义重试。
schema:
$ref: "#/definitions/TencentRTCCallbackResponse"
"400":
description: 回调 body 非法。
schema:
$ref: "#/definitions/TencentRTCCallbackResponse"
"403":
description: SDKAppID 不匹配或签名校验失败。
schema:
$ref: "#/definitions/TencentRTCCallbackResponse"
"500":
description: room-service 暂时不可用,返回非 200 让腾讯 RTC 按平台策略重试。
schema:
$ref: "#/definitions/TencentRTCCallbackResponse"
/api/v1/files/upload:
post:
tags:
- files
summary: 上传 App 通用文件
operationId: uploadFile
description: 上传到腾讯云 COS返回可直接写入业务资料的公开访问 URL该接口只要求已登录不要求注册资料已完成。
consumes:
- multipart/form-data
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: file
in: formData
required: true
type: file
description: 文件字段;单文件最大 20 MiB。
responses:
"200":
description: 上传成功,`data.url` 为 `tencent-cos.access-url` 下的对象访问地址。
schema:
$ref: "#/definitions/UploadFileEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/files/avatar/upload:
post:
tags:
- files
summary: 上传用户头像
operationId: uploadAvatar
description: 上传头像到腾讯云 COS服务端按文件头嗅探只接受 JPEG、PNG、WebP单文件最大 5 MiB。
consumes:
- multipart/form-data
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: file
in: formData
required: true
type: file
description: 头像文件字段,也兼容字段名 `avatar`。
responses:
"200":
description: 上传成功,`data.url` 可作为注册资料或用户资料里的 `avatar`。
schema:
$ref: "#/definitions/UploadFileEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/devices/push-token:
post:
tags:
- devices
summary: 绑定设备推送 token
operationId: bindPushToken
description: 资料完成后由客户端上报系统推送 tokengateway 只使用 access token 中的用户身份user-service 负责落库。
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/BindPushTokenRequest"
responses:
"200":
description: 绑定成功。
schema:
$ref: "#/definitions/BindPushTokenEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"502":
$ref: "#/responses/UpstreamError"
delete:
tags:
- devices
summary: 删除设备推送 token
operationId: deletePushToken
description: 登出、关闭通知或 token 失效时调用;`push_token` 可为空,为空时按当前用户和 `device_id` 失效。
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/DeletePushTokenRequest"
responses:
"200":
description: 删除或失效处理完成。
schema:
$ref: "#/definitions/DeletePushTokenEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/tencent-im/callback:
post:
tags:
- tencent-im
summary: 腾讯云 IM 服务端回调
operationId: handleTencentIMCallback
description: |
该接口不使用项目业务 envelope直接返回腾讯云 IM 要求的 `ActionStatus/ErrorCode/ErrorInfo`。
当前支持入群前守卫 `Group.CallbackBeforeApplyJoinGroup` 和发言前守卫 `Group.CallbackBeforeSendMsg`。
白名单外回调在通过来源校验和 SDKAppID 校验后返回允许,避免阻断腾讯云新增回调。
parameters:
- $ref: "#/parameters/TencentIMSDKAppID"
- $ref: "#/parameters/TencentIMCallbackCommand"
- $ref: "#/parameters/TencentIMCallbackAuthToken"
- $ref: "#/parameters/TencentIMCallbackTokenHeader"
- name: body
in: body
required: false
schema:
$ref: "#/definitions/TencentIMCallbackRequest"
responses:
"200":
description: 腾讯云 IM 回调处理结果;业务拒绝也返回 HTTP 200通过 `ErrorCode=1` 表示拒绝。
schema:
$ref: "#/definitions/TencentIMCallbackResponse"
"405":
description: 非 POST 请求会返回腾讯云原生结构,`ErrorCode=1`。
schema:
$ref: "#/definitions/TencentIMCallbackResponse"
/api/v1/users/by-display-user-id/{display_user_id}:
get:
tags:
- users
summary: 通过当前展示短号解析用户
operationId: resolveDisplayUserID
parameters:
- $ref: "#/parameters/RequestIDHeader"
- $ref: "#/parameters/DisplayUserIDPath"
responses:
"200":
description: 解析成功,`data` 返回短号归属。
schema:
$ref: "#/definitions/UserIdentityEnvelope"
"400":
$ref: "#/responses/BadRequest"
"404":
$ref: "#/responses/NotFound"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/users/profiles:batch:
get:
tags:
- users
summary: 批量查询会话展示资料
operationId: batchUserProfiles
description: 用于腾讯云 IM 会话列表补头像、昵称和短号;只返回展示字段,不返回登录、实名或后台身份信息。
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: user_ids
in: query
required: true
type: string
description: 逗号分隔或重复传入的用户 ID最多 100 个。
responses:
"200":
description: 查询成功。
schema:
$ref: "#/definitions/UserProfilesBatchEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/users/me/identity:
get:
tags:
- users
summary: 查询当前用户展示短号状态
operationId: getMyIdentity
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
responses:
"200":
description: 查询成功,`data` 返回当前用户短号状态。
schema:
$ref: "#/definitions/UserIdentityEnvelope"
"401":
$ref: "#/responses/Unauthorized"
"404":
$ref: "#/responses/NotFound"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/users/me/host-identity:
get:
tags:
- users
summary: 查询当前用户 Host/Agency/BD 身份
operationId: getMyHostIdentity
description: App 用于判断是否展示 H5 入口;不存在的身份返回 false不按 404 处理。
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
responses:
"200":
description: 查询成功,`data` 返回当前用户身份开关。
schema:
$ref: "#/definitions/UserHostIdentityEnvelope"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/users/me/overview:
get:
tags:
- users
summary: 我的页首屏聚合摘要
operationId: getMyOverview
description: 聚合当前用户资料、顶部计数、金币钱包卡片、VIP、Host/Agency/BD/币商身份和入口显隐。该接口不查消息红点、邀请码、钻石、美元余额、流水、成员或工资钱包、VIP、计数和角色上游失败时按字段 `unavailable=true` 局部降级。
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
responses:
"200":
description: 查询成功,`data` 返回我的页首屏渲染摘要。
schema:
$ref: "#/definitions/MyOverviewEnvelope"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"404":
$ref: "#/responses/NotFound"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/users/me/onboarding/complete:
post:
tags:
- users
summary: 完成注册页必填资料
operationId: completeMyOnboarding
description: 三方登录即注册后唯一资料提交入口;`username/avatar/gender/country` 在 user-service 同事务校验并写入。
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/CompleteOnboardingRequest"
responses:
"200":
description: 注册资料完成,`data.profile_completed=true``data.token.access_token` 是替换旧 JWT 的新 access token。
schema:
$ref: "#/definitions/CompleteOnboardingEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"404":
$ref: "#/responses/NotFound"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/users/me/profile/update:
post:
tags:
- users
summary: 修改当前用户基础资料
operationId: updateMyProfile
description: 只修改 `username`、`avatar`、`birth`;国家修改必须走独立国家接口。
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/UpdateUserProfileRequest"
responses:
"200":
description: 修改成功,`data` 返回最新用户资料。
schema:
$ref: "#/definitions/UserProfileEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"404":
$ref: "#/responses/NotFound"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/users/me/country/change:
post:
tags:
- users
summary: 修改当前用户国家
operationId: changeMyCountry
description: 国家修改单独写变更日志;同一用户按滚动 30 天冷却窗口只能成功修改一次。
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/ChangeUserCountryRequest"
responses:
"200":
description: 修改成功,`data.next_country_change_allowed_at_ms` 返回下一次可修改时间。
schema:
$ref: "#/definitions/UserProfileEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"404":
$ref: "#/responses/NotFound"
"409":
$ref: "#/responses/Conflict"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/users/me/display-id/change:
post:
tags:
- users
summary: 修改当前用户默认短号
operationId: changeMyDisplayUserID
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/ChangeDisplayUserIDRequest"
responses:
"200":
description: 修改成功,`data` 返回最新短号状态。
schema:
$ref: "#/definitions/UserIdentityEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"409":
$ref: "#/responses/Conflict"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/users/me/display-id/pretty/apply:
post:
tags:
- users
summary: 申请临时靓号
operationId: applyMyPrettyDisplayUserID
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/ApplyPrettyDisplayUserIDRequest"
responses:
"200":
description: 申请成功,`data` 返回最新短号状态和租约 ID。
schema:
$ref: "#/definitions/UserIdentityEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"409":
$ref: "#/responses/Conflict"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/rooms:
get:
tags:
- rooms
summary: 房间发现列表
operationId: listRooms
description: 按当前登录用户的服务端 region_id 查询房间发现列表;响应卡片显式返回 `im_group_id`,当前值等于 `room_id`,但客户端不能硬编码该映射。
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: tab
in: query
required: false
type: string
enum:
- hot
- new
- name: cursor
in: query
required: false
type: string
- name: limit
in: query
required: false
type: integer
format: int32
- name: q
in: query
required: false
type: string
description: 房间标题或用户 ID 搜索词;`query` 是兼容别名。
- name: query
in: query
required: false
type: string
responses:
"200":
description: 查询成功,`data.rooms[*].im_group_id` 是 JoinRoom 成功后客户端加入的腾讯 IM 房间群 ID。
schema:
$ref: "#/definitions/RoomListEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/rooms/feeds:
get:
tags:
- rooms
summary: Mine 房间关系流
operationId: listRoomFeeds
description: 查询 Mine 页下方 Visited/Friend/Following 房间流;该接口读取当前用户的房间 feed 索引,再返回房间卡片和 `im_group_id`,不作为公共房间发现列表。
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: tab
in: query
required: true
type: string
enum:
- visited
- friend
- following
- name: cursor
in: query
required: false
type: string
- name: limit
in: query
required: false
type: integer
format: int32
responses:
"200":
description: 查询成功;`visited` 由 JoinRoom 成功写入,`friend/following` 依赖关系流读模型填充。
schema:
$ref: "#/definitions/RoomListEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/rooms/me:
get:
tags:
- rooms
summary: 查询我的房间卡片
operationId: getMyRoom
description: Mine 顶部“我的房间”权威查询gateway 使用 access token user_idroom-service 直接读取 rooms 元数据并用 Room Cell 快照补齐卡片字段,不依赖发现页 `room_list_entries` 投影命中。
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
responses:
"200":
description: 查询成功,`data.has_room=false` 表示当前用户尚未创建房间;有房间时 `data.room.im_group_id` 显式返回腾讯 IM 房间群 ID。
schema:
$ref: "#/definitions/MyRoomEnvelope"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/rooms/current:
get:
tags:
- rooms
summary: 查询当前可恢复房间
operationId: getCurrentRoom
description: App 启动、回前台或网络恢复时调用gateway 使用 access token user_idroom-service 用 presence 读模型和 Room Cell 快照二次校验,不会隐式 JoinRoom。
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
responses:
"200":
description: 查询成功,`data.has_current_room=false` 表示无需恢复。
schema:
$ref: "#/definitions/CurrentRoomEnvelope"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/rooms/snapshot:
get:
tags:
- rooms
summary: 查询房间完整快照
operationId: getRoomSnapshot
description: 房间页主动同步当前 Room Cell 快照;只读,不刷新 heartbeat不隐式 JoinRoom。gateway 使用 access token user_id 作为 viewerroom-service 要求 viewer 仍在该房间。
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: room_id
in: query
required: true
type: string
pattern: "^[A-Za-z0-9_-]{1,48}$"
maxLength: 48
responses:
"200":
description: 查询成功,`data.room` 返回完整房间快照。
schema:
$ref: "#/definitions/RoomSnapshotEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"404":
$ref: "#/responses/NotFound"
"409":
$ref: "#/responses/Conflict"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/rooms/create:
post:
tags:
- rooms
summary: 创建房间
operationId: createRoom
description: |
gateway 从 access token 取当前 `user_id` 写入 room-service `RequestMeta.actor_user_id`room-service 由该 actor 确定 owner 和默认 host。
请求体不接收 `room_id`、`command_id`、`owner_user_id` 或 `host_user_id`gateway 生成内部 room_id 和 command_id。
同一个登录用户只能作为 owner 创建一个房间;已有房间时返回 409 Conflict。
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/CreateRoomRequest"
responses:
"200":
description: 创建成功,`data` 返回房间快照。
schema:
$ref: "#/definitions/CreateRoomEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"404":
$ref: "#/responses/NotFound"
"409":
$ref: "#/responses/Conflict"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/rooms/join:
post:
tags:
- rooms
summary: 加入房间
operationId: joinRoom
description: JoinRoom 是业务 presence、IM 入群和 RTC 进房的权限分界点。成功后响应返回首屏房间数据、`im.group_id` 和内嵌 `rtc.token`RTC 签发失败时仍返回房间数据,并设置 `rtc.available=false`。
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/JoinRoomRequest"
responses:
"200":
description: 加入成功,`data` 返回首屏初始化数据和可选 RTC token。
schema:
$ref: "#/definitions/JoinRoomEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"404":
$ref: "#/responses/NotFound"
"409":
$ref: "#/responses/Conflict"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/rooms/heartbeat:
post:
tags:
- rooms
summary: 刷新房间业务 presence
operationId: roomHeartbeat
description: 心跳只刷新已经存在的房间 presence用户不在房间时返回 404不会隐式 JoinRoom。
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/RoomHeartbeatRequest"
responses:
"200":
description: 心跳成功,`data` 返回刷新后的用户房间态和房间快照。
schema:
$ref: "#/definitions/RoomHeartbeatEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"404":
$ref: "#/responses/NotFound"
"409":
$ref: "#/responses/Conflict"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/rooms/leave:
post:
tags:
- rooms
summary: 离开房间
operationId: leaveRoom
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/LeaveRoomRequest"
responses:
"200":
description: 离房成功,`data` 返回最新房间快照。
schema:
$ref: "#/definitions/LeaveRoomEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"404":
$ref: "#/responses/NotFound"
"409":
$ref: "#/responses/Conflict"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/rooms/mic/up:
post:
tags:
- rooms
summary: 上麦
operationId: micUp
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/MicUpRequest"
responses:
"200":
description: 上麦成功,`data` 返回目标麦位和最新房间快照。
schema:
$ref: "#/definitions/MicUpEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"404":
$ref: "#/responses/NotFound"
"409":
$ref: "#/responses/Conflict"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/rooms/mic/down:
post:
tags:
- rooms
summary: 下麦
operationId: micDown
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/MicDownRequest"
responses:
"200":
description: 下麦成功,`data` 返回目标麦位和最新房间快照。
schema:
$ref: "#/definitions/MicDownEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"404":
$ref: "#/responses/NotFound"
"409":
$ref: "#/responses/Conflict"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/rooms/mic/change:
post:
tags:
- rooms
summary: 调整麦位
operationId: changeMicSeat
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/ChangeMicSeatRequest"
responses:
"200":
description: 调整成功,`data` 返回最新房间快照。
schema:
$ref: "#/definitions/ChangeMicSeatEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"404":
$ref: "#/responses/NotFound"
"409":
$ref: "#/responses/Conflict"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/rooms/mic/publishing/confirm:
post:
tags:
- rooms
summary: 确认 RTC 音频发布成功
operationId: confirmMicPublishing
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/ConfirmMicPublishingRequest"
responses:
"200":
description: 确认成功或旧事件被安全忽略,`data` 返回最新房间快照。
schema:
$ref: "#/definitions/ConfirmMicPublishingEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"404":
$ref: "#/responses/NotFound"
"409":
$ref: "#/responses/Conflict"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/rooms/mic/lock:
post:
tags:
- rooms
summary: 锁定或解锁麦位
operationId: setMicSeatLock
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/SetMicSeatLockRequest"
responses:
"200":
description: 锁麦状态修改成功,`data` 返回最新房间快照。
schema:
$ref: "#/definitions/SetMicSeatLockEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"404":
$ref: "#/responses/NotFound"
"409":
$ref: "#/responses/Conflict"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/rooms/chat/enabled:
post:
tags:
- rooms
summary: 开启或关闭房间公屏
operationId: setChatEnabled
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/SetChatEnabledRequest"
responses:
"200":
description: 公屏开关修改成功,`data` 返回最新房间快照。
schema:
$ref: "#/definitions/SetChatEnabledEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"404":
$ref: "#/responses/NotFound"
"409":
$ref: "#/responses/Conflict"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/rooms/admin/set:
post:
tags:
- rooms
summary: 添加或移除房间管理员
operationId: setRoomAdmin
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/SetRoomAdminRequest"
responses:
"200":
description: 管理员集合修改成功,`data` 返回最新房间快照。
schema:
$ref: "#/definitions/SetRoomAdminEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"404":
$ref: "#/responses/NotFound"
"409":
$ref: "#/responses/Conflict"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/rooms/host/transfer:
post:
tags:
- rooms
summary: 转移房间主持人
operationId: transferRoomHost
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/TransferRoomHostRequest"
responses:
"200":
description: 主持人转移成功,`data` 返回最新房间快照。
schema:
$ref: "#/definitions/TransferRoomHostEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"404":
$ref: "#/responses/NotFound"
"409":
$ref: "#/responses/Conflict"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/rooms/user/mute:
post:
tags:
- rooms
summary: 设置房间内禁言
operationId: muteUser
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/MuteUserRequest"
responses:
"200":
description: 禁言状态修改成功,`data` 返回最新房间快照。
schema:
$ref: "#/definitions/MuteUserEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"404":
$ref: "#/responses/NotFound"
"409":
$ref: "#/responses/Conflict"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/rooms/user/kick:
post:
tags:
- rooms
summary: 踢出房间用户
operationId: kickUser
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/KickUserRequest"
responses:
"200":
description: 踢人成功,`data` 返回最新房间快照。
schema:
$ref: "#/definitions/KickUserEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"404":
$ref: "#/responses/NotFound"
"409":
$ref: "#/responses/Conflict"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/rooms/user/unban:
post:
tags:
- rooms
summary: 解除房间 ban
operationId: unbanUser
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/UnbanUserRequest"
responses:
"200":
description: 解封成功,`data` 返回最新房间快照,不自动恢复 presence、麦位或管理员身份。
schema:
$ref: "#/definitions/UnbanUserEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"404":
$ref: "#/responses/NotFound"
"409":
$ref: "#/responses/Conflict"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/rooms/gift/send:
post:
tags:
- rooms
summary: 发送礼物
operationId: sendGift
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/SendGiftRequest"
responses:
"200":
description: 送礼成功,`data` 返回账单凭证、热度、本地礼物榜和房间快照。
schema:
$ref: "#/definitions/SendGiftEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"404":
$ref: "#/responses/NotFound"
"409":
$ref: "#/responses/Conflict"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/resources:
get:
tags:
- resources
summary: App 资源列表
operationId: listResources
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: resource_type
in: query
required: false
type: string
enum: [avatar_frame, coin, vehicle, chat_bubble, badge, floating_screen, gift]
- name: keyword
in: query
required: false
type: string
- name: page
in: query
required: false
type: integer
format: int32
- name: page_size
in: query
required: false
type: integer
format: int32
- name: region_id
in: query
required: false
type: integer
format: int64
description: 区域 ID传入后返回该区域和 GLOBAL 兜底礼物,不传时只返回 GLOBAL 兜底礼物。
responses:
"200":
description: 返回当前 App active 资源列表。
schema:
$ref: "#/definitions/ResourceListEnvelope"
"400":
$ref: "#/responses/BadRequest"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/resource-groups/{group_id}:
get:
tags:
- resources
summary: App 资源组详情
operationId: getResourceGroup
parameters:
- $ref: "#/parameters/RequestIDHeader"
- $ref: "#/parameters/ResourceGroupIDPath"
responses:
"200":
description: 返回 active 资源组及组内资源。
schema:
$ref: "#/definitions/ResourceGroupEnvelope"
"400":
$ref: "#/responses/BadRequest"
"404":
$ref: "#/responses/NotFound"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/gifts:
get:
tags:
- resources
summary: App 礼物列表
operationId: listGifts
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: keyword
in: query
required: false
type: string
- name: page
in: query
required: false
type: integer
format: int32
- name: page_size
in: query
required: false
type: integer
format: int32
- name: region_id
in: query
required: false
type: integer
format: int64
description: 区域 ID返回该区域和 GLOBAL 兜底礼物。
responses:
"200":
description: 返回当前 active、区域可用且在有效期内的礼物配置礼物资源必须来自 `resource_type=gift`。
schema:
$ref: "#/definitions/GiftListEnvelope"
"400":
$ref: "#/responses/BadRequest"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/users/me/resources:
get:
tags:
- resources
summary: 我的资源权益
operationId: listMyResources
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: resource_type
in: query
required: false
type: string
enum: [avatar_frame, coin, vehicle, chat_bubble, badge, floating_screen, gift]
responses:
"200":
description: 返回当前用户有效资源权益。
schema:
$ref: "#/definitions/UserResourceListEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/users/me/resources/{resource_id}/equip:
post:
tags:
- resources
summary: 佩戴我的资源
operationId: equipMyResource
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- $ref: "#/parameters/ResourceIDPath"
- name: body
in: body
required: false
schema:
$ref: "#/definitions/EquipUserResourceRequest"
responses:
"200":
description: 返回被佩戴的有效资源权益。
schema:
$ref: "#/definitions/UserResourceEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"404":
$ref: "#/responses/NotFound"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/messages/tabs:
get:
tags:
- messages
summary: 消息 tab 分区摘要
operationId: listMessageTabs
description: 返回 user/system/activity 三个分区user 分区只声明来源为腾讯云 IM SDK不返回私聊内容。
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
responses:
"200":
description: 查询成功。
schema:
$ref: "#/definitions/MessageTabsEnvelope"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/messages:
get:
tags:
- messages
summary: system/activity 消息列表
operationId: listInboxMessages
description: 只读取当前 app_code 和当前用户下 visible、未删除、未过期的 system/activity 消息,按 sent_at_ms 倒序游标分页。
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: section
in: query
required: true
type: string
enum: [system, activity]
- name: page_size
in: query
required: false
type: integer
format: int32
- name: page_token
in: query
required: false
type: string
responses:
"200":
description: 查询成功。
schema:
$ref: "#/definitions/MessageListEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/messages/read-all:
post:
tags:
- messages
summary: 标记分区全部已读
operationId: markInboxSectionRead
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/MessageReadAllRequest"
responses:
"200":
description: 已读成功;重复请求成功且 read_count 可为 0。
schema:
$ref: "#/definitions/MessageReadAllEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/messages/{message_id}/read:
post:
tags:
- messages
summary: 标记单条消息已读
operationId: markInboxMessageRead
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: message_id
in: path
required: true
type: string
responses:
"200":
description: 已读成功;重复请求不覆盖首次 read_at_ms。
schema:
$ref: "#/definitions/MessageReadEnvelope"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"404":
$ref: "#/responses/NotFound"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/messages/{message_id}:
delete:
tags:
- messages
summary: 删除单条消息
operationId: deleteInboxMessage
description: 删除是当前用户侧隐藏,不物理删除 inbox 事实;不存在、已删除或不属于当前用户均返回 NOT_FOUND。
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: message_id
in: path
required: true
type: string
responses:
"200":
description: 删除成功。
schema:
$ref: "#/definitions/MessageDeleteEnvelope"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"404":
$ref: "#/responses/NotFound"
"502":
$ref: "#/responses/UpstreamError"
/api/v1/wallet/coin-seller/transfer:
post:
tags:
- wallet
summary: 币商给玩家转金币
operationId: transferCoinFromSeller
security:
- BearerAuth: []
parameters:
- $ref: "#/parameters/RequestIDHeader"
- name: body
in: body
required: true
schema:
$ref: "#/definitions/CoinSellerTransferRequest"
responses:
"200":
description: 转账成功,`data` 返回账务交易、双方账后余额和充值金额口径。
schema:
$ref: "#/definitions/CoinSellerTransferEnvelope"
"400":
$ref: "#/responses/BadRequest"
"401":
$ref: "#/responses/Unauthorized"
"403":
$ref: "#/responses/Forbidden"
"404":
$ref: "#/responses/NotFound"
"409":
$ref: "#/responses/Conflict"
"500":
$ref: "#/responses/Internal"
"502":
$ref: "#/responses/UpstreamError"
definitions:
GatewayOKEnvelopeBase:
type: object
required:
- code
- message
- request_id
properties:
code:
type: string
enum:
- OK
message:
type: string
enum:
- ok
request_id:
type: string
description: gateway 业务 API 成功响应外壳。
ErrorEnvelope:
type: object
required:
- code
- message
- request_id
properties:
code:
type: string
enum:
- INVALID_JSON
- UNAUTHORIZED
- UPSTREAM_ERROR
- INTERNAL_ERROR
- INVALID_ARGUMENT
- RATE_LIMITED
- AUTH_FAILED
- SESSION_EXPIRED
- SESSION_REVOKED
- PASSWORD_ALREADY_SET
- DISPLAY_USER_ID_INVALID
- DISPLAY_USER_ID_EXISTS
- DISPLAY_USER_ID_COOLDOWN
- COUNTRY_CHANGE_COOLDOWN
- DISPLAY_USER_ID_NOT_FOUND
- DISPLAY_USER_ID_PRETTY_NOT_AVAILABLE
- DISPLAY_USER_ID_PRETTY_ACTIVE
- DISPLAY_USER_ID_LEASE_EXPIRED
- DISPLAY_USER_ID_PAYMENT_REQUIRED
- USER_DISABLED
- PERMISSION_DENIED
- NOT_FOUND
- CONFLICT
- INSUFFICIENT_BALANCE
message:
type: string
enum:
- invalid request body
- unauthorized
- upstream service error
- internal error
- invalid argument
- rate limited
- authentication failed
- conflict
- insufficient balance
- permission denied
- not found
request_id:
type: string
description: gateway 业务 API 失败响应外壳;失败响应不返回 `data`。
HealthResponse:
type: object
properties:
status:
type: string
enum:
- ok
- fail
service:
type: string
example: gateway-service
node_id:
type: string
time_unix_ms:
type: integer
format: int64
checks:
type: array
items:
$ref: "#/definitions/HealthCheck"
HealthCheck:
type: object
properties:
name:
type: string
example: room_grpc
status:
type: string
enum:
- ok
- fail
message:
type: string
LoginPasswordRequest:
type: object
required:
- account
- password
- device_id
description: 账号就是用户当前有效短号。
properties:
account:
type: string
example: "123456"
password:
type: string
example: "1234567"
device_id:
type: string
LoginThirdPartyRequest:
type: object
description: 三方登录即注册;首次注册时资料字段写入 user-service users 主记录。`ip`、`user_agent` 和 `country_by_ip` 由 gateway/服务端上下文生成,不接受客户端 JSON。
required:
- provider
- credential
- device_id
- platform
properties:
provider:
type: string
example: firebase
credential:
type: string
description: Firebase Auth ID token不能提交 Google account id、email 或 access token。
username:
type: string
maxLength: 64
gender:
type: string
maxLength: 32
country:
type: string
maxLength: 3
pattern: "^[A-Za-z]{2,3}$"
description: 国家主数据 country_code支持 2 到 3 位英文,服务端会转大写并要求 active。
invite_code:
type: string
maxLength: 64
description: 可选邀请码。
device_id:
type: string
maxLength: 128
device:
type: string
maxLength: 128
os_version:
type: string
maxLength: 64
avatar:
type: string
maxLength: 512
description: 绝对 http/https URL。
birth:
type: string
description: yyyy-mm-dd。
app_version:
type: string
maxLength: 64
build_number:
type: string
maxLength: 64
source:
type: string
maxLength: 64
install_channel:
type: string
maxLength: 64
campaign:
type: string
maxLength: 128
platform:
type: string
maxLength: 16
enum:
- android
- ios
language:
type: string
maxLength: 32
description: BCP 47 language tag subset例如 en-US。
timezone:
type: string
maxLength: 64
description: IANA timezone name例如 America/Los_Angeles。
SetPasswordRequest:
type: object
properties:
password:
type: string
RefreshTokenRequest:
type: object
properties:
refresh_token:
type: string
description: 登录和 refresh 响应返回CompleteOnboarding 不轮换 refresh token可能为空或缺失。
device_id:
type: string
LogoutRequest:
type: object
properties:
refresh_token:
type: string
session_id:
type: string
AuthTokenData:
type: object
properties:
user_id:
type: string
description: 数值型用户 ID 的字符串形式。
display_user_id:
type: string
default_display_user_id:
type: string
display_user_id_kind:
type: string
display_user_id_expires_at_ms:
type: integer
format: int64
session_id:
type: string
access_token:
type: string
refresh_token:
type: string
expires_in_sec:
type: integer
format: int64
token_type:
type: string
example: Bearer
is_new_user:
type: boolean
profile_completed:
type: boolean
onboarding_status:
type: string
enum:
- profile_required
- completed
PasswordSetData:
type: object
properties:
password_set:
type: boolean
LogoutData:
type: object
properties:
revoked:
type: boolean
TencentIMUserSigData:
type: object
properties:
sdk_app_id:
type: integer
format: int64
user_id:
type: string
description: 腾讯云 IM identifier当前固定使用内部长 `user_id` 的十进制字符串。
user_sig:
type: string
expire_at_ms:
type: integer
format: int64
description: 客户端登录腾讯云 IM SDK 所需票据。
TencentRTCTokenRequest:
type: object
required:
- room_id
properties:
room_id:
type: string
pattern: "^[A-Za-z0-9_-]{1,48}$"
maxLength: 48
description: 内部房间 ID同时作为腾讯 RTC `strRoomId` 使用。
TencentRTCTokenData:
type: object
properties:
sdk_app_id:
type: integer
format: int64
user_id:
type: string
description: 腾讯 RTC UserID当前固定使用内部长 `user_id` 的十进制字符串。
rtc_user_id:
type: string
description: 与 `user_id` 相同,帮助客户端显式区分业务身份和 RTC SDK 身份。
user_sig:
type: string
description: 腾讯 RTC UserSig客户端用它进入腾讯 RTC不是 SecretKey。
expire_at_ms:
type: integer
format: int64
room_id:
type: string
description: 内部房间 ID。
rtc_room_id:
type: string
description: 腾讯 RTC 字符串房间 ID值等于 `room_id`。
rtc_room_id_type:
type: string
enum:
- string
str_room_id:
type: string
description: 客户端调用 TRTC enterRoom 时使用的 `strRoomId`。
app_scene:
type: string
enum:
- voice_chat_room
role:
type: string
enum:
- audience
description: 首版固定返回 audience上麦成功后客户端再切换发布角色。
description: 客户端进入腾讯 RTC 语音房所需票据和字符串房间映射。
UploadFileData:
type: object
properties:
url:
type: string
description: 公开访问 URL可写入用户头像、房间头像或其他业务资料字段。
object_key:
type: string
description: COS object key便于后续服务端删除或审计。
content_type:
type: string
description: 服务端确认后的文件 MIME 类型。
size_bytes:
type: integer
format: int64
description: 上传文件字节数。
BindPushTokenRequest:
type: object
required:
- device_id
- push_token
- platform
properties:
device_id:
type: string
maxLength: 128
description: App 安装级稳定 ID。
push_token:
type: string
maxLength: 512
description: APNS/FCM 等系统推送 token。
provider:
type: string
maxLength: 32
description: 可选;为空时 android 默认 fcmios 默认 apns。
platform:
type: string
enum:
- android
- ios
app_version:
type: string
maxLength: 64
language:
type: string
maxLength: 32
timezone:
type: string
maxLength: 64
DeletePushTokenRequest:
type: object
required:
- device_id
properties:
device_id:
type: string
maxLength: 128
push_token:
type: string
maxLength: 512
description: 可选;为空时按当前用户和 device_id 失效 active token。
BindPushTokenData:
type: object
required:
- bound
- updated_at_ms
properties:
bound:
type: boolean
updated_at_ms:
type: integer
format: int64
DeletePushTokenData:
type: object
required:
- deleted
- updated_at_ms
properties:
deleted:
type: boolean
updated_at_ms:
type: integer
format: int64
TencentIMCallbackRequest:
type: object
properties:
CallbackCommand:
type: string
enum:
- Group.CallbackBeforeApplyJoinGroup
- Group.CallbackBeforeSendMsg
GroupId:
type: string
description: 映射为内部 `room_id`。
Requestor_Account:
type: string
description: 入群申请用户;必须是内部长 `user_id` 的十进制字符串。
From_Account:
type: string
description: 发言用户;必须是内部长 `user_id` 的十进制字符串。
Operator_Account:
type: string
description: 腾讯云 IM 回调操作者账号字段。
TencentIMCallbackResponse:
type: object
properties:
ActionStatus:
type: string
enum:
- OK
ErrorInfo:
type: string
ErrorCode:
type: integer
format: int32
enum:
- 0
- 1
description: 腾讯云 IM 原生回调响应;`ErrorCode=0` 允许,`ErrorCode=1` 拒绝本次入群或发言。
TencentRTCCallbackRequest:
type: object
properties:
EventGroupId:
type: integer
format: int32
enum:
- 1
- 2
description: 1 为房间事件组2 为媒体事件组。
EventType:
type: integer
format: int32
enum:
- 104
- 203
- 204
description: 当前只消费退出房间、开始推送音频、停止推送音频。
CallbackTs:
type: integer
format: int64
EventInfo:
type: object
properties:
RoomId:
description: 腾讯 RTC 房间 ID本系统要求等于内部字符串 `room_id`。
UserId:
type: string
description: 腾讯 RTC UserID必须是内部长 `user_id` 的十进制字符串。
EventTs:
type: integer
format: int64
EventMsTs:
type: integer
format: int64
Reason:
type: integer
format: int32
description: 腾讯 RTC 原生回调请求;签名必须基于原始 body不要重新序列化后计算。
TencentRTCCallbackResponse:
type: object
properties:
code:
type: integer
format: int32
enum:
- 0
- 1
message:
type: string
description: 腾讯 RTC 回调响应;`code=0` 表示 gateway 已接受或安全忽略该事件。
UserIdentityData:
type: object
properties:
user_id:
type: string
description: 数值型用户 ID 的字符串形式。
display_user_id:
type: string
status:
type: string
default_display_user_id:
type: string
display_user_id_kind:
type: string
display_user_id_expires_at_ms:
type: integer
format: int64
lease_id:
type: string
UserHostIdentityData:
type: object
properties:
is_host:
type: boolean
description: 用户是否拥有 active host profile。
is_agent:
type: boolean
description: 用户是否拥有 active agency owner 身份。
is_bd:
type: boolean
description: 用户是否拥有 active BD 或 BD Leader 身份。
is_bd_leader:
type: boolean
description: 用户是否拥有 active BD Leader 身份。
is_coin_seller:
type: boolean
description: 用户是否拥有 active 币商身份。
MyOverviewRolesData:
type: object
required:
- is_host
- is_agency
- is_bd
- is_bd_leader
- is_coin_seller
- pending_role_invitations
properties:
is_host:
type: boolean
is_agency:
type: boolean
is_bd:
type: boolean
is_bd_leader:
type: boolean
is_coin_seller:
type: boolean
host_status:
type: string
agency_id:
type: integer
format: int64
bd_id:
type: integer
format: int64
bd_status:
type: string
coin_seller_status:
type: string
pending_role_invitations:
type: integer
format: int64
unavailable:
type: boolean
description: 角色上游不可用时为 true此时所有特权身份按 false 返回。
MyOverviewProfileStatsData:
type: object
required:
- visitors_count
- following_count
- friends_count
- updated_at_ms
properties:
visitors_count:
type: integer
format: int64
following_count:
type: integer
format: int64
friends_count:
type: integer
format: int64
updated_at_ms:
type: integer
format: int64
unavailable:
type: boolean
description: 计数 read model 上游不可用时为 true客户端可按 0 展示。
MyOverviewWalletData:
type: object
required:
- coin_amount
- updated_at_ms
properties:
coin_amount:
type: integer
format: int64
description: 我的页首屏只展示金币余额。
updated_at_ms:
type: integer
format: int64
unavailable:
type: boolean
description: 钱包上游不可用时为 true。
MyOverviewVIPData:
type: object
properties:
level:
type: integer
format: int32
name:
type: string
active:
type: boolean
started_at_ms:
type: integer
format: int64
expires_at_ms:
type: integer
format: int64
unavailable:
type: boolean
description: VIP 上游不可用时为 true。
MyOverviewEntryData:
type: object
required:
- key
- visible
- enabled
- route
- icon_key
- badge_count
- order
properties:
key:
type: string
enum:
- store
- bag
- level
- task
- apply_host
- host_center
- agency_center
- bd_center
- bd_leader_center
- coin_seller_center
- settings
- language
visible:
type: boolean
enabled:
type: boolean
route:
type: string
icon_key:
type: string
badge_count:
type: integer
format: int64
order:
type: integer
format: int32
MyOverviewData:
type: object
required:
- profile
- profile_stats
- wallet
- vip
- roles
- entries
- server_time_ms
properties:
profile:
$ref: "#/definitions/UserProfileData"
profile_stats:
$ref: "#/definitions/MyOverviewProfileStatsData"
wallet:
$ref: "#/definitions/MyOverviewWalletData"
vip:
$ref: "#/definitions/MyOverviewVIPData"
roles:
$ref: "#/definitions/MyOverviewRolesData"
entries:
type: array
items:
$ref: "#/definitions/MyOverviewEntryData"
server_time_ms:
type: integer
format: int64
UserProfileData:
type: object
properties:
user_id:
type: string
description: 数值型用户 ID 的字符串形式。
display_user_id:
type: string
default_display_user_id:
type: string
display_user_id_kind:
type: string
display_user_id_expires_at_ms:
type: integer
format: int64
username:
type: string
gender:
type: string
country:
type: string
maxLength: 3
description: 用户选择的国家主数据 country_code。
country_id:
type: integer
format: int64
description: 国家主数据内部 ID0 表示未命中国家表。
country_name:
type: string
country_display_name:
type: string
iso_numeric:
type: string
description: ISO numeric / UNSD M49 三位字符串,客户端不能按数字解析。
phone_country_code:
type: string
description: E.164 国家呼叫码,例如 `+86`;可能为空或多个国家共享。
country_enabled:
type: boolean
description: 当前国家是否仍对 App 注册和改国家开放。
region_id:
type: integer
format: int64
description: 国家映射出的区域 ID0 表示无区域归属。
region_code:
type: string
region_name:
type: string
avatar:
type: string
birth:
type: string
description: yyyy-mm-dd。
language:
type: string
profile_completed:
type: boolean
profile_completed_at_ms:
type: integer
format: int64
onboarding_status:
type: string
enum:
- profile_required
- completed
updated_at_ms:
type: integer
format: int64
next_country_change_allowed_at_ms:
type: integer
format: int64
UserProfileBatchData:
type: object
required:
- user_id
- display_user_id
- username
- app_code
properties:
user_id:
type: string
description: 数值型用户 ID 的字符串形式,避免客户端 JS 精度丢失。
display_user_id:
type: string
username:
type: string
avatar:
type: string
gender:
type: string
country:
type: string
region_id:
type: integer
format: int64
app_code:
type: string
description: 腾讯云 IM 会话列表展示资料;不包含手机号、登录凭证、实名或后台身份字段。
UserProfilesBatchData:
type: object
required:
- profiles
properties:
profiles:
type: array
items:
$ref: "#/definitions/UserProfileBatchData"
MessageTabSectionData:
type: object
required:
- section
- title
- unread_count
- source
properties:
section:
type: string
enum:
- user
- system
- activity
title:
type: string
unread_count:
type: integer
format: int64
source:
type: string
enum:
- tencent_im_sdk
- backend
MessageTabsData:
type: object
required:
- sections
properties:
sections:
type: array
items:
$ref: "#/definitions/MessageTabSectionData"
InboxMessageData:
type: object
required:
- message_id
- title
- summary
- read
- sent_at_ms
properties:
message_id:
type: string
title:
type: string
summary:
type: string
body:
type: string
icon_url:
type: string
image_url:
type: string
action_type:
type: string
description: 服务端白名单动作,例如 wallet_withdraw_detail、activity_detail、room_detail。
action_param:
type: string
read:
type: boolean
sent_at_ms:
type: integer
format: int64
MessageListData:
type: object
required:
- section
- items
- next_page_token
properties:
section:
type: string
enum:
- system
- activity
items:
type: array
items:
$ref: "#/definitions/InboxMessageData"
next_page_token:
type: string
MessageReadAllRequest:
type: object
required:
- section
properties:
section:
type: string
enum:
- system
- activity
MessageReadData:
type: object
required:
- message_id
- read
- read_at_ms
properties:
message_id:
type: string
read:
type: boolean
read_at_ms:
type: integer
format: int64
MessageReadAllData:
type: object
required:
- section
- read_count
properties:
section:
type: string
enum:
- system
- activity
read_count:
type: integer
format: int64
MessageDeleteData:
type: object
required:
- message_id
- deleted
properties:
message_id:
type: string
deleted:
type: boolean
CountryData:
type: object
properties:
country_id:
type: integer
format: int64
country_name:
type: string
country_code:
type: string
maxLength: 3
iso_alpha3:
type: string
maxLength: 3
iso_numeric:
type: string
description: 三位 numeric 字符串。
country_display_name:
type: string
phone_country_code:
type: string
enabled:
type: boolean
flag:
type: string
sort_order:
type: integer
format: int32
CountryListData:
type: object
properties:
countries:
type: array
items:
$ref: "#/definitions/CountryData"
H5LinkData:
type: object
properties:
key:
type: string
enum:
- host-center
- bd-center
- bd-leader-center
- agency-center
- invite-user
label:
type: string
url:
type: string
description: 后台配置的 H5 URL未配置时为空字符串。
updated_at_ms:
type: integer
format: int64
description: 该入口最近更新时间;未配置时为 0。
H5LinkListData:
type: object
properties:
items:
type: array
items:
$ref: "#/definitions/H5LinkData"
total:
type: integer
format: int32
AppBootstrapTab:
type: object
properties:
key:
type: string
enum:
- rooms
- messages
- me
title:
type: string
enabled:
type: boolean
AppBootstrapData:
type: object
properties:
app_code:
type: string
server_time_ms:
type: integer
format: int64
force_upgrade:
type: boolean
maintenance:
type: boolean
minimum_version:
type: string
latest_version:
type: string
feature_flags:
type: object
additionalProperties:
type: boolean
bottom_tabs:
type: array
items:
$ref: "#/definitions/AppBootstrapTab"
config_versions:
type: object
additionalProperties:
type: string
CompleteOnboardingRequest:
type: object
required:
- username
- avatar
- gender
- country
properties:
username:
type: string
avatar:
type: string
description: HTTP/HTTPS 头像 URL。
gender:
type: string
maxLength: 32
country:
type: string
maxLength: 3
pattern: "^[A-Za-z]{2,3}$"
description: 注册页从 `/api/v1/countries` 取得的 country_code。
invite_code:
type: string
maxLength: 64
description: 可选邀请码;非空时必须解析到有效邀请人。
CompleteOnboardingData:
allOf:
- $ref: "#/definitions/UserProfileData"
- type: object
properties:
invite:
type: object
properties:
bound:
type: boolean
invite_code:
type: string
inviter_user_id:
type: string
description: 64 位用户 ID 使用字符串返回,未绑定时为空。
token:
$ref: "#/definitions/AuthTokenData"
description: 注册完成后替换旧 access tokenrefresh_token 为空或不返回。
UpdateUserProfileRequest:
type: object
properties:
username:
type: string
avatar:
type: string
birth:
type: string
description: yyyy-mm-dd传空字符串表示清空生日。
ChangeUserCountryRequest:
type: object
properties:
country:
type: string
maxLength: 3
pattern: "^[A-Za-z]{2,3}$"
description: 国家主数据 country_code服务端会转大写并要求 `enabled=true`。
ChangeDisplayUserIDRequest:
type: object
properties:
new_display_user_id:
type: string
reason:
type: string
ApplyPrettyDisplayUserIDRequest:
type: object
properties:
pretty_display_user_id:
type: string
lease_duration_ms:
type: integer
format: int64
payment_receipt_id:
type: string
ResourceData:
type: object
properties:
resource_id:
type: integer
format: int64
resource_code:
type: string
resource_type:
type: string
enum: [avatar_frame, coin, vehicle, chat_bubble, badge, floating_screen, gift]
name:
type: string
status:
type: string
grantable:
type: boolean
grant_strategy:
type: string
wallet_asset_type:
type: string
wallet_asset_amount:
type: integer
format: int64
usage_scopes:
type: array
items:
type: string
asset_url:
type: string
preview_url:
type: string
animation_url:
type: string
metadata_json:
type: string
sort_order:
type: integer
format: int32
ResourceListData:
type: object
properties:
items:
type: array
items:
$ref: "#/definitions/ResourceData"
total:
type: integer
format: int64
page:
type: integer
format: int32
page_size:
type: integer
format: int32
ResourceGroupItemData:
type: object
properties:
group_item_id:
type: integer
format: int64
item_type:
type: string
enum: [resource, wallet_asset]
resource_id:
type: integer
format: int64
resource:
$ref: "#/definitions/ResourceData"
wallet_asset_type:
type: string
enum: [COIN, DIAMOND]
wallet_asset_amount:
type: integer
format: int64
quantity:
type: integer
format: int64
duration_ms:
type: integer
format: int64
sort_order:
type: integer
format: int32
ResourceGroupData:
type: object
properties:
group_id:
type: integer
format: int64
group_code:
type: string
name:
type: string
status:
type: string
description:
type: string
sort_order:
type: integer
format: int32
items:
type: array
items:
$ref: "#/definitions/ResourceGroupItemData"
GiftConfigData:
type: object
properties:
gift_id:
type: string
resource_id:
type: integer
format: int64
resource:
$ref: "#/definitions/ResourceData"
status:
type: string
name:
type: string
presentation_json:
type: string
price_version:
type: string
gift_type_code:
type: string
enum:
- normal
- cp
- lucky
- super_lucky
- exclusive
- noble
- flag
- activity
- magic
- custom
charge_asset_type:
type: string
enum:
- COIN
- DIAMOND
coin_price:
type: integer
format: int64
gift_point_amount:
type: integer
format: int64
heat_value:
type: integer
format: int64
effective_from_ms:
type: integer
format: int64
description: 0 表示不限制开始时间。
effective_to_ms:
type: integer
format: int64
description: 0 表示不限制结束时间。
effect_types:
type: array
items:
type: string
enum:
- animation
- music
- global_broadcast
region_ids:
type: array
items:
type: integer
format: int64
GiftListData:
type: object
properties:
items:
type: array
items:
$ref: "#/definitions/GiftConfigData"
total:
type: integer
format: int64
page:
type: integer
format: int32
page_size:
type: integer
format: int32
UserResourceData:
type: object
properties:
entitlement_id:
type: string
resource_id:
type: integer
format: int64
resource:
$ref: "#/definitions/ResourceData"
status:
type: string
quantity:
type: integer
format: int64
remaining_quantity:
type: integer
format: int64
effective_at_ms:
type: integer
format: int64
expires_at_ms:
type: integer
format: int64
source_grant_id:
type: string
UserResourceListData:
type: object
properties:
items:
type: array
items:
$ref: "#/definitions/UserResourceData"
total:
type: integer
format: int32
EquipUserResourceRequest:
type: object
properties:
entitlement_id:
type: string
description: 可选;不传时服务端自动选择当前用户该资源最新有效权益。
CoinSellerTransferRequest:
type: object
required:
- command_id
- amount
- reason
description: "`target_user_id` 和 `target_display_user_id` 至少传一个;两者都是玩家短 ID/展示号,不是 user-service 内部长 ID。"
properties:
command_id:
type: string
description: 钱包命令幂等键;客户端重试同一转账必须复用该值。
target_user_id:
type: integer
format: int64
description: 目标玩家短 ID/展示号gateway 会先解析成内部 user_id 再调用 wallet-service。
target_display_user_id:
type: string
description: 目标玩家短 ID/展示号;推荐新客户端使用该字段。
amount:
type: integer
format: int64
minimum: 1
description: 转给玩家的普通金币数量。
reason:
type: string
description: 转账原因或线下凭证摘要。
CoinSellerTransferResponse:
type: object
properties:
transaction_id:
type: string
seller_balance_after:
type: integer
format: int64
description: 币商 `COIN_SELLER_COIN` 账后余额。
target_balance_after:
type: integer
format: int64
description: 目标玩家 `COIN` 账后余额。
amount:
type: integer
format: int64
recharge_usd_minor:
type: integer
format: int64
description: 本次转账按区域充值政策折算的美元最小单位金额100 表示 1 美元。
recharge_currency_code:
type: string
example: USD
recharge_policy_id:
type: integer
format: int64
recharge_policy_version:
type: string
recharge_policy_coin_amount:
type: integer
format: int64
description: 政策快照里的金币数量,例如 80000。
recharge_policy_usd_minor_amount:
type: integer
format: int64
description: 政策快照里的美元最小单位数量,例如 100。
CreateRoomRequest:
type: object
required:
- seat_count
- mode
- room_name
properties:
seat_count:
type: integer
format: int32
minimum: 1
description: 麦位数量,必须大于 0。
mode:
type: string
minLength: 1
description: 房间模式,不能为空;当前服务只保存并透出该值,不在 gateway 做枚举分发。
room_name:
type: string
minLength: 1
maxLength: 128
description: 房间展示名称必填room-service 写入 `room_ext.title` 并投影到房间列表。
room_avatar:
type: string
maxLength: 512
description: 房间头像,可选;为空时 room-service 写入默认系统头像 `hyapp://room/default-avatar`。
room_description:
type: string
maxLength: 512
description: 房间简介,可选;只写入 `room_ext.description`,不进入房间高频核心字段。
JoinRoomRequest:
type: object
properties:
room_id:
type: string
command_id:
type: string
description: 房间命令幂等键;客户端重试同一业务动作必须复用该值。未传时 gateway 自动生成新值,仅保证本次请求可执行,不保证后续 HTTP 重试幂等。
role:
type: string
RoomHeartbeatRequest:
type: object
required:
- room_id
properties:
room_id:
type: string
command_id:
type: string
description: 心跳命令幂等键建议客户端每次心跳生成新值HTTP 重试同一次心跳复用该值。
LeaveRoomRequest:
type: object
properties:
room_id:
type: string
command_id:
type: string
description: 房间命令幂等键;客户端重试同一业务动作必须复用该值。未传时 gateway 自动生成新值,仅保证本次请求可执行,不保证后续 HTTP 重试幂等。
MicUpRequest:
type: object
properties:
room_id:
type: string
command_id:
type: string
description: 房间命令幂等键;客户端重试同一业务动作必须复用该值。未传时 gateway 自动生成新值,仅保证本次请求可执行,不保证后续 HTTP 重试幂等。
seat_no:
type: integer
format: int32
MicDownRequest:
type: object
properties:
room_id:
type: string
command_id:
type: string
description: 房间命令幂等键;客户端重试同一业务动作必须复用该值。未传时 gateway 自动生成新值,仅保证本次请求可执行,不保证后续 HTTP 重试幂等。
target_user_id:
type: integer
format: int64
reason:
type: string
description: 主动下麦可为空;系统自动下麦会使用 publish_timeout 等稳定原因。
ChangeMicSeatRequest:
type: object
properties:
room_id:
type: string
command_id:
type: string
description: 房间命令幂等键;客户端重试同一业务动作必须复用该值。未传时 gateway 自动生成新值,仅保证本次请求可执行,不保证后续 HTTP 重试幂等。
target_user_id:
type: integer
format: int64
seat_no:
type: integer
format: int32
ConfirmMicPublishingRequest:
type: object
required:
- room_id
- mic_session_id
- room_version
- event_time_ms
properties:
room_id:
type: string
command_id:
type: string
description: 房间命令幂等键;客户端重试同一确认事件必须复用该值。
target_user_id:
type: integer
format: int64
description: 为空时默认确认当前登录用户RTC webhook 编排可显式传目标用户。
mic_session_id:
type: string
room_version:
type: integer
format: int64
event_time_ms:
type: integer
format: int64
source:
type: string
description: 例如 client 或 rtc_webhook。
SetMicSeatLockRequest:
type: object
properties:
room_id:
type: string
command_id:
type: string
description: 房间命令幂等键;客户端重试同一业务动作必须复用该值。未传时 gateway 自动生成新值,仅保证本次请求可执行,不保证后续 HTTP 重试幂等。
seat_no:
type: integer
format: int32
locked:
type: boolean
SetChatEnabledRequest:
type: object
properties:
room_id:
type: string
command_id:
type: string
description: 房间命令幂等键;客户端重试同一业务动作必须复用该值。未传时 gateway 自动生成新值,仅保证本次请求可执行,不保证后续 HTTP 重试幂等。
enabled:
type: boolean
SetRoomAdminRequest:
type: object
properties:
room_id:
type: string
command_id:
type: string
description: 房间命令幂等键;客户端重试同一业务动作必须复用该值。未传时 gateway 自动生成新值,仅保证本次请求可执行,不保证后续 HTTP 重试幂等。
target_user_id:
type: integer
format: int64
enabled:
type: boolean
TransferRoomHostRequest:
type: object
properties:
room_id:
type: string
command_id:
type: string
description: 房间命令幂等键;客户端重试同一业务动作必须复用该值。未传时 gateway 自动生成新值,仅保证本次请求可执行,不保证后续 HTTP 重试幂等。
target_user_id:
type: integer
format: int64
MuteUserRequest:
type: object
properties:
room_id:
type: string
command_id:
type: string
description: 房间命令幂等键;客户端重试同一业务动作必须复用该值。未传时 gateway 自动生成新值,仅保证本次请求可执行,不保证后续 HTTP 重试幂等。
target_user_id:
type: integer
format: int64
muted:
type: boolean
KickUserRequest:
type: object
properties:
room_id:
type: string
command_id:
type: string
description: 房间命令幂等键;客户端重试同一业务动作必须复用该值。未传时 gateway 自动生成新值,仅保证本次请求可执行,不保证后续 HTTP 重试幂等。
target_user_id:
type: integer
format: int64
UnbanUserRequest:
type: object
properties:
room_id:
type: string
command_id:
type: string
description: 房间命令幂等键;客户端重试同一业务动作必须复用该值。未传时 gateway 自动生成新值,仅保证本次请求可执行,不保证后续 HTTP 重试幂等。
target_user_id:
type: integer
format: int64
SendGiftRequest:
type: object
properties:
room_id:
type: string
command_id:
type: string
description: 房间命令幂等键;客户端重试同一业务动作必须复用该值。未传时 gateway 自动生成新值,仅保证本次请求可执行,不保证后续 HTTP 重试幂等。
target_user_id:
type: integer
format: int64
gift_id:
type: string
gift_count:
type: integer
format: int32
CommandResult:
type: object
properties:
applied:
type: boolean
room_version:
type: integer
format: int64
server_time_ms:
type: integer
format: int64
RoomUser:
type: object
properties:
user_id:
type: integer
format: int64
role:
type: string
joined_at_ms:
type: integer
format: int64
last_seen_at_ms:
type: integer
format: int64
SeatState:
type: object
properties:
seat_no:
type: integer
format: int32
user_id:
type: integer
format: int64
locked:
type: boolean
publish_state:
type: string
enum:
- pending_publish
- publishing
- idle
description: pending_publish 表示业务占麦成功但 RTC 尚未确认发流publishing 表示已确认发布音频。
mic_session_id:
type: string
publish_deadline_ms:
type: integer
format: int64
mic_session_room_version:
type: integer
format: int64
last_publish_event_time_ms:
type: integer
format: int64
RankItem:
type: object
properties:
user_id:
type: integer
format: int64
score:
type: integer
format: int64
gift_value:
type: integer
format: int64
updated_at_ms:
type: integer
format: int64
RoomSnapshot:
type: object
properties:
room_id:
type: string
description: App 作用域房间长 ID格式为 `<app_code>_<uuid>`。
room_short_id:
type: string
description: 房间短 ID首版等于创建者当前 `display_user_id`。
owner_user_id:
type: integer
format: int64
host_user_id:
type: integer
format: int64
mode:
type: string
status:
type: string
chat_enabled:
type: boolean
mic_seats:
type: array
items:
$ref: "#/definitions/SeatState"
online_users:
type: array
items:
$ref: "#/definitions/RoomUser"
admin_user_ids:
type: array
items:
type: integer
format: int64
ban_user_ids:
type: array
items:
type: integer
format: int64
mute_user_ids:
type: array
items:
type: integer
format: int64
gift_rank:
type: array
items:
$ref: "#/definitions/RankItem"
room_ext:
type: object
description: 扩展字段集合;创建房间展示资料固定使用 `title`、`cover_url`、`description`。
additionalProperties:
type: string
heat:
type: integer
format: int64
version:
type: integer
format: int64
RoomListItemData:
type: object
required:
- room_id
- im_group_id
properties:
room_id:
type: string
im_group_id:
type: string
description: 腾讯 IM 房间群 ID。当前等于 `room_id`,只代表目标群,不代表入群授权。
owner_user_id:
type: string
host_user_id:
type: string
title:
type: string
cover_url:
type: string
mode:
type: string
status:
type: string
heat:
type: integer
format: int64
online_count:
type: integer
format: int32
seat_count:
type: integer
format: int32
occupied_seat_count:
type: integer
format: int32
visible_region_id:
type: integer
format: int64
app_code:
type: string
room_short_id:
type: string
RoomListData:
type: object
properties:
rooms:
type: array
items:
$ref: "#/definitions/RoomListItemData"
next_cursor:
type: string
MyRoomData:
type: object
required:
- has_room
- server_time_ms
properties:
has_room:
type: boolean
room:
$ref: "#/definitions/RoomListItemData"
server_time_ms:
type: integer
format: int64
RoomInitialData:
type: object
required:
- room_id
- im_group_id
- chat_enabled
- online_count
- seat_count
- version
properties:
room_id:
type: string
im_group_id:
type: string
room_short_id:
type: string
title:
type: string
cover_url:
type: string
description:
type: string
owner_user_id:
type: string
host_user_id:
type: string
mode:
type: string
status:
type: string
chat_enabled:
type: boolean
heat:
type: integer
format: int64
online_count:
type: integer
format: int32
seat_count:
type: integer
format: int32
occupied_seat_count:
type: integer
format: int32
version:
type: integer
format: int64
RoomViewerData:
type: object
properties:
user_id:
type: string
role:
type: string
joined_at_ms:
type: integer
format: int64
last_seen_at_ms:
type: integer
format: int64
RoomSeatData:
type: object
properties:
seat_no:
type: integer
format: int32
user_id:
type: string
locked:
type: boolean
publish_state:
type: string
mic_session_id:
type: string
publish_deadline_ms:
type: integer
format: int64
RoomRankItemData:
type: object
properties:
user_id:
type: string
score:
type: integer
format: int64
gift_value:
type: integer
format: int64
updated_at_ms:
type: integer
format: int64
RoomUserProfileData:
type: object
properties:
user_id:
type: string
display_user_id:
type: string
username:
type: string
avatar:
type: string
RoomIMData:
type: object
properties:
group_id:
type: string
need_join_group:
type: boolean
RoomRTCData:
type: object
required:
- need_token
- available
properties:
need_token:
type: boolean
available:
type: boolean
token:
$ref: "#/definitions/TencentRTCTokenData"
reason:
type: string
enum:
- rtc_token_unavailable
CurrentRoomData:
type: object
required:
- has_current_room
- room_id
- room_version
- role
- mic_session_id
- publish_state
- need_join_im_group
- need_rtc_token
- server_time_ms
properties:
has_current_room:
type: boolean
room_id:
type: string
room_version:
type: integer
format: int64
role:
type: string
enum:
- owner
- host
- admin
- audience
mic_session_id:
type: string
publish_state:
type: string
enum:
- ""
- pending_publish
- publishing
need_join_im_group:
type: boolean
need_rtc_token:
type: boolean
server_time_ms:
type: integer
format: int64
RoomSnapshotData:
type: object
required:
- room
- server_time_ms
properties:
room:
$ref: "#/definitions/RoomSnapshot"
server_time_ms:
type: integer
format: int64
CreateRoomResponse:
type: object
properties:
result:
$ref: "#/definitions/CommandResult"
room:
$ref: "#/definitions/RoomSnapshot"
JoinRoomResponse:
type: object
required:
- result
- room
- viewer
- seats
- contribution_rank
- profiles
- im
- rtc
- server_time_ms
properties:
result:
$ref: "#/definitions/CommandResult"
room:
$ref: "#/definitions/RoomInitialData"
viewer:
$ref: "#/definitions/RoomViewerData"
seats:
type: array
items:
$ref: "#/definitions/RoomSeatData"
contribution_rank:
type: array
description: 首屏贡献榜,当前最多返回前 10 名;完整榜单后续走分页接口。
items:
$ref: "#/definitions/RoomRankItemData"
profiles:
type: array
description: 只包含房主、主持人、当前用户、麦位用户和首屏贡献榜用户的展示资料。
items:
$ref: "#/definitions/RoomUserProfileData"
im:
$ref: "#/definitions/RoomIMData"
rtc:
$ref: "#/definitions/RoomRTCData"
server_time_ms:
type: integer
format: int64
RoomHeartbeatResponse:
type: object
properties:
result:
$ref: "#/definitions/CommandResult"
user:
$ref: "#/definitions/RoomUser"
room:
$ref: "#/definitions/RoomSnapshot"
LeaveRoomResponse:
type: object
properties:
result:
$ref: "#/definitions/CommandResult"
room:
$ref: "#/definitions/RoomSnapshot"
MicUpResponse:
type: object
properties:
result:
$ref: "#/definitions/CommandResult"
seat_no:
type: integer
format: int32
room:
$ref: "#/definitions/RoomSnapshot"
mic_session_id:
type: string
publish_deadline_ms:
type: integer
format: int64
MicDownResponse:
type: object
properties:
result:
$ref: "#/definitions/CommandResult"
seat_no:
type: integer
format: int32
room:
$ref: "#/definitions/RoomSnapshot"
ChangeMicSeatResponse:
type: object
properties:
result:
$ref: "#/definitions/CommandResult"
room:
$ref: "#/definitions/RoomSnapshot"
ConfirmMicPublishingResponse:
type: object
properties:
result:
$ref: "#/definitions/CommandResult"
seat_no:
type: integer
format: int32
room:
$ref: "#/definitions/RoomSnapshot"
SetMicSeatLockResponse:
type: object
properties:
result:
$ref: "#/definitions/CommandResult"
room:
$ref: "#/definitions/RoomSnapshot"
SetChatEnabledResponse:
type: object
properties:
result:
$ref: "#/definitions/CommandResult"
room:
$ref: "#/definitions/RoomSnapshot"
SetRoomAdminResponse:
type: object
properties:
result:
$ref: "#/definitions/CommandResult"
room:
$ref: "#/definitions/RoomSnapshot"
TransferRoomHostResponse:
type: object
properties:
result:
$ref: "#/definitions/CommandResult"
room:
$ref: "#/definitions/RoomSnapshot"
MuteUserResponse:
type: object
properties:
result:
$ref: "#/definitions/CommandResult"
room:
$ref: "#/definitions/RoomSnapshot"
KickUserResponse:
type: object
properties:
result:
$ref: "#/definitions/CommandResult"
room:
$ref: "#/definitions/RoomSnapshot"
UnbanUserResponse:
type: object
properties:
result:
$ref: "#/definitions/CommandResult"
room:
$ref: "#/definitions/RoomSnapshot"
SendGiftResponse:
type: object
properties:
result:
$ref: "#/definitions/CommandResult"
billing_receipt_id:
type: string
room_heat:
type: integer
format: int64
gift_rank:
type: array
items:
$ref: "#/definitions/RankItem"
room:
$ref: "#/definitions/RoomSnapshot"
AuthTokenEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/AuthTokenData"
PasswordSetEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/PasswordSetData"
LogoutEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/LogoutData"
TencentIMUserSigEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/TencentIMUserSigData"
TencentRTCTokenEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/TencentRTCTokenData"
UploadFileEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/UploadFileData"
BindPushTokenEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/BindPushTokenData"
DeletePushTokenEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/DeletePushTokenData"
UserIdentityEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/UserIdentityData"
UserHostIdentityEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/UserHostIdentityData"
MyOverviewEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/MyOverviewData"
UserProfileEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/UserProfileData"
UserProfilesBatchEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/UserProfilesBatchData"
MessageTabsEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/MessageTabsData"
MessageListEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/MessageListData"
MessageReadEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/MessageReadData"
MessageReadAllEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/MessageReadAllData"
MessageDeleteEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/MessageDeleteData"
CompleteOnboardingEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/CompleteOnboardingData"
CountryListEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/CountryListData"
AppBootstrapEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/AppBootstrapData"
H5LinkListEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/H5LinkListData"
ResourceListEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/ResourceListData"
ResourceGroupEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/ResourceGroupData"
GiftListEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/GiftListData"
UserResourceListEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/UserResourceListData"
UserResourceEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/UserResourceData"
CreateRoomEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/CreateRoomResponse"
RoomListEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/RoomListData"
MyRoomEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/MyRoomData"
CurrentRoomEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/CurrentRoomData"
RoomSnapshotEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/RoomSnapshotData"
JoinRoomEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/JoinRoomResponse"
RoomHeartbeatEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/RoomHeartbeatResponse"
LeaveRoomEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/LeaveRoomResponse"
MicUpEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/MicUpResponse"
MicDownEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/MicDownResponse"
ChangeMicSeatEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/ChangeMicSeatResponse"
ConfirmMicPublishingEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/ConfirmMicPublishingResponse"
SetMicSeatLockEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/SetMicSeatLockResponse"
SetChatEnabledEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/SetChatEnabledResponse"
SetRoomAdminEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/SetRoomAdminResponse"
TransferRoomHostEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/TransferRoomHostResponse"
MuteUserEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/MuteUserResponse"
KickUserEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/KickUserResponse"
UnbanUserEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/UnbanUserResponse"
SendGiftEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/SendGiftResponse"
CoinSellerTransferEnvelope:
allOf:
- $ref: "#/definitions/GatewayOKEnvelopeBase"
- type: object
properties:
data:
$ref: "#/definitions/CoinSellerTransferResponse"