服务端 API 概览
阅读指引:本篇是《开放平台服务端 API 指南》的总览。本套文档共 12 篇(本篇为总览),本篇说明平台可用能力与各接口请求限制总表。
文档目录
| # | 文档 | 内容 | 原指南章节 |
|---|---|---|---|
| 1 | 创建应用与取得凭据 | 应用创建流程、标识规范、凭据交付 | 第 2 章 |
| 2 | 应用级 Token | client_credentials 获取与刷新 | 第 4 章 |
| 3 | 用户授权 OAuth2 | 权限 Scope、H5 / JSSDK 授权、用户资料 | 第 3 / 5 / 6 / 7 章 |
| 4 | 素材上传与下载 | 素材类型限制、上传与原始下载 | 第 8 章 |
| 5 | 发送应用消息 | 文本 / 卡片 / 模板卡片、代发、去重重试 | 第 9 章 |
| 6 | Webhook 事件回调 | 验签、消息与组织 / 群事件、媒体下载 | 第 10 章 |
| 7 | JSSDK 配置与签名 | jsapi_ticket、config、受保护能力 | 第 11 章 |
| 8 | 发布范围与资源边界 | 可见范围与数据维度对调用的影响 | 第 12 章 |
| 9 | 组织目录同步 | 同步 Token、部门与成员可靠同步 | 第 13 章 |
| 10 | 群应用与群数据同步 | 群生命周期、群与成员增量获取 | 第 14 章 |
| 11 | Scope 映射与错误处理 | 接口映射总表、业务码、安全清单 | 第 15 / 16 章 |
编号说明:各篇标题编号沿用原《开放平台应用开发者指南》章节编号(如「9.3 文本消息」),正文中「N.N 节」「第 N 章」均指原指南对应位置,跨篇引用时对照上表即可。
文档版本
第三方接入正式稿 · 2026-09-13。面向服务号应用后端与 H5 开发者,完整说明应用凭据、OAuth2、OpenAPI、发布范围、组织与群应用可靠同步、素材、消息、Webhook 与 JSSDK。接口字段、调用流程与错误处理以本文为准;客户端 SDK 安装包及适配版本由平台接入方交付。
按任务查找
首次接入:创建应用 → 确认权限 → 获取应用 Token / 用户授权 → 选择业务接口 → 上线前检查(错误处理与安全清单)。Token 类型取决于目标接口。
- 接入准备:可用能力(本篇)、创建应用与获取凭据
- 认证与授权:权限与 Scope、应用 Token、H5 用户授权、JSSDK 用户授权、发布范围
- 用户与组织:当前授权用户信息与头像、组织目录同步、群应用与群成员同步
- 消息与素材:发送应用消息、模板卡片、代发消息、消息去重重试、素材上传下载
- 事件与回调:Webhook 验签、用户消息、卡片操作、组织与群变化、媒体下载、重试幂等
- 客户端 JSSDK:config 初始化与签名、closeWindow、openChat、JSSDK 错误码
- 接口参考:请求限制总表(本篇)、Scope 与接口映射、错误处理与安全清单
1. 可用能力
本文说明第三方服务号应用的公开接入契约。HTTP 接口须使用平台交付的服务地址;JSAPI 须运行在平台提供的兼容客户端与 SDK 中。应用取得凭据及 Scope 后,还须满足各接口的授权、发布范围、群绑定或客户端条件。
OAuth2应用 Token、用户授权 code、用户 Token、刷新和撤销。
用户资料读取当前授权用户资料,以及下载短期头像资源。
应用素材上传文件、语音、视频和图片,下载当前应用原始素材。
消息发送应用自身向用户、组织节点、全员或单个已绑定群发送消息,支持文本、素材、普通卡片和可回传菜单点击的模板卡片;也可在用户授权后向用户或群代发。
组织目录读取授权组织、成员与人员详情,并通过同步 Token 判断是否需要全量同步。
群应用群主或管理员添加应用后,应用可以同步该群及成员,并以应用身份向该群发送消息。
Webhook 事件URL 验证、用户消息、模板卡片菜单操作、组织目录与群应用变化通知、请求签名和短期媒体下载。
JSSDKready、error、getAuthCode、config、closeWindow、chooseChat 和 openChat。
重置 app_secret 时的操作要求重置会撤销该应用已经签发的应用 Token 和用户 Token。为避免仍在执行的旧凭据请求返回不可继续使用的 Token,轮换时应先暂停应用后端的换 Token 和刷新请求,完成重置及新密钥配置后再恢复,并丢弃所有使用旧 app_secret 发起的请求结果。
基础地址{OPENAPI_BASE_URL}/openapi/v1,例如 https://openapi.example.com/openapi/v1。
3.1 每个 HTTP 接口的请求限制
两类限制必须同时满足请求速率限制控制调用频率;请求规则限制 Token 类型、Scope、目标语义、参数、大小和资源边界。通过其中一类检查不代表请求一定合法。
所有 /openapi/v1/* 请求首先共享来源 IP 每分钟 300 次的全局固定窗口限制。下表“专用请求速率”在全局限制之外叠加;“无”仅表示没有额外接口级额度。同一出口 IP 的多个应用共享全局额度;不要通过切换连接或访问地址规避限制。各专用接口分别计数,同一发送接口的四种目标共享发送额度。命中全局限流时返回 HTTP 200、业务码 170108;消息、JSSDK 等专用限流同样返回 HTTP 200、170108;只有素材接口自身的专用限流返回 HTTP 429、170507。
| 接口 | 所需能力(Scope) | 专用请求速率 | 请求规则 |
|---|---|---|---|
GET /oauth2/authorize |
无固定能力;scope 参数须为应用已获授且允许用户授权的能力 | 无 | 受支持的已登录客户端入口;client_id/redirect_uri/response_type/scope/state 必填,response_type=code,回调 URI 精确匹配,state 非空且最多 256 UTF-8 字节,Scope 非空且不重复,用户须在发布范围内。 |
POST /oauth2/token |
无额外业务能力 | 无 | 请求体最大 1 MiB;支持 JSON、表单与 HTTP Basic;grant 只允许 client_credentials/authorization_code/refresh_token。多处凭据必须一致;code 5 分钟内一次性使用;refresh 成功后整组 Token 轮换。 |
POST /oauth2/user_authorization/revoke |
无额外业务能力 | 无 | 请求体最大 1 MiB,仅用户 Token;scope 非空撤销单个,省略或空字符串撤销全部;两者都会撤销相关用户 Token。 |
GET /user/profile |
user:profile:read<br>获取当前用户基础信息(用户授权) |
无 | 仅具备该能力的用户 Token;只能读取 Token 对应用户且复核当前发布范围,不接收目标用户参数。 |
GET /media/avatar/{variant} |
无额外能力 | 无 | 仅使用 profile 返回的短期签名 resource;不需要 Bearer Token,不得修改或自行拼装;失败统一为 404 空 body。 |
POST /materials |
material:manage<br>管理应用素材 |
每应用 + 来源 IP 每分钟 10 次 | 仅应用 Token;整个 multipart 最大约 20 MiB + 64 KiB;query 只能有一个 type,表单只能有一个名为 media 的文件 part。 |
GET /materials/content |
material:manage<br>管理应用素材 |
每应用 + 来源 IP 每分钟 60 次 | 仅应用 Token;只能有一个 media_id,素材须属于当前应用且可用;不支持 Range。 |
POST /messages/send<br>recipient.type=user |
message:send:user<br>发送用户消息 |
每应用 + 来源 IP 每分钟 60 次 | 严格 JSON,最大 64 KiB,仅应用 Token;用户须存在,并满足发布范围及该能力的目标策略。 |
POST /messages/send<br>recipient.type=org_node |
message:send:org_node<br>发送组织节点消息 |
每应用 + 来源 IP 每分钟 60 次 | 类型必须写 org_node,不能写 department;节点须 active 且在有效组织范围内,固定覆盖自身及当前全部后代。 |
POST /messages/send<br>recipient.type=all |
message:send:all<br>发送全员消息 |
每应用 + 来源 IP 每分钟 60 次 | 必须省略 ids;all 只表示租户全部有效用户,且仅在发布范围显式含 user:0 时允许。 |
POST /messages/send<br>recipient.type=group |
group:app<br>群应用能力 |
每应用 + 来源 IP 每分钟 60 次 | 严格 JSON,最大 64 KiB,仅应用 Token;ids 必须且只能包含一个已 active 绑定的群 ID;部门群暂停、群不可用或关系已移除时拒绝。 |
POST /messages/delegate_send |
message:delegate:send<br>代表用户发送消息(用户授权) |
每应用 + 用户每秒 5 次;另叠加每应用 + 来源 IP 每分钟 60 次 | 严格 JSON、最大 64 KiB,仅具备该能力的用户 Token;目标仅 user/group,禁止 org_node/all;不能向发送者本人代发,群目标要求发送者为有效成员。 |
GET /messages/media/download |
无额外能力 | 每应用 + 来源 IP 每分钟 60 次 | 应用 Token;只能提交 Webhook 返回的单个 resource_id,票据绑定应用与原消息且短期有效;禁止其他 query 和 Range。 |
POST /jssdk/ticket |
无额外能力 | 每应用 + 来源 IP 每分钟 60 次 | 请求体最大 1 MiB但不接收业务参数;仅应用 Token;按 expires_in 缓存复用,不得为每个页面重复申请。 |
GET /groups/changes |
group:app<br>群应用能力 |
无 | 仅应用 Token;query 只允许 cursor/limit,limit 默认 50、最大 200;首次省略 cursor,后续原样使用响应游标。 |
GET /groups/info |
group:app<br>群应用能力 |
无 | 仅应用 Token;query 必须且只能包含一个正整数 group_id;应用必须仍与该群 active 绑定。 |
GET /groups/members |
group:app<br>群应用能力 |
无 | 仅应用 Token;query 只允许 group_id/cursor/limit;首次省略 cursor 获取全量,后续使用不透明游标获取增量。 |
GET /organization/sync-state |
contact:organization:read<br>读取组织架构 |
无 | 仅具备该能力的应用 Token;可用 If-None-Match 传上次 Token;304 无 body。 |
POST /organization/sync-complete |
contact:organization:read<br>读取组织架构 |
无 | 请求体最大 8 KiB;sync_token 必填且非空,须与本轮目录读取使用的 Token 相同;版本变化返回 409。 |
GET /organization/departments |
contact:organization:read<br>读取组织架构 |
无 | query 只能省略或只含一个正整数 id;省略返回范围内全量 active 组织,提供时返回该节点与 active 后代。 |
GET /organization/department-detail |
contact:organization:read<br>读取组织架构 |
无 | query 只能有一个正整数 id;目标须 active 且处于组织发布范围内。 |
GET /organization/department-users |
contact:organization:read<br>读取组织架构 |
无 | query 只允许 id/page/page_size;id 必填;page 省略时为 1,显式提供时必须为正整数(page=0 无效);page_size 小于 100 归一为 100、大于 500 归一为 500;只含直接任职用户。 |
GET /organization/user-detail |
contact:organization:read<br>读取组织架构 |
无 | query 只能有一个正整数 user_id;用户须在有效用户范围内,返回任职仍受可见组织范围约束。 |