Содержание Я хочу … Выбери, что задумал; ниже только нужные для этого шаги. Полный справочник — дальше внизу.
сделать бота подключить своё приложение вход через 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. Запросы и ответы — JSON в UTF-8. Имена полей, коды и значения английские и остаются английскими. Ключ действует как твой аккаунт: чего ты не видишь в приложении, он тоже не прочитает. 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 JavaScript Python
Копировать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 : управлять группами. Роли, каналы, категории, пригласительные ссылки, канал ленты, удаления, заглушения, исключения и баны — насколько твой аккаунт это может в группе. Отдельное право, чтобы ключ для публикаций никогда не менял, кто что может в группе.Чего не может ни один ключ Ни один ключ не достаёт до пароля, адреса эл. почты, типа аккаунта, места, роли, удаления, сеансов, push-устройств и других ключей, а также до администрирования и руководства группами. Что защищает пароль, ни один ключ не может.
Боты Бот — это отдельный аккаунт вида bot для групп: без пароля и почты, им управляет твоя программа с собственным ключом. Он использует тот же API, что и любой аккаунт, и может в группах всё, что разрешает его роль там.
В одной из своих групп открой меню группы и в разделе «Боты → Мои боты» создай бота с картинкой, обложкой, именем, именем пользователя и описанием. Токен показывается только один раз; у него права read, write, media и groups. Поделись ссылкой на бота или отправь его в каталог ботов; он появится там, как только команда его проверит. Тот, кто может управлять ролями в группе, выбирает права; бот вступает и получает собственную роль. Твоя программа отправляет токен как Authorization: Bearer …, читает события своих групп потоком и работает с маршрутами из разделов Боты , Каналы и Группы . Небольшой бот, который читает события потоком и отвечает на команду /ping словом pong только спросившему:
// 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-адрес (с подписью, как вебхуки, и повторами). Кроме того: команды (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Записи также учитываются в лимитах приложения, например сколько постов за несколько минут. Это тоже отвечает 429 с rate_limited.
Когда что-то не работает Ошибки приходят в JSON: фиксированный английский код в error для программы и фраза в message для людей, плюс соответствующий код статуса. Сравнивай только код; фраза может меняться.
{ "error": "rate_limited",
"message": "Too many requests. Try again in a minute.",
"limit": 120 }Некоторые ошибки несут ещё одно поле: docs при 401 из-за отсутствия ключа, limit при 429.
Статус Код Значение 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 /v2readВерсия API и название этого сервера. Посты GET /v2/postsreadПубличные посты, сначала новые. GET /v2/posts/{id}readОдин пост по его id. POST /v2/postswriteОпубликовать пост. DELETE /v2/posts/{id}writeУдалить один из своих постов. GET /v2/me/scheduledreadТвои посты, которые ещё не вышли, и чего они ждут. POST /v2/posts/{id}/schedulewriteИзменить, когда выйдет запланированный пост или когда пост удалится сам. POST /v2/posts/{id}/editwriteИзменить текст своего поста. GET /v2/posts/{id}/reply-settingsreadКто может отвечать на твой пост, ждут ли ответы одобрения и медленный режим. PUT /v2/posts/{id}/reply-settingswriteИзменить настройки ответов своего поста. То, что не указано, остаётся как есть. POST /v2/posts/{id}/coauthorwriteПринять или отклонить приглашение стать соавтором. DELETE /v2/posts/{id}/coauthorwriteВыйти из соавторов или, как автор, убрать соавтора с поста. POST /v2/posts/{id}/pinwriteЗакрепить свой пост вверху профиля или открепить его. Ответы GET /v2/posts/{id}/repliesreadОтветы на пост, без заблокированных аккаунтов. POST /v2/posts/{id}/replieswriteОтветить на пост. POST /v2/replies/{id}/editwriteИзменить текст своего ответа. DELETE /v2/replies/{id}writeУдалить свой ответ. POST /v2/replies/{id}/likewriteПроголосовать «за» ответ (с тех пор как ответы оценивают голосами, отметка «нравится» — это голос «за») или отозвать голос; голос «против» остаётся. POST /v2/replies/{id}/votewriteПроголосовать за ответ или против него либо отозвать свой голос. Возвращает твой голос и итоговый рейтинг. POST /v2/replies/{id}/pickwriteОтметить ответ под своим постом как лучший или снять отметку. GET /v2/posts/{id}/replies/waitingreadОтветы под постом, ожидающие одобрения: под твоим — все, иначе только твои. POST /v2/replies/{id}/decidewriteОдобрить или отклонить ожидающий ответ под своим постом. Отклонённый удаляется. GET /v2/posts/{id}/replies/plannedreadТвои ответы под постом, запланированные на потом. PUT /v2/me/planned-replies/{id}writeИзменить текст или время запланированного ответа. Неудавшийся снова ждёт. POST /v2/me/planned-replies/{id}/sendwriteОтправить запланированный ответ сразу. DELETE /v2/me/planned-replies/{id}writeУдалить запланированный ответ. Опросы POST /v2/posts/{id}/votewriteПринять участие в опросе. Профили GET /v2/profiles/{handle}readПрофиль по его короткому имени. GET /v2/profiles/{handle}/postsreadПубличные посты одного профиля, сначала новые. GET /v2/profiles/{handle}/eventsreadПредстоящие события профиля, ближайшие сначала. POST /v2/me/eventswriteСоздать событие. Возвращает его id. PUT /v2/me/events/{id}writeИзменить своё событие. Все поля задаются заново. DELETE /v2/me/events/{id}writeУдалить своё событие. GET /v2/me/events/{id}/signupsreadКто записался на твоё событие. POST /v2/events/{id}/signupwriteЗаписаться на событие или отменить запись. Группы GET /v2/communitiesreadОткрытые группы этого сервера; с mine=true — группы твоего аккаунта. GET /v2/communities/{id}readОдна группа по её id. GET /v2/communities/{id}/postsreadПубликации канала ленты группы, сначала новые. GET /v2/communities/{id}/membersreadУчастники группы с их ролями. GET /v2/communities/{id}/rolesreadРоли группы, сначала высшая, @everyone последней. GET /v2/communities/{id}/bellreadКакие уведомления присылает тебе группа. GET /v2/invites/{code}readГруппа за ссылкой-приглашением, до вступления. PUT /v2/roles/{id}/selfwriteВзять или снять роль на выбор. GET /v2/communities/{id}/emojisreadСобственные эмодзи группы. PUT /v2/communities/{id}/bellwriteНастроить, какие уведомления присылает тебе группа. POST /v2/invites/{code}/joinwriteВступить в группу по ссылке-приглашению. GET /v2/communities/{id}/botsreadБоты группы и то, что разрешает их роль. Каналы GET /v2/communities/{id}/channelsreadКаналы группы, которые ты видишь, по порядку. GET /v2/channels/{id}/messagesreadСообщения чат-канала, сначала новые. POST /v2/channels/{id}/messageswriteНаписать сообщение в чат-канал. POST /v2/channels/{id}/readwriteОтметить чат-канал прочитанным до момента времени. DELETE /v2/channel-messages/{id}writeУдалить своё сообщение в чат-канале. GET /v2/communities/{id}/voicereadКто сейчас в голосовых каналах группы, по каналам. Управление группами POST /v2/communities/{id}/emojisgroupsДобавить эмодзи группе. DELETE /v2/communities/{id}/emojis/{name}groupsУдалить эмодзи из группы. POST /v2/communities/{id}/rolesgroupsСоздать роль. PUT /v2/roles/{id}groupsИзменить название, цвет и права роли. DELETE /v2/roles/{id}groupsУдалить роль. PUT /v2/communities/{id}/roles/ordergroupsЗадать порядок ролей. PUT /v2/roles/{id}/members/{member}groupsВыдать участнику роль или забрать её. POST /v2/communities/{id}/channelsgroupsСоздать чат-канал. PUT /v2/channels/{id}groupsИзменить название, тему и категорию канала. DELETE /v2/channels/{id}groupsУдалить чат-канал вместе с сообщениями. PUT /v2/communities/{id}/channels/ordergroupsЗадать порядок категорий и чат-каналов. PUT /v2/communities/{id}/channels/shapegroupsЗадать форму всех символов каналов группы. GET /v2/channels/{id}/overridesgroupsЧто роли могут в канале иначе, чем в группе. PUT /v2/channels/{id}/overrides/{role}groupsЗадать, что роль может в канале иначе. POST /v2/communities/{id}/categoriesgroupsСоздать категорию для каналов. PUT /v2/categories/{id}groupsПереименовать категорию. DELETE /v2/categories/{id}groupsУдалить категорию. PUT /v2/communities/{id}/feedgroupsВключить или выключить канал ленты группы. GET /v2/communities/{id}/invitesgroupsСсылки-приглашения группы, которые ещё действуют. POST /v2/communities/{id}/invitesgroupsСоздать ссылку-приглашение. DELETE /v2/invites/{code}groupsОтозвать ссылку-приглашение. POST /v2/channel-messages/{id}/removegroupsУдалить из канала сообщение другого участника. POST /v2/communities/{id}/posts/{post}/removegroupsУдалить публикацию из группы. DELETE /v2/communities/{id}/members/{member}groupsИсключить участника из группы. PUT /v2/communities/{id}/members/{member}/timeoutgroupsЗаглушить участника. DELETE /v2/communities/{id}/members/{member}/timeoutgroupsСнять заглушение. GET /v2/communities/{id}/bansgroupsДействующие баны группы. PUT /v2/communities/{id}/bans/{member}groupsЗабанить участника. DELETE /v2/communities/{id}/bans/{member}groupsСнять бан. GET /v2/communities/{id}/loggroupsЖурнал руководства: кто что удалил и почему. POST /v2/communitiesgroupsСоздать группу. Возвращает её id; ты её основатель. PUT /v2/communities/{id}groupsИзменить группу, которой ты руководишь. Что не указано, остаётся как есть. Боты GET /v2/eventsreadСобытия из групп бота начиная с события, постранично. GET /v2/events/streamreadСобытия из групп бота, как только они происходят (server-sent events). GET /v2/me/commandsreadКоманды бота. PUT /v2/me/commandswriteЗадать команды бота, все сразу. POST /v2/interactions/{id}/replywriteОтветить на команду или кнопку. POST /v2/channels/{id}/voicewriteЗанять место в голосовом канале, чтобы проигрывать музыку или звук. Обзор GET /v2/tagsreadТеги, которые сейчас в ходу. GET /v2/searchreadПоиск по постам, именам, коротким именам и тегам. GET /v2/emojisreadСобственные эмодзи сервера с адресами их картинок. GIF и видео GET /v2/mediareadОбщие GIF или видео, сначала самые используемые. GET /v2/media/minemediaТвоя медиатека, сначала новое. GET /v2/media/{id}readGIF или видео — твоё или общее. POST /v2/media/uploadsmediaНачать загрузку. PUT /v2/media/uploads/{upload}mediaОтправить фрагмент файла. POST /v2/media/{id}mediaИзменить одно из твоих GIF или видео. DELETE /v2/media/{id}mediaУдалить одно из твоих GIF или видео. Твой аккаунт GET /v2/mereadТвой собственный профиль с id, который ждут остальные пути. GET /v2/feedreadТвоя собственная лента в том виде, как её собирает приложение. POST /v2/me/pictureswriteЗагрузить изображение в виде байтов. Возвращает id и url; затем id используется как аватар, обложка или в посте. PUT /v2/me/profileprofileИзменить профиль: имя, «О себе», аватар, обложку и цвет профиля. Что не указано, остаётся как есть. GET /v2/me/emojisreadТвои собственные эмодзи. POST /v2/me/emojis/picturesprofileЗагрузить изображение для своего эмодзи в виде байтов. POST /v2/me/emojisprofileСоздать свой эмодзи. Возвращает все твои эмодзи. DELETE /v2/me/emojis/{name}profileУдалить свой эмодзи. Возвращает остальные. PUT /v2/me/emojis/sharingprofileРешить, могут ли подписчики использовать твои эмодзи в своих текстах. GET /v2/me/webhookswebhooksТвои вебхуки и их состояние. POST /v2/me/webhookswebhooksСоздать вебхук. Возвращает id и секрет для подписей, только в этот раз. DELETE /v2/me/webhooks/{id}webhooksУдалить вебхук. POST /v2/me/webhooks/{id}/testwebhooksОтправить проверку на вебхук. Уведомления GET /v2/notificationsreadТвои уведомления, сначала новые. POST /v2/notifications/readwriteОтметить уведомления прочитанными. Сообщения GET /v2/conversationsreadТвой ящик: по строке на переписку, сначала самая свежая. GET /v2/conversations/{with}/messagesreadСообщения одной переписки, сначала новые. POST /v2/conversations/{with}/messageswriteОтправить сообщение в переписку. POST /v2/conversations/{with}/readwriteОтметить все сообщения переписки прочитанными. DELETE /v2/conversations/{with}/messages/{id}writeУдалить своё сообщение. POST /v2/conversations/{with}/plannedwriteЗапланировать сообщение на потом. Возвращает id запланированного сообщения. GET /v2/me/planned-messagesreadТвои сообщения, которые ещё будут отправлены, по времени. POST /v2/me/planned-messages/{id}/sendwriteОтправить сейчас задержанное или неудавшееся запланированное сообщение. DELETE /v2/me/planned-messages/{id}writeУдалить запланированное сообщение до отправки. Связи POST /v2/relationswriteОтметить, сохранить, репостнуть, подписаться, вступить, заблокировать, скрыть — в зависимости от kind. GET /v2/profiles/{handle}/followersreadКто подписан на профиль, новые сначала. GET /v2/profiles/{handle}/followingreadНа кого подписан профиль, новые сначала. GET /v2/me/relationsreadКого ты заблокировал, скрыл или заблокировал только для сообщений, новые сначала. Подборки GET /v2/me/collectionsreadТвои подборки с числом постов в них. POST /v2/me/collectionswriteСоздать подборку. Возвращает её id. PUT /v2/me/collections/{id}writeПереименовать подборку. DELETE /v2/me/collections/{id}writeУдалить подборку. GET /v2/me/collections/{id}/postsreadПосты подборки, как во вкладке сохранённого. POST /v2/me/collections/{id}/postswriteПоложить пост в подборку или убрать его. Подарки GET /v2/partner/quotareadСколько ещё осталось в твоей квоте для подарков. GET /v2/partner/giftsreadЧто ты подарил из квоты, кому и когда – сначала новые. POST /v2/partner/giftsgiftsПодарить участнику месяцы тарифа или искры из своей квоты. GET /v2/gift-dropsreadТвои подарки под постами: сколько мест ещё свободно и как они оплачены. POST /v2/gift-dropsgiftsОпубликовать пост с подарками, которые могут забрать другие.
Вход Первый запрос любой программы: работает ли ключ и что ему можно?
GET /v2Версия API и название этого сервера.
Без слеша в конце: https://api.tellmelo.com/v2/ перенаправляет на https://api.tellmelo.com/v2 с 308, и не каждая программа следует за этим.
Пример запроса 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Публичные посты, сначала новые.
Право read с пагинацией с ETag с v2.0 На публичных путях counts.likes и counts.reposts всегда 0, а pinned — false.
Посты в группах находятся не здесь, а в /communities/{id}/posts.
Параметры Имя Тип Значение limitв query integerнеобязательно Записей на страницу: по умолчанию 20, максимум 50. cursorв query 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.
Прикрепляй изображения, GIF или видео через media. GIF или видео идёт отдельно. Общие GIF и видео других участников можно использовать в tellmelo.
Пост для близких друзей или с соавтором выходит сразу, не в группе и не по расписанию. Оба варианта сразу нельзя.
Параметры Имя Тип Значение textв теле stringнеобязательно Текст поста, ответа или сообщения. communityв теле stringнеобязательно id группы, в канал ленты которой идёт публикация; канал должен быть включён, и тебе нужно право на это. Без него публикация не относится ни к одной группе.quotesв теле stringнеобязательно id поста, который цитирует этот.pollв теле string[]необязательно Варианты ответа списком текстов. mediaв теле string[]необязательно ID изображений, загруженных в приложении, или GIF или видео из медиатеки (с 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Ответы на пост, без заблокированных аккаунтов.
Право read с пагинацией с ETag с v2.0 Список плоский и идёт в порядке написания; parentId превращает его в дерево. Страница всегда содержит целые ветки. Ответы заблокированных аккаунтов исключены.
Параметры Имя Тип Значение idв пути stringобязательно id поста.limitв query integerнеобязательно Записей на страницу: по умолчанию 20, максимум 50. cursorв query 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[]необязательно ID изображений, загруженных в приложении, или GIF или видео из медиатеки (с 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Проголосовать «за» ответ (с тех пор как ответы оценивают голосами, отметка «нравится» — это голос «за») или отозвать голос; голос «против» остаётся.
Право write с v2.12 устарело Устарело с 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Публичные посты одного профиля, сначала новые.
Право read с пагинацией с ETag с v2.0 На публичных путях counts.likes и counts.reposts всегда 0, а pinned — false.
Посты в группах находятся не здесь, а в /communities/{id}/posts.
Параметры Имя Тип Значение handleв пути stringобязательно Короткое имя профиля, регистр букв не важен. limitв query integerнеобязательно Записей на страницу: по умолчанию 20, максимум 50. cursorв query 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в query integerнеобязательно Записей на страницу: по умолчанию 20, максимум 50. mineв query 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Публикации канала ленты группы, сначала новые.
Право read с пагинацией с ETag с v2.0 На публичных путях counts.likes и counts.reposts всегда 0, а pinned — false.
Если канал ленты выключен, путь отвечает 409 с feed_off.
Параметры Имя Тип Значение idв пути stringобязательно id группы.limitв query integerнеобязательно Записей на страницу: по умолчанию 20, максимум 50. cursorв query 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Сообщения чат-канала, сначала новые.
Право read с пагинацией с ETag с v2.15 До 50 сообщений на странице. Сообщений аккаунтов, которые ты заблокировал или которые заблокировали тебя, нет.
Параметры Имя Тип Значение idв пути stringобязательно id канала.cursorв query stringнеобязательно next из предыдущего ответа. Без него — с начала.threadв query 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[]необязательно ID изображений, загруженных в приложении, или GIF или видео из медиатеки (с 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обязательно id из POST /me/emojis/pictures.
Пример запроса 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необязательно ID картинки, загруженной через /media/emoji. 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необязательно ID картинки, загруженной через /media/emoji. 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Что роли могут в канале иначе, чем в группе.
Право groups с ETag с v2.15 Параметры Имя Тип Значение 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необязательно ID картинки, загруженной через /media/emoji. 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необязательно ID картинки, загруженной через /media/emoji. 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Ссылки-приглашения группы, которые ещё действуют.
Право groups с ETag с v2.15 Руководство видит все, остальные — только свои.
Параметры Имя Тип Значение 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Действующие баны группы.
Право groups с ETag с v2.16 Параметры Имя Тип Значение 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Журнал руководства: кто что удалил и почему.
Право groups с ETag с v2.15 Параметры Имя Тип Значение 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в query 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в query 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Ответить на команду или кнопку.
В течение 15 минут после события command или interaction; с private ответ видит только тот, кто использовал команду или кнопку.
Параметры Имя Тип Значение idв пути stringобязательно Идентификатор из события (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в query 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в query stringобязательно Искомые слова. typeв query stringнеобязательно Какой вид результатов. Без него — все виды.allpostsprofilestags limitв query 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
GIF и видео Медиатека: искать общие GIF и видео, загружать свои, управлять ими и встраивать их на другие сайты.
GET /v2/mediaОбщие GIF или видео, сначала самые используемые.
Право read с пагинацией с ETag с v2.14 Без аккаунтов, которые ты заблокировал или которые заблокировали тебя. url и poster загружай с ключом в заголовке — для постов в tellmelo.
Для других сайтов — только то, у чего есть embed: его адреса работают без ключа в любом браузере.
Параметры Имя Тип Значение kindв query stringнеобязательно gif или video; по умолчанию gif.gifvideoqв query stringнеобязательно Слова из названия или ключевых слов. anywhereв query booleanнеобязательно true: только то, что может появляться и на других сайтах.limitв query integerнеобязательно Записей на страницу: по умолчанию 20, максимум 50. cursorв query stringнеобязательно next из предыдущего ответа. Без него — с начала.
Пример запроса curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/media?kind=gif&q=bees&anywhere=true&limit=20"Ответ Отвечает страницей MediaItem в виде `items` и `next`.
Пример {
"items": [
{
"id": "b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"kind": "gif",
"name": "Happy bees",
"keywords": "bees garden happy",
"width": 480,
"height": 270,
"seconds": 0,
"url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"poster": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918&poster=1",
"uploader": {
"handle": "mara",
"name": "Mara 🌻"
},
"mine": false,
"shared": true,
"anywhere": true,
"embed": {
"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>"
}
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}Возможные статусы: 200304400401429
GET /v2/media/mineТвоя медиатека, сначала новое.
Право media с пагинацией с ETag с v2.14 Параметры Имя Тип Значение kindв query stringнеобязательно gif или video; по умолчанию gif.gifvideoqв query stringнеобязательно Слова из названия или ключевых слов. limitв query integerнеобязательно Записей на страницу: по умолчанию 20, максимум 50. cursorв query stringнеобязательно next из предыдущего ответа. Без него — с начала.
Пример запроса curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/media/mine?kind=gif&q=bees&limit=20"Ответ Отвечает страницей MediaItem в виде `items` и `next`.
Пример {
"items": [
{
"id": "b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"kind": "gif",
"name": "Happy bees",
"keywords": "bees garden happy",
"width": 480,
"height": 270,
"seconds": 0,
"url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"poster": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918&poster=1",
"uploader": {
"handle": "mara",
"name": "Mara 🌻"
},
"mine": false,
"shared": true,
"anywhere": true,
"embed": {
"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>"
}
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}Возможные статусы: 200304400401403429
GET /v2/media/{id}GIF или видео — твоё или общее.
Параметры Имя Тип Значение idв пути stringобязательно ID GIF или видео.
Пример запроса curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/media/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918"Ответ Отвечает одним MediaItem .
Пример {
"id": "b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"kind": "gif",
"name": "Happy bees",
"keywords": "bees garden happy",
"width": 480,
"height": 270,
"seconds": 0,
"url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"poster": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918&poster=1",
"uploader": {
"handle": "mara",
"name": "Mara 🌻"
},
"mine": false,
"shared": true,
"anywhere": true,
"embed": {
"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>"
}
}Возможные статусы: 200304400401404429
POST /v2/media/uploadsНачать загрузку.
Затем отправляй файл фрагментами не больше piece байт на /media/uploads/{upload}. Без нового фрагмента загрузка завершается через 15 минут.
Действуют ограничения приложения: GIF до 15 МБ, видео по размеру и длине в зависимости от подписки, GIF в день, личные GIF, видеобаллы в неделю. Иначе придёт 409, 413 или 429.
Параметры Имя Тип Значение kindв теле stringобязательно gif или video; по умолчанию gif.gifvideosizeв теле integerобязательно Размер всего файла в байтах. nameв теле stringобязательно Название, по которому его находят: от 2 до 40 символов. keywordsв теле stringнеобязательно Ключевые слова для поиска через пробел. sharedв теле booleanнеобязательно true: доступно всем в tellmelo.anywhereв теле booleanнеобязательно true: доступно всем и разрешено на других сайтах. Только вместе с shared.
Пример запроса curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"kind":"gif","size":2400000,"name":"Happy bees","keywords":"bees garden","shared":true,"anywhere":false}' \
"https://api.tellmelo.com/v2/media/uploads"Ответ Отвечает одним UploadStarted .
Пример {
"upload": "e7c1a2b3-4d5e-4f60-8a9b-0c1d2e3f4a5b",
"piece": 4194304
}Возможные статусы: 200400401403429
PUT /v2/media/uploads/{upload}Отправить фрагмент файла.
Тело запроса — это сам фрагмент (application/octet-stream), не JSON. Если он не продолжает файл, придёт 409 с received: продолжай оттуда. После последнего фрагмента файл конвертируется; тогда в ответе есть item.
Параметры Имя Тип Значение uploadв пути stringобязательно upload, полученный при начале загрузки.offsetв query integerобязательно С какого места файла начинается фрагмент, в байтах; для первого — 0.
Пример запроса curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/octet-stream" \
--data-binary @piece \
"https://api.tellmelo.com/v2/media/uploads/e7c1a2b3-4d5e-4f60-8a9b-0c1d2e3f4a5b?offset=0"Ответ Отвечает одним UploadPiece .
Пример {
"received": 4194304,
"item": null
}Возможные статусы: 200400401403404429
POST /v2/media/{id}Изменить одно из твоих GIF или видео.
Параметры Имя Тип Значение idв пути stringобязательно ID GIF или видео. nameв теле stringнеобязательно Название, по которому его находят: от 2 до 40 символов. keywordsв теле stringнеобязательно Ключевые слова для поиска через пробел. sharedв теле booleanнеобязательно true: доступно всем в tellmelo.anywhereв теле booleanнеобязательно true: доступно всем и разрешено на других сайтах. Только вместе с shared.
Пример запроса curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"Happy bees","anywhere":true}' \
"https://api.tellmelo.com/v2/media/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918"Ответ Отвечает одним Ok .
Пример {
"ok": true
}Возможные статусы: 200400401403404429
DELETE /v2/media/{id}Удалить одно из твоих GIF или видео.
Посты, которые уже его показывают, сохраняют его. На других сайтах оно исчезнет в течение нескольких минут.
Параметры Имя Тип Значение idв пути stringобязательно ID GIF или видео.
Пример запроса curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/media/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918"Ответ Отвечает одним Ok .
Пример {
"ok": true
}Возможные статусы: 200400401403404429
Твой аккаунт Твой профиль, твоя лента, твои эмодзи и твои вебхуки.
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Твоя собственная лента в том виде, как её собирает приложение.
Право read с пагинацией с v2.0 Без ETag, потому что порядок всё время меняется. Начатый список остаётся неизменным до конца.
Параметры Имя Тип Значение tabв query stringнеобязательно Какая лента: for-you, following, latest или bookmarks. По умолчанию latest.for-youfollowinglatestbookmarks tagв query stringнеобязательно Только посты об этом теге: написанные с ним или распознанные сервером. Без него — без фильтра. limitв query integerнеобязательно Записей на страницу: по умолчанию 20, максимум 50. cursorв query 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обязательно id из POST /me/emojis/pictures.
Пример запроса 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Твои вебхуки и их состояние.
Право webhooks с ETag с v2.19 Нужно разрешение webhooks. Вебхуки есть в подписке для организаций или у партнёров.
Пример запроса 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Создать вебхук. Возвращает id и секрет для подписей, только в этот раз.
Каждая доставка подписана секретом (X-Tellmelo-Signature). Сохрани его: больше он не покажется.
Параметры Имя Тип Значение urlв теле stringобязательно Адрес HTTPS вне локальных сетей, без учётных данных. kindsв теле string[]обязательно О чём сообщать вебхуку. Какие виды тебе доступны, зависит от подписки и партнёрства.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}Удалить вебхук.
Параметры Имя Тип Значение idв пути stringобязательно 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Отправить проверку на вебхук.
Параметры Имя Тип Значение idв пути stringобязательно 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Твои уведомления, сначала новые.
Право read с пагинацией с ETag с v2.0 Чтение ничего не отмечает прочитанным; это делает POST /notifications/read. События одного вида на одном посте делят строку; more говорит, сколько их.
Параметры Имя Тип Значение limitв query integerнеобязательно Записей на страницу: по умолчанию 20, максимум 50. cursorв query 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Твой ящик: по строке на переписку, сначала самая свежая.
Право read с пагинацией с ETag с v2.0 Параметры Имя Тип Значение limitв query integerнеобязательно Записей на страницу: по умолчанию 20, максимум 50. cursorв query 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Сообщения одной переписки, сначала новые.
Право read с пагинацией с ETag с v2.0 Чтение ничего не отмечает прочитанным; это делает POST /conversations/{with}/read.
Параметры Имя Тип Значение withв пути stringобязательно id другого аккаунта. У переписки нет собственного id.limitв query integerнеобязательно Записей на страницу: по умолчанию 20, максимум 50. cursorв query 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Отправить сообщение в переписку.
Действуют правила приложения: кто тебя заблокировал, тому не написать, и учитываются настройки собеседника.
Изображения, GIF и видео нельзя прикрепить к сообщениям через API, только в приложении.
Параметры Имя Тип Значение 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в query 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.
target — пост для like, save и repost, группа для 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Кто подписан на профиль, новые сначала.
Право read с пагинацией с ETag с v2.19 Параметры Имя Тип Значение handleв пути stringобязательно Короткое имя профиля, регистр букв не важен. limitв query integerнеобязательно Записей на страницу: по умолчанию 20, максимум 50. cursorв query 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На кого подписан профиль, новые сначала.
Право read с пагинацией с ETag с v2.19 Параметры Имя Тип Значение handleв пути stringобязательно Короткое имя профиля, регистр букв не важен. limitв query integerнеобязательно Записей на страницу: по умолчанию 20, максимум 50. cursorв query 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Кого ты заблокировал, скрыл или заблокировал только для сообщений, новые сначала.
Право read с пагинацией с ETag с v2.19 Только твои собственные списки. Ставить и снимать — через POST /relations.
Параметры Имя Тип Значение kindв query stringобязательно block — заблокированные, mute — скрытые, dm_block — заблокированные только для сообщений.blockmutedm_blocklimitв query integerнеобязательно Записей на страницу: по умолчанию 20, максимум 50. cursorв query 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Посты подборки, как во вкладке сохранённого.
Право read с пагинацией с v2.19 Параметры Имя Тип Значение idв пути stringобязательно id подборки.limitв query integerнеобязательно Записей на страницу: по умолчанию 20, максимум 50. cursorв query 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Что ты подарил из квоты, кому и когда – сначала новые.
Право read с пагинацией с ETag с v2.12 Только для партнёров с квотой; остальные получают 403.
Параметры Имя Тип Значение limitв query integerнеобязательно Записей на страницу: по умолчанию 20, максимум 50. cursorв query 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 в квоте. Один экземпляр на подарок; 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Твои подарки под постами: сколько мест ещё свободно и как они оплачены.
Право read с пагинацией с ETag с v2.12 Параметры Имя Тип Значение limitв query integerнеобязательно Записей на страницу: по умолчанию 20, максимум 50. cursorв query 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. versionstringВерсия API, например 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Пост, везде в одной и той же форме.
Поле Тип Значение idstringid поста. 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Твой ответ, запланированный на потом.
Поле Тип Значение idstringid запланированного ответа.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Профиль, как он появляется внутри других объектов: как автор, в поиске.
Поле Тип Значение idstringid аккаунта: то, что ждут /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Участник, кратко.
Поле Тип Значение idstringid аккаунта.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Категория, в которой находится канал.
Поле Тип Значение idstringid.namestringНазвание. symbolChannelSymbolЕё символ.
Пример {
"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 Название; null у @everyone. 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Что роль может в канале иначе, чем в группе.
Поле Тип Значение rolestringid роли.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Куда ведёт ссылка-приглашение.
Поле Тип Значение communityInviteGroupГруппа. memberbooleanСостоит ли твой аккаунт уже в группе.
Пример {
"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Вступление по ссылке-приглашению.
Поле Тип Значение communitystringid группы.
Пример {
"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 С какого времени; null для банов до 2.16. 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Три списка, возможно пустых.
Поле Тип Значение postsPost[]Подходящие посты, сначала новые. profilesProfileBrief[]Подходящие профили, по короткому имени. tagsTag[]Подходящие теги, сначала самые используемые.
Пример {
"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Уведомление. Одна строка может объединять несколько событий одного вида.
Поле Тип Значение idstringid уведомления. 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Одна строка твоего ящика.
Поле Тип Значение withstringid другого аккаунта: то, что ждёт /conversations/{with}/messages. handlestringЕго короткое имя. namestringЕго отображаемое имя. excerptstringили null Начало последнего сообщения (null, если в нём нет текста). truncatedbooleanОбрезан ли отрывок. fromMebooleanТвоё ли последнее сообщение. lastMessageIdstringid последнего сообщения. 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Сообщение в переписке.
Поле Тип Значение idstringid сообщения. textstringили null Текст (null для сообщения только из картинок). fromstringid аккаунта, который его написал. tostringid аккаунта, которому оно написано. 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Твоё сообщение, запланированное на потом.
Поле Тип Значение idstringid запланированного сообщения.tostringid аккаунта-получателя.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Твой пост, который ещё не вышел.
Поле Тип Значение idstringid поста. 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Подборка сохранённых постов.
Поле Тип Значение idstringid подборки.namestringЕё название. countintegerСколько в ней постов.
Пример {
"id": "6d5c4b3a-2918-4e7f-a1b2-c3d4e5f60718",
"name": "Recipes",
"count": 12
}EventПредстоящее событие профиля.
Поле Тип Значение idstringid события.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Тот, кто записался на твоё событие.
Поле Тип Значение idstringid аккаунта.handlestringИмя пользователя. namestringОтображаемое имя. atintegerКогда записался.
Пример {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"at": 1758624000000
}PictureЗагруженное изображение.
Поле Тип Значение idstringid изображения.urlstringГде его можно увидеть.
Пример {
"id": "8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9"
}EmojiPictureЗагруженное изображение эмодзи.
Поле Тип Значение idstringid изображения.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Один из твоих вебхуков.
Поле Тип Значение idstringid вебхука.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Новый вебхук с его секретом.
Поле Тип Значение idstringid вебхука.secretstringСекрет для подписей, только в этот раз.
Пример {
"id": "1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b",
"secret": "whsec_3f9a…"
}GroupBotБот группы.
Поле Тип Значение idstringid аккаунта бота.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Голосовой канал с людьми в нём.
Поле Тип Значение channelstringid канала.peopleVoicePerson[]Кто сейчас в нём.
Пример {
"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Кто-то в голосовом канале.
Поле Тип Значение idstringid аккаунта.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).
Поле Тип Значение idstringID оформления; при подарке передавай его как 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Начатая загрузка.
Поле Тип Значение uploadstringID этой загрузки. pieceintegerМаксимальный размер фрагмента в байтах.
Пример {
"upload": "e7c1a2b3-4d5e-4f60-8a9b-0c1d2e3f4a5b",
"piece": 4194304
}UploadPieceПолученный фрагмент.
Поле Тип Значение receivedintegerСколько байт получено. itemMediaItemили null После последнего фрагмента — новое GIF или видео, иначе null.
Пример {
"received": 4194304,
"item": null
}CreatedОтвет записи, которая что-то создала.
Поле Тип Значение idstringid созданного. scheduledForintegerили null Когда оно появится, если публикация запланирована (иначе null). deleteAtintegerили null Когда оно само удалится, если это задано (иначе null).
Пример {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"scheduledFor": null,
"deleteAt": null
}DropCreatedОтвет, когда создан пост с подарками.
Поле Тип Значение idstringid нового поста. fundingstringКак оплачены подарки.free — Бесплатно.quota — Из квоты.
Пример {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"funding": "quota"
}MadeЧто только что создано или изменено.
Поле Тип Значение idstringid; у ссылки-приглашения — её код.
Пример {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}OkОтвет записи, которой нечего вернуть.
Поле Тип Значение okbooleanВсегда true.
Пример {
"ok": true
}Машиночитаемое описание Таблица, на которой построена эта страница, доступна как OpenAPI по адресу https://api.tellmelo.com/v2/openapi.json.
https://api.tellmelo.com/v2/openapi.jsonGIF и видео на других сайтах То, чем участник поделился и что разрешил на других сайтах, может показать любой сайт: поиск с 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 для твоего сайта ) твой сайт получает готовый поиск: две строки на странице, и клик по кнопке открывает его. Ключ публичный и работает только на адресах, которые ты для него укажешь. Выбор 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 Другие сайты позволяют участникам входить через аккаунт tellmelo по OpenID Connect (код авторизации с PKCE). Сайт получает только имя пользователя, подтверждённый адрес эл. почты и собственный идентификатор для каждого участника (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 с code_challenge_method=S256. Обменяй код в течение минуты в /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, через эти адреса и с именем того, кто ими поделился. Если что-то больше недоступно, перестань это показывать. Не копируй файлы в собственную коллекцию.