目录 我想要 … 选择你的打算;下面只列出所需步骤。完整的参考文档在更下方。
构建机器人 接入我的应用 在我的网站上用 tellmelo 登录 嵌入 GIF 和视频在你的某个群组中,通过群组菜单的“机器人 → 我的机器人”创建机器人,设置头像、名称和 @名称。它的令牌只显示一次。 分享它的“添加机器人”链接,或将其提交到机器人目录,经团队审核后会出现在那里;可以管理群组角色的人按其同意的权限将它加入。 以流(GET /v2/events/stream)或在你的地址接收其群组中发生的事,并用 POST /v2/channels/{id}/messages 发消息。更多见 机器人 。 注册命令(PUT /v2/me/commands),并用卡片和按钮回复;机器人在语音频道中占一个位置播放音乐(POST /v2/channels/{id}/voice)。 概览 v2 让你自己的程序与 tellmelo 对话:每个请求一个密钥,返回 JSON,所有列表都以相同方式分页。规则与应用中相同。
每个路径都以 https://api.tellmelo.com/v2 开头。 请求和响应都是 UTF-8 编码的 JSON。字段名、代码和值都是英文,并保持英文。 密钥代表你的账号:你在应用里看不到的,它也读不到。 https://api.tellmelo.com/v2快速开始 在“开发者区 → API”中创建密钥并复制。它只显示一次。 用它调用根路径。响应会显示版本、密钥权限以及本分钟剩余的请求数。 所有路径的用法都一样:请求头带密钥,返回 JSON,列表用 items 和 next。 curl -H "Authorization: Bearer tm_key_…" https://api.tellmelo.com/v2{
"name": "tellmelo",
"version": "2.20",
"scope": "read write",
"rateLimit": {
"limit": 120,
"remaining": 117
},
"docs": "/developers/docs",
"spec": "/api/v2/openapi.json"
}接下来:/me 获取你的个人主页,/posts 获取公开帖子,/feed 获取你的动态。
试一试 选择一项任务,填写字段,然后复制请求或直接从这里发送。写入操作会先询问。代码从 TELLMELO_KEY 读取密钥。
任务 GET / GET /posts GET /posts/{id} POST /posts DELETE /posts/{id} GET /me/scheduled POST /posts/{id}/schedule POST /posts/{id}/edit GET /posts/{id}/reply-settings PUT /posts/{id}/reply-settings POST /posts/{id}/coauthor DELETE /posts/{id}/coauthor POST /posts/{id}/pin GET /posts/{id}/replies POST /posts/{id}/replies POST /replies/{id}/edit DELETE /replies/{id} POST /replies/{id}/like POST /replies/{id}/vote POST /replies/{id}/pick GET /posts/{id}/replies/waiting POST /replies/{id}/decide GET /posts/{id}/replies/planned PUT /me/planned-replies/{id} POST /me/planned-replies/{id}/send DELETE /me/planned-replies/{id} POST /posts/{id}/vote GET /profiles/{handle} GET /profiles/{handle}/posts GET /profiles/{handle}/events POST /me/events PUT /me/events/{id} DELETE /me/events/{id} GET /me/events/{id}/signups POST /events/{id}/signup GET /communities GET /communities/{id} GET /communities/{id}/posts GET /communities/{id}/members GET /communities/{id}/roles GET /communities/{id}/bell GET /invites/{code} PUT /roles/{id}/self GET /communities/{id}/emojis PUT /communities/{id}/bell POST /invites/{code}/join GET /communities/{id}/bots GET /communities/{id}/channels GET /channels/{id}/messages POST /channels/{id}/messages POST /channels/{id}/read DELETE /channel-messages/{id} GET /communities/{id}/voice POST /communities/{id}/emojis DELETE /communities/{id}/emojis/{name} POST /communities/{id}/roles PUT /roles/{id} DELETE /roles/{id} PUT /communities/{id}/roles/order PUT /roles/{id}/members/{member} POST /communities/{id}/channels PUT /channels/{id} DELETE /channels/{id} PUT /communities/{id}/channels/order PUT /communities/{id}/channels/shape GET /channels/{id}/overrides PUT /channels/{id}/overrides/{role} POST /communities/{id}/categories PUT /categories/{id} DELETE /categories/{id} PUT /communities/{id}/feed GET /communities/{id}/invites POST /communities/{id}/invites DELETE /invites/{code} POST /channel-messages/{id}/remove POST /communities/{id}/posts/{post}/remove DELETE /communities/{id}/members/{member} PUT /communities/{id}/members/{member}/timeout DELETE /communities/{id}/members/{member}/timeout GET /communities/{id}/bans PUT /communities/{id}/bans/{member} DELETE /communities/{id}/bans/{member} GET /communities/{id}/log POST /communities PUT /communities/{id} GET /events GET /events/stream GET /me/commands PUT /me/commands POST /interactions/{id}/reply POST /channels/{id}/voice GET /tags GET /search GET /emojis GET /media GET /media/mine GET /media/{id} POST /media/uploads POST /media/{id} DELETE /media/{id} GET /me GET /feed POST /me/pictures PUT /me/profile GET /me/emojis POST /me/emojis/pictures POST /me/emojis DELETE /me/emojis/{name} PUT /me/emojis/sharing GET /me/webhooks POST /me/webhooks DELETE /me/webhooks/{id} POST /me/webhooks/{id}/test GET /notifications POST /notifications/read GET /conversations GET /conversations/{with}/messages POST /conversations/{with}/messages POST /conversations/{with}/read DELETE /conversations/{with}/messages/{id} POST /conversations/{with}/planned GET /me/planned-messages POST /me/planned-messages/{id}/send DELETE /me/planned-messages/{id} POST /relations GET /profiles/{handle}/followers GET /profiles/{handle}/following GET /me/relations GET /me/collections POST /me/collections PUT /me/collections/{id} DELETE /me/collections/{id} GET /me/collections/{id}/posts POST /me/collections/{id}/posts GET /partner/quota GET /partner/gifts POST /partner/gifts GET /gift-drops POST /gift-drops read API 版本和本站名称。
curl \
-H "Authorization: Bearer $TELLMELO_KEY" \
"https://api.tellmelo.com/v2"你的密钥 每个账号最多 10 个密钥,每个都有名称、自己的权限,并可设置到期日期。密钥以 tm_key_ 开头,只显示一次。丢失了?更新它,旧值随即失效。
在“开发者区 → API”中创建。它放在请求头中:
curl -H "Authorization: Bearer tm_key_…" \
https://api.tellmelo.com/v2/posts或者,如果更方便,放在单独的请求头里:
curl -H "X-Tellmelo-Key: tm_key_…" https://api.tellmelo.com/v2不要放在 URL 里:它会出现在日志和浏览器历史中。
同一个密钥也可加载图片:每个 url 都指向 /api/media;在那里同样把密钥放在请求头中。
curl -H "Authorization: Bearer tm_key_…" \
-o picture.webp "https://api.tellmelo.com/media?id=…"密钥能做什么 密钥始终可以读取;如果你允许,还可以写入、赠送、上传媒体和管理群组。下面每条路径都说明了它需要什么:
read :读取。公开帖子、个人资料、群组和标签,以及你的动态、通知、消息和你所在群组的频道。write :操作。发帖、回复、投票、发消息、在群组聊天中发言、关注、加入、屏蔽、将通知标为已读。gifts :赠送。从合作伙伴的额度送给成员,以及在新帖子下发放礼物。这是单独的权限,确保用于发帖的密钥永远无法送出任何东西。media :你自己的媒体库。上传、修改、分享和删除 GIF 和视频。这是一项单独的权限,因为上传会消耗账号的视频点数。查找已分享的 GIF 和视频只需要 read 。groups :管理群组。角色、频道、分类、邀请链接、动态频道、移除、禁言、踢出和封禁,以你的账号在该群组中的权限为限。这是单独的权限,因此用于发布的密钥永远不会改变谁在群组中能做什么。任何密钥都做不到的事 任何密钥都无法触及密码、邮箱地址、账号类型、地点、角色、删除、会话、推送设备或其他密钥,也无法触及管理后台或群组管理。密码所保护的,任何密钥都做不到。
机器人 机器人 是用于群组的独立账户,类型为 bot:没有密码和邮箱,由你的程序用它自己的密钥运行。它与其他账户使用同一套 API,在群组中能做其角色允许的一切。
在你的某个群组中打开群组菜单,在“机器人 → 我的机器人”中创建机器人,设置头像、封面、名称、用户名和简介。令牌 只显示一次;它拥有 read、write、media 和 groups 权限。 分享机器人的链接,或将其提交到机器人目录;团队审核后它就会出现在那里。可以管理群组角色的人选择权限;机器人加入并获得自己的角色。 你的程序以 Authorization: Bearer … 发送令牌,以流读取其群组的事件,并使用 机器人 、频道 和 群组 下的路由。 一个以流读取事件、并仅对提问者用 pong 回复 /ping 命令的小机器人:
// Node 18 or newer: reads the events of the bot's groups as they happen and answers /ping.
const BASE = 'https://api.tellmelo.com/v2';
const KEY = process.env.TELLMELO_BOT_TOKEN;
const call = (method, path, body) =>
fetch(BASE + path, {
method,
headers: { Authorization: 'Bearer ' + KEY, 'Content-Type': 'application/json' },
body: body && JSON.stringify(body),
}).then((r) => r.json());
await call('PUT', '/me/commands', { commands: [{ name: 'ping', description: 'Answers pong' }] });
let last = '';
for (;;) {
// The stream closes after ten minutes; Last-Event-ID goes on where it stopped.
const res = await fetch(BASE + '/events/stream', {
headers: { Authorization: 'Bearer ' + KEY, ...(last && { 'Last-Event-ID': last }) },
});
const reader = res.body.pipeThrough(new TextDecoderStream()).getReader();
let buffer = '';
for (;;) {
const { value, done } = await reader.read();
if (done) break;
buffer += value;
let end;
while ((end = buffer.indexOf('
')) >= 0) {
const data = buffer.slice(0, end).split('
').find((l) => l.startsWith('data: '));
buffer = buffer.slice(end + 2);
if (!data) continue;
const event = JSON.parse(data.slice(6));
last = event.id;
if (event.type === 'command' && event.data.command === 'ping')
await call('POST', '/interactions/' + event.data.interaction + '/reply', { text: 'pong', private: true });
}
}
}同一个机器人的 Python 版本,按页获取事件:
# Python 3 with requests: the same bot, reading the events page by page.
import os, time, requests
BASE = 'https://api.tellmelo.com/v2'
H = {'Authorization': 'Bearer ' + os.environ['TELLMELO_BOT_TOKEN']}
requests.put(BASE + '/me/commands', headers=H,
json={'commands': [{'name': 'ping', 'description': 'Answers pong'}]})
since = '0'
while True:
page = requests.get(BASE + '/events', headers=H, params={'since': since}).json()
for event in page['items']:
if event['type'] == 'command' and event['data']['command'] == 'ping':
requests.post(f"{BASE}/interactions/{event['data']['interaction']}/reply",
headers=H, json={'text': 'pong'})
since = page['next'] or since
time.sleep(2)机器人在群组中能做什么由它在那里的角色决定,而不是令牌。角色以它的名字命名;群组在群组设置的角色中更改其权限,并在群组菜单的“机器人 → 本群组中”移除机器人。 每个账号最多 5 个机器人;每个群组按其权益允许的数量。机器人在每个群组每分钟最多发 30 条消息,无法通过搜索找到,只会给先给它发过消息的人发消息。适用 限制 。 事件也可发送到你自己的 HTTPS 地址(像 webhook 一样签名并重试)。此外:命令(PUT /v2/me/commands),回复可面向所有人或仅提问者;消息中的卡片和按钮;以及语音频道中的音乐(POST /v2/channels/{id}/voice):全部见 机器人 。 分页 每个列表都接受 limit 和 cursor,并返回 items 和 next。把 next 作为 cursor 传回即可获取下一页;next 为空时即结束。游标是不透明的:不要解析,也不要自己构造。
{ "items": [ … ], "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx" }
curl -H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts?limit=20&cursor=MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"不传 limit 时为 20 条,最多 50 条。有些列表不分页;它们的 next 始终为 null。
只取新内容 每个响应都带有 ETag。下次请求时作为 If-None-Match 传回:如果没有变化,你会收到无正文的 304。
ETag: W/"3Qk1mJ7fQe2Yb0sVxT9aL4pNdRc"
If-None-Match: W/"3Qk1mJ7fQe2Yb0sVxT9aL4pNdRc" → 304例外:/feed 没有 ETag,因为它的顺序一直在变;写入操作永远不会返回 304。
限额 每个密钥每分钟可发送 120 个请求,“机构”套餐为 600 个,除非管理员另有设置。超出后会收到 429,且不会执行任何操作。等一分钟再发送请求。
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 117
X-RateLimit-Reset: 1758624060写入操作也计入应用的限额,例如几分钟内可发多少帖子。这同样返回带 rate_limited 的 429。
出错时 错误以 JSON 返回:error 中是供程序使用的固定英文代码,message 中是给人看的句子,并附相应的状态码。只比较代码;句子可能会变。
{ "error": "rate_limited",
"message": "Too many requests. Try again in a minute.",
"limit": 120 }有些错误会多带一个字段:缺少密钥的 401 带 docs,429 带 limit。
状态 代码 含义 400bad_request请求无法读取、缺少必填字段或某个值不被允许。 401key_missing请求头中没有密钥。 401key_invalid密钥无效:输错、已被替换,或账号已被封禁。 401unauthorized因未登录被拒绝,原因与密钥无关。 403scope_missing密钥缺少所需权限,通常是 write。 403account_data_locked密码、邮箱地址或删除等账号数据不对密钥开放。 403forbidden你的账号不能这样做,例如因权限被收回或被屏蔽。 403timed_out你的账号目前在这个群组中被禁言。 404unknown_path没有这个路径,或不支持该方法。 404not_found未找到,或你无权查看。 409conflict与已有内容冲突,例如名称已被占用。 409feed_off该群组的动态频道已关闭。 413too_large对本站来说太大。 422unprocessable可以读取,但这种形式无法处理。 429rate_limited请求太多。未执行任何操作;请稍候再试。 500internal_error服务器出了问题。
版本 版本号在路径中。只要写的是 v2,路径和字段就保持不变;只会新增内容。
新增内容会提升第二位数字。每个路径都注明了从哪个版本开始提供。
https://api.tellmelo.com/v1/ 已停用:旧路径返回 410 ,并在正文中指明新路径。
入口 每个程序的第一个请求:密钥能用吗,它能做什么?
GET /v2API 版本和本站名称。
末尾不要加斜杠:https://api.tellmelo.com/v2/ 会以 308 重定向到 https://api.tellmelo.com/v2,并非所有程序都会跟随。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2"响应 返回一个 Service 。
示例 {
"name": "tellmelo",
"version": "2.20",
"scope": "read write",
"rateLimit": {
"limit": 120,
"remaining": 117
},
"docs": "/developers/docs",
"spec": "/api/v2/openapi.json"
}可能的状态: 200304401429
帖子 读取公开帖子、发布自己的帖子,以及再次删除。
GET /v2/posts公开帖子,最新的在前。
在公开路径上,counts.likes 和 counts.reposts 始终为 0,pinned 为 false。
群组中的帖子不在这里,而在 /communities/{id}/posts。
参数 名称 类型 含义 limit在查询中 integer可选 每页条目数:默认 20,最多 50。 cursor在查询中 string可选 上一个响应中的 next。不传则从头开始。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts?limit=20"响应 返回一页 Post ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"text": "The bees are back in the garden 🐝 #garden",
"kind": "poll",
"author": {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
},
"community": {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening"
},
"media": [
{
"url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"kind": "image",
"poster": null,
"ai": "without"
}
],
"poll": {
"options": [
{
"text": "Lavender",
"votes": 12
},
{
"text": "Sunflowers",
"votes": 7
},
{
"text": "Clover",
"votes": 3
}
],
"total": 22,
"multiple": false,
"endsAt": null,
"running": true,
"resultsVisible": true,
"myVotes": [
0
]
},
"quotes": null,
"continues": null,
"counts": {
"replies": 4,
"likes": 31,
"reposts": 2
},
"pinned": false,
"giftDrop": {
"item": "plan",
"quantity": 3,
"places": 10,
"left": 4,
"audience": "followers",
"newAccounts": false,
"status": "open",
"claimed": true
},
"createdAt": 1758624000000
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}可能的状态: 200304401429
GET /v2/posts/{id}按 id 获取单条帖子。
在公开路径上,counts.likes 和 counts.reposts 始终为 0,pinned 为 false。
群组中的帖子不在这里,而在 /communities/{id}/posts。
参数 名称 类型 含义 id在路径中 string必填 帖子的 id。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1"响应 返回一个 Post 。
示例 {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"text": "The bees are back in the garden 🐝 #garden",
"kind": "poll",
"author": {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
},
"community": {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening"
},
"media": [
{
"url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"kind": "image",
"poster": null,
"ai": "without"
}
],
"poll": {
"options": [
{
"text": "Lavender",
"votes": 12
},
{
"text": "Sunflowers",
"votes": 7
},
{
"text": "Clover",
"votes": 3
}
],
"total": 22,
"multiple": false,
"endsAt": null,
"running": true,
"resultsVisible": true,
"myVotes": [
0
]
},
"quotes": null,
"continues": null,
"counts": {
"replies": 4,
"likes": 31,
"reposts": 2
},
"pinned": false,
"giftDrop": {
"item": "plan",
"quantity": 3,
"places": 10,
"left": 4,
"audience": "followers",
"newAccounts": false,
"status": "open",
"claimed": true
},
"createdAt": 1758624000000
}可能的状态: 200304400401404429
POST /v2/posts发布帖子。
帖子需要文字或投票。长度、投票选项和频率由本站设定;超出时会收到 400 或 429。
用 media 附加图片、一个 GIF 或一个视频。GIF 或视频只能单独使用。你可以在 tellmelo 上使用其他成员分享的 GIF 和视频。
仅密友可见或带共同作者的帖子会立即发布,不能发在群组里,也不能定时。两者不能同时使用。
参数 名称 类型 含义 text在正文中 string可选 帖子、回复或私信的文字。 community在正文中 string可选 帖子要发到其动态频道的群组 id;该频道必须开启,且你需要相应权限。不传时,帖子不属于任何群组。 quotes在正文中 string可选 本帖引用的帖子的 id。 poll在正文中 string[]可选 选项,以文本列表形式。 media在正文中 string[]可选 在 App 中上传的图片的 ID,或媒体库中某个 GIF 或视频的 ID(自 2.14 起)。 audience在正文中 string可选 谁能看到帖子:everyone 所有可以看的人,close 只有你的密友。everyoneclose coauthor在正文中 string可选 你邀请为共同作者的账号的 id。你们需要互相关注。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"text":"The bees are back in the garden 🐝 #garden","audience":"everyone"}' \
"https://api.tellmelo.com/v2/posts"响应 返回一个 Created 。
示例 {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"scheduledFor": null,
"deleteAt": null
}可能的状态: 200400401403429
DELETE /v2/posts/{id}删除你自己的一条帖子。
参数 名称 类型 含义 id在路径中 string必填 帖子的 id。
请求示例 curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
GET /v2/me/scheduled你还没发布的帖子,以及它们在等什么。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/scheduled"响应 返回一页 ScheduledPost ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"text": "Market day tomorrow – see you at the bee stand! #garden",
"communityId": null,
"publishAt": 1758710400000,
"deleteAt": null,
"waitingFor": "time",
"createdAt": 1758624000000
}
],
"next": null
}可能的状态: 200304401429
POST /v2/posts/{id}/schedule修改定时帖子的发布时间,或帖子自动删除的时间。
仅限你自己的帖子。帖子的礼物未付款前,无法设置定时。
参数 名称 类型 含义 id在路径中 string必填 帖子的 id。 publishAt在正文中 integer可选 定时帖子的发布时间,以自 1970 年起的毫秒数表示。 deleteAt在正文中 integer可选 帖子自动删除的时间,以自 1970 年起的毫秒数表示。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/schedule"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
POST /v2/posts/{id}/edit修改你某条帖子的文字。
仅在你的套餐允许的编辑时间内。定时帖子不能编辑。
参数 名称 类型 含义 id在路径中 string必填 帖子的 id。 text在正文中 string必填 帖子、回复或私信的文字。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"text":"The bees are back in the garden 🐝🌻 #garden"}' \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/edit"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
GET /v2/posts/{id}/reply-settings谁可以回复你的帖子、回复是否需要批准,以及慢速模式。
参数 名称 类型 含义 id在路径中 string必填 帖子的 id。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/reply-settings"响应 返回一个 ReplySettings 。
示例 {
"audience": "following",
"approval": false,
"slow": "auto"
}可能的状态: 200304400401404429
PUT /v2/posts/{id}/reply-settings修改你帖子的回复设置。未提供的项目保持不变。
仅限你自己的帖子。
参数 名称 类型 含义 id在路径中 string必填 帖子的 id。 audience在正文中 string可选 谁可以回复:所有人、你关注的账号、被提及的人或没有人。allfollowingmentionednobody approval在正文中 boolean可选 回复是否要等你批准后才显示。 slow在正文中 string可选 慢速模式:auto 在回复很多时自动开启,on 始终开启,off 从不开启。autoonoff
请求示例 curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"audience":"following","approval":false,"slow":"auto"}' \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/reply-settings"响应 返回一个 ReplySettings 。
示例 {
"audience": "following",
"approval": false,
"slow": "auto"
}可能的状态: 200400401403404429
POST /v2/posts/{id}/coauthor接受或拒绝共同作者邀请。
参数 名称 类型 含义 id在路径中 string必填 帖子的 id。 accept在正文中 boolean必填 true 接受邀请,false 拒绝。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"accept":true}' \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/coauthor"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
DELETE /v2/posts/{id}/coauthor退出共同作者,或作为作者把共同作者从帖子中移除。
适用于共同作者和帖子作者。
参数 名称 类型 含义 id在路径中 string必填 帖子的 id。
请求示例 curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/coauthor"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
POST /v2/posts/{id}/pin把你的帖子置顶到主页,或取消置顶。
仅限你自己可见的帖子。能置顶几条取决于你的套餐。
参数 名称 类型 含义 id在路径中 string必填 帖子的 id。 active在正文中 boolean必填 true 置顶帖子,false 取消置顶。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"active":true}' \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/pin"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
回复 帖子下的回复,以带 parentId 的列表形式。
GET /v2/posts/{id}/replies帖子的回复,不含已屏蔽的账号。
列表是扁平的,按写作顺序排列;parentId 可将其组成树。一页总是包含完整的讨论串。已屏蔽账号的回复不包含在内。
参数 名称 类型 含义 id在路径中 string必填 帖子的 id。 limit在查询中 integer可选 每页条目数:默认 20,最多 50。 cursor在查询中 string可选 上一个响应中的 next。不传则从头开始。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/replies?limit=20"响应 返回一页 Reply ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"id": "9e4b1c7d-2a3f-4d5e-8b6c-0f1e2d3c4b5a",
"text": "Same here, the lavender is full of them.",
"kind": "post",
"author": {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"verified": false,
"accountKind": "person"
},
"community": null,
"media": [],
"poll": null,
"quotes": null,
"continues": null,
"counts": {
"replies": 0,
"likes": 3,
"reposts": 0
},
"pinned": false,
"giftDrop": null,
"createdAt": 1758624600000,
"postId": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"parentId": null
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}可能的状态: 200304400401404429
POST /v2/posts/{id}/replies回复帖子。
慢速模式下,每人每 10 分钟可回复一次,否则返回 429。作者及其关注的账号不受限制。
通过 media 最多附加一张图片、一个 GIF 或一个视频。
参数 名称 类型 含义 id在路径中 string必填 帖子的 id。 text在正文中 string必填 帖子、回复或私信的文字。 parentId在正文中 string可选 本回复所回复的回复的 id。不传则直接回复帖子。 media在正文中 string[]可选 在 App 中上传的图片的 ID,或媒体库中某个 GIF 或视频的 ID(自 2.14 起)。 publishAt在正文中 integer可选 回复发布的时间,以 1970 年起的毫秒数表示。不填则立即发布。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"text":"Same here, the lavender is full of them."}' \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/replies"响应 返回一个 Created 。
示例 {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"scheduledFor": null,
"deleteAt": null
}可能的状态: 200400401403404429
POST /v2/replies/{id}/edit修改你某条回复的文字。
参数 名称 类型 含义 id在路径中 string必填 回复的 id。 text在正文中 string必填 帖子、回复或私信的文字。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"text":"Same here, the lavender and the clover are full of them."}' \
"https://api.tellmelo.com/v2/replies/9e4b1c7d-2a3f-4d5e-8b6c-0f1e2d3c4b5a/edit"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
DELETE /v2/replies/{id}删除你的某条回复。
参数 名称 类型 含义 id在路径中 string必填 回复的 id。
请求示例 curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/replies/9e4b1c7d-2a3f-4d5e-8b6c-0f1e2d3c4b5a"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
POST /v2/replies/{id}/like赞成一条回复(自回复改为投票后,点赞即赞成),或撤回赞成;反对票保留。
自 2.19 起已弃用:请使用 POST /replies/{id}/vote。此路由暂时保留。
参数 名称 类型 含义 id在路径中 string必填 回复的 id。 active在正文中 boolean必填 true 建立关系,false 解除关系。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"active":true}' \
"https://api.tellmelo.com/v2/replies/9e4b1c7d-2a3f-4d5e-8b6c-0f1e2d3c4b5a/like"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
POST /v2/replies/{id}/vote给一条回复投赞成票或反对票,或撤回你的投票。返回你的投票和投票后的得分。
参数 名称 类型 含义 id在路径中 string必填 回复的 id。 vote在正文中 string必填 up 赞成,down 反对,none 撤回你的投票。updownnone
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"vote":"up"}' \
"https://api.tellmelo.com/v2/replies/9e4b1c7d-2a3f-4d5e-8b6c-0f1e2d3c4b5a/vote"响应 返回一个 ReplyVote 。
示例 {
"vote": "up",
"score": 12
}可能的状态: 200400401403404429
POST /v2/replies/{id}/pick把你帖子下的一条回复标为最佳,或取消标记。
只能在你自己的帖子下,且只能是直接回复帖子的回复。新的标记会替换旧的。
参数 名称 类型 含义 id在路径中 string必填 回复的 id。 active在正文中 boolean必填 true 标为最佳,false 取消标记。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"active":true}' \
"https://api.tellmelo.com/v2/replies/9e4b1c7d-2a3f-4d5e-8b6c-0f1e2d3c4b5a/pick"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
GET /v2/posts/{id}/replies/waiting帖子下等待批准的回复:你自己的帖子下是全部,否则只有你自己的。
回复是否需要等待,由作者在回复设置中决定。
参数 名称 类型 含义 id在路径中 string必填 帖子的 id。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/replies/waiting"响应 返回一页 Reply ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"id": "9e4b1c7d-2a3f-4d5e-8b6c-0f1e2d3c4b5a",
"text": "Same here, the lavender is full of them.",
"kind": "post",
"author": {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"verified": false,
"accountKind": "person"
},
"community": null,
"media": [],
"poll": null,
"quotes": null,
"continues": null,
"counts": {
"replies": 0,
"likes": 3,
"reposts": 0
},
"pinned": false,
"giftDrop": null,
"createdAt": 1758624600000,
"postId": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"parentId": null
}
],
"next": null
}可能的状态: 200304400401404429
POST /v2/replies/{id}/decide批准或拒绝你帖子下一条等待中的回复。被拒绝的回复会被删除。
参数 名称 类型 含义 id在路径中 string必填 回复的 id。 approve在正文中 boolean必填 true 批准回复,false 拒绝。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"approve":true}' \
"https://api.tellmelo.com/v2/replies/9e4b1c7d-2a3f-4d5e-8b6c-0f1e2d3c4b5a/decide"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
GET /v2/posts/{id}/replies/planned你在某个帖子下定时稍后发布的回复。
回复时用 publishAt 定时。同时最多 20 条定时回复。
参数 名称 类型 含义 id在路径中 string必填 帖子的 id。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/replies/planned"响应 返回一页 PlannedReply ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"id": "3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9",
"parentId": null,
"text": "Count me in for Saturday!",
"publishAt": 1758710400000,
"state": "waiting"
}
],
"next": null
}可能的状态: 200304400401404429
PUT /v2/me/planned-replies/{id}修改定时回复的文字或时间。发送失败的回复会重新等待。
参数 名称 类型 含义 id在路径中 string必填 定时回复的 id。 text在正文中 string可选 帖子、回复或私信的文字。 publishAt在正文中 integer可选 回复发布的时间,以 1970 年起的毫秒数表示。不填则立即发布。
请求示例 curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"text":"See you there!","publishAt":1758700000000}' \
"https://api.tellmelo.com/v2/me/planned-replies/3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
POST /v2/me/planned-replies/{id}/send立即发送一条定时回复。
参数 名称 类型 含义 id在路径中 string必填 定时回复的 id。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/planned-replies/3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9/send"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
DELETE /v2/me/planned-replies/{id}删除一条定时回复。
参数 名称 类型 含义 id在路径中 string必填 定时回复的 id。
请求示例 curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/planned-replies/3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
投票 投票是设置了 poll 的帖子。投票操作有单独的路径。
POST /v2/posts/{id}/vote参与投票。
在你投票或投票结束之前,各选项的票数为 null。total 始终存在。
参数 名称 类型 含义 id在路径中 string必填 帖子的 id。 option在正文中 integer必填 哪个选项,从 0 开始计数。多选时每个选项调用一次。 retract在正文中 boolean可选 true 撤回投票。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"option":0}' \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/vote"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
个人主页 按短名称获取公开个人主页及其发布的内容。
GET /v2/profiles/{handle}按短名称获取个人主页。
参数 名称 类型 含义 handle在路径中 string必填 个人主页的短名称,不区分大小写。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/profiles/mara"响应 返回一个 Profile 。
示例 {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person",
"about": "Beekeeper, allotment, too many seeds. :tellmelo:",
"website": "https://mara-imkerei.example/",
"websiteVerified": true,
"followers": 148,
"createdAt": 1750848000000
}可能的状态: 200304400401404429
GET /v2/profiles/{handle}/posts某个个人主页的公开帖子,最新的在前。
在公开路径上,counts.likes 和 counts.reposts 始终为 0,pinned 为 false。
群组中的帖子不在这里,而在 /communities/{id}/posts。
参数 名称 类型 含义 handle在路径中 string必填 个人主页的短名称,不区分大小写。 limit在查询中 integer可选 每页条目数:默认 20,最多 50。 cursor在查询中 string可选 上一个响应中的 next。不传则从头开始。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/profiles/mara/posts?limit=20"响应 返回一页 Post ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"text": "The bees are back in the garden 🐝 #garden",
"kind": "poll",
"author": {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
},
"community": {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening"
},
"media": [
{
"url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"kind": "image",
"poster": null,
"ai": "without"
}
],
"poll": {
"options": [
{
"text": "Lavender",
"votes": 12
},
{
"text": "Sunflowers",
"votes": 7
},
{
"text": "Clover",
"votes": 3
}
],
"total": 22,
"multiple": false,
"endsAt": null,
"running": true,
"resultsVisible": true,
"myVotes": [
0
]
},
"quotes": null,
"continues": null,
"counts": {
"replies": 4,
"likes": 31,
"reposts": 2
},
"pinned": false,
"giftDrop": {
"item": "plan",
"quantity": 3,
"places": 10,
"left": 4,
"audience": "followers",
"newAccounts": false,
"status": "open",
"claimed": true
},
"createdAt": 1758624000000
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}可能的状态: 200304400401404429
GET /v2/profiles/{handle}/events某个主页即将举行的活动,最近的在前。
仅在该主页的套餐包含活动时。互相屏蔽的账号之间不显示任何内容。
参数 名称 类型 含义 handle在路径中 string必填 个人主页的短名称,不区分大小写。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/profiles/mara/events"响应 返回一页 Event ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"id": "2a3b4c5d-6e7f-4809-9a1b-2c3d4e5f6a7b",
"title": "Seed swap",
"startsAt": 1758883200000,
"endsAt": 1758890400000,
"place": "Community garden",
"description": "Bring seeds, take seeds.",
"signups": {
"count": 14,
"going": true
}
}
],
"next": null
}可能的状态: 200304400401404429
POST /v2/me/events创建活动。返回它的 id。
需要包含活动的套餐,否则返回 403。能有多少个即将举行的活动取决于套餐。
参数 名称 类型 含义 title在正文中 string必填 标题。 startsAt在正文中 integer必填 开始时间,以 1970 年起的毫秒数表示。 endsAt在正文中 integer可选 结束时间,以 1970 年起的毫秒数表示。可选。 place在正文中 string可选 举办地点。 description在正文中 string可选 描述。 signups在正文中 boolean可选 是否可以报名。需要包含报名功能的套餐。 capacity在正文中 integer可选 最多可报名人数。不填则不限。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"title":"Seed swap","startsAt":1758700000000,"place":"Community garden","signups":true,"capacity":30}' \
"https://api.tellmelo.com/v2/me/events"响应 返回一个 Made 。
示例 {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}可能的状态: 200400401403429
PUT /v2/me/events/{id}修改你的活动。所有字段都会重新设置。
已开始的活动保留其开始时间。
参数 名称 类型 含义 id在路径中 string必填 活动的 id。 title在正文中 string必填 标题。 startsAt在正文中 integer必填 开始时间,以 1970 年起的毫秒数表示。 endsAt在正文中 integer可选 结束时间,以 1970 年起的毫秒数表示。可选。 place在正文中 string可选 举办地点。 description在正文中 string可选 描述。 signups在正文中 boolean可选 是否可以报名。需要包含报名功能的套餐。 capacity在正文中 integer可选 最多可报名人数。不填则不限。
请求示例 curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"title":"Seed swap","startsAt":1758700000000,"place":"Community garden","signups":true,"capacity":30}' \
"https://api.tellmelo.com/v2/me/events/2a3b4c5d-6e7f-4809-9a1b-2c3d4e5f6a7b"响应 返回一个 Made 。
示例 {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}可能的状态: 200400401403404429
DELETE /v2/me/events/{id}删除你的活动。
参数 名称 类型 含义 id在路径中 string必填 活动的 id。
请求示例 curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/events/2a3b4c5d-6e7f-4809-9a1b-2c3d4e5f6a7b"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
GET /v2/me/events/{id}/signups谁报名了你的活动。
参数 名称 类型 含义 id在路径中 string必填 活动的 id。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/events/2a3b4c5d-6e7f-4809-9a1b-2c3d4e5f6a7b/signups"响应 返回一页 EventSignup ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"at": 1758624000000
}
],
"next": null
}可能的状态: 200304400401404429
POST /v2/events/{id}/signup报名参加活动或取消报名。
仅限可报名的活动,且不能是你自己的。满员时返回 409。
参数 名称 类型 含义 id在路径中 string必填 活动的 id。 going在正文中 boolean必填 true 报名,false 取消报名。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"going":true}' \
"https://api.tellmelo.com/v2/events/2a3b4c5d-6e7f-4809-9a1b-2c3d4e5f6a7b/signup"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
群组 公开群组和你自己的群组,以及它们的帖子、成员、角色和邀请链接。
GET /v2/communities本实例的公开群组;使用 mine=true 时为你账号所在的群组。
按成员数排序,不分页;next 始终为 null。
参数 名称 类型 含义 limit在查询中 integer可选 每页条目数:默认 20,最多 50。 mine在查询中 boolean可选 设为 true 时返回你账号所在的群组,包括内部和隐藏群组,按名称排序。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities?limit=20"响应 返回一页 Community ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening",
"handle": "urbangardening",
"description": "Balconies, allotments, rooftops: whatever grows.",
"tags": [
"garden",
"bees"
],
"members": 312,
"joinPolicy": "open",
"visibility": "open",
"feedChannel": true,
"sparks": 24,
"perks": [
"tint",
"welcome"
],
"membership": {
"leader": null,
"roles": [
"4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8"
],
"permissions": [
"attach",
"invite",
"send",
"view"
],
"mutedUntil": null
}
}
],
"next": null
}可能的状态: 200304401429
GET /v2/communities/{id}按 id 获取单个群组。
内部和隐藏群组仅在你的账号是成员时可见。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60"响应 返回一个 Community 。
示例 {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening",
"handle": "urbangardening",
"description": "Balconies, allotments, rooftops: whatever grows.",
"tags": [
"garden",
"bees"
],
"members": 312,
"joinPolicy": "open",
"visibility": "open",
"feedChannel": true,
"sparks": 24,
"perks": [
"tint",
"welcome"
],
"membership": {
"leader": null,
"roles": [
"4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8"
],
"permissions": [
"attach",
"invite",
"send",
"view"
],
"mutedUntil": null
}
}可能的状态: 200304400401404429
GET /v2/communities/{id}/posts群组动态频道中的帖子,最新的在前。
在公开路径上,counts.likes 和 counts.reposts 始终为 0,pinned 为 false。
动态频道关闭时,该路径返回 409 和 feed_off。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。 limit在查询中 integer可选 每页条目数:默认 20,最多 50。 cursor在查询中 string可选 上一个响应中的 next。不传则从头开始。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/posts?limit=20"响应 返回一页 Post ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"text": "The bees are back in the garden 🐝 #garden",
"kind": "poll",
"author": {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
},
"community": {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening"
},
"media": [
{
"url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"kind": "image",
"poster": null,
"ai": "without"
}
],
"poll": {
"options": [
{
"text": "Lavender",
"votes": 12
},
{
"text": "Sunflowers",
"votes": 7
},
{
"text": "Clover",
"votes": 3
}
],
"total": 22,
"multiple": false,
"endsAt": null,
"running": true,
"resultsVisible": true,
"myVotes": [
0
]
},
"quotes": null,
"continues": null,
"counts": {
"replies": 4,
"likes": 31,
"reposts": 2
},
"pinned": false,
"giftDrop": {
"item": "plan",
"quantity": 3,
"places": 10,
"left": 4,
"audience": "followers",
"newAccounts": false,
"status": "open",
"claimed": true
},
"createdAt": 1758624000000
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}可能的状态: 200304400401404429
GET /v2/communities/{id}/members群组成员及其角色。
管理层在前,其余按最高角色排序;最多 300 人。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/members"响应 返回一页 GroupMember ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"bot": false,
"leader": null,
"roles": [
"4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8"
],
"mutedUntil": null
}
],
"next": null
}可能的状态: 200304400401404429
GET /v2/communities/{id}/roles群组的角色,最高的在前,@everyone 在最后。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/roles"响应 返回一页 Role ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"id": "4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8",
"name": "Gardeners",
"everyone": false,
"color": "green",
"permissions": [
"attach",
"invite",
"send",
"view"
],
"members": 24,
"editable": true,
"selfable": false
}
],
"next": null
}可能的状态: 200304400401404429
GET /v2/communities/{id}/bell群组会向你发送哪些通知。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/bell"响应 返回一个 Bell 。
示例 {
"level": "important"
}可能的状态: 200304400401404429
GET /v2/invites/{code}加入前查看邀请链接背后的群组。
参数 名称 类型 含义 code在路径中 string必填 邀请链接的代码,即其地址的末尾部分。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/invites/k7Qm2xPa"响应 返回一个 InvitePreview 。
示例 {
"community": {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening",
"members": 312,
"rules": [
"Be kind.",
"No advertising."
]
},
"member": false
}可能的状态: 200304400401404429
PUT /v2/roles/{id}/self领取或取消一个自选身份组。
仅限管理层提供为自选的身份组(selfable),且仅限你自己的账号。
参数 名称 类型 含义 id在路径中 string必填 角色的 id。 active在正文中 boolean可选 false 收回角色;否则授予。
请求示例 curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"active":true}' \
"https://api.tellmelo.com/v2/roles/4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8/self"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
GET /v2/communities/{id}/emojis群组自己的表情。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/emojis"响应 返回一页 GroupEmoji ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"name": "seedling",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false
}
],
"next": null
}可能的状态: 200304400401404429
PUT /v2/communities/{id}/bell设置群组向你发送哪些通知。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。 level在正文中 string必填 接收哪些通知。allimportantoff
请求示例 curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"level":"important"}' \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/bell"响应 返回一个 Bell 。
示例 {
"level": "important"
}可能的状态: 200400401403404429
POST /v2/invites/{code}/join通过邀请链接加入群组。
参数 名称 类型 含义 code在路径中 string必填 邀请链接的代码,即其地址的末尾部分。 rules在正文中 boolean可选 接受群组规则时为 true;群组有规则时必须提供。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/invites/k7Qm2xPa/join"响应 返回一个 Joined 。
示例 {
"community": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60"
}可能的状态: 200400401403404429
GET /v2/communities/{id}/bots群组的机器人及其角色允许的操作。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/bots"响应 返回一页 GroupBot ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "gardenbot",
"name": "Garden bot",
"description": "Reminds the group of watering days.",
"permissions": [
"send",
"view"
]
}
],
"next": null
}可能的状态: 200304400401404429
频道 你所在群组的频道及其聊天:读取、发言、标为已读。
GET /v2/communities/{id}/channels你能看到的群组频道,按其顺序排列。
动态频道(kind: feed)只在开启时出现在这里;其帖子通过 /communities/{id}/posts 获取。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/channels"响应 返回一页 Channel ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a",
"kind": "chat",
"name": "harvest",
"topic": "What came in this week",
"category": {
"id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
"name": "Garden",
"symbol": {
"emoji": null,
"icon": null,
"image": null,
"color": null,
"shape": null
}
},
"unread": 3,
"permissions": [
"view",
"send"
],
"symbol": {
"emoji": "🌻",
"icon": null,
"image": null,
"color": "amber",
"shape": "circle"
}
}
],
"next": null
}可能的状态: 200304400401404429
GET /v2/channels/{id}/messages聊天频道中的消息,最新的在前。
每页最多 50 条消息。不包含你屏蔽的账号或屏蔽了你的账号的消息。
参数 名称 类型 含义 id在路径中 string必填 频道的 id。 cursor在查询中 string可选 上一个响应中的 next。不传则从头开始。 thread在查询中 string可选 要读取其话题的消息:返回它及其回复,而不是聊天。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a/messages"响应 返回一页 ChannelMessage ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"id": "61a2b3c4-d5e6-4f70-8192-a3b4c5d6e7f8",
"text": "@jon the first tomatoes are ripe 🍅",
"author": {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"bot": false
},
"media": [
{
"url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"kind": "image",
"poster": null,
"ai": "without"
}
],
"replyTo": "72b3c4d5-e6f7-4081-92a3-b4c5d6e7f809",
"roleColor": "green",
"threadOf": null,
"threadCount": 3,
"card": null,
"buttons": [],
"createdAt": 1758631200000
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}可能的状态: 200304400401404429
POST /v2/channels/{id}/messages在聊天频道中发送消息。
@名称 通知一位成员;有相应权限时 @everyone 通知所有人,每小时最多六次。
参数 名称 类型 含义 id在路径中 string必填 频道的 id。 text在正文中 string可选 帖子、回复或私信的文字。 replyTo在正文中 string可选 你回复的同一频道中消息的 id。 media在正文中 string[]可选 在 App 中上传的图片的 ID,或媒体库中某个 GIF 或视频的 ID(自 2.14 起)。 thread在正文中 string可选 要在其话题中回复的聊天消息;不填则消息发到聊天中。 card在正文中 object可选 卡片 { title, text, color, fields: [{ name, value }] },最多 10 个字段。 buttons在正文中 object[]可选 最多 5 个按钮,每个为 { id, label, style },style 为 primary、secondary 或 danger。按下会作为 interaction 事件送达。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"text":"Who has seeds to swap?"}' \
"https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a/messages"响应 返回一个 Made 。
示例 {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}可能的状态: 200400401403404429
POST /v2/channels/{id}/read将聊天频道标为已读,直到某个时间点。
参数 名称 类型 含义 id在路径中 string必填 频道的 id。 at在正文中 integer必填 已读到的时间点(毫秒),通常为最新消息的 createdAt。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a/read"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
DELETE /v2/channel-messages/{id}删除你在聊天频道中的一条消息。
只能删除自己的消息;他人的消息由管理层通过 groups 权限移除。
参数 名称 类型 含义 id在路径中 string必填 聊天频道中消息的 id。
请求示例 curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/channel-messages/61a2b3c4-d5e6-4f70-8192-a3b4c5d6e7f8"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
GET /v2/communities/{id}/voice群组语音频道中当前有谁,按频道列出。
仅限你能看到的频道。没有媒体服务器时列表为空。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/voice"响应 返回一页 VoiceRoom ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"channel": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a",
"people": [
{
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"muted": false,
"deaf": false,
"camera": false,
"screen": true
}
]
}
],
"next": null
}可能的状态: 200304400401404429
管理群组 群组设置在应用中能做的事,需要 groups 权限。你的账号能做什么由群组决定,与应用中相同:管理层、角色及其等级。
POST /v2/communities/{id}/emojis为群组添加一个表情。
仅限可管理群组频道的人。图片像自己的表情一样上传(POST /me/emojis/pictures);所有表情中一个名称只能使用一次。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。 name在正文中 string必填 书写表情时用的名称,形如 :名称:。 picture在正文中 string必填 来自 POST /me/emojis/pictures 的 id。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"seedling","picture":"8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9"}' \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/emojis"响应 返回一页 GroupEmoji ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"name": "seedling",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false
}
],
"next": null
}可能的状态: 200400401403404429
DELETE /v2/communities/{id}/emojis/{name}从群组移除一个表情。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。 name在路径中 string必填 表情名称,不带冒号。
请求示例 curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/emojis/seedling"响应 返回一页 GroupEmoji ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"name": "seedling",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false
}
],
"next": null
}可能的状态: 200400401403404429
POST /v2/communities/{id}/roles创建角色。
只能操作低于你最高角色的角色,且只能授予你自己拥有的权限;管理层高于所有角色。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。 name在正文中 string可选 角色名称;@everyone 保留其名称。 color在正文中 string可选 颜色;留空表示无颜色。indigovioletroseambergreenteal permissions在正文中 string[]可选 权限:view、send、attach、post_feed、invite、mention_everyone、moderate、timeout_members、kick_members、ban_members、manage_channels、manage_roles。 selfable在正文中 boolean可选 true:成员自行领取该身份组。仅限权限不超出参与范围的身份组(view、send、attach、voice_connect、voice_speak、voice_video)。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"Gardeners","permissions":["view","send","invite"],"selfable":false}' \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/roles"响应 返回一个 Made 。
示例 {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}可能的状态: 200400401403404429
PUT /v2/roles/{id}修改角色的名称、颜色和权限。
替换名称、颜色和权限;省略的内容将变为空。
只能操作低于你最高角色的角色,且只能授予你自己拥有的权限;管理层高于所有角色。
参数 名称 类型 含义 id在路径中 string必填 角色的 id。 name在正文中 string可选 角色名称;@everyone 保留其名称。 color在正文中 string可选 颜色;留空表示无颜色。indigovioletroseambergreenteal permissions在正文中 string[]可选 权限:view、send、attach、post_feed、invite、mention_everyone、moderate、timeout_members、kick_members、ban_members、manage_channels、manage_roles。 selfable在正文中 boolean可选 true:成员自行领取该身份组。仅限权限不超出参与范围的身份组(view、send、attach、voice_connect、voice_speak、voice_video)。
请求示例 curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"Gardeners","permissions":["view","send","invite"],"selfable":false}' \
"https://api.tellmelo.com/v2/roles/4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8"响应 返回一个 Made 。
示例 {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}可能的状态: 200400401403404429
DELETE /v2/roles/{id}删除角色。
参数 名称 类型 含义 id在路径中 string必填 角色的 id。
请求示例 curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/roles/4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
PUT /v2/communities/{id}/roles/order设置角色的等级顺序。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。 roles在正文中 string[]必填 你自己最高角色之下所有角色的 id,最高的在前;对于管理层,是除 @everyone 之外的全部角色。
请求示例 curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/roles/order"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
PUT /v2/roles/{id}/members/{member}给成员授予或收回角色。
参数 名称 类型 含义 id在路径中 string必填 角色的 id。 member在路径中 string必填 成员账号的 id。 active在正文中 boolean可选 false 收回角色;否则授予。
请求示例 curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"active":true}' \
"https://api.tellmelo.com/v2/roles/4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8/members/d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
POST /v2/communities/{id}/channels创建聊天频道。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。 name在正文中 string可选 名称,不含 #;留空则使用应用在各语言中给出的名称。 topic在正文中 string可选 显示在频道上方的主题。 category在正文中 string可选 频道所属分类的 id;留空表示无分类。 emoji在正文中 string可选 用作图标的表情。 icon在正文中 string可选 应用图标库中的图标名称。homehashmegaphonevolumemessagehelpinfobellcalendarbookbookmarkpinshieldstarheartsparklesflamezaptrophygiftrocketlightbulbcodewrenchbriefcasegraduationpalettecamerafilmmusicgamepaddumbbellleafflowerpawsunmooncloudglobemapcoffeepizzasmile image在正文中 string可选 你通过 /media/emoji 上传的图片 id。 color在正文中 string可选 图块的颜色。brandindigovioletroseambergreentealred shape在正文中 string可选 图块形状;不填则为圆形。circlesquaretrianglediamondhexagonoctagonshieldstar
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"harvest","emoji":"🌻","color":"amber"}' \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/channels"响应 返回一个 Made 。
示例 {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}可能的状态: 200400401403404429
PUT /v2/channels/{id}修改频道的名称、主题和分类。
替换名称、主题和分类;省略的内容将变为空。
参数 名称 类型 含义 id在路径中 string必填 频道的 id。 name在正文中 string可选 名称,不含 #;留空则使用应用在各语言中给出的名称。 topic在正文中 string可选 显示在频道上方的主题。 category在正文中 string可选 频道所属分类的 id;留空表示无分类。 emoji在正文中 string可选 用作图标的表情。 icon在正文中 string可选 应用图标库中的图标名称。homehashmegaphonevolumemessagehelpinfobellcalendarbookbookmarkpinshieldstarheartsparklesflamezaptrophygiftrocketlightbulbcodewrenchbriefcasegraduationpalettecamerafilmmusicgamepaddumbbellleafflowerpawsunmooncloudglobemapcoffeepizzasmile image在正文中 string可选 你通过 /media/emoji 上传的图片 id。 color在正文中 string可选 图块的颜色。brandindigovioletroseambergreentealred shape在正文中 string可选 图块形状;不填则为圆形。circlesquaretrianglediamondhexagonoctagonshieldstar
请求示例 curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"harvest","emoji":"🌻","color":"amber"}' \
"https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"响应 返回一个 Made 。
示例 {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}可能的状态: 200400401403404429
DELETE /v2/channels/{id}删除聊天频道及其消息。
动态频道不能删除,只能关闭。
参数 名称 类型 含义 id在路径中 string必填 频道的 id。
请求示例 curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
PUT /v2/communities/{id}/channels/order设置分类和聊天频道的顺序。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。 categories在正文中 string[]必填 群组所有分类的 id,按新的顺序。 channels在正文中 string[]必填 群组所有聊天频道的 id,按新的顺序。
请求示例 curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/channels/order"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
PUT /v2/communities/{id}/channels/shape设定群组所有频道图标的形状。
仅限群组管理者。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。 shape在正文中 string可选 群组所有图标的形状;省略时各频道自选。circlesquaretrianglediamondhexagonoctagonshieldstar
请求示例 curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/channels/shape"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
GET /v2/channels/{id}/overrides角色在某个频道中与在群组中不同的权限。
参数 名称 类型 含义 id在路径中 string必填 频道的 id。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a/overrides"响应 返回一页 ChannelOverride ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"role": "4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8",
"allow": [
"send"
],
"deny": []
}
],
"next": null
}可能的状态: 200304400401403404429
PUT /v2/channels/{id}/overrides/{role}设置某个角色在频道中的不同权限。
不适用于与你最高角色同级或更高的角色。
参数 名称 类型 含义 id在路径中 string必填 频道的 id。 role在路径中 string必填 角色的 id。 allow在正文中 string[]可选 该角色在这里额外可以做的:在聊天中 view、send、attach、mention_everyone、moderate,在动态频道中 view 和 post_feed。 deny在正文中 string[]可选 该角色在此不能做的事,取自同一组权限。两个列表都为空时取消差异。
请求示例 curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"allow":["view"],"deny":["send"]}' \
"https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a/overrides/4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
POST /v2/communities/{id}/categories创建频道分类。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。 name在正文中 string必填 分类名称。 emoji在正文中 string可选 用作图标的表情。 icon在正文中 string可选 应用图标库中的图标名称。homehashmegaphonevolumemessagehelpinfobellcalendarbookbookmarkpinshieldstarheartsparklesflamezaptrophygiftrocketlightbulbcodewrenchbriefcasegraduationpalettecamerafilmmusicgamepaddumbbellleafflowerpawsunmooncloudglobemapcoffeepizzasmile image在正文中 string可选 你通过 /media/emoji 上传的图片 id。 color在正文中 string可选 图块的颜色。brandindigovioletroseambergreentealred
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"Garden","emoji":"🌻","color":"amber"}' \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/categories"响应 返回一个 Made 。
示例 {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}可能的状态: 200400401403404429
PUT /v2/categories/{id}重命名分类。
参数 名称 类型 含义 id在路径中 string必填 分类的 id。 name在正文中 string必填 分类名称。 emoji在正文中 string可选 用作图标的表情。 icon在正文中 string可选 应用图标库中的图标名称。homehashmegaphonevolumemessagehelpinfobellcalendarbookbookmarkpinshieldstarheartsparklesflamezaptrophygiftrocketlightbulbcodewrenchbriefcasegraduationpalettecamerafilmmusicgamepaddumbbellleafflowerpawsunmooncloudglobemapcoffeepizzasmile image在正文中 string可选 你通过 /media/emoji 上传的图片 id。 color在正文中 string可选 图块的颜色。brandindigovioletroseambergreentealred
请求示例 curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"Garden","emoji":"🌻","color":"amber"}' \
"https://api.tellmelo.com/v2/categories/9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d"响应 返回一个 Made 。
示例 {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}可能的状态: 200400401403404429
DELETE /v2/categories/{id}删除分类。
其中的频道保留,但没有分类。
参数 名称 类型 含义 id在路径中 string必填 分类的 id。
请求示例 curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/categories/9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
PUT /v2/communities/{id}/feed开启或关闭群组的动态频道。
关闭后,帖子仍会保存,但只有作者本人能看到。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。 on在正文中 boolean必填 true 开启动态频道,false 关闭。
请求示例 curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/feed"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
GET /v2/communities/{id}/invites群组仍然有效的邀请链接。
管理层能看到全部,其他人只能看到自己创建的。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/invites"响应 返回一页 InviteLink ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"code": "k7Qm2xPa",
"url": "https://tellmelo.com/groups?join=k7Qm2xPa",
"createdBy": {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"bot": false
},
"createdAt": 1758624000000,
"expiresAt": 1759228800000,
"uses": 3,
"maxUses": 10
}
],
"next": null
}可能的状态: 200304400401403404429
POST /v2/communities/{id}/invites创建邀请链接。
链接只在你仍有邀请权限时有效,你退出群组后链接随之删除。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。 days在正文中 integer可选 链接有效的天数;不传则一直有效,直到被收回。1730 uses在正文中 integer可选 链接可使用的次数;不传则不限次数。151025100
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"days":7,"uses":10}' \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/invites"响应 返回一个 Made 。
示例 {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}可能的状态: 200400401403404429
DELETE /v2/invites/{code}收回邀请链接。
参数 名称 类型 含义 code在路径中 string必填 邀请链接的代码,即其地址的末尾部分。
请求示例 curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/invites/k7Qm2xPa"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
POST /v2/channel-messages/{id}/remove从频道中移除其他成员的消息。
与应用中一样,会记入群组记录,每小时最多 60 次。
参数 名称 类型 含义 id在路径中 string必填 聊天频道中消息的 id。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/channel-messages/61a2b3c4-d5e6-4f70-8192-a3b4c5d6e7f8/remove"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
POST /v2/communities/{id}/posts/{post}/remove从群组中移除帖子。
与应用中一样,会记入群组记录,每小时最多 60 次。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。 post在路径中 string必填 帖子的 id。 reason在正文中 string必填 成员会看到的理由。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"reason":"Advertising for another site, despite rule 2."}' \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/posts/post/remove"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
DELETE /v2/communities/{id}/members/{member}将成员踢出群组。
自 2.16 起为踢出:成员可以回来。需要留在外面的人应当封禁。
仅限拥有相应权限时,且仅对低于你最高角色的成员;协同管理者仅限创建者。
与应用中一样,会记入群组记录,每小时最多 60 次。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。 member在路径中 string必填 成员账号的 id。 reason在正文中 string必填 成员会看到的理由。
请求示例 curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"reason":"Advertising for another site, despite rule 2."}' \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/members/d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
PUT /v2/communities/{id}/members/{member}/timeout禁言成员。
新的禁言会替换正在进行的禁言。退出后再加入不会结束禁言。
仅限拥有相应权限时,且仅对低于你最高角色的成员;协同管理者仅限创建者。
与应用中一样,会记入群组记录,每小时最多 60 次。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。 member在路径中 string必填 成员账号的 id。 seconds在正文中 integer必填 持续时间,以秒计。60300600360086400604800 reason在正文中 string可选 成员会看到的理由;可选。
请求示例 curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"seconds":600}' \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/members/d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d/timeout"响应 返回一个 Until 。
示例 {
"until": 1758624600000
}可能的状态: 200400401403404429
DELETE /v2/communities/{id}/members/{member}/timeout解除禁言。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。 member在路径中 string必填 成员账号的 id。
请求示例 curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/members/d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d/timeout"响应 返回一个 Until 。
示例 {
"until": 1758624600000
}可能的状态: 200400401403404429
GET /v2/communities/{id}/bans群组当前的封禁。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/bans"响应 返回一页 Ban ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"member": {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"bot": false
},
"until": 1759228800000,
"createdAt": 1758624000000,
"by": "Mara 🌻"
}
],
"next": null
}可能的状态: 200304400401403404429
PUT /v2/communities/{id}/bans/{member}封禁成员。
没有 days 时,封禁一直有效,直到被解除。
仅限拥有相应权限时,且仅对低于你最高角色的成员;协同管理者仅限创建者。
与应用中一样,会记入群组记录,每小时最多 60 次。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。 member在路径中 string必填 成员账号的 id。 days在正文中 integer可选 持续时间,以天计;不填表示无期限封禁。1730 reason在正文中 string必填 成员会看到的理由。
请求示例 curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"days":7,"reason":"Advertising for another site, despite rule 2."}' \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/bans/d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d"响应 返回一个 Until 。
示例 {
"until": 1758624600000
}可能的状态: 200400401403404429
DELETE /v2/communities/{id}/bans/{member}解除封禁。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。 member在路径中 string必填 成员账号的 id。
请求示例 curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/bans/d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
GET /v2/communities/{id}/log管理层记录:谁移除了什么以及原因。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/log"响应 返回一页 LogEntry ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"id": "8f7e6d5c-4b3a-4291-8f7e-6d5c4b3a2918",
"action": "message_removed",
"member": {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"bot": false
},
"reason": "",
"by": "Mara 🌻",
"createdAt": 1758710400000
}
],
"next": null
}可能的状态: 200304400401403404429
POST /v2/communities创建一个群组。返回它的 id;你是创建者。
需要 groups 权限。未指定时群组为 internal 且可自由加入;隐藏群组仅限邀请。成员能否创建群组由运营者决定。
参数 名称 类型 含义 name在正文中 string必填 名称,最多 60 个字符。 description在正文中 string可选 描述,最多 240 个字符。 handle在正文中 string可选 用于 @# 提及和链接的短名:3 到 30 个小写字母、数字或 _。 tags在正文中 string[]可选 最多 5 个描述群组主题的 #标签。 joinPolicy在正文中 string可选 加入方式:open 自由加入,application 申请加入,invite 仅限邀请。openapplicationinvite visibility在正文中 string可选 谁能看到群组:open 所有人,internal 内容仅成员可见,hidden 完全仅成员可见。openinternalhidden
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"Seed swap","handle":"seedswap","tags":["garden","seeds"],"joinPolicy":"open","visibility":"open"}' \
"https://api.tellmelo.com/v2/communities"响应 返回一个 Made 。
示例 {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}可能的状态: 200400401403429
PUT /v2/communities/{id}修改你管理的群组。未提供的项目保持不变。
需要 groups 权限并管理该群组。管理权、解散和火花特权仍在应用中操作。
参数 名称 类型 含义 id在路径中 string必填 群组的 id。 name在正文中 string可选 名称,最多 60 个字符。 description在正文中 string可选 描述,最多 240 个字符。 handle在正文中 string可选 用于 @# 提及和链接的短名:3 到 30 个小写字母、数字或 _。 tags在正文中 string[]可选 最多 5 个描述群组主题的 #标签。 joinPolicy在正文中 string可选 加入方式:open 自由加入,application 申请加入,invite 仅限邀请。openapplicationinvite visibility在正文中 string可选 谁能看到群组:open 所有人,internal 内容仅成员可见,hidden 完全仅成员可见。openinternalhidden image在正文中 string可选 作为群组头像的已上传图片 id(POST /me/pictures)。留空则移除。 banner在正文中 string可选 作为群组封面的已上传图片 id。留空则移除。
请求示例 curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"Seed swap","handle":"seedswap","tags":["garden","seeds"],"joinPolicy":"open","visibility":"open"}' \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
机器人 机器人所在群组中发生的事,实时:以流、按页或投递到地址的方式。
GET /v2/events机器人所在群组自某事件以来的事件,按页读取。
仅限机器人的令牌。频道的事件仅在机器人可查看该频道时提供。
事件保留一天。next 是最后一个事件的编号,作为下一页的 since。
参数 名称 类型 含义 since在查询中 string可选 机器人已有的最后一个事件的编号。没有它时,流从现在开始,列表从最早的开始。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/events?since=0"响应 返回一页 BotEvent ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"id": "4711",
"type": "message.created",
"community": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"channel": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a",
"createdAt": 1758634800000,
"data": {
"message": {
"id": "61a2b3c4-d5e6-4f70-8192-a3b4c5d6e7f8",
"text": "/dice 6",
"author": {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"bot": false
},
"media": 0,
"replyTo": null,
"threadOf": null,
"createdAt": 1758634800000
}
}
}
],
"next": null
}可能的状态: 200401429
GET /v2/events/stream机器人所在群组的事件,发生即送达(server-sent events)。
连接保持打开,十分钟后关闭;客户端重新连接并发送 Last-Event-ID。
仅限机器人的令牌。频道的事件仅在机器人可查看该频道时提供。
参数 名称 类型 含义 since在查询中 string可选 机器人已有的最后一个事件的编号。没有它时,流从现在开始,列表从最早的开始。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/events/stream?since=0"响应 返回一个 BotEvent 。
示例 {
"id": "4711",
"type": "message.created",
"community": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"channel": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a",
"createdAt": 1758634800000,
"data": {
"message": {
"id": "61a2b3c4-d5e6-4f70-8192-a3b4c5d6e7f8",
"text": "/dice 6",
"author": {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"bot": false
},
"media": 0,
"replyTo": null,
"threadOf": null,
"createdAt": 1758634800000
}
}
}可能的状态: 200304401429
GET /v2/me/commands机器人的命令。
仅限机器人的令牌。频道的事件仅在机器人可查看该频道时提供。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/commands"响应 返回一页 BotCommand ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"name": "dice",
"description": "Rolls a die"
}
],
"next": null
}可能的状态: 200304401429
PUT /v2/me/commands一次性设置机器人的全部命令。
替换所有命令;空列表会将其移除。在机器人可查看的聊天中,输入框会在“/”之后提示这些命令。
参数 名称 类型 含义 commands在正文中 object[]必填 最多 25 个命令,每个为 { name, description }。
请求示例 curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"commands":[{"name":"dice","description":"Rolls a die"}]}' \
"https://api.tellmelo.com/v2/me/commands"响应 返回一页 BotCommand ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"name": "dice",
"description": "Rolls a die"
}
],
"next": null
}可能的状态: 200400401403429
POST /v2/interactions/{id}/reply回复命令或按钮。
在 command 或 interaction 事件后 15 分钟内;使用 private 时,只有使用该命令或按钮的人能看到回复。
参数 名称 类型 含义 id在路径中 string必填 事件中的 id(data.interaction)。 text在正文中 string可选 帖子、回复或私信的文字。 private在正文中 boolean可选 true:只有使用该命令或按钮的人能看到回复,为期一天。card在正文中 object可选 卡片 { title, text, color, fields: [{ name, value }] },最多 10 个字段。 buttons在正文中 object[]可选 最多 5 个按钮,每个为 { id, label, style },style 为 primary、secondary 或 danger。按下会作为 interaction 事件送达。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"text":"You rolled a 4.","private":true}' \
"https://api.tellmelo.com/v2/interactions/9b8c7d6e-5f4a-4b3c-8d2e-1f0a9b8c7d6e/reply"响应 返回一个 Made 。
示例 {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}可能的状态: 200400401403404429
POST /v2/channels/{id}/voice在语音频道中占一个位置来播放音乐或声音。
仅限机器人的令牌,以其在频道中的身份组所允许为限。程序通过 LiveKit SDK 连接,并将声音作为麦克风发送;每个人自行调节其音量。
参数 名称 类型 含义 id在路径中 string必填 频道的 id。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a/voice"响应 返回一个 VoiceSeat 。
示例 {
"url": "wss://voice.example.org",
"token": "eyJhbGciOiJIUzI1NiJ9…",
"iceServers": [
{
"urls": [
"stun:turn.example.org:3478"
]
}
],
"speak": true,
"video": false
}可能的状态: 200400401403404429
发现 趋势、搜索和本站自定义表情。
GET /v2/tags当前流行的标签。
按分数最多 10 个热门标签:每次使用计 1 分,每 3 天减半,同一账号每天最多计 3 分。posts 是四舍五入后的分数。limit 只会缩短列表。团队推荐的标签可能排得更靠前。
参数 名称 类型 含义 limit在查询中 integer可选 每页条目数:默认 20,最多 50。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/tags?limit=10"响应 返回一页 Tag ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"tag": "garden",
"posts": 58
}
],
"next": null
}可能的状态: 200304401429
GET /v2/search在帖子、名字、短名称和标签中搜索。
只搜索公开内容:群组外的帖子、个人主页和标签。limit 对每类分别生效。
参数 名称 类型 含义 q在查询中 string必填 要搜索的词。 type在查询中 string可选 哪种结果。不传则返回所有类型。allpostsprofilestags limit在查询中 integer可选 每页条目数:默认 20,最多 50。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/search?q=garden&type=posts"响应 返回一个 SearchResult 。
示例 {
"posts": [
{
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"text": "The bees are back in the garden 🐝 #garden",
"kind": "poll",
"author": {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
},
"community": {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening"
},
"media": [
{
"url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"kind": "image",
"poster": null,
"ai": "without"
}
],
"poll": {
"options": [
{
"text": "Lavender",
"votes": 12
},
{
"text": "Sunflowers",
"votes": 7
},
{
"text": "Clover",
"votes": 3
}
],
"total": 22,
"multiple": false,
"endsAt": null,
"running": true,
"resultsVisible": true,
"myVotes": [
0
]
},
"quotes": null,
"continues": null,
"counts": {
"replies": 4,
"likes": 31,
"reposts": 2
},
"pinned": false,
"giftDrop": {
"item": "plan",
"quantity": 3,
"places": 10,
"left": 4,
"audience": "followers",
"newAccounts": false,
"status": "open",
"claimed": true
},
"createdAt": 1758624000000
}
],
"profiles": [
{
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
}
],
"tags": [
{
"tag": "garden",
"posts": 58
}
]
}可能的状态: 200304400401429
GET /v2/emojis本站自定义表情及其图片地址。
在文本中,表情显示为 :name:。用此列表中的图片替换;未知名称保持为文本。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/emojis"响应 返回一页 Emoji ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"name": "tellmelo",
"url": "/api/media?id=e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b"
}
],
"next": null
}可能的状态: 200304401429
你的账号 你的主页、你的动态、你自己的表情和你的 Webhook。
GET /v2/me你自己的个人主页,包含其他路径需要的 id。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me"响应 返回一个 Profile 。
示例 {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person",
"about": "Beekeeper, allotment, too many seeds. :tellmelo:",
"website": "https://mara-imkerei.example/",
"websiteVerified": true,
"followers": 148,
"createdAt": 1750848000000
}可能的状态: 200304401429
GET /v2/feed你自己的动态,与应用中的排列方式相同。
没有 ETag,因为顺序一直在变。你已开始的列表在结束前保持不变。
参数 名称 类型 含义 tab在查询中 string可选 哪个动态:for-you、following、latest 或 bookmarks。默认 latest。for-youfollowinglatestbookmarks tag在查询中 string可选 只返回与此标签有关的帖子:用它写的或服务器在其中识别出的。不传则不过滤。 limit在查询中 integer可选 每页条目数:默认 20,最多 50。 cursor在查询中 string可选 上一个响应中的 next。不传则从头开始。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/feed?tab=following&limit=20"响应 返回一页 Post ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"text": "The bees are back in the garden 🐝 #garden",
"kind": "poll",
"author": {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
},
"community": {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening"
},
"media": [
{
"url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"kind": "image",
"poster": null,
"ai": "without"
}
],
"poll": {
"options": [
{
"text": "Lavender",
"votes": 12
},
{
"text": "Sunflowers",
"votes": 7
},
{
"text": "Clover",
"votes": 3
}
],
"total": 22,
"multiple": false,
"endsAt": null,
"running": true,
"resultsVisible": true,
"myVotes": [
0
]
},
"quotes": null,
"continues": null,
"counts": {
"replies": 4,
"likes": 31,
"reposts": 2
},
"pinned": false,
"giftDrop": {
"item": "plan",
"quantity": 3,
"places": 10,
"left": 4,
"audience": "followers",
"newAccounts": false,
"status": "open",
"claimed": true
},
"createdAt": 1758624000000
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}可能的状态: 200400401429
POST /v2/me/pictures以字节形式上传一张图片。返回 id 和 url;之后用这个 id 作为头像、封面或用在帖子里。
PNG、JPEG、WebP 或 GIF,按前几个字节识别;去除元数据后重新保存。未被任何地方使用的图片稍后会被删除。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/octet-stream" \
--data-binary @picture.png \
"https://api.tellmelo.com/v2/me/pictures"响应 返回一个 Picture 。
示例 {
"id": "8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9"
}可能的状态: 200401403429
PUT /v2/me/profile修改你的主页:名称、简介、头像、封面和主页颜色。未提供的项目保持不变。
需要 profile 权限。你的 @用户名 只能在应用中修改:它也是你的登录名。
参数 名称 类型 含义 name在正文中 string可选 显示名称,最多 60 个字符。 about在正文中 string可选 “简介”文字。 avatar在正文中 string可选 作为头像的已上传图片 id。留空则移除。 banner在正文中 string可选 作为封面的已上传图片 id。留空则移除。 color在正文中 string可选 主页颜色,需要套餐。null 移除。indigovioletrosecoralamberlimegreentealskyslatesandnight
请求示例 curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"Mara 🌻","about":"Gardening in the city.","avatar":"8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9"}' \
"https://api.tellmelo.com/v2/me/profile"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403429
GET /v2/me/emojis你自己的表情。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/emojis"响应 返回一页 OwnEmoji ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"name": "sunflower",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false,
"resting": false
}
],
"next": null
}可能的状态: 200304401429
POST /v2/me/emojis/pictures以字节形式上传自定义表情的图片。
动态表情需要套餐。转换后过大的图片会被拒绝。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/octet-stream" \
--data-binary @picture.png \
"https://api.tellmelo.com/v2/me/emojis/pictures"响应 返回一个 EmojiPicture 。
示例 {
"id": "8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false
}可能的状态: 200401403429
POST /v2/me/emojis创建一个自定义表情。返回你的全部表情。
能创建多少表情取决于你的套餐。
参数 名称 类型 含义 name在正文中 string必填 书写表情时用的名称,形如 :名称:。 picture在正文中 string必填 来自 POST /me/emojis/pictures 的 id。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"sunflower","picture":"8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9"}' \
"https://api.tellmelo.com/v2/me/emojis"响应 返回一页 OwnEmoji ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"name": "sunflower",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false,
"resting": false
}
],
"next": null
}可能的状态: 200400401403429
DELETE /v2/me/emojis/{name}删除一个自定义表情。返回剩下的表情。
参数 名称 类型 含义 name在路径中 string必填 表情名称,不带冒号。
请求示例 curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/emojis/sunflower"响应 返回一页 OwnEmoji ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"name": "sunflower",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false,
"resting": false
}
],
"next": null
}可能的状态: 200400401403404429
PUT /v2/me/emojis/sharing设置你的粉丝能否在自己的文字中使用你的表情。
参数 名称 类型 含义 shared在正文中 boolean必填 true 与粉丝共享你的表情,false 不共享。
请求示例 curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"shared":true}' \
"https://api.tellmelo.com/v2/me/emojis/sharing"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403429
GET /v2/me/webhooks你的 Webhook 及其状态。
需要 webhooks 权限。Webhook 随组织套餐提供,或面向合作伙伴。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/webhooks"响应 返回一页 Webhook ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"id": "1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b",
"url": "https://example.org/tellmelo-hook",
"kinds": [
"reply",
"mention"
],
"active": true,
"lastStatus": 200,
"lastAt": 1758624000000,
"failures": 0
}
],
"next": null
}可能的状态: 200304401403429
POST /v2/me/webhooks创建 Webhook。返回 id 和签名用的密钥,仅此一次。
每次推送都用密钥签名(X-Tellmelo-Signature)。请妥善保存;不会再次显示。
参数 名称 类型 含义 url在正文中 string必填 本地网络之外的 HTTPS 地址,不含凭据。 kinds在正文中 string[]必填 Webhook 接收哪些通知。可用的类型取决于你的套餐和合作伙伴身份。replymentiongroup_mentionfollowlikerepostmessagequota_changedquota_giftdrop_claimeddrop_empty
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.org/tellmelo-hook","kinds":["reply","mention"]}' \
"https://api.tellmelo.com/v2/me/webhooks"响应 返回一个 WebhookCreated 。
示例 {
"id": "1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b",
"secret": "whsec_3f9a…"
}可能的状态: 200400401403429
DELETE /v2/me/webhooks/{id}删除 Webhook。
参数 名称 类型 含义 id在路径中 string必填 Webhook 的 id。
请求示例 curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/webhooks/1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
POST /v2/me/webhooks/{id}/test向 Webhook 发送测试。
参数 名称 类型 含义 id在路径中 string必填 Webhook 的 id。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/webhooks/1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b/test"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
通知 你的账号周围发生了什么,逐页查看。
GET /v2/notifications你的通知,最新的在前。
读取不会将任何内容标为已读;POST /notifications/read 才会。同一帖子上的同类事件共用一行;more 表示数量。
参数 名称 类型 含义 limit在查询中 integer可选 每页条目数:默认 20,最多 50。 cursor在查询中 string可选 上一个响应中的 next。不传则从头开始。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/notifications?limit=20"响应 返回一页 Notification ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"id": "3f2e1d0c-9b8a-4765-8432-10fedcba9876",
"kind": "like",
"text": null,
"actor": {
"handle": "jon",
"name": "Jon"
},
"postId": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"read": false,
"more": 2,
"createdAt": 1758624300000,
"updatedAt": 1758624900000
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}可能的状态: 200304401429
POST /v2/notifications/read将你的通知标为已读。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/notifications/read"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200401403429
私信 你的收件箱和对话。对话以对方账号命名。
GET /v2/conversations你的收件箱:每个对话一行,最新的在前。
参数 名称 类型 含义 limit在查询中 integer可选 每页条目数:默认 20,最多 50。 cursor在查询中 string可选 上一个响应中的 next。不传则从头开始。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/conversations?limit=20"响应 返回一页 Conversation ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"with": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"excerpt": "See you on Saturday at the market!",
"truncated": false,
"fromMe": true,
"lastMessageId": "7c6b5a49-3827-4165-9f0e-d1c2b3a49586",
"unread": 0,
"updatedAt": 1758624060000
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}可能的状态: 200304401429
GET /v2/conversations/{with}/messages某个对话中的私信,最新的在前。
读取不会将任何内容标为已读;POST /conversations/{with}/read 才会。
参数 名称 类型 含义 with在路径中 string必填 另一个账号的 id。对话本身没有 id。 limit在查询中 integer可选 每页条目数:默认 20,最多 50。 cursor在查询中 string可选 上一个响应中的 next。不传则从头开始。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/conversations/a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05/messages?limit=20"响应 返回一页 Message ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"id": "7c6b5a49-3827-4165-9f0e-d1c2b3a49586",
"text": "See you on Saturday at the market!",
"from": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"to": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"read": true,
"media": [],
"replyTo": null,
"createdAt": 1758624060000
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}可能的状态: 200304400401404429
POST /v2/conversations/{with}/messages在对话中发送私信。
适用应用的规则:屏蔽了你的人无法联系,对方的设置也会生效。
无法通过 API 给私信附加图片、GIF 或视频,只能在应用中操作。
参数 名称 类型 含义 with在路径中 string必填 另一个账号的 id。对话本身没有 id。 text在正文中 string必填 帖子、回复或私信的文字。 replyTo在正文中 string可选 本条私信所回复的本对话中较早私信的 id。自 2.2 起。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"text":"See you on Saturday at the market!"}' \
"https://api.tellmelo.com/v2/conversations/a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05/messages"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
POST /v2/conversations/{with}/read将某个对话的所有私信标为已读。
参数 名称 类型 含义 with在路径中 string必填 另一个账号的 id。对话本身没有 id。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/conversations/a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05/read"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
DELETE /v2/conversations/{with}/messages/{id}删除你的某条私信。
仅限你自己的私信,且仅在发送后 24 小时内。
参数 名称 类型 含义 with在路径中 string必填 另一个账号的 id。对话本身没有 id。 id在路径中 string必填 私信的 id。
请求示例 curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/conversations/a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05/messages/7c6b5a49-3827-4165-9f0e-d1c2b3a49586"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
POST /v2/conversations/{with}/planned定时稍后发送一条私信。返回定时私信的 id。
需要包含定时私信的套餐,否则返回 403。双方都开启端到端加密时,只能在应用中使用。
参数 名称 类型 含义 with在路径中 string必填 另一个账号的 id。对话本身没有 id。 text在正文中 string必填 帖子、回复或私信的文字。 sendAt在正文中 integer必填 私信发送的时间,以 1970 年起的毫秒数表示。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"text":"Happy birthday! 🎂","sendAt":1758700000000}' \
"https://api.tellmelo.com/v2/conversations/a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05/planned"响应 返回一个 Made 。
示例 {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}可能的状态: 200400401403404429
GET /v2/me/planned-messages你尚未发送的定时私信,按时间排序。
参数 名称 类型 含义 with在查询中 string可选 只看发给这个账号的私信(它的 id)。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/planned-messages"响应 返回一页 PlannedMessage ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"id": "3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9",
"to": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"text": "Happy birthday! 🎂",
"sendAt": 1758710400000,
"state": "waiting"
}
],
"next": null
}可能的状态: 200304401429
POST /v2/me/planned-messages/{id}/send立即发送一条被暂缓或发送失败的定时私信。
参数 名称 类型 含义 id在路径中 string必填 定时私信的 id。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/planned-messages/3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9/send"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
DELETE /v2/me/planned-messages/{id}在发送前删除一条定时私信。
参数 名称 类型 含义 id在路径中 string必填 定时私信的 id。
请求示例 curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/planned-messages/3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
关系 点赞、收藏、转发、关注、加入、屏蔽:同一个路径,用 active 设置和解除。自 2.19 起也有列表:粉丝、关注,以及你自己的屏蔽和静音。
POST /v2/relations点赞、收藏、转发、关注、加入、屏蔽、静音,取决于 kind。
对 like、save 和 repost,target 是帖子;对 join 是群组;对 follow、block 和 mute 是账号。active: false 解除关系。
参数 名称 类型 含义 kind在正文中 string必填 哪种关系:like、save、repost、follow、join、block 或 mute(自 2.2 起)。likesaverepostfollowjoinblockmute target在正文中 string必填 帖子、个人主页或群组的 id,取决于 kind。 active在正文中 boolean可选 true 建立关系,false 解除关系。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"kind":"like","target":"5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1","active":true}' \
"https://api.tellmelo.com/v2/relations"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403429
GET /v2/profiles/{handle}/followers谁关注了某个主页,最新的在前。
参数 名称 类型 含义 handle在路径中 string必填 个人主页的短名称,不区分大小写。 limit在查询中 integer可选 每页条目数:默认 20,最多 50。 cursor在查询中 string可选 上一个响应中的 next。不传则从头开始。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/profiles/mara/followers?limit=20"响应 返回一页 ProfileBrief ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}可能的状态: 200304400401404429
GET /v2/profiles/{handle}/following某个主页关注了谁,最新的在前。
参数 名称 类型 含义 handle在路径中 string必填 个人主页的短名称,不区分大小写。 limit在查询中 integer可选 每页条目数:默认 20,最多 50。 cursor在查询中 string可选 上一个响应中的 next。不传则从头开始。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/profiles/mara/following?limit=20"响应 返回一页 ProfileBrief ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}可能的状态: 200304400401404429
GET /v2/me/relations你屏蔽、静音或仅在私信中屏蔽的账号,最新的在前。
仅限你自己的列表。设置和解除请用 POST /relations。
参数 名称 类型 含义 kind在查询中 string必填 block 已屏蔽,mute 已静音,dm_block 仅在私信中屏蔽。blockmutedm_blocklimit在查询中 integer可选 每页条目数:默认 20,最多 50。 cursor在查询中 string可选 上一个响应中的 next。不传则从头开始。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/relations?kind=mute&limit=20"响应 返回一页 ProfileBrief ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}可能的状态: 200304400401429
收藏夹 把收藏的帖子整理到你自己的收藏夹里。一个帖子可以在多个收藏夹中;从收藏夹移出后仍保持收藏。
GET /v2/me/collections你的收藏夹及其中的帖子数。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/collections"响应 返回一页 Collection ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"id": "6d5c4b3a-2918-4e7f-a1b2-c3d4e5f60718",
"name": "Recipes",
"count": 12
}
],
"next": null
}可能的状态: 200304401429
POST /v2/me/collections创建收藏夹。返回它的 id。
能创建多少个收藏夹取决于你的套餐。
参数 名称 类型 含义 name在正文中 string必填 名称,最多 40 个字符。每个账号内唯一,不区分大小写。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"Recipes"}' \
"https://api.tellmelo.com/v2/me/collections"响应 返回一个 Made 。
示例 {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}可能的状态: 200400401403429
PUT /v2/me/collections/{id}重命名收藏夹。
参数 名称 类型 含义 id在路径中 string必填 收藏夹的 id。 name在正文中 string必填 名称,最多 40 个字符。每个账号内唯一,不区分大小写。
请求示例 curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"Baking"}' \
"https://api.tellmelo.com/v2/me/collections/6d5c4b3a-2918-4e7f-a1b2-c3d4e5f60718"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
DELETE /v2/me/collections/{id}删除收藏夹。
其中的帖子仍保持收藏。
参数 名称 类型 含义 id在路径中 string必填 收藏夹的 id。
请求示例 curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/collections/6d5c4b3a-2918-4e7f-a1b2-c3d4e5f60718"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
GET /v2/me/collections/{id}/posts收藏夹中的帖子,与收藏标签页相同。
参数 名称 类型 含义 id在路径中 string必填 收藏夹的 id。 limit在查询中 integer可选 每页条目数:默认 20,最多 50。 cursor在查询中 string可选 上一个响应中的 next。不传则从头开始。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/collections/6d5c4b3a-2918-4e7f-a1b2-c3d4e5f60718/posts?limit=20"响应 返回一页 Post ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"text": "The bees are back in the garden 🐝 #garden",
"kind": "poll",
"author": {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
},
"community": {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening"
},
"media": [
{
"url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"kind": "image",
"poster": null,
"ai": "without"
}
],
"poll": {
"options": [
{
"text": "Lavender",
"votes": 12
},
{
"text": "Sunflowers",
"votes": 7
},
{
"text": "Clover",
"votes": 3
}
],
"total": 22,
"multiple": false,
"endsAt": null,
"running": true,
"resultsVisible": true,
"myVotes": [
0
]
},
"quotes": null,
"continues": null,
"counts": {
"replies": 4,
"likes": 31,
"reposts": 2
},
"pinned": false,
"giftDrop": {
"item": "plan",
"quantity": 3,
"places": 10,
"left": 4,
"audience": "followers",
"newAccounts": false,
"status": "open",
"claimed": true
},
"createdAt": 1758624000000
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}可能的状态: 200400401404429
POST /v2/me/collections/{id}/posts把帖子放入收藏夹或从中移出。
放入收藏夹也会收藏该帖子。仅限可见的帖子。
参数 名称 类型 含义 id在路径中 string必填 收藏夹的 id。 post在正文中 string必填 帖子的 id。 inside在正文中 boolean可选 true 放入帖子(默认),false 移出。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"post":"5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1","inside":true}' \
"https://api.tellmelo.com/v2/me/collections/6d5c4b3a-2918-4e7f-a1b2-c3d4e5f60718/posts"响应 返回一个 Ok 。
示例 {
"ok": true
}可能的状态: 200400401403404429
礼物 查看合作伙伴的额度并从中赠送,在帖子下发放礼物并随时掌握情况。领取礼物只能由真人在应用中完成。
GET /v2/partner/quota你的额度里还剩多少可以送。
仅限有额度的合作伙伴;其他人会收到 403。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/partner/quota"响应 返回一个 Quota 。
示例 {
"months": 120,
"sparks": 500,
"looks": [
{
"id": "frame-gold",
"name": "Goldring",
"kind": "frame",
"quantity": 25
}
]
}可能的状态: 200304401429
GET /v2/partner/gifts你从额度送出了什么、送给谁、什么时候——最新的在前。
仅限有额度的合作伙伴;其他人会收到 403。
参数 名称 类型 含义 limit在查询中 integer可选 每页条目数:默认 20,最多 50。 cursor在查询中 string可选 上一个响应中的 next。不传则从头开始。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/partner/gifts?limit=20"响应 返回一页 QuotaGift ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"item": "plan",
"quantity": 3,
"itemId": null,
"recipient": {
"handle": "jon",
"name": "Jon"
},
"createdAt": 1758627600000
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}可能的状态: 200304401429
POST /v2/partner/gifts从你的额度中把套餐月数或火花送给一位成员。
仅限有额度的合作伙伴;其他人会收到 403。
和在应用中一样,成员会看到礼物来自谁。每小时最多 60 份礼物。
参数 名称 类型 含义 handle在正文中 string必填 你要赠送的成员的 @用户名,带不带 @ 都可以。 item在正文中 string必填 plan 表示套餐月数,sparks 表示火花,shop 表示你库存中的一款样式(自 2.13 起)。plansparksshopquantity在正文中 integer可选 数量:每份礼物最多 12 个月或 35 个火花。 itemId在正文中 string可选 用于 shop:样式的 ID,即额度中 looks 给出的 ID。每份礼物一件;此时 quantity 不适用。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"handle":"jon","item":"plan","quantity":3,"itemId":"frame-gold"}' \
"https://api.tellmelo.com/v2/partner/gifts"响应 返回一个 Quota 。
示例 {
"months": 120,
"sparks": 500,
"looks": [
{
"id": "frame-gold",
"name": "Goldring",
"kind": "frame",
"quantity": 25
}
]
}可能的状态: 200400401403429
GET /v2/gift-drops你在帖子下发放的礼物:还剩多少名额,以及是怎么付款的。
参数 名称 类型 含义 limit在查询中 integer可选 每页条目数:默认 20,最多 50。 cursor在查询中 string可选 上一个响应中的 next。不传则从头开始。
请求示例 curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/gift-drops?limit=20"响应 返回一页 OwnGiftDrop ,形式为 `items` 和 `next`。
示例 {
"items": [
{
"item": "plan",
"quantity": 3,
"places": 10,
"left": 4,
"audience": "followers",
"newAccounts": false,
"status": "open",
"claimed": false,
"postId": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"funding": "quota",
"createdAt": 1758624000000
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}可能的状态: 200304401429
POST /v2/gift-drops发布一条带礼物的帖子,供他人领取。
所有者和拥有此权限的团队成员免费,其他情况从你的额度中扣除。需要付款的请求会被以 422 拒绝——付款只能在应用中完成。
礼物只能在应用中领取,以免有程序把名额一扫而空。还剩多少名额,请看帖子的 giftDrop。
参数 名称 类型 含义 text在正文中 string可选 帖子、回复或私信的文字。 community在正文中 string可选 帖子要发到其动态频道的群组 id;该频道必须开启,且你需要相应权限。不传时,帖子不属于任何群组。 item在正文中 string必填 plan 表示套餐月数,sparks 表示火花。plansparksquantity在正文中 integer必填 每个名额的内容:最多 12 个月或 35 个火花。 places在正文中 integer必填 发给多少人,最多 10,000 人。 audience在正文中 string可选 谁可以领取:all 所有人,followers 仅你的关注者,group 仅群组成员(仅与 community 一起使用)。allfollowersgroup newAccounts在正文中 boolean可选 设为 true 时,注册不满 7 天的账号也能领取。不设置则不能。
请求示例 curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"text":"Ten times three months of Supporter – first come, first served! 🎁","item":"plan","quantity":3,"places":10,"audience":"all","newAccounts":false}' \
"https://api.tellmelo.com/v2/gift-drops"响应 返回一个 DropCreated 。
示例 {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"funding": "quota"
}可能的状态: 200400401403429
Service根路径的响应:谁在响应,以及此密钥能做什么。
字段 类型 含义 namestring始终为 tellmelo。 versionstringAPI 版本,例如 2.1。 scopestring此密钥能做什么:read 或 read write。 rateLimitRateLimit此密钥的额度。 docsstring本文档的位置,即本站上的路径。 specstring机器可读描述的位置。
示例 {
"name": "tellmelo",
"version": "2.20",
"scope": "read write",
"rateLimit": {
"limit": 120,
"remaining": 117
},
"docs": "/developers/docs",
"spec": "/api/v2/openapi.json"
}RateLimit此密钥在当前分钟的额度。
字段 类型 含义 limitinteger每分钟请求数。 remaininginteger本分钟剩余的数量。
示例 {
"limit": 120,
"remaining": 117
}Post帖子,在各处形式相同。
字段 类型 含义 idstring帖子的 id。 textstring或 null 原文(只有投票或只有图片的帖子为 null)。 kindstring帖子的类型。post — 带文字、图片或引用的帖子。poll — 带投票的帖子。 authorProfileBrief作者。 communityCommunityBrief或 null 所在群组(不在任何群组中时为 null)。 mediaMedia[]其图片,按顺序;没有则为空。 pollPoll或 null 投票(没有则为 null)。 quotesstring或 null 本帖引用的帖子的 id。 continuesstring或 null 本帖作为补充所续写的帖子的 id。 countsCounts回复、赞和转发。 pinnedboolean是否置顶在作者个人主页顶部。 giftDropGiftDrop或 null 帖子下可领取的礼物(没有时为 null)。 createdAtinteger写作时间。
示例 {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"text": "The bees are back in the garden 🐝 #garden",
"kind": "poll",
"author": {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
},
"community": {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening"
},
"media": [
{
"url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"kind": "image",
"poster": null,
"ai": "without"
}
],
"poll": {
"options": [
{
"text": "Lavender",
"votes": 12
},
{
"text": "Sunflowers",
"votes": 7
},
{
"text": "Clover",
"votes": 3
}
],
"total": 22,
"multiple": false,
"endsAt": null,
"running": true,
"resultsVisible": true,
"myVotes": [
0
]
},
"quotes": null,
"continues": null,
"counts": {
"replies": 4,
"likes": 31,
"reposts": 2
},
"pinned": false,
"giftDrop": {
"item": "plan",
"quantity": 3,
"places": 10,
"left": 4,
"audience": "followers",
"newAccounts": false,
"status": "open",
"claimed": true
},
"createdAt": 1758624000000
}Reply帖子下的回复:多两个字段的帖子。
Post 的所有字段,另外还有:
字段 类型 含义 postIdstring整个讨论所属的帖子。 parentIdstring或 null 本回复所回复的回复(直接回复帖子时为 null)。
示例 {
"id": "9e4b1c7d-2a3f-4d5e-8b6c-0f1e2d3c4b5a",
"text": "Same here, the lavender is full of them.",
"kind": "post",
"author": {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"verified": false,
"accountKind": "person"
},
"community": null,
"media": [],
"poll": null,
"quotes": null,
"continues": null,
"counts": {
"replies": 0,
"likes": 3,
"reposts": 0
},
"pinned": false,
"giftDrop": null,
"createdAt": 1758624600000,
"postId": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"parentId": null
}ReplyVote你对一条回复的投票及其得分。
字段 类型 含义 votestring你的投票。up — 赞成。down — 反对。none — 未投票。 scoreinteger赞成票减去反对票,可以低于零。
示例 {
"vote": "up",
"score": 12
}PlannedReply你定时稍后发布的一条回复。
字段 类型 含义 idstring定时回复的 id。 parentIdstring或 null 它将回复的那条回复(直接回复帖子时为 null)。 textstring文字。 publishAtinteger发布时间。 statestring状态。waiting — 等待发布时间。failed — 无法发送,例如帖子已不存在。
示例 {
"id": "3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9",
"parentId": null,
"text": "Count me in for Saturday!",
"publishAt": 1758710400000,
"state": "waiting"
}ReplySettings你某个帖子的回复设置。
字段 类型 含义 audiencestring谁可以回复。all — 所有人。following — 你关注的账号。mentioned — 帖子中提及的人。nobody — 除你之外没有人。 approvalboolean回复是否需要你批准。 slowstring慢速模式。auto — 回复很多时自动开启。on — 始终开启。off — 关闭。
示例 {
"audience": "following",
"approval": false,
"slow": "auto"
}Counts帖子有多少回复、赞和转发。
字段 类型 含义 repliesinteger回复,所有层级合计。 likesinteger赞。 repostsinteger转发。
示例 {
"replies": 4,
"likes": 31,
"reposts": 2
}Poll帖子的投票。
字段 类型 含义 optionsPollOption[]选项,按顺序。投票时 option 从 0 开始计数。 totalinteger所有票数合计,始终存在。 multipleboolean是否可以选择多个选项。 endsAtinteger或 null 投票结束时间(无截止时为 null)。 runningboolean是否仍可投票。 resultsVisibleboolean是否显示各选项的票数(见 votes)。 myVotesinteger[]你选择的选项,从 0 开始计数。
示例 {
"options": [
{
"text": "Lavender",
"votes": 12
},
{
"text": "Sunflowers",
"votes": 7
},
{
"text": "Clover",
"votes": 3
}
],
"total": 22,
"multiple": false,
"endsAt": null,
"running": true,
"resultsVisible": true,
"myVotes": [
0
]
}PollOption投票的一个选项。
字段 类型 含义 textstring选项内容。 votesinteger或 null 其票数(结果隐藏期间为 null)。
示例 {
"text": "Lavender",
"votes": 12
}ProfileBrief出现在其他对象中的个人主页:作为作者或在搜索中。
字段 类型 含义 idstring账号的 id:/relations 和 /conversations/{with} 需要的值。 handlestring短名称,不含 @,按成员选择的写法显示。 namestring显示名称。可能包含表情,包括 :name:。 verifiedboolean账号是否已认证。 accountKindstring账号类型。person — 个人。business — 商家。association — 俱乐部或社团。automated — 自动化账号,例如机器人。bot — 由带有自己密钥的程序运行的群组机器人(自 2.18 起)。
示例 {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
}Profile单独的个人主页,包含简介和关注者。
ProfileBrief 的所有字段,另外还有:
字段 类型 含义 aboutstring或 null 简介(没有则为 null)。 websitestring或 null 个人主页的网站(没有则为 null)。自 2.3 起。 websiteVerifiedboolean网站是否通过 rel=me 回链到此个人主页,每周检查一次。自 2.3 起。 followersinteger有多少账号关注它。 createdAtinteger或 null 账号创建时间(成员隐藏加入日期时为 null;自 2.9 起)。
示例 {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person",
"about": "Beekeeper, allotment, too many seeds. :tellmelo:",
"website": "https://mara-imkerei.example/",
"websiteVerified": true,
"followers": 148,
"createdAt": 1750848000000
}Membership你的账号在群组中的身份和权限。
字段 类型 含义 leaderstring或 null 你是否创建了该群组或共同管理它;否则为 null。founder — 创建者。manager — 共同管理者。 rolesstring[]你的角色的 id,最高的在前。 permissionsstring[]你在群组中能做的事。 mutedUntilinteger或 null 禁言在这里持续到何时;没有则为 null。
示例 {
"leader": null,
"roles": [
"4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8"
],
"permissions": [
"attach",
"invite",
"send",
"view"
],
"mutedUntil": null
}Person一位成员的简要信息。
字段 类型 含义 idstring账号的 id。 handlestring用户名,不含 @。 namestring显示名称。 botboolean该账户是否为机器人(自 2.18 起)。
示例 {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"bot": false
}Channel群组的一个频道。
字段 类型 含义 idstringid。kindstring频道类型。feed — 动态频道,其帖子也会出现在公开动态中。chat — 聊天。voice — 语音频道;只能在应用中说话。hub — 群组的大厅:介绍群组的页面。始终存在,没有消息。 namestring或 null 名称,不含 #;为 null 时使用应用在各语言中给出的名称。 topicstring主题;没有时为空。 categoryChannelCategory或 null 分类;没有时为 null。 unreadinteger你尚未阅读的他人消息数,最多 100。 permissionsstring[]你在此频道中能做的事。 symbolChannelSymbol它的图标;若群组设定了形状,则为群组的形状。
示例 {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a",
"kind": "chat",
"name": "harvest",
"topic": "What came in this week",
"category": {
"id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
"name": "Garden",
"symbol": {
"emoji": null,
"icon": null,
"image": null,
"color": null,
"shape": null
}
},
"unread": 3,
"permissions": [
"view",
"send"
],
"symbol": {
"emoji": "🌻",
"icon": null,
"image": null,
"color": "amber",
"shape": "circle"
}
}ChannelCategory频道所在的分类。
示例 {
"id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
"name": "Garden",
"symbol": {
"emoji": null,
"icon": null,
"image": null,
"color": null,
"shape": null
}
}ChannelSymbol频道或分类的图标:表情、图标、图片至多其一,否则为其类型的标志。
字段 类型 含义 emojistring或 null 表情;没有则为 null。 iconstring或 null 应用图标库中的图标名;没有则为 null。 imagestring或 null 自有图片的地址;没有则为 null。 colorstring或 null 图块颜色;null 表示其类型的颜色。 shapestring或 null 图块形状;null 表示圆形。
示例 {
"emoji": "🌻",
"icon": null,
"image": null,
"color": "amber",
"shape": "circle"
}ChannelMessage聊天频道中的一条消息。
字段 类型 含义 idstringid。textstring或 null 文本(仅含图片或语音的消息为 null)。 authorPerson谁写的。 mediaMedia[]其中的图片和语音消息;没有时为空。 replyTostring或 null 所回复消息的 id;没有时为 null。 roleColorstring或 null 作者拥有颜色的最高角色的颜色;没有则为 null。 threadOfstring或 null 此消息在其话题中回复的消息;在聊天中为 null。 threadCountinteger此消息的话题有多少条回复。 cardobject或 null 机器人的卡片:title、text、color 和 fields;否则为 null。 buttonsobject[]机器人的按钮:每个包含 id、label 和 style。 createdAtinteger何时写的。
示例 {
"id": "61a2b3c4-d5e6-4f70-8192-a3b4c5d6e7f8",
"text": "@jon the first tomatoes are ripe 🍅",
"author": {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"bot": false
},
"media": [
{
"url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"kind": "image",
"poster": null,
"ai": "without"
}
],
"replyTo": "72b3c4d5-e6f7-4081-92a3-b4c5d6e7f809",
"roleColor": "green",
"threadOf": null,
"threadCount": 3,
"card": null,
"buttons": [],
"createdAt": 1758631200000
}Role群组的一个角色。
字段 类型 含义 idstringid。namestring或 null 名称;@everyone 为 null。 everyoneboolean是否为 @everyone,即所有成员的角色。 colorstring或 null 颜色:indigo、violet、rose、amber、green 或 teal;没有时为 null。 permissionsstring[]其权限。 membersinteger拥有它的人数;@everyone 为全体成员。 editableboolean你的账号是否可以修改它。 selfableboolean成员是否自行领取和取消该身份组。
示例 {
"id": "4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8",
"name": "Gardeners",
"everyone": false,
"color": "green",
"permissions": [
"attach",
"invite",
"send",
"view"
],
"members": 24,
"editable": true,
"selfable": false
}GroupMember群组成员及其角色。
Person 的所有字段,另外还有:
字段 类型 含义 leaderstring或 null 该成员是否创建了群组或共同管理它;否则为 null。founder — 创建者。manager — 共同管理者。 rolesstring[]其角色的 id,最高的在前。 mutedUntilinteger或 null 如果你的账号可以禁言,成员被禁言到何时;否则为 null。
示例 {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"bot": false,
"leader": null,
"roles": [
"4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8"
],
"mutedUntil": null
}ChannelOverride某个角色在频道中与在群组中不同的权限。
字段 类型 含义 rolestring角色的 id。 allowstring[]它在此额外可以做的事。 denystring[]它在此不能做的事。
示例 {
"role": "4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8",
"allow": [
"send"
],
"deny": []
}Bell群组的铃铛。
字段 类型 含义 levelstring接收哪些通知。all — 动态频道中的每条新帖子,以及 @everyone。important — 管理层在动态频道中的帖子,以及 @everyone。off — 不接收,除非有人用 @名称 提及你。
示例 {
"level": "important"
}InviteLink群组的邀请链接。
字段 类型 含义 codestring代码。 urlstring用于分享的地址。 createdByPerson或 null 谁创建的;账号已删除时为 null。 createdAtinteger何时创建。 expiresAtinteger或 null 有效期至何时;不过期时为 null。 usesinteger已使用次数。 maxUsesinteger或 null 可使用次数;不限时为 null。
示例 {
"code": "k7Qm2xPa",
"url": "https://tellmelo.com/groups?join=k7Qm2xPa",
"createdBy": {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"bot": false
},
"createdAt": 1758624000000,
"expiresAt": 1759228800000,
"uses": 3,
"maxUses": 10
}InvitePreview邀请链接指向何处。
示例 {
"community": {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening",
"members": 312,
"rules": [
"Be kind.",
"No advertising."
]
},
"member": false
}InviteGroup邀请链接背后的群组。
字段 类型 含义 idstringid。namestring名称。 membersinteger成员人数。 rulesstring[]其规则,加入时需接受;没有时为空。
示例 {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening",
"members": 312,
"rules": [
"Be kind.",
"No advertising."
]
}Joined通过邀请链接加入。
字段 类型 含义 communitystring群组的 id。
示例 {
"community": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60"
}LogEntry管理层记录中的一条。
字段 类型 含义 idstringid。actionstring发生了什么。post_removed — 一条帖子。member_removed — 2.16 之前移除的成员(90 天内不能加入)。message_removed — 聊天频道中的一条消息。member_kicked — 一次踢出。member_banned — 一次封禁。member_unbanned — 一次解除封禁。member_timed_out — 一次禁言。timeout_lifted — 一次解除禁言。voice_muted — 在语音频道中被静音。voice_removed — 被断开语音频道。bot_added — 有机器人加入了群组(自 2.18 起)。bot_removed — 有机器人被移出群组(自 2.18 起)。 memberPerson涉及谁。 reasonstring理由;消息以及未给出理由时为空。 bystring或 null 执行者的名字;账号已删除时为 null。 createdAtinteger何时。
示例 {
"id": "8f7e6d5c-4b3a-4291-8f7e-6d5c4b3a2918",
"action": "message_removed",
"member": {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"bot": false
},
"reason": "",
"by": "Mara 🌻",
"createdAt": 1758710400000
}Ban群组中的一项封禁。
字段 类型 含义 memberPerson被封禁的人。 untilinteger或 null 到何时;在被解除前为 null。 createdAtinteger或 null 从何时起;2.16 之前的封禁为 null。 bystring或 null 执行封禁者的名字;未知时为 null。
示例 {
"member": {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"bot": false
},
"until": 1759228800000,
"createdAt": 1758624000000,
"by": "Mara 🌻"
}Until禁言或封禁何时结束。
字段 类型 含义 untilinteger或 null 时间点;无期限封禁或已解除的禁言为 null。
示例 {
"until": 1758624600000
}Tag一个标签以及有多少帖子使用它。
字段 类型 含义 tagstring标签,不含 #。 postsinteger最近有多少帖子使用它。
示例 {
"tag": "garden",
"posts": 58
}SearchResult三个列表,可能为空。
示例 {
"posts": [
{
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"text": "The bees are back in the garden 🐝 #garden",
"kind": "poll",
"author": {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
},
"community": {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening"
},
"media": [
{
"url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"kind": "image",
"poster": null,
"ai": "without"
}
],
"poll": {
"options": [
{
"text": "Lavender",
"votes": 12
},
{
"text": "Sunflowers",
"votes": 7
},
{
"text": "Clover",
"votes": 3
}
],
"total": 22,
"multiple": false,
"endsAt": null,
"running": true,
"resultsVisible": true,
"myVotes": [
0
]
},
"quotes": null,
"continues": null,
"counts": {
"replies": 4,
"likes": 31,
"reposts": 2
},
"pinned": false,
"giftDrop": {
"item": "plan",
"quantity": 3,
"places": 10,
"left": 4,
"audience": "followers",
"newAccounts": false,
"status": "open",
"claimed": true
},
"createdAt": 1758624000000
}
],
"profiles": [
{
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
}
],
"tags": [
{
"tag": "garden",
"posts": 58
}
]
}Emoji本站的一个表情。
字段 类型 含义 namestring名称,即冒号之间的部分。 urlstring图片地址,相对于本站。
示例 {
"name": "tellmelo",
"url": "/api/media?id=e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b"
}Notification一条通知。一行可以汇总多个同类事件。
字段 类型 含义 idstring通知的 id。 kindstring发生了什么。reply — 有人回复了你。like — 有人赞了你的帖子。reply_like — 有人赞成你的回复。duel — 有人向你发起动态对决挑战,或你的挑战已完成。reply_pick — 帖子作者将你的回复设为精选。repost — 有人转发了你的帖子。follow — 有人关注了你。mention — 有人提到了你。group_mention — 有人提到了你管理的群组;text 是群组名称。channel_mention — 有人在你某个群组的聊天频道中提及了你,包括 @everyone;该成员为 actor,句子中写明频道和群组,从不包含消息内容。message — 有人给你发了私信。scheduled — 你的一条定时帖子已发布。video — 你的一条等待视频的帖子已发布,或已重新变为草稿。reminder — 一条关于收藏帖子的提醒到期了。report — 你提交的举报的处理结果。moderation — 关于你账号的决定:警告、限制、申诉。team — 团队有新工作(仅限所有者、管理员和版主)。reward — 邀请奖励即将到期或已到期。gift — 来自团队的礼物:一个套餐,或给你或你管理的群组的火花。present — 来自成员的礼物:火花或套餐时长;该成员即 actor。spark — 火花即将到期,或你管理的群组的火花不再足以支撑其特权。loyalty — 关于忠诚节奏:活跃的一周被计入或还差一天,奖励是新的或即将消失。impact — 你十二小时内的帖子在一天后的表现,合并为一条通知。discovery — “被发现”计划的邀请,或其中某个位置开始或结束。group_post — 某个群组有新帖子,且该群组的铃铛设置为提醒。group_moderation — 群组管理层移除了你的一条帖子,或将你移出了群组。group — 成员在群组中对你做的事:邀请、接受或拒绝你、将你设为联合管理员、移交或解散群组,或申请加入你的群组;该成员即 actor,群组名称位于句末。coauthor — 有人邀请你成为帖子的合著者。partner — 来自合作伙伴计划的提醒,或合作伙伴标识的结束。news — 你关注的地区有一篇新文章。pick — 你的帖子入围每周佳帖或年度佳帖评选,或已胜出。advent — 降临节日历有新格子打开、有格子被打开,或今天的格子还在等待。team_message — tellmelo 团队写给选定成员的消息。challenge — 新的每周挑战开始了。nudge — 仅一次:一条还没有人回复的帖子,或正在进行的挑战。signin — 有电脑在询问你是否正在那里登录。 textstring或 null 仅用于举报和审核:相关文本,否则为 null。 actorActor谁做的。 postIdstring或 null 涉及的帖子(不涉及任何帖子时为 null)。 readboolean是否已标为已读。 moreinteger除所列事件外,这一行还代表多少其他事件。 createdAtinteger首次发生的时间。 updatedAtinteger最后一次汇入新事件的时间。列表按此排序。
示例 {
"id": "3f2e1d0c-9b8a-4765-8432-10fedcba9876",
"kind": "like",
"text": null,
"actor": {
"handle": "jon",
"name": "Jon"
},
"postId": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"read": false,
"more": 2,
"createdAt": 1758624300000,
"updatedAt": 1758624900000
}Actor谁触发了通知。
字段 类型 含义 handlestring短名称。 namestring显示名称。
示例 {
"handle": "jon",
"name": "Jon"
}Conversation你收件箱中的一行。
字段 类型 含义 withstring对方账号的 id:/conversations/{with}/messages 需要的值。 handlestring对方的短名称。 namestring对方的显示名称。 excerptstring或 null 最后一条私信的开头(没有文字时为 null)。 truncatedboolean摘录是否被截断。 fromMeboolean最后一条私信是否是你发的。 lastMessageIdstring最后一条私信的 id。 unreadinteger对方有多少条私信你还没读。 updatedAtinteger最后一条私信的写作时间。
示例 {
"with": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"excerpt": "See you on Saturday at the market!",
"truncated": false,
"fromMe": true,
"lastMessageId": "7c6b5a49-3827-4165-9f0e-d1c2b3a49586",
"unread": 0,
"updatedAt": 1758624060000
}Message对话中的一条私信。
字段 类型 含义 idstring私信的 id。 textstring或 null 文字(只有图片的私信为 null)。 fromstring写信账号的 id。 tostring收信账号的 id。 readboolean收件人是否已读。 mediaMedia[]其图片;没有则为空。 replyTostring或 null 本条私信所回复的私信的 id(未回复任何私信时为 null)。自 2.2 起。 createdAtinteger发送时间。
示例 {
"id": "7c6b5a49-3827-4165-9f0e-d1c2b3a49586",
"text": "See you on Saturday at the market!",
"from": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"to": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"read": true,
"media": [],
"replyTo": null,
"createdAt": 1758624060000
}PlannedMessage你定时稍后发送的一条私信。
字段 类型 含义 idstring定时私信的 id。 tostring接收账号的 id。 textstring或 null 文字;端到端加密时为 null。 sendAtinteger发送时间。 statestring状态。waiting — 等待发送时间。held — 因套餐到期而暂缓。你可以自己发送或删除它。failed — 无法发送。
示例 {
"id": "3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9",
"to": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"text": "Happy birthday! 🎂",
"sendAt": 1758710400000,
"state": "waiting"
}ScheduledPost你一条尚未发布的帖子。
字段 类型 含义 idstring帖子的 id。 textstring或 null 文字。 communityIdstring或 null 发布到的群组(群组外为 null)。 publishAtinteger或 null 发布时间(在等待其他事情时为 null)。 deleteAtinteger或 null 自动删除时间(null:永不)。 waitingForstring在等什么。time — 自己的发布时间。review — 对提交审核的文字的批准。check — 自动审核的检查。payment — 礼物的付款。 createdAtinteger写作时间。
示例 {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"text": "Market day tomorrow – see you at the bee stand! #garden",
"communityId": null,
"publishAt": 1758710400000,
"deleteAt": null,
"waitingFor": "time",
"createdAt": 1758624000000
}Collection收藏帖子的收藏夹。
字段 类型 含义 idstring收藏夹的 id。 namestring名称。 countinteger其中的帖子数。
示例 {
"id": "6d5c4b3a-2918-4e7f-a1b2-c3d4e5f60718",
"name": "Recipes",
"count": 12
}Event某个主页即将举行的活动。
字段 类型 含义 idstring活动的 id。 titlestring标题。 startsAtinteger开始时间。 endsAtinteger或 null 结束时间;没有结束时间时为 null。 placestring或 null 地点。 descriptionstring或 null 描述。 signupsEventSignups或 null 报名情况;不可报名时为 null。
示例 {
"id": "2a3b4c5d-6e7f-4809-9a1b-2c3d4e5f6a7b",
"title": "Seed swap",
"startsAt": 1758883200000,
"endsAt": 1758890400000,
"place": "Community garden",
"description": "Bring seeds, take seeds.",
"signups": {
"count": 14,
"going": true
}
}EventSignups已报名人数。
字段 类型 含义 countinteger报名人数。 goingboolean你是否已报名。
示例 {
"count": 14,
"going": true
}EventSignup报名了你某个活动的人。
字段 类型 含义 idstring账号的 id。 handlestring用户名。 namestring显示名称。 atinteger报名时间。
示例 {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"at": 1758624000000
}Picture一张已上传的图片。
字段 类型 含义 idstring图片的 id。 urlstring可以在哪里查看。
示例 {
"id": "8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9"
}EmojiPicture已上传的表情图片。
字段 类型 含义 idstring图片的 id。 urlstring可以在哪里查看。 animatedboolean是否为动态。
示例 {
"id": "8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false
}OwnEmoji你自己的一个表情。
字段 类型 含义 namestring名称。 urlstring图片。 animatedboolean是否为动态。 restingboolean因当前套餐允许的表情较少而暂停:会保留,但无法使用。
示例 {
"name": "sunflower",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false,
"resting": false
}GroupEmoji群组的一个表情。
字段 类型 含义 namestring名称。 urlstring图片。 animatedboolean是否为动态。
示例 {
"name": "seedling",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false
}BotEvent机器人所在群组中的一个事件。
字段 类型 含义 idstring其编号,递增;用它继续(since、Last-Event-ID)。 typestring发生了什么。message.created — 有人写了一条消息。message.deleted — 一条消息被删除。member.joined — 有人加入。member.left — 有人离开或被移除。voice.joined — 有人进入语音频道。command — 有人使用了机器人的命令。interaction — 有人按下了机器人消息中的按钮。 communitystring群组。 channelstring或 null 频道;对整个群组为 null。 createdAtinteger发生时间。 dataobject按类型附带的数据:message、member(含 reason)、command 或 interaction。
示例 {
"id": "4711",
"type": "message.created",
"community": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"channel": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a",
"createdAt": 1758634800000,
"data": {
"message": {
"id": "61a2b3c4-d5e6-4f70-8192-a3b4c5d6e7f8",
"text": "/dice 6",
"author": {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"bot": false
},
"media": 0,
"replyTo": null,
"threadOf": null,
"createdAt": 1758634800000
}
}
}BotCommand机器人的一个命令。
字段 类型 含义 namestring其名称,不含“/”。 descriptionstring它的作用。
示例 {
"name": "dice",
"description": "Rolls a die"
}VoiceSeat语音频道中的一个位置。
字段 类型 含义 urlstring媒体服务器的地址(LiveKit)。 tokenstring此频道的令牌,有效几分钟。 iceServersobject[]连接所用的 STUN 和 TURN 服务器。 speakboolean机器人能否在那里发送声音。 videoboolean机器人能否在那里发送视频。
示例 {
"url": "wss://voice.example.org",
"token": "eyJhbGciOiJIUzI1NiJ9…",
"iceServers": [
{
"urls": [
"stun:turn.example.org:3478"
]
}
],
"speak": true,
"video": false
}Webhook你的一个 Webhook。
字段 类型 含义 idstringWebhook 的 id。 urlstring地址。 kindsstring[]接收哪些通知。 activeboolean是否接收推送。连续多次失败后会被关闭。 lastStatusinteger或 null 上次推送的 HTTP 状态。 lastAtinteger或 null 上次推送时间。 failuresinteger连续失败次数。
示例 {
"id": "1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b",
"url": "https://example.org/tellmelo-hook",
"kinds": [
"reply",
"mention"
],
"active": true,
"lastStatus": 200,
"lastAt": 1758624000000,
"failures": 0
}WebhookCreated新建的 Webhook 及其密钥。
字段 类型 含义 idstringWebhook 的 id。 secretstring签名用的密钥,仅此一次。
示例 {
"id": "1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b",
"secret": "whsec_3f9a…"
}GroupBot群组的一个机器人。
字段 类型 含义 idstring机器人账号的 id。 handlestring短名。 namestring名称。 descriptionstring它的用途,由所有者描述。 permissionsstring[]它在群组中的角色允许的操作。
示例 {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "gardenbot",
"name": "Garden bot",
"description": "Reminds the group of watering days.",
"permissions": [
"send",
"view"
]
}VoiceRoom一个语音频道及其中的人。
示例 {
"channel": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a",
"people": [
{
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"muted": false,
"deaf": false,
"camera": false,
"screen": true
}
]
}VoicePerson语音频道中的某人。
字段 类型 含义 idstring账号的 id。 handlestring短名。 namestring显示名称。 mutedboolean麦克风是否关闭。 deafboolean是否什么都听不到(本人选择)。 cameraboolean摄像头是否开启。 screenboolean是否在共享屏幕。
示例 {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"muted": true,
"deaf": false,
"camera": false,
"screen": false
}GiftDrop帖子下的礼物——绝不包含领取者的名字。
字段 类型 含义 itemstring每个名额的内容。plan — 套餐月数(支持者)。sparks — 火花。 quantityinteger每个名额有多少:月数或火花数。 placesinteger名额总数。 leftinteger还剩多少名额。 audiencestring谁可以领取。all — 所有人。followers — 仅发放者的关注者。group — 仅帖子所在群组的成员。 newAccountsboolean注册不满 7 天的账号是否也能领取。 statusstring当前状态。awaiting_payment — 等待付款;帖子尚未发布。open — 还有名额可以领取。closed — 已结束:全部领完、款项已退或帖子已删除。 claimedboolean你自己是否已领取(公开路径上始终为 false)。
示例 {
"item": "plan",
"quantity": 3,
"places": 10,
"left": 4,
"audience": "followers",
"newAccounts": false,
"status": "open",
"claimed": true
}OwnGiftDrop你在某条帖子下发放的礼物,附带帖子和付款方式。
GiftDrop 的所有字段,另外还有:
字段 类型 含义 postIdstring礼物所在的帖子。 fundingstring付款方式。free — 免费。quota — 来自额度。payment — 已付款。 createdAtinteger创建时间。
示例 {
"item": "plan",
"quantity": 3,
"places": 10,
"left": 4,
"audience": "followers",
"newAccounts": false,
"status": "open",
"claimed": false,
"postId": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"funding": "quota",
"createdAt": 1758624000000
}Quota额度里有什么。
字段 类型 含义 monthsinteger还可以送出的套餐月数。 sparksinteger还可以送出的火花数。 looksQuotaLook[]库存中还可以送出的样式(自 2.13 起)。
示例 {
"months": 120,
"sparks": 500,
"looks": [
{
"id": "frame-gold",
"name": "Goldring",
"kind": "frame",
"quantity": 25
}
]
}QuotaLook合作伙伴库存中的一款样式,附剩余件数(自 2.13 起)。
字段 类型 含义 idstring样式的 ID;送出时作为 itemId 传入。 namestring样式的名称。 kindstring样式的类型。frame — 头像框。background — 封面特效。card — 主页卡片。 quantityinteger还剩多少件。
示例 {
"id": "frame-gold",
"name": "Goldring",
"kind": "frame",
"quantity": 25
}QuotaGift一份来自额度的礼物。
字段 类型 含义 itemstring送出了什么。plan — 套餐月数(支持者)。sparks — 火花。shop — 库存中的一款样式(自 2.13 起)。 quantityinteger数量。 itemIdstring或 null 当 item 为 shop 时,为送出的样式;否则为 null。 recipientActor送给谁。 createdAtinteger什么时候。
示例 {
"item": "plan",
"quantity": 3,
"itemId": null,
"recipient": {
"handle": "jon",
"name": "Jon"
},
"createdAt": 1758627600000
}Embed用于其他网站的地址。无需密钥即可使用。
字段 类型 含义 pagestring用于 <iframe> 的播放器。 filestring供你自己的播放器使用的 MP4 文件。 posterstring预览图。 codestring现成的嵌入代码。
示例 {
"page": "https://tellmelo.com/media-embed/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"file": "https://tellmelo.com/media-embed/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918/file",
"poster": "https://tellmelo.com/media-embed/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918/poster",
"code": "<iframe src=\"https://tellmelo.com/media-embed/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918\" width=\"480\" height=\"300\" title=\"Happy bees\" style=\"border:0;max-width:100%\" loading=\"lazy\" allowfullscreen></iframe>"
}UploadStarted已开始的上传。
字段 类型 含义 uploadstring此次上传的 ID。 pieceinteger一块最大可以有多少字节。
示例 {
"upload": "e7c1a2b3-4d5e-4f60-8a9b-0c1d2e3f4a5b",
"piece": 4194304
}UploadPiece已收到的一块。
字段 类型 含义 receivedinteger已收到多少字节。 itemMediaItem或 null 最后一块之后为新的 GIF 或视频,否则为 null。
示例 {
"received": 4194304,
"item": null
}Created创建了内容的写入操作的响应。
字段 类型 含义 idstring所创建内容的 id。 scheduledForinteger或 null 如果设置了定时发布,则为出现时间(否则为 null)。 deleteAtinteger或 null 如果设置了自动删除,则为删除时间(否则为 null)。
示例 {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"scheduledFor": null,
"deleteAt": null
}DropCreated创建带礼物的帖子后的响应。
字段 类型 含义 idstring新帖子的 id。 fundingstring礼物的付款方式。
示例 {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"funding": "quota"
}Made刚刚创建或修改的内容。
字段 类型 含义 idstringid;邀请链接则为其代码。
示例 {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Ok无需返回内容的写入操作的响应。
示例 {
"ok": true
}机器可读的描述 本页背后的表格以 OpenAPI 形式提供,地址为 https://api.tellmelo.com/v2/openapi.json。
https://api.tellmelo.com/v2/openapi.json其他网站上的 GIF 和视频 成员分享并允许在其他网站上使用的内容,任何网站都可以展示:使用 anywhere=true 的搜索能找到它,它的 embed 中包含地址。如果成员撤回,它会在几分钟内从那里消失。
分块上传 先开始上传,然后分块发送文件。较大的文件要分成每块 piece 字节,并用 offset 标明每块的位置。最后一块之后,你会得到完成的 GIF 或视频。
curl -X POST -H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"kind":"gif","size":2400000,"name":"Happy bees","shared":true,"anywhere":true}' \
"https://api.tellmelo.com/v2/media/uploads"
→ { "upload": "e7c1a2b3-4d5e-4f60-8a9b-0c1d2e3f4a5b", "piece": 4194304 }
curl -X PUT -H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/octet-stream" \
--data-binary @bees.gif \
"https://api.tellmelo.com/v2/media/uploads/e7c1a2b3-4d5e-4f60-8a9b-0c1d2e3f4a5b?offset=0"
→ { "received": 2400000, "item": { "id": "…", "embed": { … } } }嵌入 播放器会循环播放 GIF,或带控件播放视频,下方显示名称和分享者。把 embed.code 中的代码放到页面里:
<iframe src="https://tellmelo.com/media-embed/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918" width="480" height="300" title="Happy bees" style="border:0;max-width:100%" loading="lazy" allowfullscreen></iframe>支持 oEmbed 的论坛和程序,只要给它们播放器的地址,就会自己获取代码:
https://tellmelo.com/api/oembed?url=https%3A%2F%2Ftellmelo.com%2Fmedia-embed%2Fb2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918密钥应放在你的服务器上,绝不能放在网页的代码里。通过你的服务器进行搜索和上传;embed 中的地址不需要密钥。
用于你网站的 GIF 选择器 有了站点密钥(开发者区 → 用于你网站的 GIF 选择器 ),你的网站就能获得现成的搜索:在页面里加两行代码,点击按钮即可打开。密钥是公开的,只在你为它填写的地址上有效。选择器只显示成员允许在其他网站上使用的内容。
<script src="https://tellmelo.com/picker.js" data-key="tmsk_…" defer></script>
<button type="button" data-tellmelo-picker>GIF</button>选中内容后,按钮会触发 tellmelo:pick 事件并附带所选条目:用于嵌入的 code,以及 file、poster、name 和 author。设置 data-target="#field" 后,它会把 code 直接填入文本框;设置 data-kind="video" 后,它会搜索视频。如果你自己嵌入文件,请显示分享者的名字。
document.addEventListener('tellmelo:pick', (event) => {
const { code, file, name, author } = event.detail;
});使用 tellmelo 登录 其他网站可以通过 OpenID Connect(带 PKCE 的授权码)让成员用 tellmelo 账号登录。网站只会得到用户名、已确认的邮箱地址以及每位成员一个它专属的标识(sub)。
你可以在“开发者区 → 使用 tellmelo 登录”中申请应用。团队会审核每个应用;之后你会在那里看到客户端 ID,有服务器的应用还要创建只显示一次的客户端密钥。
库所需的一切都在发现文档中:
https://tellmelo.com/.well-known/openid-configuration把成员发送到 /oauth/authorize,并带上 response_type=code、client_id、redirect_uri(与登记的完全一致)、scope=openid profile email、state、nonce 以及配合 code_challenge_method=S256 的 code_challenge。 在一分钟内到 /oauth/token 兑换授权码:grant_type=authorization_code、code、redirect_uri 和 code_verifier;有服务器的应用还要通过 Basic 认证或表单发送密钥。 ID 令牌(RS256,密钥在 /oauth/jwks)包含 sub,带 profile 时还有 preferred_username,带 email 时还有 email 和 email_verified。访问令牌有效期 10 分钟,只能读取 /oauth/userinfo。 https://tellmelo.com/oauth/authorize?response_type=code&client_id=tm_…
&redirect_uri=https%3A%2F%2Fexample.com%2Fcallback&scope=openid%20profile%20email
&state=…&nonce=…&code_challenge=…&code_challenge_method=S256
curl -u "tm_…:tms_…" https://tellmelo.com/oauth/token \
-d grant_type=authorization_code -d code=… \
-d redirect_uri=https://example.com/callback -d code_verifier=…{
"iss": "https://example.social",
"sub": "Xq3vR0b8yJm1cW4tZ2kPn6sLd9fHa7gE5uTo0iBeVxY",
"aud": "tm_5f2c9e1a7b3d4c6e8f0a1b2c",
"iat": 1760432400,
"exp": 1760433000,
"nonce": "n-0S6_WzA2Mj",
"at_hash": "HK6E_P6Dh8Y93mRNtsDB1Q",
"preferred_username": "anna",
"email": "anna@example.com",
"email_verified": true
}没有刷新令牌:tellmelo 只负责登录,不提供长期访问。如果成员移除了该网站或团队暂停了该应用,/oauth/userinfo 会立即返回 401。prompt=none 不显示页面直接检查,prompt=consent 会重新询问。
我们的期望 规则和其他地方一样:不骚扰、不发垃圾信息、不发你无权发布的内容。你的密钥发布的内容由你负责。
只有当其他成员的 GIF 和视频带有 embed 时,你才能在你的网站上展示它们,并且要通过这些地址,注明分享者的名字。某项内容不再可用时,就停止展示。不要把这些文件复制到你自己的收藏中。