tellmelo.المطوّرونالذهاب إلى tellmelo
مركز المساعدةالدعمقانونيالمطوّرون

API

البدء

  • أريد أن …
  • نظرة عامة
  • بداية سريعة
  • جرّبه
  • مفتاحك
  • ما يمكن للمفتاح فعله
  • البوتات

الأساسيات

  • الطلبات والردود
  • الصفحات
  • الجديد فقط
  • الحدود
  • الترويسات
  • عندما لا ينجح شيء
  • الإصدارات

نقاط النهاية

  • نقاط النهاية
  • المدخل
    • 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
  • صور GIF ومقاطع الفيديو
    • GET /media
    • GET /media/mine
    • GET /media/{id}
    • POST /media/uploads
    • PUT /media/uploads/{upload}
    • 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

الكائنات

  • الكائنات
  • Service
  • RateLimit
  • Post
  • Reply
  • ReplyVote
  • PlannedReply
  • ReplySettings
  • Counts
  • Media
  • Poll
  • PollOption
  • ProfileBrief
  • Profile
  • CommunityBrief
  • Community
  • Membership
  • Person
  • Channel
  • ChannelCategory
  • ChannelSymbol
  • ChannelMessage
  • Role
  • GroupMember
  • ChannelOverride
  • Bell
  • InviteLink
  • InvitePreview
  • InviteGroup
  • Joined
  • LogEntry
  • Ban
  • Until
  • Tag
  • SearchResult
  • Emoji
  • Notification
  • Actor
  • Conversation
  • Message
  • PlannedMessage
  • ScheduledPost
  • Collection
  • Event
  • EventSignups
  • EventSignup
  • Picture
  • EmojiPicture
  • OwnEmoji
  • GroupEmoji
  • BotEvent
  • BotCommand
  • VoiceSeat
  • Webhook
  • WebhookCreated
  • GroupBot
  • VoiceRoom
  • VoicePerson
  • GiftDrop
  • OwnGiftDrop
  • Quota
  • QuotaLook
  • QuotaGift
  • MediaItem
  • Embed
  • UploadStarted
  • UploadPiece
  • Created
  • DropCreated
  • Made
  • Ok

المزيد

  • الوصف المقروء آليًا
  • صور GIF ومقاطع الفيديو على مواقع أخرى
  • تسجيل الدخول عبر tellmelo
  • ما نتوقعه
المحتويات

البدء

  • أريد أن …
  • نظرة عامة
  • بداية سريعة
  • جرّبه
  • مفتاحك
  • ما يمكن للمفتاح فعله
  • البوتات

الأساسيات

  • الطلبات والردود
  • الصفحات
  • الجديد فقط
  • الحدود
  • الترويسات
  • عندما لا ينجح شيء
  • الإصدارات

نقاط النهاية

  • نقاط النهاية
  • المدخل
    • 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
  • صور GIF ومقاطع الفيديو
    • GET /media
    • GET /media/mine
    • GET /media/{id}
    • POST /media/uploads
    • PUT /media/uploads/{upload}
    • 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

الكائنات

  • الكائنات
  • Service
  • RateLimit
  • Post
  • Reply
  • ReplyVote
  • PlannedReply
  • ReplySettings
  • Counts
  • Media
  • Poll
  • PollOption
  • ProfileBrief
  • Profile
  • CommunityBrief
  • Community
  • Membership
  • Person
  • Channel
  • ChannelCategory
  • ChannelSymbol
  • ChannelMessage
  • Role
  • GroupMember
  • ChannelOverride
  • Bell
  • InviteLink
  • InvitePreview
  • InviteGroup
  • Joined
  • LogEntry
  • Ban
  • Until
  • Tag
  • SearchResult
  • Emoji
  • Notification
  • Actor
  • Conversation
  • Message
  • PlannedMessage
  • ScheduledPost
  • Collection
  • Event
  • EventSignups
  • EventSignup
  • Picture
  • EmojiPicture
  • OwnEmoji
  • GroupEmoji
  • BotEvent
  • BotCommand
  • VoiceSeat
  • Webhook
  • WebhookCreated
  • GroupBot
  • VoiceRoom
  • VoicePerson
  • GiftDrop
  • OwnGiftDrop
  • Quota
  • QuotaLook
  • QuotaGift
  • MediaItem
  • Embed
  • UploadStarted
  • UploadPiece
  • Created
  • DropCreated
  • Made
  • Ok

المزيد

  • الوصف المقروء آليًا
  • صور GIF ومقاطع الفيديو على مواقع أخرى
  • تسجيل الدخول عبر tellmelo
  • ما نتوقعه

أريد أن …

اختر ما تنويه؛ ستجد أدناه الخطوات اللازمة له فقط. المرجع الكامل يأتي بعد ذلك.

  1. أنشئ الروبوت في إحدى مجموعاتك، من قائمة المجموعة في «الروبوتات ← روبوتاتي»، مع صورة واسم و@اسم. لا ترى رمزه إلا مرة واحدة.
  2. شارك رابط «إضافة روبوت» الخاص به أو قدّمه لدليل الروبوتات، حيث يظهر بعد مراجعة الفريق؛ ومن يحق له إدارة الأدوار في مجموعة يقبله بالصلاحيات التي يوافق عليها.
  3. استقبل ما يحدث في مجموعاته كتدفق (GET /v2/events/stream) أو على عنوانك، واكتب عبر POST /v2/channels/{id}/messages. المزيد في الروبوتات.
  4. سجّل الأوامر (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

بداية سريعة

  1. أنشئ مفتاحًا في «قسم المطورين ← API» وانسخه. يُعرض مرة واحدة فقط.
  2. استدعِ الجذر به. يُظهر الرد الإصدار وحقوق المفتاح والطلبات المتبقية في هذه الدقيقة.
  3. كل المسارات تعمل بالطريقة نفسها: المفتاح في الترويسة، و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.

read إصدار API واسم هذا الخادم.

curl \
  -H "Authorization: Bearer $TELLMELO_KEY" \
  "https://api.tellmelo.com/v2"

مفتاحك

حتى 10 مفاتيح لكل حساب، لكل منها اسم وصلاحيات خاصة وتاريخ انتهاء إن شئت. يبدأ المفتاح بـ tm_key_ ويُعرض مرة واحدة فقط. فقدته؟ جدّده، فتتوقف القيمة القديمة عن العمل.

تنشئه في «قسم المطورين ← API». ويُرسل في ترويسة الطلب:

curl -H "Authorization: Bearer tm_key_…" \
  https://api.tellmelo.com/v2/posts

أو، إن كان ذلك أسهل، في ترويسة خاصة به:

curl -H "X-Tellmelo-Key: tm_key_…" https://api.tellmelo.com/v2

ليس في عنوان URL: سينتهي به الأمر في السجلات وسجل المتصفح.

المفتاح نفسه يحمّل الصور: كل url يشير إلى /api/media؛ أرسل المفتاح في الترويسة هناك أيضًا.

curl -H "Authorization: Bearer tm_key_…" \
  -o picture.webp "https://api.tellmelo.com/media?id=…"

ما يمكن للمفتاح فعله

يستطيع المفتاح القراءة دائمًا، وإن سمحت له أيضًا الكتابة والإهداء ورفع الوسائط وإدارة المجموعات. يذكر كل مسار أدناه ما يحتاجه:

  • read: القراءة. المنشورات العامة والملفات الشخصية والمجموعات والوسوم، إضافة إلى خلاصتك وإشعاراتك ورسائلك وقنوات مجموعاتك.
  • write: التصرف. النشر والرد والتصويت وإرسال الرسائل والكتابة في دردشة مجموعة والمتابعة والانضمام والحظر وتعليم الإشعارات كمقروءة.
  • gifts: الإهداء. من حصة شريك إلى عضو، وهدايا تحت منشور جديد. حق مستقل، كي لا يستطيع مفتاح مخصص للنشر أن يهدي شيئًا أبدًا.
  • media: مكتبة الوسائط الخاصة بك. رفع صور GIF ومقاطع الفيديو وتعديلها ومشاركتها وإزالتها. إذن مستقل، لأن عمليات الرفع تستهلك نقاط الفيديو في الحساب. للعثور على GIF ومقاطع فيديو مشتركة يكفي read.
  • groups: إدارة المجموعات. الأدوار والقنوات والفئات وروابط الدعوة وقناة الخلاصة والإزالة والكتم والطرد والحظر، بقدر ما يحق لحسابك في المجموعة. صلاحية مستقلة، حتى لا يغيّر مفتاح للنشر أبدًا من يحق له ماذا في مجموعة.

ما لا يستطيعه أي مفتاح

لا يصل أي مفتاح إلى كلمة المرور أو البريد الإلكتروني أو نوع الحساب أو المكان أو الدور أو الحذف أو الجلسات أو أجهزة الإشعارات أو المفاتيح الأخرى، ولا إلى الإدارة أو قيادة المجموعات. ما تحميه كلمة المرور لا يستطيعه أي مفتاح.

البوتات

البوت حساب مستقل من نوع bot للمجموعات: بلا كلمة مرور ولا بريد، يديره برنامجك بمفتاحه الخاص. يستخدم الواجهة البرمجية نفسها كأي حساب ويستطيع في المجموعات كل ما يسمح به دوره هناك.

  1. في إحدى مجموعاتك افتح قائمة المجموعة، ثم في «الروبوتات ← روبوتاتي» أنشئ روبوتًا بصورة وغلاف واسم واسم مستخدم ووصف. يظهر الرمز مرة واحدة فقط، وله الصلاحيات read وwrite وmedia وgroups.
  2. شارك رابط الروبوت أو قدّمه لدليل الروبوتات؛ يظهر هناك بمجرد أن يراجعه الفريق. من يحق له إدارة الأدوار في مجموعة يختار الصلاحيات؛ ينضم الروبوت ويحصل على دور خاص به.
  3. يرسل برنامجك الرمز كـ 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): كلها في الروبوتات.

الطلبات والردود

  • JSON في كل مكان. كل رد هو application/json بترميز UTF-8، بما في ذلك الأخطاء. الصور وحدها تأتي صورًا.
  • ما ترسله. يحمل POST حقوله بصيغة JSON في المحتوى. إذا وُجد حقل في عنوان URL أيضًا فالمحتوى هو الذي يُعتمد.
  • الأوقات بالمللي ثانية منذ 1 يناير 1970، بتوقيت UTC.
  • المعرّفات سلاسل نصية. قارنها كاملة فقط.
  • كل حقل موجود دائمًا. ما ينقص قيمته null؛ ويمكن أن تكون القوائم فارغة.
  • النصوص نص عادي، تمامًا كما كُتبت. #الوسوم و@الأسماء والروابط تبقى كما هي، وكذلك الرموز التعبيرية الخاصة بالخادم بصيغة :name:؛ صورها مدرجة في /emojis.
  • الصور عناوين نسبية، /api/media?id=…. دون المفتاح في الترويسة تحصل على 401.

الصفحات

كل قائمة تقبل 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.

الترويسات

باستثناء المفتاح، لا ترويسة مطلوبة.

ما ترسله

الترويسةالمعنى
Authorizationيحمل المفتاح: Bearer tm_key_…. الطريقة المعتادة.
X-Tellmelo-Keyالمفتاح، بديلًا عن Authorization.
Content-Typeapplication/json، لطلب له محتوى.
If-None-Matchقيمة ETag من آخر رد. إن لم يتغير شيء منذ ذلك فالرد 304 دون محتوى.

ما يعود

الترويسةالمعنى
ETagبصمة هذا الرد (W/). أعِدها بوصفها If-None-Match.
X-RateLimit-Limitكم طلبًا يمكن لهذا المفتاح إجراؤه في الدقيقة.
X-RateLimit-Remainingكم بقي منها في الدقيقة الحالية.
X-RateLimit-Resetمتى تبدأ الدقيقة التالية، بالثواني منذ 1970، بتوقيت UTC.
X-Tellmelo-Scopeما يمكن لهذا المفتاح فعله: read أو read write.
Retry-Afterمع 429: كم ثانية تنتظر قبل أن تسأل مجددًا.
WWW-Authenticateعند 401 دون مفتاح: Bearer.
Cache-Controlno-store: لا يجوز لأي وكيل تخزين الرد مؤقتًا. ويمكنك مع ذلك التحقق منه بـETag.

عندما لا ينجح شيء

تأتي الأخطاء بصيغة 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 تبقى المسارات والحقول كما هي؛ تُضاف أشياء جديدة فقط.

الإضافات ترفع الرقم الثاني. كل مسار يذكر منذ متى يوجد.

2.20
PUT /v2/roles/{id}/selfGET /v2/eventsGET /v2/events/streamGET /v2/me/commandsPUT /v2/me/commandsPOST /v2/interactions/{id}/replyGET /v2/communities/{id}/emojisPOST /v2/communities/{id}/emojisDELETE /v2/communities/{id}/emojis/{name}PUT /v2/communities/{id}/channels/shapePOST /v2/channels/{id}/voice
2.19
POST /v2/replies/{id}/votePOST /v2/replies/{id}/pickGET /v2/posts/{id}/replies/waitingPOST /v2/replies/{id}/decideGET /v2/posts/{id}/replies/plannedPUT /v2/me/planned-replies/{id}POST /v2/me/planned-replies/{id}/sendDELETE /v2/me/planned-replies/{id}GET /v2/posts/{id}/reply-settingsPUT /v2/posts/{id}/reply-settingsPOST /v2/posts/{id}/coauthorDELETE /v2/posts/{id}/coauthorPOST /v2/posts/{id}/pinPOST /v2/conversations/{with}/plannedGET /v2/me/planned-messagesPOST /v2/me/planned-messages/{id}/sendDELETE /v2/me/planned-messages/{id}GET /v2/profiles/{handle}/followersGET /v2/profiles/{handle}/followingGET /v2/me/relationsGET /v2/me/collectionsPOST /v2/me/collectionsPUT /v2/me/collections/{id}DELETE /v2/me/collections/{id}GET /v2/me/collections/{id}/postsPOST /v2/me/collections/{id}/postsGET /v2/profiles/{handle}/eventsPOST /v2/me/eventsPUT /v2/me/events/{id}DELETE /v2/me/events/{id}GET /v2/me/events/{id}/signupsPOST /v2/events/{id}/signupPOST /v2/me/picturesPUT /v2/me/profileGET /v2/me/emojisPOST /v2/me/emojis/picturesPOST /v2/me/emojisDELETE /v2/me/emojis/{name}PUT /v2/me/emojis/sharingGET /v2/me/webhooksPOST /v2/me/webhooksDELETE /v2/me/webhooks/{id}POST /v2/me/webhooks/{id}/testPOST /v2/communitiesPUT /v2/communities/{id}GET /v2/communities/{id}/botsGET /v2/communities/{id}/voice
2.16
PUT /v2/communities/{id}/members/{member}/timeoutDELETE /v2/communities/{id}/members/{member}/timeoutGET /v2/communities/{id}/bansPUT /v2/communities/{id}/bans/{member}DELETE /v2/communities/{id}/bans/{member}
2.15
GET /v2/communities/{id}/channelsGET /v2/channels/{id}/messagesGET /v2/communities/{id}/membersGET /v2/communities/{id}/rolesGET /v2/communities/{id}/bellGET /v2/invites/{code}POST /v2/channels/{id}/messagesPOST /v2/channels/{id}/readDELETE /v2/channel-messages/{id}PUT /v2/communities/{id}/bellPOST /v2/invites/{code}/joinPOST /v2/communities/{id}/rolesPUT /v2/roles/{id}DELETE /v2/roles/{id}PUT /v2/communities/{id}/roles/orderPUT /v2/roles/{id}/members/{member}POST /v2/communities/{id}/channelsPUT /v2/channels/{id}DELETE /v2/channels/{id}PUT /v2/communities/{id}/channels/orderGET /v2/channels/{id}/overridesPUT /v2/channels/{id}/overrides/{role}POST /v2/communities/{id}/categoriesPUT /v2/categories/{id}DELETE /v2/categories/{id}PUT /v2/communities/{id}/feedGET /v2/communities/{id}/invitesPOST /v2/communities/{id}/invitesDELETE /v2/invites/{code}POST /v2/channel-messages/{id}/removePOST /v2/communities/{id}/posts/{post}/removeDELETE /v2/communities/{id}/members/{member}GET /v2/communities/{id}/log
2.14
GET /v2/mediaGET /v2/media/mineGET /v2/media/{id}POST /v2/media/uploadsPUT /v2/media/uploads/{upload}POST /v2/media/{id}DELETE /v2/media/{id}
2.12
GET /v2/me/scheduledPOST /v2/posts/{id}/schedulePOST /v2/posts/{id}/editPOST /v2/replies/{id}/editDELETE /v2/replies/{id}POST /v2/replies/{id}/likeDELETE /v2/conversations/{with}/messages/{id}GET /v2/partner/quotaGET /v2/partner/giftsPOST /v2/partner/giftsGET /v2/gift-dropsPOST /v2/gift-drops
2.1
GET /v2/emojisPOST /v2/conversations/{with}/read
2.0
GET /v2GET /v2/postsGET /v2/posts/{id}GET /v2/posts/{id}/repliesGET /v2/profiles/{handle}GET /v2/profiles/{handle}/postsGET /v2/communitiesGET /v2/communities/{id}GET /v2/communities/{id}/postsGET /v2/tagsGET /v2/searchGET /v2/meGET /v2/feedGET /v2/notificationsGET /v2/conversationsGET /v2/conversations/{with}/messagesPOST /v2/postsDELETE /v2/posts/{id}POST /v2/posts/{id}/repliesPOST /v2/posts/{id}/votePOST /v2/relationsPOST /v2/conversations/{with}/messagesPOST /v2/notifications/read

انتهى 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/mediareadGIF أو مقاطع فيديو مشتركة، الأكثر استخدامًا أولًا.
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 واسم هذا الخادم.

  • الحق read
  • مع ETag
  • منذ v2.0

دون شرطة مائلة في النهاية: 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في الاستعلامintegerاختياريعدد الإدخالات في الصفحة: 20 افتراضيًا، 50 كحد أقصى.
cursorفي الاستعلامstringاختياريقيمة next من الإجابة السابقة. دونها من البداية.

مثال على الطلب

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/posts?limit=20"

الرد

يردّ بصفحة من Post، بوصفها `items` و`next`.

مثال
{
  "items": [
    {
      "id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
      "text": "The bees are back in the garden 🐝 #garden",
      "kind": "poll",
      "author": {
        "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
        "handle": "mara",
        "name": "Mara 🌻",
        "verified": true,
        "accountKind": "person"
      },
      "community": {
        "id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
        "name": "Urban Gardening"
      },
      "media": [
        {
          "url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
          "kind": "image",
          "poster": null,
          "ai": "without"
        }
      ],
      "poll": {
        "options": [
          {
            "text": "Lavender",
            "votes": 12
          },
          {
            "text": "Sunflowers",
            "votes": 7
          },
          {
            "text": "Clover",
            "votes": 3
          }
        ],
        "total": 22,
        "multiple": false,
        "endsAt": null,
        "running": true,
        "resultsVisible": true,
        "myVotes": [
          0
        ]
      },
      "quotes": null,
      "continues": null,
      "counts": {
        "replies": 4,
        "likes": 31,
        "reposts": 2
      },
      "pinned": false,
      "giftDrop": {
        "item": "plan",
        "quantity": 3,
        "places": 10,
        "left": 4,
        "audience": "followers",
        "newAccounts": false,
        "status": "open",
        "claimed": true
      },
      "createdAt": 1758624000000
    }
  ],
  "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}

الحالات الممكنة: 200304401429

GET/v2/posts/{id}

منشور واحد، بحسب id.

  • الحق read
  • مع ETag
  • منذ v2.0

في المسارات العامة تكون 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

نشر منشور.

  • الحق write
  • منذ v2.0

يحتاج المنشور إلى نص أو استطلاع. الطول وخيارات الاستطلاع والوتيرة يحددها الخادم؛ وما زاد على ذلك يعطيك 400 أو 429.

أرفق صورًا أو GIF أو فيديو باستخدام media. الـ GIF أو الفيديو يأتي وحده. يمكنك استخدام GIF ومقاطع الفيديو التي شاركها الآخرون على tellmelo.

المنشور للأصدقاء المقربين أو مع مؤلف مشارك يُنشر فورًا، لا في مجموعة ولا مجدولًا. لا يمكن الجمع بينهما.

المعاملات

الاسمالنوعالمعنى
textفي المحتوىstringاختيارينص المنشور أو الرد أو الرسالة.
communityفي المحتوىstringاختياريid المجموعة التي يذهب المنشور إلى قناة الخلاصة فيها؛ يجب أن تكون مشغّلة وأن يكون لديك الإذن. دونه يكون المنشور خارج أي مجموعة.
quotesفي المحتوىstringاختياريid المنشور الذي يقتبسه هذا المنشور.
pollفي المحتوىstring[]اختياريخيارات الإجابة كقائمة نصوص.
mediaفي المحتوىstring[]اختياريمعرّفات صور مرفوعة في التطبيق، أو 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}

إزالة أحد منشوراتك.

  • الحق write
  • منذ v2.0

المعاملات

الاسمالنوعالمعنى
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

منشوراتك التي لم تُنشر بعد، وما تنتظره.

  • الحق read
  • مع ETag
  • منذ v2.12

مثال على الطلب

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

تغيير موعد نشر منشور مجدول، أو موعد حذف منشور لنفسه.

  • الحق write
  • منذ v2.12

منشوراتك أنت فقط. وما دامت هدايا المنشور غير مدفوعة فلا يمكن جدولته.

المعاملات

الاسمالنوعالمعنى
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

تعديل نص أحد منشوراتك.

  • الحق write
  • منذ v2.12

فقط ضمن مدة التعديل التي يمنحها اشتراكك. ولا يمكن تعديل المنشورات المجدولة.

المعاملات

الاسمالنوعالمعنى
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

من يمكنه الرد على منشورك، وهل تنتظر الردود الموافقة، والوضع البطيء.

  • الحق read
  • مع ETag
  • منذ v2.19

المعاملات

الاسمالنوعالمعنى
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

تغيير إعدادات الرد لمنشورك. ما لا تذكره يبقى كما هو.

  • الحق write
  • منذ v2.19

منشوراتك أنت فقط.

المعاملات

الاسمالنوعالمعنى
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

قبول دعوة المشاركة في التأليف أو رفضها.

  • الحق write
  • منذ v2.19

المعاملات

الاسمالنوعالمعنى
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

الانسحاب بصفتك مؤلفًا مشاركًا، أو إزالة المؤلف المشارك من المنشور بصفتك كاتبه.

  • الحق write
  • منذ v2.19

للمؤلف المشارك ولكاتب المنشور.

المعاملات

الاسمالنوعالمعنى
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

تثبيت منشورك في أعلى ملفك الشخصي أو إلغاء تثبيته.

  • الحق write
  • منذ v2.19

منشوراتك الظاهرة فقط. يعتمد عدد ما يمكن تثبيته على اشتراكك.

المعاملات

الاسمالنوعالمعنى
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في الاستعلامintegerاختياريعدد الإدخالات في الصفحة: 20 افتراضيًا، 50 كحد أقصى.
cursorفي الاستعلامstringاختياريقيمة next من الإجابة السابقة. دونها من البداية.

مثال على الطلب

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/replies?limit=20"

الرد

يردّ بصفحة من Reply، بوصفها `items` و`next`.

مثال
{
  "items": [
    {
      "id": "9e4b1c7d-2a3f-4d5e-8b6c-0f1e2d3c4b5a",
      "text": "Same here, the lavender is full of them.",
      "kind": "post",
      "author": {
        "id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
        "handle": "jon",
        "name": "Jon",
        "verified": false,
        "accountKind": "person"
      },
      "community": null,
      "media": [],
      "poll": null,
      "quotes": null,
      "continues": null,
      "counts": {
        "replies": 0,
        "likes": 3,
        "reposts": 0
      },
      "pinned": false,
      "giftDrop": null,
      "createdAt": 1758624600000,
      "postId": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
      "parentId": null
    }
  ],
  "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}

الحالات الممكنة: 200304400401404429

POST/v2/posts/{id}/replies

الرد على منشور.

  • الحق write
  • منذ v2.0

في الوضع البطيء، رد واحد لكل شخص كل 10 دقائق، وإلا 429. المؤلف والحسابات التي يتابعها مستثنون.

مع media صورة واحدة أو GIF أو فيديو على الأكثر.

المعاملات

الاسمالنوعالمعنى
idفي المسارstringمطلوبid منشور.
textفي المحتوىstringمطلوبنص المنشور أو الرد أو الرسالة.
parentIdفي المحتوىstringاختياريid الرد الذي يجيب عنه هذا الرد. دونه مباشرة إلى المنشور.
mediaفي المحتوىstring[]اختياريمعرّفات صور مرفوعة في التطبيق، أو 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

تعديل نص أحد ردودك.

  • الحق write
  • منذ v2.12

المعاملات

الاسمالنوعالمعنى
idفي المسارstringمطلوبمعرّف الرد.
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}

إزالة أحد ردودك.

  • الحق write
  • منذ v2.12

المعاملات

الاسمالنوعالمعنى
idفي المسارstringمطلوبمعرّف الرد.

مثال على الطلب

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مطلوبمعرّف الرد.
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

التصويت لرد بالإيجاب أو بالسلب، أو سحب صوتك. يجيب بصوتك والنتيجة بعده.

  • الحق write
  • منذ v2.19

المعاملات

الاسمالنوعالمعنى
idفي المسارstringمطلوبمعرّف الرد.
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

إبراز رد تحت منشورك على أنه الأفضل، أو إلغاء الإبراز.

  • الحق write
  • منذ v2.19

تحت منشوراتك فقط، ولردود مباشرة على المنشور فقط. الإبراز الجديد يحل محل القديم.

المعاملات

الاسمالنوعالمعنى
idفي المسارstringمطلوبمعرّف الرد.
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

الردود التي تنتظر الموافقة تحت منشور: كلها تحت منشورك، وإلا فردودك أنت فقط.

  • الحق read
  • مع ETag
  • منذ v2.19

يحدد الكاتب في إعدادات الرد ما إذا كانت الردود تنتظر.

المعاملات

الاسمالنوعالمعنى
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

الموافقة على رد منتظر تحت منشورك أو رفضه. الرد المرفوض يُحذف.

  • الحق write
  • منذ v2.19

المعاملات

الاسمالنوعالمعنى
idفي المسارstringمطلوبمعرّف الرد.
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

ردودك المجدولة لوقت لاحق تحت منشور.

  • الحق read
  • مع ETag
  • منذ v2.19

تتم الجدولة بـ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}

تغيير نص رد مجدول أو وقته. الرد الذي فشل ينتظر من جديد.

  • الحق write
  • منذ v2.19

المعاملات

الاسمالنوعالمعنى
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

إرسال رد مجدول فورًا.

  • الحق write
  • منذ v2.19

المعاملات

الاسمالنوعالمعنى
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}

حذف رد مجدول.

  • الحق write
  • منذ v2.19

المعاملات

الاسمالنوعالمعنى
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

المشاركة في استطلاع.

  • الحق write
  • منذ v2.0

الأصوات لكل خيار تكون 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}

ملف شخصي، بحسب اسمه المختصر.

  • الحق read
  • مع ETag
  • منذ v2.0

المعاملات

الاسمالنوعالمعنى
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في الاستعلامintegerاختياريعدد الإدخالات في الصفحة: 20 افتراضيًا، 50 كحد أقصى.
cursorفي الاستعلامstringاختياريقيمة next من الإجابة السابقة. دونها من البداية.

مثال على الطلب

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/profiles/mara/posts?limit=20"

الرد

يردّ بصفحة من Post، بوصفها `items` و`next`.

مثال
{
  "items": [
    {
      "id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
      "text": "The bees are back in the garden 🐝 #garden",
      "kind": "poll",
      "author": {
        "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
        "handle": "mara",
        "name": "Mara 🌻",
        "verified": true,
        "accountKind": "person"
      },
      "community": {
        "id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
        "name": "Urban Gardening"
      },
      "media": [
        {
          "url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
          "kind": "image",
          "poster": null,
          "ai": "without"
        }
      ],
      "poll": {
        "options": [
          {
            "text": "Lavender",
            "votes": 12
          },
          {
            "text": "Sunflowers",
            "votes": 7
          },
          {
            "text": "Clover",
            "votes": 3
          }
        ],
        "total": 22,
        "multiple": false,
        "endsAt": null,
        "running": true,
        "resultsVisible": true,
        "myVotes": [
          0
        ]
      },
      "quotes": null,
      "continues": null,
      "counts": {
        "replies": 4,
        "likes": 31,
        "reposts": 2
      },
      "pinned": false,
      "giftDrop": {
        "item": "plan",
        "quantity": 3,
        "places": 10,
        "left": 4,
        "audience": "followers",
        "newAccounts": false,
        "status": "open",
        "claimed": true
      },
      "createdAt": 1758624000000
    }
  ],
  "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}

الحالات الممكنة: 200304400401404429

GET/v2/profiles/{handle}/events

الفعاليات القادمة لملف شخصي، الأقرب أولًا.

  • الحق read
  • مع ETag
  • منذ v2.19

فقط ما دام اشتراك الملف يشمل الفعاليات. لا شيء بين حسابات حظرت بعضها.

المعاملات

الاسمالنوعالمعنى
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 الخاص بها.

  • الحق write
  • منذ v2.19

يحتاج اشتراكًا يشمل الفعاليات، وإلا 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}

تغيير إحدى فعالياتك. تُضبط كل الحقول من جديد.

  • الحق write
  • منذ v2.19

الفعالية التي بدأت تحتفظ ببدايتها.

المعاملات

الاسمالنوعالمعنى
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}

حذف إحدى فعالياتك.

  • الحق write
  • منذ v2.19

المعاملات

الاسمالنوعالمعنى
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

من سجّل في إحدى فعالياتك.

  • الحق read
  • مع ETag
  • منذ v2.19

المعاملات

الاسمالنوعالمعنى
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

التسجيل في فعالية أو إلغاء التسجيل.

  • الحق write
  • منذ v2.19

فقط في الفعاليات التي فيها تسجيل، لا في فعالياتك. إذا اكتملت، 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 مجموعات حسابك.

  • الحق read
  • مع ETag
  • منذ v2.0

مرتّبة حسب عدد الأعضاء وغير مقسّمة إلى صفحات؛ next دائمًا null.

المعاملات

الاسمالنوعالمعنى
limitفي الاستعلامintegerاختياريعدد الإدخالات في الصفحة: 20 افتراضيًا، 50 كحد أقصى.
mineفي الاستعلامbooleanاختياريtrue لمجموعات حسابك، ومنها الداخلية والمخفية، مرتبة بالاسم.

مثال على الطلب

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/communities?limit=20"

الرد

يردّ بصفحة من Community، بوصفها `items` و`next`.

مثال
{
  "items": [
    {
      "id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
      "name": "Urban Gardening",
      "handle": "urbangardening",
      "description": "Balconies, allotments, rooftops: whatever grows.",
      "tags": [
        "garden",
        "bees"
      ],
      "members": 312,
      "joinPolicy": "open",
      "visibility": "open",
      "feedChannel": true,
      "sparks": 24,
      "perks": [
        "tint",
        "welcome"
      ],
      "membership": {
        "leader": null,
        "roles": [
          "4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8"
        ],
        "permissions": [
          "attach",
          "invite",
          "send",
          "view"
        ],
        "mutedUntil": null
      }
    }
  ],
  "next": null
}

الحالات الممكنة: 200304401429

GET/v2/communities/{id}

مجموعة واحدة، بحسب id.

  • الحق read
  • مع ETag
  • منذ v2.0

المجموعات الداخلية والمخفية فقط إن كان حسابك عضوًا فيها.

المعاملات

الاسمالنوعالمعنى
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في الاستعلامintegerاختياريعدد الإدخالات في الصفحة: 20 افتراضيًا، 50 كحد أقصى.
cursorفي الاستعلامstringاختياريقيمة next من الإجابة السابقة. دونها من البداية.

مثال على الطلب

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/posts?limit=20"

الرد

يردّ بصفحة من Post، بوصفها `items` و`next`.

مثال
{
  "items": [
    {
      "id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
      "text": "The bees are back in the garden 🐝 #garden",
      "kind": "poll",
      "author": {
        "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
        "handle": "mara",
        "name": "Mara 🌻",
        "verified": true,
        "accountKind": "person"
      },
      "community": {
        "id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
        "name": "Urban Gardening"
      },
      "media": [
        {
          "url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
          "kind": "image",
          "poster": null,
          "ai": "without"
        }
      ],
      "poll": {
        "options": [
          {
            "text": "Lavender",
            "votes": 12
          },
          {
            "text": "Sunflowers",
            "votes": 7
          },
          {
            "text": "Clover",
            "votes": 3
          }
        ],
        "total": 22,
        "multiple": false,
        "endsAt": null,
        "running": true,
        "resultsVisible": true,
        "myVotes": [
          0
        ]
      },
      "quotes": null,
      "continues": null,
      "counts": {
        "replies": 4,
        "likes": 31,
        "reposts": 2
      },
      "pinned": false,
      "giftDrop": {
        "item": "plan",
        "quantity": 3,
        "places": 10,
        "left": 4,
        "audience": "followers",
        "newAccounts": false,
        "status": "open",
        "claimed": true
      },
      "createdAt": 1758624000000
    }
  ],
  "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}

الحالات الممكنة: 200304400401404429

GET/v2/communities/{id}/members

أعضاء المجموعة مع أدوارهم.

  • الحق read
  • مع ETag
  • منذ v2.15

القيادة أولًا ثم حسب أعلى دور؛ 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 أخيرًا.

  • الحق read
  • مع ETag
  • منذ v2.15

المعاملات

الاسمالنوعالمعنى
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

أي الإشعارات ترسلها إليك مجموعة.

  • الحق read
  • مع ETag
  • منذ v2.15

المعاملات

الاسمالنوعالمعنى
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}

المجموعة خلف رابط دعوة، قبل الانضمام.

  • الحق read
  • مع ETag
  • منذ v2.15

المعاملات

الاسمالنوعالمعنى
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

أخذ دور قابل للاختيار الذاتي أو تركه.

  • الحق write
  • منذ v2.20

فقط الأدوار التي تعرضها القيادة للاختيار الذاتي (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

إيموجي المجموعة الخاصة بها.

  • الحق read
  • مع ETag
  • منذ v2.20

المعاملات

الاسمالنوعالمعنى
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

تحديد الإشعارات التي ترسلها إليك مجموعة.

  • الحق write
  • منذ v2.15

المعاملات

الاسمالنوعالمعنى
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

الانضمام إلى مجموعة برابط دعوة.

  • الحق write
  • منذ v2.15

المعاملات

الاسمالنوعالمعنى
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

بوتات مجموعة مع ما يسمح به دورها.

  • الحق read
  • مع ETag
  • منذ v2.19

المعاملات

الاسمالنوعالمعنى
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

قنوات المجموعة التي تراها، بترتيبها.

  • الحق read
  • مع ETag
  • منذ v2.15

قناة الخلاصة (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في الاستعلامstringاختياريقيمة next من الإجابة السابقة. دونها من البداية.
threadفي الاستعلامstringاختياريالرسالة التي تُقرأ سلسلتها: هي وردودها بدل الدردشة.

مثال على الطلب

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a/messages"

الرد

يردّ بصفحة من ChannelMessage، بوصفها `items` و`next`.

مثال
{
  "items": [
    {
      "id": "61a2b3c4-d5e6-4f70-8192-a3b4c5d6e7f8",
      "text": "@jon the first tomatoes are ripe 🍅",
      "author": {
        "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
        "handle": "mara",
        "name": "Mara 🌻",
        "bot": false
      },
      "media": [
        {
          "url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
          "kind": "image",
          "poster": null,
          "ai": "without"
        }
      ],
      "replyTo": "72b3c4d5-e6f7-4081-92a3-b4c5d6e7f809",
      "roleColor": "green",
      "threadOf": null,
      "threadCount": 3,
      "card": null,
      "buttons": [],
      "createdAt": 1758631200000
    }
  ],
  "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}

الحالات الممكنة: 200304400401404429

POST/v2/channels/{id}/messages

كتابة رسالة في قناة دردشة.

  • الحق write
  • منذ v2.15

@الاسم ينبّه عضوًا، و@everyone مع الإذن ينبّه الجميع، ست مرات في الساعة على الأكثر.

المعاملات

الاسمالنوعالمعنى
idفي المسارstringمطلوبid قناة.
textفي المحتوىstringاختيارينص المنشور أو الرد أو الرسالة.
replyToفي المحتوىstringاختياريid الرسالة في القناة نفسها التي ترد عليها.
mediaفي المحتوىstring[]اختياريمعرّفات صور مرفوعة في التطبيق، أو 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

تعليم قناة دردشة كمقروءة حتى وقت معيّن.

  • الحق write
  • منذ v2.15

المعاملات

الاسمالنوعالمعنى
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}

حذف رسالة لك في قناة دردشة.

  • الحق write
  • منذ v2.15

رسائلك فقط؛ رسائل الآخرين تزيلها القيادة بإذن 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

من الموجود الآن في القنوات الصوتية لمجموعة، لكل قناة.

  • الحق read
  • مع ETag
  • منذ v2.19

القنوات التي يحق لك رؤيتها فقط. دون خادم وسائط تكون القائمة فارغة.

المعاملات

الاسمالنوعالمعنى
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

إضافة إيموجي إلى المجموعة.

  • الحق groups
  • منذ v2.20

فقط من يحق له إدارة قنوات المجموعة. تُرفع الصورة كإيموجي خاص بك (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}

إزالة إيموجي من المجموعة.

  • الحق groups
  • منذ v2.20

المعاملات

الاسمالنوعالمعنى
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

إنشاء دور.

  • الحق groups
  • منذ v2.15

الأدوار التي تحت أعلى دور لديك فقط، والصلاحيات التي لديك أنت فقط؛ والقيادة فوق الجميع.

المعاملات

الاسمالنوعالمعنى
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}

تغيير اسم الدور ولونه وصلاحياته.

  • الحق groups
  • منذ v2.15

يستبدل الاسم واللون والصلاحيات؛ ما تتركه يصبح فارغًا.

الأدوار التي تحت أعلى دور لديك فقط، والصلاحيات التي لديك أنت فقط؛ والقيادة فوق الجميع.

المعاملات

الاسمالنوعالمعنى
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}

حذف دور.

  • الحق groups
  • منذ v2.15

المعاملات

الاسمالنوعالمعنى
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

تحديد ترتيب الأدوار.

  • الحق groups
  • منذ v2.15

المعاملات

الاسمالنوعالمعنى
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}

منح عضو دورًا أو سحبه منه.

  • الحق groups
  • منذ v2.15

المعاملات

الاسمالنوعالمعنى
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

إنشاء قناة دردشة.

  • الحق groups
  • منذ v2.15

المعاملات

الاسمالنوعالمعنى
idفي المسارstringمطلوبid مجموعة.
nameفي المحتوىstringاختياريالاسم دون #؛ فارغ للاسم الذي يعطيه التطبيق في كل لغة.
topicفي المحتوىstringاختياريالموضوع الظاهر فوق القناة.
categoryفي المحتوىstringاختياريid الفئة التي تدخلها القناة؛ فارغ لعدم وجود فئة.
emojiفي المحتوىstringاختياريرمز تعبيري كرمز.
iconفي المحتوىstringاختياريرمز من مجموعة التطبيق باسمه.homehashmegaphonevolumemessagehelpinfobellcalendarbookbookmarkpinshieldstarheartsparklesflamezaptrophygiftrocketlightbulbcodewrenchbriefcasegraduationpalettecamerafilmmusicgamepaddumbbellleafflowerpawsunmooncloudglobemapcoffeepizzasmile
imageفي المحتوىstringاختياريمعرّف صورة رفعتها عبر /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}

تغيير اسم القناة وموضوعها وفئتها.

  • الحق groups
  • منذ v2.15

يستبدل الاسم والموضوع والفئة؛ ما تتركه يصبح فارغًا.

المعاملات

الاسمالنوعالمعنى
idفي المسارstringمطلوبid قناة.
nameفي المحتوىstringاختياريالاسم دون #؛ فارغ للاسم الذي يعطيه التطبيق في كل لغة.
topicفي المحتوىstringاختياريالموضوع الظاهر فوق القناة.
categoryفي المحتوىstringاختياريid الفئة التي تدخلها القناة؛ فارغ لعدم وجود فئة.
emojiفي المحتوىstringاختياريرمز تعبيري كرمز.
iconفي المحتوىstringاختياريرمز من مجموعة التطبيق باسمه.homehashmegaphonevolumemessagehelpinfobellcalendarbookbookmarkpinshieldstarheartsparklesflamezaptrophygiftrocketlightbulbcodewrenchbriefcasegraduationpalettecamerafilmmusicgamepaddumbbellleafflowerpawsunmooncloudglobemapcoffeepizzasmile
imageفي المحتوىstringاختياريمعرّف صورة رفعتها عبر /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}

حذف قناة دردشة مع رسائلها.

  • الحق groups
  • منذ v2.15

لا يمكن حذف قناة الخلاصة، بل إيقافها فقط.

المعاملات

الاسمالنوعالمعنى
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

تحديد ترتيب الفئات وقنوات الدردشة.

  • الحق groups
  • منذ v2.15

المعاملات

الاسمالنوعالمعنى
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

تحديد شكل جميع رموز قنوات المجموعة.

  • الحق groups
  • منذ v2.20

لقيادة المجموعة فقط.

المعاملات

الاسمالنوعالمعنى
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}

تحديد ما يحق لدور في قناة بخلاف المجموعة.

  • الحق groups
  • منذ v2.15

ليس للأدوار المساوية لأعلى دور لديك أو الأعلى منه.

المعاملات

الاسمالنوعالمعنى
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

إنشاء فئة للقنوات.

  • الحق groups
  • منذ v2.15

المعاملات

الاسمالنوعالمعنى
idفي المسارstringمطلوبid مجموعة.
nameفي المحتوىstringمطلوباسم الفئة.
emojiفي المحتوىstringاختياريرمز تعبيري كرمز.
iconفي المحتوىstringاختياريرمز من مجموعة التطبيق باسمه.homehashmegaphonevolumemessagehelpinfobellcalendarbookbookmarkpinshieldstarheartsparklesflamezaptrophygiftrocketlightbulbcodewrenchbriefcasegraduationpalettecamerafilmmusicgamepaddumbbellleafflowerpawsunmooncloudglobemapcoffeepizzasmile
imageفي المحتوىstringاختياريمعرّف صورة رفعتها عبر /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}

إعادة تسمية فئة.

  • الحق groups
  • منذ v2.15

المعاملات

الاسمالنوعالمعنى
idفي المسارstringمطلوبid فئة.
nameفي المحتوىstringمطلوباسم الفئة.
emojiفي المحتوىstringاختياريرمز تعبيري كرمز.
iconفي المحتوىstringاختياريرمز من مجموعة التطبيق باسمه.homehashmegaphonevolumemessagehelpinfobellcalendarbookbookmarkpinshieldstarheartsparklesflamezaptrophygiftrocketlightbulbcodewrenchbriefcasegraduationpalettecamerafilmmusicgamepaddumbbellleafflowerpawsunmooncloudglobemapcoffeepizzasmile
imageفي المحتوىstringاختياريمعرّف صورة رفعتها عبر /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}

حذف فئة.

  • الحق groups
  • منذ v2.15

تبقى قنواتها، دون فئة.

المعاملات

الاسمالنوعالمعنى
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

تشغيل قناة الخلاصة في مجموعة أو إيقافها.

  • الحق groups
  • منذ v2.15

عند إيقافها تبقى المنشورات محفوظة لكن لا يراها إلا كتّابها.

المعاملات

الاسمالنوعالمعنى
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

إنشاء رابط دعوة.

  • الحق groups
  • منذ v2.15

لا يصلح الرابط إلا ما دمت تستطيع الدعوة، ويزول بمغادرتك.

المعاملات

الاسمالنوعالمعنى
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}

سحب رابط دعوة.

  • الحق groups
  • منذ v2.15

المعاملات

الاسمالنوعالمعنى
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

إزالة رسالة عضو آخر من قناة.

  • الحق groups
  • منذ v2.15

يُسجَّل في سجل المجموعة، و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

إزالة منشور من مجموعة.

  • الحق groups
  • منذ v2.15

يُسجَّل في سجل المجموعة، و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}

طرد عضو من مجموعة.

  • الحق groups
  • منذ v2.15

منذ 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

كتم عضو.

  • الحق groups
  • منذ v2.16

الكتم الجديد يحل محل الكتم الجاري. المغادرة ثم الانضمام مجددًا لا تنهيه.

فقط مع الصلاحية المناسبة وفقط مع أعضاء أدنى من أعلى دور لديك؛ القيادة المشاركة فقط كمؤسس.

يُسجَّل في سجل المجموعة، و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

رفع الكتم.

  • الحق groups
  • منذ v2.16

المعاملات

الاسمالنوعالمعنى
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}

حظر عضو.

  • الحق groups
  • منذ v2.16

بدون 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}

رفع حظر.

  • الحق groups
  • منذ v2.16

المعاملات

الاسمالنوعالمعنى
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
  • منذ v2.19

يحتاج إذن 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
  • منذ v2.19

يحتاج إذن 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

أحداث مجموعات الروبوت منذ حدث ما، صفحة بعد صفحة.

  • الحق read
  • منذ v2.20

فقط برمز روبوت. أحداث القناة فقط إذا كان يحق للروبوت رؤيتها.

تُحفظ الأحداث يومًا واحدًا. next هو رقم الأخير، كـ since للصفحة التالية.

المعاملات

الاسمالنوعالمعنى
sinceفي الاستعلامstringاختياريرقم آخر حدث لدى الروبوت. بدونه يبدأ التدفق الآن والقائمة من الأقدم.

مثال على الطلب

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/events?since=0"

الرد

يردّ بصفحة من BotEvent، بوصفها `items` و`next`.

مثال
{
  "items": [
    {
      "id": "4711",
      "type": "message.created",
      "community": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
      "channel": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a",
      "createdAt": 1758634800000,
      "data": {
        "message": {
          "id": "61a2b3c4-d5e6-4f70-8192-a3b4c5d6e7f8",
          "text": "/dice 6",
          "author": {
            "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
            "handle": "mara",
            "name": "Mara 🌻",
            "bot": false
          },
          "media": 0,
          "replyTo": null,
          "threadOf": null,
          "createdAt": 1758634800000
        }
      }
    }
  ],
  "next": null
}

الحالات الممكنة: 200401429

GET/v2/events/stream

أحداث مجموعات الروبوت فور وقوعها (server-sent events).

  • الحق read
  • مع ETag
  • منذ v2.20

يبقى الاتصال مفتوحًا ويُغلق بعد عشر دقائق؛ يعيد العميل الاتصال ويرسل Last-Event-ID.

فقط برمز روبوت. أحداث القناة فقط إذا كان يحق للروبوت رؤيتها.

المعاملات

الاسمالنوعالمعنى
sinceفي الاستعلامstringاختياريرقم آخر حدث لدى الروبوت. بدونه يبدأ التدفق الآن والقائمة من الأقدم.

مثال على الطلب

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/events/stream?since=0"

الرد

يردّ بـBotEvent واحد.

مثال
{
  "id": "4711",
  "type": "message.created",
  "community": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
  "channel": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a",
  "createdAt": 1758634800000,
  "data": {
    "message": {
      "id": "61a2b3c4-d5e6-4f70-8192-a3b4c5d6e7f8",
      "text": "/dice 6",
      "author": {
        "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
        "handle": "mara",
        "name": "Mara 🌻",
        "bot": false
      },
      "media": 0,
      "replyTo": null,
      "threadOf": null,
      "createdAt": 1758634800000
    }
  }
}

الحالات الممكنة: 200304401429

GET/v2/me/commands

أوامر الروبوت.

  • الحق read
  • مع ETag
  • منذ v2.20

فقط برمز روبوت. أحداث القناة فقط إذا كان يحق للروبوت رؤيتها.

مثال على الطلب

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

تحديد أوامر الروبوت، جميعها دفعة واحدة.

  • الحق write
  • منذ v2.20

يستبدل جميع الأوامر؛ والقائمة الفارغة تزيلها. في الدردشات التي يحق للروبوت رؤيتها يقترحها حقل الإدخال بعد «/».

المعاملات

الاسمالنوعالمعنى
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

الرد على أمر أو زر.

  • الحق write
  • منذ v2.20

خلال 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

أخذ مقعد في قناة صوتية لتشغيل موسيقى أو صوت.

  • الحق write
  • منذ v2.20

فقط برمز روبوت، وبقدر ما يسمح به دوره في القناة. يتصل البرنامج عبر SDK من LiveKit ويرسل صوته كميكروفون؛ ويضبط كل شخص مستوى صوته بنفسه.

المعاملات

الاسمالنوعالمعنى
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

الوسوم الرائجة حاليًا.

  • الحق read
  • مع ETag
  • منذ v2.0

10 وسوم رائجة كحد أقصى بحسب النقاط: كل استخدام يُحتسب 1 وينخفض إلى النصف كل 3 أيام، والحساب الواحد يُحتسب 3 كحد أقصى في اليوم. posts هي النقاط مقرّبة. limit يقصّر القائمة فقط. الوسوم التي يبرزها الفريق قد تكون أعلى.

المعاملات

الاسمالنوعالمعنى
limitفي الاستعلامintegerاختياريعدد الإدخالات في الصفحة: 20 افتراضيًا، 50 كحد أقصى.

مثال على الطلب

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/tags?limit=10"

الرد

يردّ بصفحة من Tag، بوصفها `items` و`next`.

مثال
{
  "items": [
    {
      "tag": "garden",
      "posts": 58
    }
  ],
  "next": null
}

الحالات الممكنة: 200304401429

GET/v2/search

بحث في المنشورات والأسماء والأسماء المختصرة والوسوم.

  • الحق read
  • مع ETag
  • منذ v2.0

يبحث في المحتوى العام فقط: المنشورات خارج المجموعات والملفات الشخصية والوسوم. يسري limit على كل نوع.

المعاملات

الاسمالنوعالمعنى
qفي الاستعلامstringمطلوبالكلمات المبحوث عنها.
typeفي الاستعلامstringاختياريأي نوع من النتائج. دونه كل الأنواع.allpostsprofilestags
limitفي الاستعلامintegerاختياريعدد الإدخالات في الصفحة: 20 افتراضيًا، 50 كحد أقصى.

مثال على الطلب

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/search?q=garden&type=posts"

الرد

يردّ بـSearchResult واحد.

مثال
{
  "posts": [
    {
      "id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
      "text": "The bees are back in the garden 🐝 #garden",
      "kind": "poll",
      "author": {
        "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
        "handle": "mara",
        "name": "Mara 🌻",
        "verified": true,
        "accountKind": "person"
      },
      "community": {
        "id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
        "name": "Urban Gardening"
      },
      "media": [
        {
          "url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
          "kind": "image",
          "poster": null,
          "ai": "without"
        }
      ],
      "poll": {
        "options": [
          {
            "text": "Lavender",
            "votes": 12
          },
          {
            "text": "Sunflowers",
            "votes": 7
          },
          {
            "text": "Clover",
            "votes": 3
          }
        ],
        "total": 22,
        "multiple": false,
        "endsAt": null,
        "running": true,
        "resultsVisible": true,
        "myVotes": [
          0
        ]
      },
      "quotes": null,
      "continues": null,
      "counts": {
        "replies": 4,
        "likes": 31,
        "reposts": 2
      },
      "pinned": false,
      "giftDrop": {
        "item": "plan",
        "quantity": 3,
        "places": 10,
        "left": 4,
        "audience": "followers",
        "newAccounts": false,
        "status": "open",
        "claimed": true
      },
      "createdAt": 1758624000000
    }
  ],
  "profiles": [
    {
      "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
      "handle": "mara",
      "name": "Mara 🌻",
      "verified": true,
      "accountKind": "person"
    }
  ],
  "tags": [
    {
      "tag": "garden",
      "posts": 58
    }
  ]
}

الحالات الممكنة: 200304400401429

GET/v2/emojis

الرموز التعبيرية الخاصة بالخادم، مع عناوين صورها.

  • الحق read
  • مع ETag
  • منذ v2.1

يظهر الرمز التعبيري في النصوص بصيغة :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في الاستعلامstringاختياريgif أو video؛ عند عدم التحديد gif.gifvideo
qفي الاستعلامstringاختياريكلمات موجودة في الاسم أو الكلمات المفتاحية.
anywhereفي الاستعلامbooleanاختياريtrue: فقط ما يُسمح بظهوره على مواقع أخرى أيضًا.
limitفي الاستعلامintegerاختياريعدد الإدخالات في الصفحة: 20 افتراضيًا، 50 كحد أقصى.
cursorفي الاستعلام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في الاستعلامstringاختياريgif أو video؛ عند عدم التحديد gif.gifvideo
qفي الاستعلامstringاختياريكلمات موجودة في الاسم أو الكلمات المفتاحية.
limitفي الاستعلامintegerاختياريعدد الإدخالات في الصفحة: 20 افتراضيًا، 50 كحد أقصى.
cursorفي الاستعلام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 أو فيديو، خاص بك أو مشترك.

  • الحق read
  • مع ETag
  • منذ v2.14

المعاملات

الاسمالنوعالمعنى
idفي المسارstringمطلوبمعرّف 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

بدء عملية رفع.

  • الحق media
  • منذ v2.14

بعد ذلك أرسل الملف على أجزاء لا يتجاوز كل منها piece بايت إلى /media/uploads/{upload}. إذا لم يصل جزء جديد، تنتهي عملية الرفع بعد 15 دقيقة.

تنطبق حدود التطبيق: GIF حتى 15 ميغابايت، والفيديو حسب الاشتراك في الحجم والطول، وعدد GIF يوميًا، وملفات GIF الخاصة، ونقاط الفيديو أسبوعيًا. وإلا يأتي 409 أو 413 أو 429.

المعاملات

الاسمالنوعالمعنى
kindفي المحتوىstringمطلوبgif أو video؛ عند عدم التحديد gif.gifvideo
sizeفي المحتوى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}

إرسال جزء من الملف.

  • الحق media
  • منذ v2.14

جسم الطلب هو الجزء نفسه (application/octet-stream)، وليس JSON. إذا لم يكمل ما سبق، يأتي 409 مع received: تابع الإرسال من هناك. بعد الجزء الأخير يُحوَّل الملف؛ وعندها يحتوي الرد على item.

المعاملات

الاسمالنوعالمعنى
uploadفي المسارstringمطلوبقيمة upload من بداية الرفع.
offsetفي الاستعلام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 أو الفيديو الخاصة بك.

  • الحق media
  • منذ v2.14

المعاملات

الاسمالنوعالمعنى
idفي المسارstringمطلوبمعرّف 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 أو الفيديو الخاصة بك.

  • الحق media
  • منذ v2.14

المنشورات التي تعرضه بالفعل تحتفظ به. وعلى المواقع الأخرى يختفي خلال دقائق.

المعاملات

الاسمالنوعالمعنى
idفي المسارstringمطلوبمعرّف 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 الذي تتوقعه المسارات الأخرى.

  • الحق read
  • مع ETag
  • منذ v2.0

مثال على الطلب

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في الاستعلامstringاختياريأي خلاصة: for-you أو following أو latest أو bookmarks. latest افتراضيًا.for-youfollowinglatestbookmarks
tagفي الاستعلامstringاختياريفقط المنشورات عن هذا الوسم: المكتوبة به أو التي تعرّف عليه الخادم فيها. دونه بلا تصفية.
limitفي الاستعلامintegerاختياريعدد الإدخالات في الصفحة: 20 افتراضيًا، 50 كحد أقصى.
cursorفي الاستعلامstringاختياريقيمة next من الإجابة السابقة. دونها من البداية.

مثال على الطلب

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/feed?tab=following&limit=20"

الرد

يردّ بصفحة من Post، بوصفها `items` و`next`.

مثال
{
  "items": [
    {
      "id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
      "text": "The bees are back in the garden 🐝 #garden",
      "kind": "poll",
      "author": {
        "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
        "handle": "mara",
        "name": "Mara 🌻",
        "verified": true,
        "accountKind": "person"
      },
      "community": {
        "id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
        "name": "Urban Gardening"
      },
      "media": [
        {
          "url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
          "kind": "image",
          "poster": null,
          "ai": "without"
        }
      ],
      "poll": {
        "options": [
          {
            "text": "Lavender",
            "votes": 12
          },
          {
            "text": "Sunflowers",
            "votes": 7
          },
          {
            "text": "Clover",
            "votes": 3
          }
        ],
        "total": 22,
        "multiple": false,
        "endsAt": null,
        "running": true,
        "resultsVisible": true,
        "myVotes": [
          0
        ]
      },
      "quotes": null,
      "continues": null,
      "counts": {
        "replies": 4,
        "likes": 31,
        "reposts": 2
      },
      "pinned": false,
      "giftDrop": {
        "item": "plan",
        "quantity": 3,
        "places": 10,
        "left": 4,
        "audience": "followers",
        "newAccounts": false,
        "status": "open",
        "claimed": true
      },
      "createdAt": 1758624000000
    }
  ],
  "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}

الحالات الممكنة: 200400401429

POST/v2/me/pictures

رفع صورة بصيغة بايتات. يجيب بـid وurl؛ ثم تستخدم id كصورة ملف شخصي أو غلاف أو في منشور.

  • الحق write
  • منذ v2.19

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
  • منذ v2.19

يحتاج إذن 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

رموزك التعبيرية الخاصة.

  • الحق read
  • مع ETag
  • منذ v2.19

مثال على الطلب

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

رفع صورة رمز تعبيري خاص بك بصيغة بايتات.

  • الحق profile
  • منذ v2.19

الرموز المتحركة تحتاج اشتراكًا. إذا كانت الصورة كبيرة جدًا بعد التحويل تُرفض.

مثال على الطلب

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

إنشاء رمز تعبيري خاص. يجيب بكل رموزك.

  • الحق profile
  • منذ v2.19

عدد الرموز التي يمكنك إنشاؤها يعتمد على اشتراكك.

المعاملات

الاسمالنوعالمعنى
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}

إزالة رمز تعبيري خاص. يجيب بالباقي.

  • الحق profile
  • منذ v2.19

المعاملات

الاسمالنوعالمعنى
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

تحديد ما إذا كان متابعوك يستطيعون استخدام رموزك في نصوصهم.

  • الحق profile
  • منذ v2.19

المعاملات

الاسمالنوعالمعنى
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 والسر الخاص بالتوقيعات، هذه المرة فقط.

  • الحق webhooks
  • منذ v2.19

كل تسليم موقّع بالسر (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}

حذف خطاف ويب.

  • الحق webhooks
  • منذ v2.19

المعاملات

الاسمالنوعالمعنى
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

إرسال تجربة إلى خطاف ويب.

  • الحق webhooks
  • منذ v2.19

المعاملات

الاسمالنوعالمعنى
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في الاستعلامintegerاختياريعدد الإدخالات في الصفحة: 20 افتراضيًا، 50 كحد أقصى.
cursorفي الاستعلامstringاختياريقيمة next من الإجابة السابقة. دونها من البداية.

مثال على الطلب

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/notifications?limit=20"

الرد

يردّ بصفحة من Notification، بوصفها `items` و`next`.

مثال
{
  "items": [
    {
      "id": "3f2e1d0c-9b8a-4765-8432-10fedcba9876",
      "kind": "like",
      "text": null,
      "actor": {
        "handle": "jon",
        "name": "Jon"
      },
      "postId": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
      "read": false,
      "more": 2,
      "createdAt": 1758624300000,
      "updatedAt": 1758624900000
    }
  ],
  "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}

الحالات الممكنة: 200304401429

POST/v2/notifications/read

تعليم إشعاراتك كمقروءة.

  • الحق write
  • منذ v2.0

مثال على الطلب

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في الاستعلامintegerاختياريعدد الإدخالات في الصفحة: 20 افتراضيًا، 50 كحد أقصى.
cursorفي الاستعلامstringاختياريقيمة next من الإجابة السابقة. دونها من البداية.

مثال على الطلب

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/conversations?limit=20"

الرد

يردّ بصفحة من Conversation، بوصفها `items` و`next`.

مثال
{
  "items": [
    {
      "with": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
      "handle": "jon",
      "name": "Jon",
      "excerpt": "See you on Saturday at the market!",
      "truncated": false,
      "fromMe": true,
      "lastMessageId": "7c6b5a49-3827-4165-9f0e-d1c2b3a49586",
      "unread": 0,
      "updatedAt": 1758624060000
    }
  ],
  "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}

الحالات الممكنة: 200304401429

GET/v2/conversations/{with}/messages

رسائل محادثة واحدة، الأحدث أولًا.

  • الحق read
  • مقسَّم إلى صفحات
  • مع ETag
  • منذ v2.0

القراءة لا تعلّم شيئًا كمقروء؛ POST /conversations/{with}/read يفعل ذلك.

المعاملات

الاسمالنوعالمعنى
withفي المسارstringمطلوبid الحساب الآخر. ليس للمحادثة id خاص بها.
limitفي الاستعلامintegerاختياريعدد الإدخالات في الصفحة: 20 افتراضيًا، 50 كحد أقصى.
cursorفي الاستعلامstringاختياريقيمة next من الإجابة السابقة. دونها من البداية.

مثال على الطلب

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/conversations/a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05/messages?limit=20"

الرد

يردّ بصفحة من Message، بوصفها `items` و`next`.

مثال
{
  "items": [
    {
      "id": "7c6b5a49-3827-4165-9f0e-d1c2b3a49586",
      "text": "See you on Saturday at the market!",
      "from": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
      "to": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
      "read": true,
      "media": [],
      "replyTo": null,
      "createdAt": 1758624060000
    }
  ],
  "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}

الحالات الممكنة: 200304400401404429

POST/v2/conversations/{with}/messages

إرسال رسالة في محادثة.

  • الحق write
  • منذ v2.0

تسري قواعد التطبيق: من حظرك لا يمكن الوصول إليه، وإعدادات الطرف الآخر تُحتسب.

لا يمكن إرفاق الصور وملفات 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

تعليم كل رسائل محادثة كمقروءة.

  • الحق write
  • منذ v2.1

المعاملات

الاسمالنوعالمعنى
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}

حذف إحدى رسائلك.

  • الحق write
  • منذ v2.12

رسائلك أنت فقط، وفي أول 24 ساعة بعد الإرسال فقط.

المعاملات

الاسمالنوعالمعنى
withفي المسارstringمطلوبid الحساب الآخر. ليس للمحادثة id خاص بها.
idفي المسارstringمطلوبمعرّف الرسالة.

مثال على الطلب

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 الرسالة المجدولة.

  • الحق write
  • منذ v2.19

يحتاج اشتراكًا يشمل الرسائل المجدولة، وإلا 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

رسائلك التي لم تُرسل بعد، مرتبة حسب الوقت.

  • الحق read
  • مع ETag
  • منذ v2.19

المعاملات

الاسمالنوعالمعنى
withفي الاستعلامstringاختياريالرسائل الموجهة إلى هذا الحساب فقط (id الخاص به).

مثال على الطلب

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/me/planned-messages"

الرد

يردّ بصفحة من PlannedMessage، بوصفها `items` و`next`.

مثال
{
  "items": [
    {
      "id": "3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9",
      "to": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
      "text": "Happy birthday! 🎂",
      "sendAt": 1758710400000,
      "state": "waiting"
    }
  ],
  "next": null
}

الحالات الممكنة: 200304401429

POST/v2/me/planned-messages/{id}/send

إرسال رسالة مجدولة محجوزة أو فاشلة الآن.

  • الحق write
  • منذ v2.19

المعاملات

الاسمالنوعالمعنى
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}

حذف رسالة مجدولة قبل إرسالها.

  • الحق write
  • منذ v2.19

المعاملات

الاسمالنوعالمعنى
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.

  • الحق write
  • منذ v2.0

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في الاستعلامintegerاختياريعدد الإدخالات في الصفحة: 20 افتراضيًا، 50 كحد أقصى.
cursorفي الاستعلامstringاختياريقيمة next من الإجابة السابقة. دونها من البداية.

مثال على الطلب

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/profiles/mara/followers?limit=20"

الرد

يردّ بصفحة من ProfileBrief، بوصفها `items` و`next`.

مثال
{
  "items": [
    {
      "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
      "handle": "mara",
      "name": "Mara 🌻",
      "verified": true,
      "accountKind": "person"
    }
  ],
  "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}

الحالات الممكنة: 200304400401404429

GET/v2/profiles/{handle}/following

من يتابعه ملف شخصي، الأحدث أولًا.

  • الحق read
  • مقسَّم إلى صفحات
  • مع ETag
  • منذ v2.19

المعاملات

الاسمالنوعالمعنى
handleفي المسارstringمطلوبالاسم المختصر لملف شخصي، بأحرف كبيرة أو صغيرة، لا فرق.
limitفي الاستعلامintegerاختياريعدد الإدخالات في الصفحة: 20 افتراضيًا، 50 كحد أقصى.
cursorفي الاستعلامstringاختياريقيمة next من الإجابة السابقة. دونها من البداية.

مثال على الطلب

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/profiles/mara/following?limit=20"

الرد

يردّ بصفحة من ProfileBrief، بوصفها `items` و`next`.

مثال
{
  "items": [
    {
      "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
      "handle": "mara",
      "name": "Mara 🌻",
      "verified": true,
      "accountKind": "person"
    }
  ],
  "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}

الحالات الممكنة: 200304400401404429

GET/v2/me/relations

من حظرته أو كتمته أو حظرته من الرسائل فقط، الأحدث أولًا.

  • الحق read
  • مقسَّم إلى صفحات
  • مع ETag
  • منذ v2.19

قوائمك أنت فقط. الضبط والإزالة عبر POST /relations.

المعاملات

الاسمالنوعالمعنى
kindفي الاستعلامstringمطلوبblock المحظورون، mute المكتومون، dm_block المحظورون من الرسائل فقط.blockmutedm_block
limitفي الاستعلامintegerاختياريعدد الإدخالات في الصفحة: 20 افتراضيًا، 50 كحد أقصى.
cursorفي الاستعلامstringاختياريقيمة next من الإجابة السابقة. دونها من البداية.

مثال على الطلب

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/me/relations?kind=mute&limit=20"

الرد

يردّ بصفحة من ProfileBrief، بوصفها `items` و`next`.

مثال
{
  "items": [
    {
      "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
      "handle": "mara",
      "name": "Mara 🌻",
      "verified": true,
      "accountKind": "person"
    }
  ],
  "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}

الحالات الممكنة: 200304400401429

المجموعات المحفوظة

رتّب المنشورات المحفوظة في مجموعات خاصة بك. يمكن أن يكون المنشور في عدة مجموعات؛ وإذا أُخرج من مجموعة يبقى محفوظًا.

GET/v2/me/collections

مجموعاتك مع عدد منشوراتها.

  • الحق read
  • مع ETag
  • منذ v2.19

مثال على الطلب

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 الخاص بها.

  • الحق write
  • منذ v2.19

عدد المجموعات التي يمكنك إنشاؤها يعتمد على اشتراكك.

المعاملات

الاسمالنوعالمعنى
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}

إعادة تسمية مجموعة.

  • الحق write
  • منذ v2.19

المعاملات

الاسمالنوعالمعنى
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}

حذف مجموعة.

  • الحق write
  • منذ v2.19

تبقى المنشورات التي فيها محفوظة.

المعاملات

الاسمالنوعالمعنى
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في الاستعلامintegerاختياريعدد الإدخالات في الصفحة: 20 افتراضيًا، 50 كحد أقصى.
cursorفي الاستعلامstringاختياريقيمة next من الإجابة السابقة. دونها من البداية.

مثال على الطلب

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/me/collections/6d5c4b3a-2918-4e7f-a1b2-c3d4e5f60718/posts?limit=20"

الرد

يردّ بصفحة من Post، بوصفها `items` و`next`.

مثال
{
  "items": [
    {
      "id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
      "text": "The bees are back in the garden 🐝 #garden",
      "kind": "poll",
      "author": {
        "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
        "handle": "mara",
        "name": "Mara 🌻",
        "verified": true,
        "accountKind": "person"
      },
      "community": {
        "id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
        "name": "Urban Gardening"
      },
      "media": [
        {
          "url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
          "kind": "image",
          "poster": null,
          "ai": "without"
        }
      ],
      "poll": {
        "options": [
          {
            "text": "Lavender",
            "votes": 12
          },
          {
            "text": "Sunflowers",
            "votes": 7
          },
          {
            "text": "Clover",
            "votes": 3
          }
        ],
        "total": 22,
        "multiple": false,
        "endsAt": null,
        "running": true,
        "resultsVisible": true,
        "myVotes": [
          0
        ]
      },
      "quotes": null,
      "continues": null,
      "counts": {
        "replies": 4,
        "likes": 31,
        "reposts": 2
      },
      "pinned": false,
      "giftDrop": {
        "item": "plan",
        "quantity": 3,
        "places": 10,
        "left": 4,
        "audience": "followers",
        "newAccounts": false,
        "status": "open",
        "claimed": true
      },
      "createdAt": 1758624000000
    }
  ],
  "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}

الحالات الممكنة: 200400401404429

POST/v2/me/collections/{id}/posts

وضع منشور في مجموعة أو إخراجه منها.

  • الحق write
  • منذ v2.19

وضع المنشور يحفظه أيضًا. المنشورات الظاهرة فقط.

المعاملات

الاسمالنوعالمعنى
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

ما تبقى في حصتك للإهداء.

  • الحق read
  • مع ETag
  • منذ v2.12

للشركاء الذين لديهم حصة فقط؛ والبقية يتلقون 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في الاستعلامintegerاختياريعدد الإدخالات في الصفحة: 20 افتراضيًا، 50 كحد أقصى.
cursorفي الاستعلامstringاختياريقيمة next من الإجابة السابقة. دونها من البداية.

مثال على الطلب

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/partner/gifts?limit=20"

الرد

يردّ بصفحة من QuotaGift، بوصفها `items` و`next`.

مثال
{
  "items": [
    {
      "item": "plan",
      "quantity": 3,
      "itemId": null,
      "recipient": {
        "handle": "jon",
        "name": "Jon"
      },
      "createdAt": 1758627600000
    }
  ],
  "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}

الحالات الممكنة: 200304401429

POST/v2/partner/gifts

إهداء أشهر اشتراك أو شرارات من حصتك إلى عضو.

  • الحق gifts
  • منذ v2.12

للشركاء الذين لديهم حصة فقط؛ والبقية يتلقون 403.

كما في التطبيق، يرى العضو ممن جاءت الهدية. 60 هدية في الساعة كحد أقصى.

المعاملات

الاسمالنوعالمعنى
handleفي المحتوىstringمطلوب@اسم العضو الذي تهديه، مع @ أو بدونها.
itemفي المحتوىstringمطلوبplan لأشهر الاشتراك، وsparks للشرارات، وshop لمظهر من رصيدك (منذ 2.13).plansparksshop
quantityفي المحتوىintegerاختياريالكمية: حتى 12 شهرًا أو 35 شرارة لكل هدية.
itemIdفي المحتوىstringاختياريلـshop: معرّف المظهر كما يسمّيه 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في الاستعلامintegerاختياريعدد الإدخالات في الصفحة: 20 افتراضيًا، 50 كحد أقصى.
cursorفي الاستعلامstringاختياريقيمة next من الإجابة السابقة. دونها من البداية.

مثال على الطلب

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/gift-drops?limit=20"

الرد

يردّ بصفحة من OwnGiftDrop، بوصفها `items` و`next`.

مثال
{
  "items": [
    {
      "item": "plan",
      "quantity": 3,
      "places": 10,
      "left": 4,
      "audience": "followers",
      "newAccounts": false,
      "status": "open",
      "claimed": false,
      "postId": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
      "funding": "quota",
      "createdAt": 1758624000000
    }
  ],
  "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}

الحالات الممكنة: 200304401429

POST/v2/gift-drops

نشر منشور فيه هدايا يحصل عليها الآخرون.

  • الحق gifts
  • منذ v2.12

مجانًا للمالك ولأعضاء الفريق الذين لديهم هذا الحق، وإلا فمن حصتك. وما يحتاج إلى دفع يُرفض بالرمز 422 – فالدفع لا يتم إلا في التطبيق.

الحصول على الهدايا لا يتم إلا في التطبيق، كي لا يستولي برنامج على كل الأماكن. وعدد الأماكن المتاحة يظهر في giftDrop الخاص بالمنشور.

المعاملات

الاسمالنوعالمعنى
textفي المحتوىstringاختيارينص المنشور أو الرد أو الرسالة.
communityفي المحتوىstringاختياريid المجموعة التي يذهب المنشور إلى قناة الخلاصة فيها؛ يجب أن تكون مشغّلة وأن يكون لديك الإذن. دونه يكون المنشور خارج أي مجموعة.
itemفي المحتوىstringمطلوبplan لأشهر الاشتراك، وsparks للشرارات.plansparks
quantityفي المحتوىintegerمطلوبما يحويه كل مكان: حتى 12 شهرًا أو 35 شرارة.
placesفي المحتوىintegerمطلوبلكم شخص، حتى 10000.
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

منشور، بالشكل نفسه في كل مكان.

الحقلالنوعالمعنى
idstringمعرّف المنشور.
textstringأو nullالنص كما كُتب (null لمنشور هو استطلاع فقط أو صور فقط).
kindstringما هو المنشور.
  • post — منشور بنص أو صور أو اقتباس.
  • poll — منشور باستطلاع.
authorProfileBriefمن كتبه.
communityCommunityBriefأو nullالمجموعة التي كُتب فيها (null خارج كل المجموعات).
mediaMedia[]صوره بالترتيب؛ فارغة إن لم توجد.
pollPollأو nullالاستطلاع (null إن لم يوجد).
quotesstringأو nullمعرّف المنشور الذي يقتبسه هذا المنشور.
continuesstringأو nullمعرّف المنشور الذي يتابعه هذا المنشور، كإضافة.
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
}

Media

صورة لمنشور أو رسالة.

الحقلالنوعالمعنى
urlstringعنوان الصورة أو الفيديو، نسبةً إلى هذا الخادم. حمّله والمفتاح في الترويسة.
kindstringimage أو video أو gif (منذ 2.10). الفيديو وGIF ملفات MP4.
  • image — صورة (WebP أو JPEG).
  • video — فيديو بصيغة MP4، مع صوت.
  • gif — GIF، كملف MP4 صامت يتكرر.
posterstringأو nullللفيديو وGIF عنوان صورة المعاينة، وإلا null (منذ 2.10).
aistringأو nullهل صُنعت الصورة بالذكاء الاصطناعي، كما ذكر من رفعها أو كما وسمها الفريق بعد بلاغ؛ null دون إشارة (منذ 2.11).
  • with — صُنع بالذكاء الاصطناعي.
  • without — صُنع دون ذكاء اصطناعي.
مثال
{
  "url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
  "kind": "image",
  "poster": null,
  "ai": "without"
}

Poll

استطلاع منشور.

الحقلالنوعالمعنى
optionsPollOption[]الإجابات بالترتيب. option في التصويت يُعد من 0.
totalintegerكل الأصوات معًا، موجود دائمًا.
multiplebooleanهل يمكن اختيار أكثر من إجابة.
endsAtintegerأو nullمتى ينتهي الاستطلاع (null إن كان بلا نهاية).
runningbooleanهل لا يزال التصويت ممكنًا.
resultsVisiblebooleanهل تُعرض الأصوات لكل إجابة (انظر votes).
myVotesinteger[]الإجابات التي اخترتها، العدّ من 0.
مثال
{
  "options": [
    {
      "text": "Lavender",
      "votes": 12
    },
    {
      "text": "Sunflowers",
      "votes": 7
    },
    {
      "text": "Clover",
      "votes": 3
    }
  ],
  "total": 22,
  "multiple": false,
  "endsAt": null,
  "running": true,
  "resultsVisible": true,
  "myVotes": [
    0
  ]
}

PollOption

إجابة واحدة في استطلاع.

الحقلالنوعالمعنى
textstringالإجابة.
votesintegerأو nullأصواتها (null ما دامت النتائج محجوبة).
مثال
{
  "text": "Lavender",
  "votes": 12
}

ProfileBrief

ملف شخصي كما يظهر داخل كائنات أخرى: كمؤلف أو في بحث.

الحقلالنوعالمعنى
idstringمعرّف الحساب: ما يتوقعه /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
}

CommunityBrief

المجموعة التي كُتب فيها المنشور.

الحقلالنوعالمعنى
idstringمعرّف المجموعة.
namestringأو nullاسمها.
مثال
{
  "id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
  "name": "Urban Gardening"
}

Community

مجموعة على هذا الخادم.

الحقلالنوعالمعنى
idstringمعرّف المجموعة.
namestringاسمها.
handlestringأو nullالاسم القصير لذكر المجموعة بـ@#. منذ 2.15.
descriptionstringأو nullالوصف (null إن لم يوجد).
tagsstring[]المواضيع التي تتناولها.
membersintegerكم عضوًا فيها.
joinPolicystringكيف يُدخل إليها.
  • open — يمكن لأي أحد الانضمام.
  • application — الانضمام يتطلب طلبًا تقبله المجموعة.
  • invite — بالدعوة فقط.
visibilitystringمن يراها. internal وhidden لأعضائها فقط (منذ 2.15).
  • open — مرئية للجميع.
  • internal — لا تظهر في الدليل، لكن يمكن الوصول إليها بعنوانها.
  • hidden — لأعضائها فقط.
feedChannelbooleanهل قناة الخلاصة فيها مشغّلة. منذ 2.15.
sparksintegerعدد الشرارات التي تملكها المجموعة الآن (منذ 2.19).
perksstring[]المزايا التي تدفع شراراتها ثمنها (منذ 2.19).
membershipMembershipأو nullما هو حسابك في المجموعة وما يحق له؛ null إن لم يكن عضوًا. منذ 2.15.
مثال
{
  "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
  }
}

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

قناة في مجموعة.

الحقلالنوعالمعنى
idstringالـid.
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

الفئة التي تقع تحتها القناة.

الحقلالنوعالمعنى
idstringالـid.
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

رسالة في قناة دردشة.

الحقلالنوعالمعنى
idstringالـid.
textstringأو nullالنص (null لرسالة من صور أو صوت فقط).
authorPersonمن كتبها.
mediaMedia[]صورها ورسائلها الصوتية؛ فارغ إن لم توجد.
replyTostringأو nullid الرسالة التي ترد عليها؛ 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

دور في مجموعة.

الحقلالنوعالمعنى
idstringالـid.
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

المجموعة خلف رابط الدعوة.

الحقلالنوعالمعنى
idstringالـid.
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

مدخل في سجل القيادة.

الحقلالنوعالمعنى
idstringالـid.
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

إشعار. يمكن للسطر الواحد أن يجمع عدة أحداث من النوع نفسه.

الحقلالنوعالمعنى
idstringمعرّف الإشعار.
kindstringما الذي حدث.
  • reply — ردّ عليك أحدهم.
  • like — أُعجب أحدهم بمنشورك.
  • reply_like — يصوّت أحدهم إيجابيًا على ردّك.
  • duel — أحدهم يتحدّاك في مبارزة المنشورات، أو لُعب تحدّيك.
  • reply_pick — يُبرز صاحب المنشور ردّك.
  • repost — أعاد أحدهم نشر منشورك.
  • follow — يتابعك أحدهم.
  • mention — أشار إليك أحدهم.
  • group_mention — أشار أحدهم إلى مجموعة تقودها؛ text هو اسمها.
  • channel_mention — أشار إليك أحد في قناة دردشة في إحدى مجموعاتك، بما في ذلك @everyone؛ العضو هو actor، والجملة تذكر القناة والمجموعة، لا الرسالة أبدًا.
  • message — أرسل إليك أحدهم رسالة.
  • scheduled — نُشر أحد منشوراتك المجدولة.
  • video — منشور لك كان ينتظر الفيديو نُشر أو عاد مسودة.
  • reminder — حان موعد تذكير عن منشور محفوظ.
  • report — ما آل إليه بلاغ أرسلته.
  • moderation — قرار بشأن حسابك: تحذير أو تقييد أو اعتراض.
  • team — عمل جديد للفريق (للمالكين والمديرين والمشرفين فقط).
  • reward — مكافأة الدعوة على وشك الانتهاء أو انتهت.
  • gift — هدية من الفريق: اشتراك، أو شرارات لك أو لمجموعة تقودها.
  • present — هدية من عضو: شرارات أو مدة اشتراك؛ العضو هو actor.
  • spark — تنتهي شرارات قريبًا، أو لم تعد شرارات مجموعة تقودها تكفي مزاياها.
  • loyalty — عن إيقاع الوفاء: يُحتسب أسبوع نشط أو ينقصه يوم، أو مكافأة جديدة أو توشك على الزوال.
  • impact — كيف كانت منشوراتك خلال اثنتي عشرة ساعة بعد يوم، في إشعار واحد.
  • discovery — دعوة إلى برنامج «مُكتشَف»، أو أن مكانًا فيه يبدأ أو ينتهي.
  • group_post — منشور جديد في مجموعة يرنّ جرسها لذلك.
  • group_moderation — أزالت قيادة مجموعة أحد منشوراتك، أو أزالتك من المجموعة.
  • group — أمر قام به عضو معك في مجموعة: دعاك، أو قبلك أو رفضك، أو جعلك مشرفًا مشاركًا، أو سلّمك المجموعة أو حلّها، أو تقدّم بطلب للانضمام إلى مجموعتك؛ العضو هو actor، واسم المجموعة يأتي في نهاية الجملة.
  • coauthor — دعاك أحدهم كمؤلف مشارك في منشور.
  • partner — تذكير من برنامج الشركاء، أو انتهاء شارة الشريك.
  • news — مقالة جديدة في منطقة تتابعها.
  • pick — أحد منشوراتك مرشّح لمنشور الأسبوع أو منشور العام، أو فاز.
  • advent — باب جديد من تقويم زمن المجيء مفتوح، أو فُتح باب، أو لا يزال باب اليوم ينتظر.
  • team_message — رسالة كتبها فريق tellmelo لأعضاء مختارين.
  • challenge — بدأ تحدٍّ جديد للأسبوع.
  • nudge — مرة واحدة: منشور لم يردّ عليه أحد بعد، أو التحدي الجاري.
  • signin — يسأل كمبيوتر إن كنت تسجّل الدخول عليه الآن.
textstringأو nullللبلاغات والإشراف فقط: النص المتعلق، وإلا null.
actorActorمن فعل ذلك.
postIdstringأو nullالمنشور المعني (null إن لم يتعلق بأي منشور).
readbooleanهل عُلّم كمقروء.
moreintegerكم حدثًا آخر يمثله هذا السطر، فوق الحدث المذكور.
createdAtintegerمتى حدث أول مرة.
updatedAtintegerمتى جمع حدثًا آخر آخر مرة. القائمة مرتّبة بحسبه.
مثال
{
  "id": "3f2e1d0c-9b8a-4765-8432-10fedcba9876",
  "kind": "like",
  "text": null,
  "actor": {
    "handle": "jon",
    "name": "Jon"
  },
  "postId": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
  "read": false,
  "more": 2,
  "createdAt": 1758624300000,
  "updatedAt": 1758624900000
}

Actor

من أطلق الإشعار.

الحقلالنوعالمعنى
handlestringالاسم المختصر.
namestringالاسم الظاهر.
مثال
{
  "handle": "jon",
  "name": "Jon"
}

Conversation

سطر واحد من صندوق رسائلك.

الحقلالنوعالمعنى
withstringمعرّف الحساب الآخر: ما يتوقعه /conversations/{with}/messages.
handlestringاسمه المختصر.
namestringاسمه الظاهر.
excerptstringأو nullبداية آخر رسالة (null إن لم يكن فيها نص).
truncatedbooleanهل قُصّ المقتطف.
fromMebooleanهل آخر رسالة منك.
lastMessageIdstringمعرّف آخر رسالة.
unreadintegerكم من رسائله لم تقرأها بعد.
updatedAtintegerمتى كُتبت آخر رسالة.
مثال
{
  "with": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
  "handle": "jon",
  "name": "Jon",
  "excerpt": "See you on Saturday at the market!",
  "truncated": false,
  "fromMe": true,
  "lastMessageId": "7c6b5a49-3827-4165-9f0e-d1c2b3a49586",
  "unread": 0,
  "updatedAt": 1758624060000
}

Message

رسالة في محادثة.

الحقلالنوعالمعنى
idstringمعرّف الرسالة.
textstringأو nullالنص (null لرسالة هي صور فقط).
fromstringمعرّف الحساب الذي كتبها.
tostringمعرّف الحساب الذي كُتبت إليه.
readbooleanهل قرأها المستلم.
mediaMedia[]صورها؛ فارغة إن لم توجد.
replyTostringأو nullid الرسالة التي تجيب عنها هذه الرسالة (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

منشور لك لم يُنشر بعد.

الحقلالنوعالمعنى
idstringمعرّف المنشور.
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).

الحقلالنوعالمعنى
idstringمعرّف المظهر؛ عند الإهداء مرّره في 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
}

MediaItem

GIF أو فيديو من مكتبة الوسائط (منذ 2.14).

الحقلالنوعالمعنى
idstringالمعرّف؛ لـ media عند النشر.
kindstringGIF أو فيديو.
  • gif — GIF على شكل MP4 صامت يتكرر.
  • video — فيديو بصيغة MP4، مع صوت.
namestringالاسم.
keywordsstringالكلمات المفتاحية، بأحرف صغيرة.
widthintegerالعرض بالبكسل.
heightintegerالارتفاع بالبكسل.
secondsintegerالمدة بالثواني؛ في GIF تكون 0.
urlstringملف MP4، نسبةً إلى هذا الخادم. حمّله بالمفتاح في الترويسة.
posterstringصورة المعاينة، بالمفتاح أيضًا.
uploaderActorمن رفعه.
minebooleanهل هو خاص بك.
sharedbooleanهل هو مشترك مع الجميع على tellmelo.
anywherebooleanهل يُسمح بظهوره على مواقع أخرى أيضًا.
embedEmbedأو nullالعناوين للمواقع الأخرى؛ null ما دام غير مسموح هناك.
مثال
{
  "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>"
  }
}

Embed

العناوين للمواقع الأخرى. تعمل بدون مفتاح.

الحقلالنوعالمعنى
pagestringالمشغّل لـ <iframe>.
filestringملف MP4 لمشغّلك الخاص.
posterstringصورة المعاينة.
codestringرمز التضمين الجاهز.
مثال
{
  "page": "https://tellmelo.com/media-embed/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
  "file": "https://tellmelo.com/media-embed/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918/file",
  "poster": "https://tellmelo.com/media-embed/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918/poster",
  "code": "<iframe src=\"https://tellmelo.com/media-embed/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918\" width=\"480\" height=\"300\" title=\"Happy bees\" style=\"border:0;max-width:100%\" loading=\"lazy\" allowfullscreen></iframe>"
}

UploadStarted

عملية رفع بدأت.

الحقلالنوعالمعنى
uploadstringمعرّف عملية الرفع هذه.
pieceintegerأقصى حجم للجزء، بالبايت.
مثال
{
  "upload": "e7c1a2b3-4d5e-4f60-8a9b-0c1d2e3f4a5b",
  "piece": 4194304
}

UploadPiece

جزء وصل.

الحقلالنوعالمعنى
receivedintegerعدد البايتات التي وصلت.
itemMediaItemأو nullبعد الجزء الأخير، الـ GIF أو الفيديو الجديد، وإلا null.
مثال
{
  "received": 4194304,
  "item": null
}

Created

رد عملية كتابة أنشأت شيئًا.

الحقلالنوعالمعنى
idstringمعرّف ما أُنشئ.
scheduledForintegerأو nullمتى يظهر، إن كان النشر مجدولًا (وإلا null).
deleteAtintegerأو nullمتى يحذف نفسه، إن ضُبط ذلك (وإلا null).
مثال
{
  "id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
  "scheduledFor": null,
  "deleteAt": null
}

DropCreated

الرد عند إنشاء منشور فيه هدايا.

الحقلالنوعالمعنى
idstringمعرّف المنشور الجديد.
fundingstringكيف دُفع ثمن الهدايا.
  • free — مجانًا.
  • quota — من الحصة.
مثال
{
  "id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
  "funding": "quota"
}

Made

ما أُنشئ أو تغيّر للتو.

الحقلالنوعالمعنى
idstringالـid؛ ولرابط الدعوة رمزه.
مثال
{
  "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.json

صور GIF ومقاطع الفيديو على مواقع أخرى

ما يشاركه العضو ويسمح به على مواقع أخرى أيضًا يمكن لأي موقع عرضه: البحث مع anywhere=true يجده، وembed الخاص به يحتوي على العناوين. إذا سحبه العضو، يختفي من هناك خلال دقائق.

الرفع على أجزاء

ابدأ أولًا، ثم أرسل الملف على أجزاء. قسّم الملف الأكبر إلى أجزاء من piece بايت، مع offset عند موضع كل جزء. بعد الجزء الأخير يصلك الـ GIF أو الفيديو الجاهز.

curl -X POST -H "Authorization: Bearer tm_key_…" \
  -H "Content-Type: application/json" \
  -d '{"kind":"gif","size":2400000,"name":"Happy bees","shared":true,"anywhere":true}' \
  "https://api.tellmelo.com/v2/media/uploads"
→ { "upload": "e7c1a2b3-4d5e-4f60-8a9b-0c1d2e3f4a5b", "piece": 4194304 }

curl -X PUT -H "Authorization: Bearer tm_key_…" \
  -H "Content-Type: application/octet-stream" \
  --data-binary @bees.gif \
  "https://api.tellmelo.com/v2/media/uploads/e7c1a2b3-4d5e-4f60-8a9b-0c1d2e3f4a5b?offset=0"
→ { "received": 2400000, "item": { "id": "…", "embed": { … } } }

التضمين

يعرض المشغّل الـ GIF بشكل متكرر أو الفيديو مع أدوات التحكم، وتحته الاسم ومن شاركه. ضع الرمز من embed.code في الصفحة:

<iframe src="https://tellmelo.com/media-embed/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918" width="480" height="300" title="Happy bees" style="border:0;max-width:100%" loading="lazy" allowfullscreen></iframe>

المنتديات والبرامج التي تدعم oEmbed تجلب الرمز بنفسها عندما تعطيها عنوان المشغّل:

https://tellmelo.com/api/oembed?url=https%3A%2F%2Ftellmelo.com%2Fmedia-embed%2Fb2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918

مكان المفتاح على خادمك، وليس أبدًا في كود صفحة ويب. ابحث وارفع عبر خادمك؛ العناوين في embed لا تحتاج إلى مفتاح.

أداة اختيار GIF لموقعك

باستخدام مفتاح موقع (قسم المطورين ← أداة اختيار GIF لموقعك) يحصل موقعك على بحث جاهز: سطران في الصفحة، ونقرة على الزر تفتحه. المفتاح عام ولا يعمل إلا على العناوين التي تدخلها له. لا تعرض أداة الاختيار إلا ما سمح به الأعضاء على مواقع أخرى.

<script src="https://tellmelo.com/picker.js" data-key="tmsk_…" defer></script>
<button type="button" data-tellmelo-picker>GIF</button>

عند الاختيار، يُطلق الزر الحدث tellmelo:pick مع العنصر المختار: code لتضمينه، وfile وposter وname وauthor. ومع data-target="#field" يُدرج code مباشرة في حقل نصي، ومع data-kind="video" يبحث عن مقاطع الفيديو. إذا ضمّنت الملف بنفسك، فاعرض اسم الشخص الذي شاركه.

document.addEventListener('tellmelo:pick', (event) => {
  const { code, file, name, author } = event.detail;
});

تسجيل الدخول عبر tellmelo

تتيح مواقع أخرى للأعضاء تسجيل الدخول بحساباتهم في tellmelo عبر OpenID Connect (رمز التفويض مع PKCE). ولا يتلقى الموقع إلا اسم المستخدم والبريد الإلكتروني المؤكَّد ومعرّفًا خاصًا به لكل عضو (sub).

تطلب تطبيقًا ضمن «قسم المطورين → تسجيل الدخول عبر tellmelo». يراجع الفريق كل تطبيق؛ وبعدها ترى هناك معرّف العميل، وتنشئ للتطبيقات التي لها خادم سرّ العميل الذي يُعرض مرة واحدة.

كل ما تحتاجه المكتبة موجود في مستند الاكتشاف:

https://tellmelo.com/.well-known/openid-configuration
  1. أرسل العضو إلى /oauth/authorize مع response_type=code وclient_id وredirect_uri (كما سُجّل تمامًا) وscope=openid profile email وstate وnonce وcode_challenge مع code_challenge_method=S256.
  2. استبدل الرمز خلال دقيقة لدى /oauth/token: grant_type=authorization_code وcode وredirect_uri وcode_verifier؛ وترسل التطبيقات التي لها خادم السرّ أيضًا، بمصادقة Basic أو في النموذج.
  3. يحتوي رمز الهوية (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، عبر هذه العناوين ومع اسم الشخص الذي شاركها. إذا لم يعد شيء متاحًا، توقّف عن عرضه. لا تنسخ الملفات إلى مجموعة خاصة بك.

بيانات الناشرالخصوصيةشروط الاستخدامالحالةالتطبيقات