im (v1)
Core Concepts
- Message: A single message in a chat, identified by
message_id (om_xxx). Supports types: text, post, image, file, audio, video, sticker, interactive (card), share_chat, share_user, merge_forward, etc.
- Chat: A group chat or P2P conversation, identified by
chat_id (oc_xxx).
- Thread: A reply thread under a message, identified by
thread_id (om_xxx or omt_xxx).
- Reaction: An emoji reaction on a message.
- Flag: A bookmark on a message or thread.
- Feed Shortcut: A chat pinned to the current user's feed sidebar, identified by
feed_card_id (an oc_xxx open_chat_id for CHAT type).
- Feed Group: A tag that groups feed cards in the feed list, identified by
feed_group_id (ofg_xxx). Members are feed cards, each identified by feed_id + feed_type. Two types: normal (members managed explicitly) and rule (members auto-derived from rules).
Resource Relationships
Chat (oc_xxx)
├── Message (om_xxx)
│ ├── Thread (reply thread)
│ ├── Reaction (emoji)
│ └── Resource (image / file / video / audio)
└── Member (user)
Important Notes
AppLink and Share Links
Prefer CLI-returned links: use chat_app_link to open joined conversations, message_app_link to open messages, and share_link to invite others to groups. If manually building a joined-conversation AppLink, use https://<applink_host>/client/chat/open?openChatId=<oc_xxx>, never chatId=<oc_xxx> or lark://...chat_id=<oc_xxx>.
Sender Name Resolution
When fetching messages (+chat-messages-list, +threads-messages-list, +messages-mget, +messages-search), the CLI shows a display name for message senders:
- Server-provided name: the read APIs return
sender_name (plus the full-i18n sender_i18n_names map) on each message sender; the CLI surfaces it as the sender's name for message senders. No name lookup and no extra permission are needed — no contact scope and no application:bot.basic_info:read.
- Fallback to id: when the server does not provide a name, the sender is shown by its id and the command still exits 0. There is no contact-directory fallback.
The raw sender_name is not duplicated in output (its value is in name); the full sender_i18n_names map (all locales) is preserved for consumers that need a specific language, alongside an optional open_bot_id (ou_) for bot senders aligned with the message-receive event channel. System messages (msg_type: system) have no sender name — that is normal, not an error.
Default message enrichment (reactions / update_time)
The four message-pulling shortcuts (+messages-mget, +chat-messages-list, +messages-search, +threads-messages-list) automatically attach a reactions block and (for edited messages) update_time to each returned message — no separate im.reactions.batch_query call is needed. Pass --no-reactions to opt out. For the full contract (output shape, the im:message.reactions:read scope requirement, and the "missing field ≠ fetch failure" data rules), read references/lark-im-message-enrichment.md.
Compact message output (--concise)
Some message-listing shortcuts support --concise for compact Markdown output. Use it when the user asks for concise output or a smaller result/file; check --help for availability and do not combine it with an explicit --format, an enabled --json, or a non-empty --jq.
Citation preservation: +chat-messages-list --concise emits plain Markdown and bypasses the normal JSON envelope, so citation-enabled runs do not expose the citations field. When citation sources must be preserved, omit --concise and use the default JSON output.
Opt-in resource auto-download (--download-resources)
+chat-messages-list, +messages-mget, and +threads-messages-list accept --download-resources to save eligible attachments into ./lark-im-resources/ and add a resources array to each message. It is off by default; stickers are not downloadable. A failed attachment is reported on that resource without aborting the message pull. Use +messages-resources-download for one attachment. See references/lark-im-message-enrichment.md for the output contract.
Folder resources are containers, not files — a folder file_key cannot be downloaded directly. Expand it first with lark-cli im files folder --recursive --file-key <folder_key> --srctype message --srcid <message_id>, then download the files inside with +messages-resources-download.
Card Messages (Interactive)
Before sending, replying with, or updating any interactive card (+messages-send / +messages-reply / messages.patch), you MUST read references/card/lark-im-card-create.md and follow its workflow. The card JSON passed to --msg-type interactive --content (send/reply) or messages.patch --data (update) must be the output of that workflow — never hand-write or copy a card payload.
Audio Messages
--audio sends a voice message and supports only Opus audio files, for example .opus files or Ogg Opus (.ogg) files. For mp3, wav, or other non-Opus audio, either convert to .opus first and keep using --audio, or send the original file as an attachment with --file.
Sending Doc Content as a Message
When sending content fetched from a Lark doc as a message, fetch the doc with --doc-format im-markdown, then send it as a message using the --markdown format. The fetched content is already in markdown; in any content-forwarding scenario, keep the fetched original text and send it in the --markdown format. Note: if the doc contains a cite tag with type="user", keep it as-is and do not strip the tag.
Flag Types
Flags support two layers:
- Message-layer flag:
(ItemTypeDefault, FlagTypeMessage) — regular message bookmark
- Feed-layer flag:
(ItemTypeThread/ItemTypeMsgThread, FlagTypeFeed) — thread as feed-layer bookmark
Item types for feed-layer flags:
- ItemTypeThread (4) = thread in a topic-style chat
- ItemTypeMsgThread (11) = thread in a regular chat
Feed Shortcut
Feed shortcuts add chats to the current user's feed sidebar. They are distinct from flags:
- Flag = bookmark on a message/thread, scoped to the user's bookmark list.
- Feed shortcut = entry in the user's feed sidebar (currently only chats).
Key limits:
- Only CHAT-type (
feed_card_id is oc_xxx) is exposed via OpenAPI; doc/app/subscription shortcuts exist internally but are not yet whitelisted.
- All three operations (create/remove/list) are user-identity only — they sign with
user_access_token.
- Batch size is 10 per call for create/remove; list is a one-page wrapper with opaque
page_token pagination.
Shortcuts(推荐优先使用)
Shortcut 是对常用操作的高级封装(lark-cli im +<verb> [flags])。有 Shortcut 的操作优先使用。
Pro 私有路由:仅当上下文出现固定标注 合并转发消息 ID: <copied_id>,共 <message_count> 条 时提取 copied_id。同一上下文可按出现顺序收集 1~10 个 ID,并按私有命令说明调用 im +shared-message-mget --message-ids ...;普通数字或 om_ Message ID 不触发。裸调用默认读取消息快照、话题回复和 reaction;仅当用户明确要求不读取话题回复或 reaction 时,分别增加 --no-thread-replies 或 --no-reactions。二进制资源在用户需要时增加 --download-resources,多个选项可组合使用。
| Shortcut |
说明 |
+chat-create |
Create a group chat or topic chat; user; --chat-mode group |
+chat-list |
List chats the current user is a member of; defaults to groups; pass --types=p2p,group to include p2p single chats (user-only); user; supports sorting, auto-pagination, --exclude-muted (user-only) |
+chat-members-list |
List members of a chat; returns separate users[] buckets; callable as user; --member-types filters which kinds to return; --page-all pagination; surfaces truncations[] when the server caps a bucket |
+chat-messages-list |
List messages in a chat or P2P conversation; user; accepts --chat-id or --user-id, resolves P2P chat_id, supports time range, --order asc/desc sorting, auto-pagination. When using this tool, be sure to preserve the citation sources. |
+chat-search |
Search visible group chats by --query keyword and/or --member-ids; user; e.g. look up chat_id by group name; supports type filters, sorting, auto-pagination, and --exclude-muted (user identity only). When using this tool, be sure to preserve the citation sources. |
+chat-update |
Update group chat name or description; user; updates a chat's name or description |
+message-read-users |
List users who read one message; user; identity-specific scopes; supports bounded auto-pagination |
+messages-mget |
Batch get messages by IDs; user; fetches up to 50 om_ message IDs, formats sender names, expands thread replies |
+shared-message-mget |
Pro 私有;读取 1~10 个 Copied Message 快照;默认补拉 thread / reaction,可用 --no-* 关闭;resource download 按需开启 |
+messages-read-status |
Batch query whether the current user read 1–50 messages; user-only; returns readable items and invalid message IDs |
+messages-reply |
Reply to a message (supports thread replies); user; supports text/markdown/post/media replies, reply-in-thread, idempotency key |
+messages-resources-download |
Download an image/file from a message; folders are not directly downloadable — expand with im files folder --recursive first, then download the files inside; user |
+messages-search |
Search messages across chats (supports keyword, sender, time range filters) with user identity; filters by chat/sender/attachment/time, supports auto-pagination via --page-all / --page-limit, enriches results via batched mget and chats batch_query. When using this tool, be sure to preserve the citation sources. |
+messages-send |
Send a message to a chat or direct message; user; sends to chat-id or user-id with text/markdown/post/media, supports idempotency key |
+threads-messages-list |
List messages in a thread; user; accepts om_/omt_ input, resolves message IDs to thread_id, supports --order asc/desc sorting, auto-pagination |
+flag-create |
Create a bookmark on a message; user-only; defaults to message-layer flag; use --flag-type feed for feed-layer flag (item_type auto-detected from chat mode) |
+flag-cancel |
Cancel (remove) a bookmark. When no --flag-type is given, best-effort double-cancel: removes message layer and (when chat_type is determinable) feed layer |
+flag-list |
List bookmarks; user-only; auto-enriches feed-type thread entries with message content; --page-all is capped by --page-limit (default 20, max 1000), and has_more=true means the result is incomplete |
+feed-shortcut-create |
Add chats to the user's feed shortcuts; user-only; oc_xxx chat IDs only; batch up to 10 per call; --head/--tail controls insertion order; partial failures return an ok:false ledger |
+feed-shortcut-remove |
Remove chats from the user's feed shortcuts; user-only; batch up to 10 per call; removing an absent shortcut is idempotent success; real per-item failures return an ok:false ledger |
+feed-shortcut-list |
List one page of the user's feed shortcuts; user-only; omit --page-token for the first page; default output enriches CHAT entries under detail; pass --no-detail to skip the extra lookup and im:chat:read scope |
+feed-group-list |
List the caller's feed groups (tags); user-only; supports --page-all auto-pagination |
+feed-group-list-item |
List feed cards in a feed group (tag); user-only; enriches each item with chat_name resolved from feed_id; supports --page-all auto-pagination |
+feed-group-query-item |
Look up specific feed cards in a feed group (tag) by ID; user-only; enriches each item with chat_name resolved from feed_id |
API Resources
lark-cli schema im.<resource>.<method> # 调用 API 前必须先查看参数结构
lark-cli im <resource> <method> [flags] # 调用 API
重要:使用原生 API 时,必须先运行 schema 查看 --data / --params 参数结构,不要猜测字段格式。
chats
get — 获取群信息。Identity: supports user only; the caller must be in the target chat to get full details, and must belong to the same tenant for internal chats.
link — 获取群分享链接。Identity: supports user only; the caller must be in the target chat, must be an owner or admin when chat sharing is restricted to owners/admins, and must belong to the same tenant for internal chats.
update — 更新群信息。Identity: supports user only.
chat.members
chat.user_setting
batch_query — 批量查询当前用户在群内的个人偏好设置 (e.g. is_muted mutes normal messages, is_mute_at_all mutes @all messages); up to 10 chats per request. Identity: user only (user_access_token); the caller must be in each target chat.
batch_update — 批量更新当前用户在群内的个人偏好设置 (e.g. is_muted mutes normal messages, is_mute_at_all mutes @all messages); up to 10 chats per request. Identity: user only (user_access_token); the caller must be in each target chat.
chat.nickname
get — 获取自己的群昵称。Get your own nickname in the chat (self-only). Identity: user only (user_access_token); returns an empty string when no nickname is set.
update — 设置自己的群昵称。Set or update your own nickname in the chat (self-only). Identity: user only (user_access_token); nickname must be a non-empty string (max 300 bytes). Use DELETE to clear it.
delete — 清空自己的群昵称。Clear your own nickname in the chat (self-only). Identity: user only (user_access_token).
chat.join_requests
list — 列出群的待审批入群申请(仅群主/管理员,user_access_token)。List pending join requests for a chat. Identity: user only (user_access_token); the caller must be the chat owner or an admin. Paginated (page_size 1-100); stop on has_more == false — page_token is returned even on the last page, so paging while it is present never terminates.
handle — 批量审批入群申请(approve/reject,仅群主/管理员,user_access_token)。Approve or reject pending join requests in bulk (1-50 items, processed in order). Identity: user only (user_access_token); the caller must be the chat owner or an admin. results[] mirrors items[] in count and order — check each result (success / failed / already_handled); exit 0 does not mean every item succeeded.
chat.managers
add_managers — 指定群管理员。Identity: supports user only; only the group owner can add managers; max 10 managers per chat (20 for super-large chats), and at most 50 users per request.
delete_managers — 删除群管理员。Identity: supports user only; only the group owner can remove managers; max 50 users or 50 users per request.
chat.moderation
get — 获取群成员发言权限。Identity: supports user only; the caller must be in the target chat and belong to the same tenant.
messages
read_status — 批量查询当前用户对消息的已读状态。Identity: user only (user_access_token); accepts up to 50 message IDs and returns readable items plus invalid message IDs.Must-read
forward — 转发消息。Identity: supports user only.
patch — 更新已发送的消息卡片。Update an interactive message card sent by the app. This CLI runs the API with user identity; the message must have been sent within the last 14 days, and content must be a JSON-serialized string no larger than 30 KB.Must-read
reactions
batch_query — 批量获取消息表情。Identity: supports user only.Must-read
create — 添加消息表情回复。Identity: supports user only; the caller must be in the conversation that contains the message.Must-read
delete — 删除消息表情回复。Identity: supports user only; the caller must be in the conversation that contains the message, and can only delete reactions added by itself.Must-read
list — 获取消息表情回复。Identity: supports user only; the caller must be in the conversation that contains the message.Must-read
threads
forward — 转发话题。Identity: supports user only.
images
create — 上传图片。Identity: supports user only; user identity requires im:resource scope on the UAT.
files
create — 上传文件。Identity: supports user only; user identity requires im:resource scope on the UAT.
pins
create — Pin 消息。Identity: supports user only.
delete — 移除 Pin 消息。Identity: supports user only.
list — 获取群内 Pin 消息。Identity: supports user only.
feed.groups
batch_add_item — Batch add feed cards to a feed group. Identity: user only (user_access_token).Must-read
batch_query — Batch query feed groups. Identity: user only (user_access_token).Must-read
batch_remove_item — Batch remove feed cards from a feed group. Identity: user only (user_access_token).Must-read
create — Create a feed group. Identity: user only (user_access_token).Must-read
delete — Delete a feed group. Identity: user only (user_access_token).Must-read
update — Update a feed group. Identity: user only (user_access_token).Must-read
权限表
| 方法 |
所需 scope |
chats.create |
im:chat:create |
chats.get |
im:chat:read |
chats.link |
im:chat:read |
chats.update |
im:chat:update |
chat.members.create |
im:chat.members:write_only |
chat.members.delete |
im:chat.members:write_only |
chat.members.get |
im:chat.members:read |
+chat-members-list |
im:chat.members:read |
chat.user_setting.batch_query |
im:chat.user_setting:read |
chat.user_setting.batch_update |
im:chat.user_setting:write |
chat.managers.add_managers |
im:chat.managers:write_only |
chat.managers.delete_managers |
im:chat.managers:write_only |
chat.moderation.get |
im:chat.moderation:read |
chat.moderation.update |
im:chat:moderation:write_only |
chat.join_requests.list |
im:chat.membership_application:read |
chat.join_requests.handle |
im:chat.membership_application:write |
+messages-read-status |
user: im:message:readonly (recommended), im:message, or im:message:get_as_user |
+message-read-users |
user: im:message:readonly (recommended), im:message, im:message:basic, or im:message:get_as_user; bot: im:message:readonly |
messages.read_status |
im:message:readonly (recommended), im:message, or im:message:get_as_user |
messages.delete |
im:message:recall |
messages.forward |
im:message |
messages.merge_forward |
im:message |
messages.read_users |
user: im:message:readonly (recommended), im:message, im:message:basic, or im:message:get_as_user; bot: im:message:readonly |
messages.patch |
im:message:update |
messages.urgent_app |
im:message.urgent |
messages.urgent_phone |
im:message.urgent:phone |
messages.urgent_sms |
im:message.urgent:sms |
reactions.batch_query |
im:message.reactions:read |
reactions.create |
im:message.reactions:write_only |
reactions.delete |
im:message.reactions:write_only |
reactions.list |
im:message.reactions:read |
threads.forward |
im:message |
images.create |
im:resource |
files.create |
im:resource |
pins.create |
im:message.pins:write_only |
pins.delete |
im:message.pins:write_only |
pins.list |
im:message.pins:read |
feed.groups.batch_add_item |
im:feed_group_v1:write |
feed.groups.batch_query |
im:feed_group_v1:read |
feed.groups.batch_remove_item |
im:feed_group_v1:write |
feed.groups.create |
im:feed_group_v1:write |
feed.groups.delete |
im:feed_group_v1:write |
feed.groups.update |
im:feed_group_v1:write |
1---2name: lark-im-33description: 飞书即时通讯:收发消息和管理群聊。发送和回复消息、搜索聊天记录、管理群聊成员、上传下载图片和文件、管理表情回复、发送应用内/短信/电话加急、发送交互卡片(Interactive Card)。当用户需要发消息、查看或搜索聊天记录、下载聊天中的文件、查看群成员、搜索群、创建群聊或话题群、管理标记数据、管理 Feed 置顶(添加/移除/查询置顶会话)、管理标签数据、发送交互卡片时使用。4---56# im (v1)78## Core Concepts910- **Message**: A single message in a chat, identified by `message_id` (om_xxx). Supports types: text, post, image, file, audio, video, sticker, interactive (card), share_chat, share_user, merge_forward, etc.11- **Chat**: A group chat or P2P conversation, identified by `chat_id` (oc_xxx).12- **Thread**: A reply thread under a message, identified by `thread_id` (om_xxx or omt_xxx).13- **Reaction**: An emoji reaction on a message.14- **Flag**: A bookmark on a message or thread.15- **Feed Shortcut**: A chat pinned to the current user's feed sidebar, identified by `feed_card_id` (an `oc_xxx` open_chat_id for CHAT type).16- **Feed Group**: A tag that groups feed cards in the feed list, identified by `feed_group_id` (ofg_xxx). Members are feed cards, each identified by `feed_id` + `feed_type`. Two types: `normal` (members managed explicitly) and `rule` (members auto-derived from rules).1718## Resource Relationships1920```21Chat (oc_xxx)22├── Message (om_xxx)23│ ├── Thread (reply thread)24│ ├── Reaction (emoji)25│ └── Resource (image / file / video / audio)26└── Member (user)27```2829## Important Notes3031### AppLink and Share Links3233Prefer CLI-returned links: use `chat_app_link` to open joined conversations, `message_app_link` to open messages, and `share_link` to invite others to groups. If manually building a joined-conversation AppLink, use `https://<applink_host>/client/chat/open?openChatId=<oc_xxx>`, never `chatId=<oc_xxx>` or `lark://...chat_id=<oc_xxx>`.343536### Sender Name Resolution3738When fetching messages (`+chat-messages-list`, `+threads-messages-list`, `+messages-mget`, `+messages-search`), the CLI shows a display name for message senders:3940- **Server-provided name**: the read APIs return `sender_name` (plus the full-i18n `sender_i18n_names` map) on each message `sender`; the CLI surfaces it as the sender's `name` for message senders. No name lookup and no extra permission are needed — **no contact scope** and no `application:bot.basic_info:read`.41- **Fallback to id**: when the server does not provide a name, the sender is shown by its id and the command still exits 0. There is no contact-directory fallback.4243The raw `sender_name` is not duplicated in output (its value is in `name`); the full `sender_i18n_names` map (all locales) is preserved for consumers that need a specific language, alongside an optional `open_bot_id` (`ou_`) for bot senders aligned with the message-receive event channel. System messages (`msg_type: system`) have no sender name — that is normal, not an error.4445### Default message enrichment (reactions / update_time)4647The four message-pulling shortcuts (`+messages-mget`, `+chat-messages-list`, `+messages-search`, `+threads-messages-list`) automatically attach a `reactions` block and (for edited messages) `update_time` to each returned message — no separate `im.reactions.batch_query` call is needed. Pass `--no-reactions` to opt out. For the full contract (output shape, the `im:message.reactions:read` scope requirement, and the "missing field ≠ fetch failure" data rules), read [`references/lark-im-message-enrichment.md`](references/lark-im-message-enrichment.md).4849### Compact message output (`--concise`)5051Some message-listing shortcuts support `--concise` for compact Markdown output. Use it when the user asks for concise output or a smaller result/file; check `--help` for availability and do not combine it with an explicit `--format`, an enabled `--json`, or a non-empty `--jq`.5253> **Citation preservation:** `+chat-messages-list --concise` emits plain Markdown and bypasses the normal JSON envelope, so citation-enabled runs do not expose the `citations` field. When citation sources must be preserved, omit `--concise` and use the default JSON output.5455### Opt-in resource auto-download (`--download-resources`)5657`+chat-messages-list`, `+messages-mget`, and `+threads-messages-list` accept `--download-resources` to save eligible attachments into `./lark-im-resources/` and add a `resources` array to each message. It is off by default; stickers are not downloadable. A failed attachment is reported on that resource without aborting the message pull. Use [`+messages-resources-download`](references/lark-im-messages-resources-download.md) for one attachment. See [`references/lark-im-message-enrichment.md`](references/lark-im-message-enrichment.md) for the output contract.5859**Folder resources** are containers, not files — a folder `file_key` cannot be downloaded directly. Expand it first with `lark-cli im files folder --recursive --file-key <folder_key> --srctype message --srcid <message_id>`, then download the files inside with [`+messages-resources-download`](references/lark-im-messages-resources-download.md).6061### Card Messages (Interactive)6263**Before sending, replying with, or updating any `interactive` card (`+messages-send` / `+messages-reply` / `messages.patch`), you MUST read [`references/card/lark-im-card-create.md`](references/card/lark-im-card-create.md) and follow its workflow.** The card JSON passed to `--msg-type interactive --content` (send/reply) or `messages.patch --data` (update) must be the output of that workflow — never hand-write or copy a card payload.6465### Audio Messages6667`--audio` sends a voice message and supports only Opus audio files, for example `.opus` files or Ogg Opus (`.ogg`) files. For `mp3`, `wav`, or other non-Opus audio, either convert to `.opus` first and keep using `--audio`, or send the original file as an attachment with `--file`.6869### Sending Doc Content as a Message7071When sending content fetched from a Lark doc as a message, fetch the doc with --doc-format im-markdown, then send it as a message using the --markdown format. The fetched content is already in markdown; in any content-forwarding scenario, keep the fetched original text and send it in the --markdown format. Note: if the doc contains a cite tag with type="user", keep it as-is and do not strip the tag.7273### Flag Types7475Flags support two layers:7677- **Message-layer flag**: `(ItemTypeDefault, FlagTypeMessage)` — regular message bookmark78- **Feed-layer flag**: `(ItemTypeThread/ItemTypeMsgThread, FlagTypeFeed)` — thread as feed-layer bookmark7980Item types for feed-layer flags:81- **ItemTypeThread** (4) = thread in a topic-style chat82- **ItemTypeMsgThread** (11) = thread in a regular chat8384### Feed Shortcut8586Feed shortcuts add chats to the current user's feed sidebar. They are distinct from flags:8788- **Flag** = bookmark on a message/thread, scoped to the user's bookmark list.89- **Feed shortcut** = entry in the user's feed sidebar (currently only chats).9091Key limits:92- Only **CHAT-type** (`feed_card_id` is `oc_xxx`) is exposed via OpenAPI; doc/app/subscription shortcuts exist internally but are not yet whitelisted.93- All three operations (create/remove/list) are **user-identity only** — they sign with `user_access_token`.94- Batch size is **10 per call** for create/remove; list is a one-page wrapper with opaque `page_token` pagination.9596## Shortcuts(推荐优先使用)9798Shortcut 是对常用操作的高级封装(`lark-cli im +<verb> [flags]`)。有 Shortcut 的操作优先使用。99100> **Pro 私有路由**:仅当上下文出现固定标注 `合并转发消息 ID: <copied_id>,共 <message_count> 条` 时提取 `copied_id`。同一上下文可按出现顺序收集 1~10 个 ID,并按[私有命令说明](references/lark-im-shared-message-mget.md)调用 `im +shared-message-mget --message-ids ...`;普通数字或 `om_` Message ID 不触发。裸调用默认读取消息快照、话题回复和 reaction;仅当用户明确要求不读取话题回复或 reaction 时,分别增加 `--no-thread-replies` 或 `--no-reactions`。二进制资源在用户需要时增加 `--download-resources`,多个选项可组合使用。101102| Shortcut | 说明 |103|----------|------|104| [`+chat-create`](references/lark-im-chat-create.md) | Create a group chat or topic chat; user; --chat-mode group|topic; private/public; invites users |105| [`+chat-list`](references/lark-im-chat-list.md) | List chats the current user is a member of; defaults to groups; pass --types=p2p,group to include p2p single chats (user-only); user; supports sorting, auto-pagination, --exclude-muted (user-only) |106| [`+chat-members-list`](references/lark-im-chat-members-list.md) | List members of a chat; returns separate users[] buckets; callable as user; --member-types filters which kinds to return; --page-all pagination; surfaces truncations[] when the server caps a bucket |107| [`+chat-messages-list`](references/lark-im-chat-messages-list.md) | List messages in a chat or P2P conversation; user; accepts --chat-id or --user-id, resolves P2P chat_id, supports time range, --order asc/desc sorting, auto-pagination. When using this tool, be sure to preserve the citation sources. |108| [`+chat-search`](references/lark-im-chat-search.md) | Search visible group chats by --query keyword and/or --member-ids; user; e.g. look up chat_id by group name; supports type filters, sorting, auto-pagination, and --exclude-muted (user identity only). When using this tool, be sure to preserve the citation sources. |109| [`+chat-update`](references/lark-im-chat-update.md) | Update group chat name or description; user; updates a chat's name or description |110| [`+message-read-users`](references/lark-im-message-read-status.md) | List users who read one message; user; identity-specific scopes; supports bounded auto-pagination |111| [`+messages-mget`](references/lark-im-messages-mget.md) | Batch get messages by IDs; user; fetches up to 50 om_ message IDs, formats sender names, expands thread replies |112| [`+shared-message-mget`](references/lark-im-shared-message-mget.md) | Pro 私有;读取 1~10 个 Copied Message 快照;默认补拉 thread / reaction,可用 `--no-*` 关闭;resource download 按需开启 |113| [`+messages-read-status`](references/lark-im-message-read-status.md) | Batch query whether the current user read 1–50 messages; user-only; returns readable items and invalid message IDs |114| [`+messages-reply`](references/lark-im-messages-reply.md) | Reply to a message (supports thread replies); user; supports text/markdown/post/media replies, reply-in-thread, idempotency key |115| [`+messages-resources-download`](references/lark-im-messages-resources-download.md) | Download an image/file from a message; folders are not directly downloadable — expand with `im files folder --recursive` first, then download the files inside; user |116| [`+messages-search`](references/lark-im-messages-search.md) | Search messages across chats (supports keyword, sender, time range filters) with user identity; filters by chat/sender/attachment/time, supports auto-pagination via `--page-all` / `--page-limit`, enriches results via batched mget and chats batch_query. When using this tool, be sure to preserve the citation sources. |117| [`+messages-send`](references/lark-im-messages-send.md) | Send a message to a chat or direct message; user; sends to chat-id or user-id with text/markdown/post/media, supports idempotency key |118| [`+threads-messages-list`](references/lark-im-threads-messages-list.md) | List messages in a thread; user; accepts om_/omt_ input, resolves message IDs to thread_id, supports --order asc/desc sorting, auto-pagination |119| [`+flag-create`](references/lark-im-flag-create.md) | Create a bookmark on a message; user-only; defaults to message-layer flag; use --flag-type feed for feed-layer flag (item_type auto-detected from chat mode) |120| [`+flag-cancel`](references/lark-im-flag-cancel.md) | Cancel (remove) a bookmark. When no --flag-type is given, best-effort double-cancel: removes message layer and (when chat_type is determinable) feed layer |121| [`+flag-list`](references/lark-im-flag-list.md) | List bookmarks; user-only; auto-enriches feed-type thread entries with message content; `--page-all` is capped by `--page-limit` (default 20, max 1000), and `has_more=true` means the result is incomplete |122| [`+feed-shortcut-create`](references/lark-im-feed-shortcut-create.md) | Add chats to the user's feed shortcuts; user-only; oc_xxx chat IDs only; batch up to 10 per call; `--head`/`--tail` controls insertion order; partial failures return an `ok:false` ledger |123| [`+feed-shortcut-remove`](references/lark-im-feed-shortcut-remove.md) | Remove chats from the user's feed shortcuts; user-only; batch up to 10 per call; removing an absent shortcut is idempotent success; real per-item failures return an `ok:false` ledger |124| [`+feed-shortcut-list`](references/lark-im-feed-shortcut-list.md) | List one page of the user's feed shortcuts; user-only; omit `--page-token` for the first page; default output enriches CHAT entries under `detail`; pass `--no-detail` to skip the extra lookup and `im:chat:read` scope |125| [`+feed-group-list`](references/lark-im-feed-group-list.md) | List the caller's feed groups (tags); user-only; supports `--page-all` auto-pagination |126| [`+feed-group-list-item`](references/lark-im-feed-group-list-item.md) | List feed cards in a feed group (tag); user-only; enriches each item with chat_name resolved from feed_id; supports --page-all auto-pagination |127| [`+feed-group-query-item`](references/lark-im-feed-group-query-item.md) | Look up specific feed cards in a feed group (tag) by ID; user-only; enriches each item with chat_name resolved from feed_id |128129## API Resources130131```bash132lark-cli schema im.<resource>.<method> # 调用 API 前必须先查看参数结构133lark-cli im <resource> <method> [flags] # 调用 API134```135136> **重要**:使用原生 API 时,必须先运行 `schema` 查看 `--data` / `--params` 参数结构,不要猜测字段格式。137138### chats139140 - `get` — 获取群信息。Identity: supports `user` only; the caller must be in the target chat to get full details, and must belong to the same tenant for internal chats.141 - `link` — 获取群分享链接。Identity: supports `user` only; the caller must be in the target chat, must be an owner or admin when chat sharing is restricted to owners/admins, and must belong to the same tenant for internal chats.142 - `update` — 更新群信息。Identity: supports `user` only.143144### chat.members145146### chat.user_setting147148 - `batch_query` — 批量查询当前用户在群内的个人偏好设置 (e.g. `is_muted` mutes normal messages, `is_mute_at_all` mutes @all messages); up to 10 chats per request. Identity: `user` only (`user_access_token`); the caller must be in each target chat.149 - `batch_update` — 批量更新当前用户在群内的个人偏好设置 (e.g. `is_muted` mutes normal messages, `is_mute_at_all` mutes @all messages); up to 10 chats per request. Identity: `user` only (`user_access_token`); the caller must be in each target chat.150151### chat.nickname152153 - `get` — 获取自己的群昵称。Get your own nickname in the chat (self-only). Identity: `user` only (`user_access_token`); returns an empty string when no nickname is set.154 - `update` — 设置自己的群昵称。Set or update your own nickname in the chat (self-only). Identity: `user` only (`user_access_token`); `nickname` must be a non-empty string (max 300 bytes). Use DELETE to clear it.155 - `delete` — 清空自己的群昵称。Clear your own nickname in the chat (self-only). Identity: `user` only (`user_access_token`).156157### chat.join_requests158159 - `list` — 列出群的待审批入群申请(仅群主/管理员,user_access_token)。List pending join requests for a chat. Identity: `user` only (`user_access_token`); the caller must be the chat owner or an admin. Paginated (`page_size` 1-100); stop on `has_more == false` — `page_token` is returned even on the last page, so paging while it is present never terminates.160 - `handle` — 批量审批入群申请(approve/reject,仅群主/管理员,user_access_token)。Approve or reject pending join requests in bulk (1-50 items, processed in order). Identity: `user` only (`user_access_token`); the caller must be the chat owner or an admin. `results[]` mirrors `items[]` in count and order — check each `result` (`success` / `failed` / `already_handled`); exit 0 does not mean every item succeeded.161162### chat.managers163164 - `add_managers` — 指定群管理员。Identity: supports `user` only; only the group owner can add managers; max 10 managers per chat (20 for super-large chats), and at most 50 users per request.165 - `delete_managers` — 删除群管理员。Identity: supports `user` only; only the group owner can remove managers; max 50 users or 50 users per request.166167### chat.moderation168169 - `get` — 获取群成员发言权限。Identity: supports `user` only; the caller must be in the target chat and belong to the same tenant.170### messages171172 - `read_status` — 批量查询当前用户对消息的已读状态。Identity: `user` only (`user_access_token`); accepts up to 50 message IDs and returns readable items plus invalid message IDs.[Must-read](references/lark-im-message-read-status.md)173 - `forward` — 转发消息。Identity: supports `user` only.174 - `patch` — 更新已发送的消息卡片。Update an interactive message card sent by the app. This CLI runs the API with user identity; the message must have been sent within the last 14 days, and `content` must be a JSON-serialized string no larger than 30 KB.[Must-read](references/card/lark-im-card-create.md)175### reactions176177 - `batch_query` — 批量获取消息表情。Identity: supports `user` only.[Must-read](references/lark-im-reactions.md)178 - `create` — 添加消息表情回复。Identity: supports `user` only; the caller must be in the conversation that contains the message.[Must-read](references/lark-im-reactions.md)179 - `delete` — 删除消息表情回复。Identity: supports `user` only; the caller must be in the conversation that contains the message, and can only delete reactions added by itself.[Must-read](references/lark-im-reactions.md)180 - `list` — 获取消息表情回复。Identity: supports `user` only; the caller must be in the conversation that contains the message.[Must-read](references/lark-im-reactions.md)181182### threads183184 - `forward` — 转发话题。Identity: supports `user` only.185186### images187188 - `create` — 上传图片。Identity: supports `user` only; user identity requires `im:resource` scope on the UAT.189190### files191192 - `create` — 上传文件。Identity: supports `user` only; user identity requires `im:resource` scope on the UAT.193194### pins195196 - `create` — Pin 消息。Identity: supports `user` only.197 - `delete` — 移除 Pin 消息。Identity: supports `user` only.198 - `list` — 获取群内 Pin 消息。Identity: supports `user` only.199200### feed.groups201202 - `batch_add_item` — Batch add feed cards to a feed group. Identity: `user` only (`user_access_token`).[Must-read](references/lark-im-feed-groups.md)203 - `batch_query` — Batch query feed groups. Identity: `user` only (`user_access_token`).[Must-read](references/lark-im-feed-groups.md)204 - `batch_remove_item` — Batch remove feed cards from a feed group. Identity: `user` only (`user_access_token`).[Must-read](references/lark-im-feed-groups.md)205 - `create` — Create a feed group. Identity: `user` only (`user_access_token`).[Must-read](references/lark-im-feed-groups.md)206 - `delete` — Delete a feed group. Identity: `user` only (`user_access_token`).[Must-read](references/lark-im-feed-groups.md)207 - `update` — Update a feed group. Identity: `user` only (`user_access_token`).[Must-read](references/lark-im-feed-groups.md)208209## 权限表210211| 方法 | 所需 scope |212|------|-----------|213| `chats.create` | `im:chat:create` |214| `chats.get` | `im:chat:read` |215| `chats.link` | `im:chat:read` |216| `chats.update` | `im:chat:update` |217| `chat.members.create` | `im:chat.members:write_only` |218| `chat.members.delete` | `im:chat.members:write_only` |219| `chat.members.get` | `im:chat.members:read` |220| `+chat-members-list` | `im:chat.members:read` |221| `chat.user_setting.batch_query` | `im:chat.user_setting:read` |222| `chat.user_setting.batch_update` | `im:chat.user_setting:write` |223| `chat.managers.add_managers` | `im:chat.managers:write_only` |224| `chat.managers.delete_managers` | `im:chat.managers:write_only` |225| `chat.moderation.get` | `im:chat.moderation:read` |226| `chat.moderation.update` | `im:chat:moderation:write_only` |227| `chat.join_requests.list` | `im:chat.membership_application:read` |228| `chat.join_requests.handle` | `im:chat.membership_application:write` |229| `+messages-read-status` | user: `im:message:readonly` (recommended), `im:message`, or `im:message:get_as_user` |230| `+message-read-users` | user: `im:message:readonly` (recommended), `im:message`, `im:message:basic`, or `im:message:get_as_user`; bot: `im:message:readonly` |231| `messages.read_status` | `im:message:readonly` (recommended), `im:message`, or `im:message:get_as_user` |232| `messages.delete` | `im:message:recall` |233| `messages.forward` | `im:message` |234| `messages.merge_forward` | `im:message` |235| `messages.read_users` | user: `im:message:readonly` (recommended), `im:message`, `im:message:basic`, or `im:message:get_as_user`; bot: `im:message:readonly` |236| `messages.patch` | `im:message:update` |237| `messages.urgent_app` | `im:message.urgent` |238| `messages.urgent_phone` | `im:message.urgent:phone` |239| `messages.urgent_sms` | `im:message.urgent:sms` |240| `reactions.batch_query` | `im:message.reactions:read` |241| `reactions.create` | `im:message.reactions:write_only` |242| `reactions.delete` | `im:message.reactions:write_only` |243| `reactions.list` | `im:message.reactions:read` |244| `threads.forward` | `im:message` |245| `images.create` | `im:resource` |246| `files.create` | `im:resource` |247| `pins.create` | `im:message.pins:write_only` |248| `pins.delete` | `im:message.pins:write_only` |249| `pins.list` | `im:message.pins:read` |250| `feed.groups.batch_add_item` | `im:feed_group_v1:write` |251| `feed.groups.batch_query` | `im:feed_group_v1:read` |252| `feed.groups.batch_remove_item` | `im:feed_group_v1:write` |253| `feed.groups.create` | `im:feed_group_v1:write` |254| `feed.groups.delete` | `im:feed_group_v1:write` |255| `feed.groups.update` | `im:feed_group_v1:write` |