المحتويات نظرة عامة يتيح v2 لبرامجك الخاصة التحدث إلى tellmelo: مفتاح لكل طلب، وJSON في الرد، وكل القوائم تُقسَّم إلى صفحات بالطريقة نفسها. تسري القواعد نفسها كما في التطبيق.
كل مسار يبدأ بـ/api/v2 على عنوان هذا الخادم. الطلبات والردود بصيغة JSON بترميز UTF-8. أسماء الحقول والرموز والقيم إنجليزية وتبقى إنجليزية. يعمل المفتاح بصفته حسابك: ما لا تراه في التطبيق لا يستطيع قراءته أيضًا. https://tellmelo.com/api/v2بداية سريعة أنشئ مفتاحًا في «الإعدادات ← التطبيق والبيانات ← API» وانسخه. يُعرض مرة واحدة فقط. استدعِ الجذر به. يُظهر الرد الإصدار وحقوق المفتاح والطلبات المتبقية في هذه الدقيقة. كل المسارات تعمل بالطريقة نفسها: المفتاح في الترويسة، وJSON في الرد، وitems وnext للقوائم. curl -H "Authorization: Bearer tm_key_…" https://tellmelo.com/api/v2{
"name": "tellmelo",
"version": "2.10",
"scope": "read write",
"rateLimit": {
"limit": 120,
"remaining": 117
},
"docs": "/legal/api",
"spec": "/api/v2/openapi.json"
}التالي: /me لملفك الشخصي، و/posts للمنشورات العامة، و/feed لخلاصتك.
جرّبه اختر مهمة، واملأ الحقول، وانسخ الطلب أو أرسله من هنا. الكتابة تطلب التأكيد أولًا. تقرأ الشيفرة المفتاح من TELLMELO_KEY.
المهمة GET / GET /posts GET /posts/{id} POST /posts DELETE /posts/{id} GET /posts/{id}/replies POST /posts/{id}/replies POST /posts/{id}/vote GET /profiles/{handle} GET /profiles/{handle}/posts GET /communities GET /communities/{id} GET /communities/{id}/posts GET /tags GET /search GET /emojis GET /me GET /feed GET /notifications POST /notifications/read GET /conversations GET /conversations/{with}/messages POST /conversations/{with}/messages POST /conversations/{with}/read POST /relations read إصدار API واسم هذا الخادم.
curl \
-H "Authorization: Bearer $TELLMELO_KEY" \
"https://tellmelo.com/api/v2"مفتاحك مفتاح واحد لكل حساب. يبدأ بـtm_key_ ويُعرض مرة واحدة فقط. فقدته؟ أنشئ مفتاحًا جديدًا؛ يتوقف القديم عن العمل.
تنشئه في «الإعدادات ← التطبيق والبيانات ← API». ويُرسل في ترويسة الطلب:
curl -H "Authorization: Bearer tm_key_…" \
https://tellmelo.com/api/v2/postsأو، إن كان ذلك أسهل، في ترويسة خاصة به:
curl -H "X-Tellmelo-Key: tm_key_…" https://tellmelo.com/api/v2ليس في عنوان URL: سينتهي به الأمر في السجلات وسجل المتصفح.
المفتاح نفسه يحمّل الصور: كل url يشير إلى /api/media؛ أرسل المفتاح في الترويسة هناك أيضًا.
curl -H "Authorization: Bearer tm_key_…" \
-o picture.webp "https://tellmelo.com/api/media?id=…"ما يمكن للمفتاح فعله للمفتاح أحد حقّين، وكل مسار أدناه يذكر الحق الذي يحتاجه:
read : القراءة. المنشورات العامة والملفات الشخصية والمجموعات والوسوم، إضافة إلى خلاصتك وإشعاراتك ورسائلك.write : الفعل. النشر والرد والتصويت وإرسال الرسائل والمتابعة والانضمام والحظر وتعليم الإشعارات كمقروءة.ما لا يستطيعه أي مفتاح لا يصل أي مفتاح إلى كلمة المرور أو البريد الإلكتروني أو نوع الحساب أو المكان أو الدور أو الحذف أو الجلسات أو أجهزة الإشعارات أو المفاتيح الأخرى، ولا إلى الإدارة أو قيادة المجموعات. ما تحميه كلمة المرور لا يستطيعه أي مفتاح.
الصفحات كل قائمة تقبل limit وcursor وتردّ بـitems وnext. أعد next بوصفه cursor لتحصل على الصفحة التالية؛ وعندما يكون next فارغًا تكون قد انتهيت. المؤشر معتم: لا تحلّله ولا تنشئه بنفسك.
{ "items": [ … ], "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx" }
curl -H "Authorization: Bearer tm_key_…" \
"https://tellmelo.com/api/v2/posts?limit=20&cursor=MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"دون limit تحصل على 20 إدخالًا، و50 كحد أقصى. بعض القوائم لا تُقسَّم إلى صفحات؛ قيمة next فيها دائمًا null.
الجديد فقط كل رد يحمل ETag. أعِده في المرة القادمة بوصفه If-None-Match: إن لم يتغير شيء تحصل على 304 دون محتوى.
ETag: W/"3Qk1mJ7fQe2Yb0sVxT9aL4pNdRc"
If-None-Match: W/"3Qk1mJ7fQe2Yb0sVxT9aL4pNdRc" → 304الاستثناءات: ليس لـ/feed قيمة ETag لأن ترتيبه يتغير باستمرار، وعمليات الكتابة لا تردّ أبدًا بـ304.
الحدود يمكن للمفتاح إجراء 120 طلبًا في الدقيقة، و600 مع اشتراك «منظمة»، ما لم تحدد الإدارة غير ذلك. فوق ذلك تحصل على 429 ولا يُنفَّذ شيء. انتظر دقيقة وأرسل الطلب مجددًا.
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 117
X-RateLimit-Reset: 1758624060تُحتسب عمليات الكتابة أيضًا ضمن حدود التطبيق، مثل عدد المنشورات في بضع دقائق. وهذا أيضًا يردّ بـ429 مع rate_limited.
عندما لا ينجح شيء تأتي الأخطاء بصيغة JSON: رمز إنجليزي ثابت في error لبرنامجك وجملة في message للبشر، مع رمز الحالة المناسب. قارن الرمز فقط؛ فالجملة قد تتغير.
{ "error": "rate_limited",
"message": "Too many requests. Try again in a minute.",
"limit": 120 }بعض الأخطاء تحمل حقلًا إضافيًا: docs مع 401 بسبب غياب المفتاح، وlimit مع 429.
الحالة الرمز المعنى 400bad_requestلا يمكن قراءة الطلب، أو ينقص حقل مطلوب، أو القيمة غير مسموحة. 401key_missingلا يوجد مفتاح في الترويسة. 401key_invalidالمفتاح غير صالح: خطأ في الكتابة، أو استُبدل، أو الحساب محظور. 401unauthorizedرُفض بوصفه غير مسجّل الدخول، لسبب غير المفتاح. 403scope_missingينقص المفتاح الحق المطلوب، وغالبًا write. 403account_data_lockedبيانات الحساب مثل كلمة المرور أو البريد الإلكتروني أو الحذف خارج نطاق المفاتيح. 403forbiddenلا يجوز لحسابك فعل ذلك، مثلًا بسبب حق مسحوب أو حظر. 404unknown_pathلا يوجد مسار كهذا، أو ليس بهذه الطريقة. 404not_foundغير موجود، أو لا يجوز لك رؤيته. 409conflictيتعارض مع ما هو موجود بالفعل، مثل اسم مأخوذ. 413too_largeكبير جدًا على هذا الخادم. 422unprocessableمقروء، لكنه غير ممكن بهذا الشكل. 429rate_limitedطلبات كثيرة جدًا. لم يحدث شيء؛ انتظر وحاول مجددًا. 500internal_errorحدث خطأ ما على الخادم.
الإصدارات الإصدار موجود في المسار. ما دام مكتوبًا v2 تبقى المسارات والحقول كما هي؛ تُضاف أشياء جديدة فقط.
الإضافات ترفع الرقم الثاني. كل مسار يذكر منذ متى يوجد.
انتهى /api/v1/: المسارات القديمة تردّ بـ410 وتذكر الطريق الجديد في المحتوى.
نقاط النهاية كل المسارات بنظرة واحدة، ثم كل واحد مع مثال.
المدخل الطلب الأول لكل برنامج: هل يعمل المفتاح، وماذا يجوز له أن يفعل؟
GET /api/v2إصدار API واسم هذا الخادم.
دون شرطة مائلة في النهاية: /api/v2/ يُعيد التوجيه إلى /api/v2 بـ308، وليس كل برنامج يتبع ذلك.
مثال على الطلب curl \
-H "Authorization: Bearer tm_key_…" \
"https://tellmelo.com/api/v2"الرد يردّ بـService واحد.
مثال {
"name": "tellmelo",
"version": "2.10",
"scope": "read write",
"rateLimit": {
"limit": 120,
"remaining": 117
},
"docs": "/legal/api",
"spec": "/api/v2/openapi.json"
}الحالات الممكنة: 200304401429
المنشورات قراءة المنشورات العامة ونشر منشوراتك وإزالتها مجددًا.
GET /api/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://tellmelo.com/api/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
}
],
"poll": {
"options": [
{
"text": "Lavender",
"votes": 12
},
{
"text": "Sunflowers",
"votes": 7
},
{
"text": "Clover",
"votes": 3
}
],
"total": 22,
"multiple": false,
"endsAt": 1758710400000,
"running": true,
"resultsVisible": true,
"myVotes": [
0
]
},
"quotes": null,
"continues": null,
"counts": {
"replies": 4,
"likes": 31,
"reposts": 2
},
"pinned": false,
"createdAt": 1758624000000
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}الحالات الممكنة: 200304401429
GET /api/v2/posts/{id}منشور واحد، بحسب id.
في المسارات العامة تكون counts.likes وcounts.reposts دائمًا 0 وpinned هي false.
منشورات المجموعات ليست هنا بل في /communities/{id}/posts.
المعاملات الاسم النوع المعنى idفي المسار stringمطلوب id منشور.
مثال على الطلب curl \
-H "Authorization: Bearer tm_key_…" \
"https://tellmelo.com/api/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
}
],
"poll": {
"options": [
{
"text": "Lavender",
"votes": 12
},
{
"text": "Sunflowers",
"votes": 7
},
{
"text": "Clover",
"votes": 3
}
],
"total": 22,
"multiple": false,
"endsAt": 1758710400000,
"running": true,
"resultsVisible": true,
"myVotes": [
0
]
},
"quotes": null,
"continues": null,
"counts": {
"replies": 4,
"likes": 31,
"reposts": 2
},
"pinned": false,
"createdAt": 1758624000000
}الحالات الممكنة: 200304400401404429
POST /api/v2/postsنشر منشور.
يحتاج المنشور إلى نص أو استطلاع. الطول وخيارات الاستطلاع والوتيرة يحددها الخادم؛ وما زاد على ذلك يعطيك 400 أو 429.
لا يمكن إرفاق الصور عبر API بعد، فقط في التطبيق.
المعاملات الاسم النوع المعنى textفي المحتوى stringاختياري نص المنشور أو الرد أو الرسالة. communityفي المحتوى stringاختياري id المجموعة التي يدخلها المنشور. دونه خارج كل المجموعات.quotesفي المحتوى stringاختياري id المنشور الذي يقتبسه هذا المنشور.pollفي المحتوى 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://tellmelo.com/api/v2/posts"الرد يردّ بـCreated واحد.
مثال {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"scheduledFor": null,
"deleteAt": null
}الحالات الممكنة: 200400401403429
DELETE /api/v2/posts/{id}إزالة أحد منشوراتك.
المعاملات الاسم النوع المعنى idفي المسار stringمطلوب id منشور.
مثال على الطلب curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://tellmelo.com/api/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1"الرد يردّ بـOk واحد.
مثال {
"ok": true
}الحالات الممكنة: 200400401403404429
الردود الردود تحت منشور، كقائمة مع parentId.
GET /api/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://tellmelo.com/api/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,
"createdAt": 1758624600000,
"postId": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"parentId": null
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}الحالات الممكنة: 200304400401404429
POST /api/v2/posts/{id}/repliesالرد على منشور.
في الوضع البطيء، رد واحد لكل شخص كل 10 دقائق، وإلا 429. المؤلف والحسابات التي يتابعها مستثنون.
المعاملات الاسم النوع المعنى idفي المسار stringمطلوب id منشور.textفي المحتوى stringمطلوب نص المنشور أو الرد أو الرسالة. parentIdفي المحتوى stringاختياري id الرد الذي يجيب عنه هذا الرد. دونه مباشرة إلى المنشور.
مثال على الطلب curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"text":"Same here, the lavender is full of them."}' \
"https://tellmelo.com/api/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/replies"الرد يردّ بـCreated واحد.
مثال {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"scheduledFor": null,
"deleteAt": null
}الحالات الممكنة: 200400401403404429
الاستطلاعات الاستطلاع منشور قيمة poll فيه مضبوطة. وللتصويت مسار خاص.
POST /api/v2/posts/{id}/voteالمشاركة في استطلاع.
الأصوات لكل خيار تكون null حتى تصوّت أو ينتهي الاستطلاع. total موجود دائمًا.
المعاملات الاسم النوع المعنى idفي المسار stringمطلوب id منشور.optionفي المحتوى integerمطلوب أي خيار، العدّ من 0. في الاختيار المتعدد استدعِ مرة لكل خيار. retractفي المحتوى booleanاختياري true يسحب الصوت.
مثال على الطلب curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"option":0}' \
"https://tellmelo.com/api/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/vote"الرد يردّ بـOk واحد.
مثال {
"ok": true
}الحالات الممكنة: 200400401403404429
الملفات الشخصية الملفات الشخصية العامة بحسب اسمها المختصر، وما نشرته.
GET /api/v2/profiles/{handle}ملف شخصي، بحسب اسمه المختصر.
المعاملات الاسم النوع المعنى handleفي المسار stringمطلوب الاسم المختصر لملف شخصي.
مثال على الطلب curl \
-H "Authorization: Bearer tm_key_…" \
"https://tellmelo.com/api/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 /api/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://tellmelo.com/api/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
}
],
"poll": {
"options": [
{
"text": "Lavender",
"votes": 12
},
{
"text": "Sunflowers",
"votes": 7
},
{
"text": "Clover",
"votes": 3
}
],
"total": 22,
"multiple": false,
"endsAt": 1758710400000,
"running": true,
"resultsVisible": true,
"myVotes": [
0
]
},
"quotes": null,
"continues": null,
"counts": {
"replies": 4,
"likes": 31,
"reposts": 2
},
"pinned": false,
"createdAt": 1758624000000
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}الحالات الممكنة: 200304400401404429
المجموعات المجموعات المفتوحة ومنشوراتها.
GET /api/v2/communitiesالمجموعات المفتوحة على هذا الخادم.
مرتّبة حسب عدد الأعضاء وغير مقسّمة إلى صفحات؛ next دائمًا null.
المعاملات الاسم النوع المعنى limitفي الاستعلام integerاختياري عدد الإدخالات في الصفحة: 20 افتراضيًا، 50 كحد أقصى.
مثال على الطلب curl \
-H "Authorization: Bearer tm_key_…" \
"https://tellmelo.com/api/v2/communities?limit=20"الرد يردّ بصفحة من Community ، بوصفها `items` و`next`.
مثال {
"items": [
{
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening",
"description": "Balconies, allotments, rooftops: whatever grows.",
"tags": [
"garden",
"bees"
],
"members": 312,
"joinPolicy": "open",
"visibility": "open"
}
],
"next": null
}الحالات الممكنة: 200304401429
GET /api/v2/communities/{id}مجموعة واحدة، بحسب id.
المعاملات الاسم النوع المعنى idفي المسار stringمطلوب id مجموعة.
مثال على الطلب curl \
-H "Authorization: Bearer tm_key_…" \
"https://tellmelo.com/api/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60"الرد يردّ بـCommunity واحد.
مثال {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening",
"description": "Balconies, allotments, rooftops: whatever grows.",
"tags": [
"garden",
"bees"
],
"members": 312,
"joinPolicy": "open",
"visibility": "open"
}الحالات الممكنة: 200304400401404429
GET /api/v2/communities/{id}/postsالمنشورات العامة لمجموعة واحدة، الأحدث أولًا.
الحق read مقسَّم إلى صفحات مع ETag منذ v2.0 في المسارات العامة تكون counts.likes وcounts.reposts دائمًا 0 وpinned هي false.
المعاملات الاسم النوع المعنى idفي المسار stringمطلوب id مجموعة.limitفي الاستعلام integerاختياري عدد الإدخالات في الصفحة: 20 افتراضيًا، 50 كحد أقصى. cursorفي الاستعلام stringاختياري قيمة next من الإجابة السابقة. دونها من البداية.
مثال على الطلب curl \
-H "Authorization: Bearer tm_key_…" \
"https://tellmelo.com/api/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
}
],
"poll": {
"options": [
{
"text": "Lavender",
"votes": 12
},
{
"text": "Sunflowers",
"votes": 7
},
{
"text": "Clover",
"votes": 3
}
],
"total": 22,
"multiple": false,
"endsAt": 1758710400000,
"running": true,
"resultsVisible": true,
"myVotes": [
0
]
},
"quotes": null,
"continues": null,
"counts": {
"replies": 4,
"likes": 31,
"reposts": 2
},
"pinned": false,
"createdAt": 1758624000000
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}الحالات الممكنة: 200304400401404429
استكشاف الرائج والبحث والرموز التعبيرية الخاصة بالخادم.
GET /api/v2/tagsالوسوم الرائجة حاليًا.
10 وسوم رائجة كحد أقصى بحسب النقاط: كل استخدام يُحتسب 1 وينخفض إلى النصف كل 3 أيام، والحساب الواحد يُحتسب 3 كحد أقصى في اليوم. posts هي النقاط مقرّبة. limit يقصّر القائمة فقط. الوسوم التي يبرزها الفريق قد تكون أعلى.
المعاملات الاسم النوع المعنى limitفي الاستعلام integerاختياري عدد الإدخالات في الصفحة: 20 افتراضيًا، 50 كحد أقصى.
مثال على الطلب curl \
-H "Authorization: Bearer tm_key_…" \
"https://tellmelo.com/api/v2/tags?limit=10"الرد يردّ بصفحة من Tag ، بوصفها `items` و`next`.
مثال {
"items": [
{
"tag": "garden",
"posts": 58
}
],
"next": null
}الحالات الممكنة: 200304401429
GET /api/v2/searchبحث في المنشورات والأسماء والأسماء المختصرة والوسوم.
يبحث في المحتوى العام فقط: المنشورات خارج المجموعات والملفات الشخصية والوسوم. يسري limit على كل نوع.
المعاملات الاسم النوع المعنى qفي الاستعلام stringمطلوب الكلمات المبحوث عنها. typeفي الاستعلام stringاختياري أي نوع من النتائج. دونه كل الأنواع.allpostsprofilestags limitفي الاستعلام integerاختياري عدد الإدخالات في الصفحة: 20 افتراضيًا، 50 كحد أقصى.
مثال على الطلب curl \
-H "Authorization: Bearer tm_key_…" \
"https://tellmelo.com/api/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
}
],
"poll": {
"options": [
{
"text": "Lavender",
"votes": 12
},
{
"text": "Sunflowers",
"votes": 7
},
{
"text": "Clover",
"votes": 3
}
],
"total": 22,
"multiple": false,
"endsAt": 1758710400000,
"running": true,
"resultsVisible": true,
"myVotes": [
0
]
},
"quotes": null,
"continues": null,
"counts": {
"replies": 4,
"likes": 31,
"reposts": 2
},
"pinned": false,
"createdAt": 1758624000000
}
],
"profiles": [
{
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
}
],
"tags": [
{
"tag": "garden",
"posts": 58
}
]
}الحالات الممكنة: 200304400401429
GET /api/v2/emojisالرموز التعبيرية الخاصة بالخادم، مع عناوين صورها.
يظهر الرمز التعبيري في النصوص بصيغة :name:. استبدله بالصورة من هذه القائمة؛ الأسماء غير المعروفة تبقى نصًا.
مثال على الطلب curl \
-H "Authorization: Bearer tm_key_…" \
"https://tellmelo.com/api/v2/emojis"الرد يردّ بصفحة من Emoji ، بوصفها `items` و`next`.
مثال {
"items": [
{
"name": "tellmelo",
"url": "/api/media?id=e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b"
}
],
"next": null
}الحالات الممكنة: 200304401429
حسابك ملفك الشخصي وخلاصتك.
GET /api/v2/meملفك الشخصي، مع id الذي تتوقعه المسارات الأخرى.
مثال على الطلب curl \
-H "Authorization: Bearer tm_key_…" \
"https://tellmelo.com/api/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 /api/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://tellmelo.com/api/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
}
],
"poll": {
"options": [
{
"text": "Lavender",
"votes": 12
},
{
"text": "Sunflowers",
"votes": 7
},
{
"text": "Clover",
"votes": 3
}
],
"total": 22,
"multiple": false,
"endsAt": 1758710400000,
"running": true,
"resultsVisible": true,
"myVotes": [
0
]
},
"quotes": null,
"continues": null,
"counts": {
"replies": 4,
"likes": 31,
"reposts": 2
},
"pinned": false,
"createdAt": 1758624000000
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}الحالات الممكنة: 200400401429
الإشعارات ما حدث حول حسابك، صفحة بعد صفحة.
GET /api/v2/notificationsإشعاراتك، الأحدث أولًا.
الحق read مقسَّم إلى صفحات مع ETag منذ v2.0 القراءة لا تعلّم شيئًا كمقروء؛ POST /notifications/read يفعل ذلك. الأحداث من النوع نفسه على المنشور نفسه تتشارك سطرًا واحدًا؛ وmore يذكر عددها.
المعاملات الاسم النوع المعنى limitفي الاستعلام integerاختياري عدد الإدخالات في الصفحة: 20 افتراضيًا، 50 كحد أقصى. cursorفي الاستعلام stringاختياري قيمة next من الإجابة السابقة. دونها من البداية.
مثال على الطلب curl \
-H "Authorization: Bearer tm_key_…" \
"https://tellmelo.com/api/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 /api/v2/notifications/readتعليم إشعاراتك كمقروءة.
مثال على الطلب curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://tellmelo.com/api/v2/notifications/read"الرد يردّ بـOk واحد.
مثال {
"ok": true
}الحالات الممكنة: 200401403429
الرسائل صندوق رسائلك ومحادثاتك. تُسمّى المحادثة باسم الحساب الآخر.
GET /api/v2/conversationsصندوق رسائلك: سطر لكل محادثة، الأحدث أولًا.
الحق read مقسَّم إلى صفحات مع ETag منذ v2.0 المعاملات الاسم النوع المعنى limitفي الاستعلام integerاختياري عدد الإدخالات في الصفحة: 20 افتراضيًا، 50 كحد أقصى. cursorفي الاستعلام stringاختياري قيمة next من الإجابة السابقة. دونها من البداية.
مثال على الطلب curl \
-H "Authorization: Bearer tm_key_…" \
"https://tellmelo.com/api/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 /api/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://tellmelo.com/api/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 /api/v2/conversations/{with}/messagesإرسال رسالة في محادثة.
تسري قواعد التطبيق: من حظرك لا يمكن الوصول إليه، وإعدادات الطرف الآخر تُحتسب.
لا يمكن إرفاق الصور عبر 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://tellmelo.com/api/v2/conversations/a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05/messages"الرد يردّ بـOk واحد.
مثال {
"ok": true
}الحالات الممكنة: 200400401403404429
POST /api/v2/conversations/{with}/readتعليم كل رسائل محادثة كمقروءة.
المعاملات الاسم النوع المعنى withفي المسار stringمطلوب id الحساب الآخر. ليس للمحادثة id خاص بها.
مثال على الطلب curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://tellmelo.com/api/v2/conversations/a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05/read"الرد يردّ بـOk واحد.
مثال {
"ok": true
}الحالات الممكنة: 200400401403404429
العلاقات إعجاب، حفظ، إعادة نشر، متابعة، انضمام، حظر: مسار واحد، يُضبط ويُزال بـactive.
POST /api/v2/relationsإعجاب، حفظ، إعادة نشر، متابعة، انضمام، حظر، كتم، بحسب kind.
target منشور مع like وsave وrepost، ومجموعة مع join، وحساب مع follow وblock وmute. active: false يزيل العلاقة.
المعاملات الاسم النوع المعنى kindفي المحتوى stringمطلوب أي علاقة: like أو save أو repost أو follow أو join أو block أو mute (منذ 2.2).likesaverepostfollowjoinblockmute targetفي المحتوى stringمطلوب id المنشور أو الملف الشخصي أو المجموعة، بحسب kind.activeفي المحتوى booleanاختياري true يضبط العلاقة، وfalse يزيلها.
مثال على الطلب curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"kind":"like","target":"5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1","active":true}' \
"https://tellmelo.com/api/v2/relations"الرد يردّ بـOk واحد.
مثال {
"ok": true
}الحالات الممكنة: 200400401403429
الكائنات كل الكائنات، حقلًا حقلًا. [] تعني قائمة.
Serviceرد الجذر: من يردّ، وما يمكن لهذا المفتاح فعله.
الحقل النوع المعنى namestringدائمًا tellmelo. versionstringإصدار API، مثل 2.1. scopestringما يمكن لهذا المفتاح فعله: read أو read write. rateLimitRateLimitرصيد هذا المفتاح. docsstringمكان هذا التوثيق، كمسار على هذا الخادم. specstringمكان الوصف المقروء آليًا.
مثال {
"name": "tellmelo",
"version": "2.10",
"scope": "read write",
"rateLimit": {
"limit": 120,
"remaining": 117
},
"docs": "/legal/api",
"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هل هو مثبّت أعلى ملف مؤلفه الشخصي. 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
}
],
"poll": {
"options": [
{
"text": "Lavender",
"votes": 12
},
{
"text": "Sunflowers",
"votes": 7
},
{
"text": "Clover",
"votes": 3
}
],
"total": 22,
"multiple": false,
"endsAt": 1758710400000,
"running": true,
"resultsVisible": true,
"myVotes": [
0
]
},
"quotes": null,
"continues": null,
"counts": {
"replies": 4,
"likes": 31,
"reposts": 2
},
"pinned": false,
"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,
"createdAt": 1758624600000,
"postId": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"parentId": null
}Countsكم ردًا وإعجابًا وإعادة نشر لمنشور ما.
الحقل النوع المعنى repliesintegerالردود، كل المستويات معًا. likesintegerالإعجابات. repostsintegerإعادات النشر.
مثال {
"replies": 4,
"likes": 31,
"reposts": 2
}Pollاستطلاع منشور.
الحقل النوع المعنى optionsPollOption[]الإجابات بالترتيب. option في التصويت يُعد من 0. totalintegerكل الأصوات معًا، موجود دائمًا. multiplebooleanهل يمكن اختيار أكثر من إجابة. endsAtintegerأو null متى ينتهي الاستطلاع (null إن كان بلا نهاية). runningbooleanهل لا يزال التصويت ممكنًا. resultsVisiblebooleanهل تُعرض الأصوات لكل إجابة (انظر votes). myVotesinteger[]الإجابات التي اخترتها، العدّ من 0.
مثال {
"options": [
{
"text": "Lavender",
"votes": 12
},
{
"text": "Sunflowers",
"votes": 7
},
{
"text": "Clover",
"votes": 3
}
],
"total": 22,
"multiple": false,
"endsAt": 1758710400000,
"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 — حساب آلي، مثل بوت.
مثال {
"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
}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
}
],
"poll": {
"options": [
{
"text": "Lavender",
"votes": 12
},
{
"text": "Sunflowers",
"votes": 7
},
{
"text": "Clover",
"votes": 3
}
],
"total": 22,
"multiple": false,
"endsAt": 1758710400000,
"running": true,
"resultsVisible": true,
"myVotes": [
0
]
},
"quotes": null,
"continues": null,
"counts": {
"replies": 4,
"likes": 31,
"reposts": 2
},
"pinned": false,
"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 — أُعجب أحدهم بردّك.repost — أعاد أحدهم نشر منشورك.follow — يتابعك أحدهم.mention — أشار إليك أحدهم.group_mention — أشار أحدهم إلى مجموعة تقودها؛ text هو اسمها.message — أرسل إليك أحدهم رسالة.scheduled — نُشر أحد منشوراتك المجدولة.reminder — حان موعد تذكير عن منشور محفوظ.report — ما آل إليه بلاغ أرسلته.moderation — قرار بشأن حسابك: تحذير أو تقييد أو اعتراض.team — عمل جديد للفريق (للمالكين والمديرين والمشرفين فقط).reward — مكافأة الدعوة على وشك الانتهاء أو انتهت.gift — هدية من الفريق: اشتراك، أو شرارات لك أو لمجموعة تقودها.present — هدية من عضو: شرارات أو مدة اشتراك؛ العضو هو actor.spark — الشرارات تنتهي قريبًا، أو بلغت مجموعة تقودها مستوى أو لن تحتفظ به إلا لفترة.loyalty — عن إيقاع الوفاء: يُحتسب أسبوع نشط أو ينقصه يوم، أو مكافأة جديدة أو توشك على الزوال.impact — كيف كانت منشوراتك خلال اثنتي عشرة ساعة بعد يوم، في إشعار واحد.discovery — دعوة إلى برنامج «مُكتشَف»، أو أن مكانًا فيه يبدأ أو ينتهي.group_post — منشور جديد في مجموعة يرنّ جرسها لذلك.group_moderation — أزالت قيادة مجموعة أحد منشوراتك، أو أزالتك من المجموعة. 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أو null id الرسالة التي تجيب عنها هذه الرسالة (null إن لم تجب عن أي رسالة). منذ 2.2.createdAtintegerمتى أُرسلت.
مثال {
"id": "7c6b5a49-3827-4165-9f0e-d1c2b3a49586",
"text": "See you on Saturday at the market!",
"from": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"to": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"read": true,
"media": [],
"replyTo": null,
"createdAt": 1758624060000
}Createdرد عملية كتابة أنشأت شيئًا.
الحقل النوع المعنى idstringمعرّف ما أُنشئ. scheduledForintegerأو null متى يظهر، إن كان النشر مجدولًا (وإلا null). deleteAtintegerأو null متى يحذف نفسه، إن ضُبط ذلك (وإلا null).
مثال {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"scheduledFor": null,
"deleteAt": null
}Okرد عملية كتابة ليس لديها ما تعيده.
الحقل النوع المعنى okbooleanدائمًا true.
مثال {
"ok": true
}الوصف المقروء آليًا الجدول الذي تقوم عليه هذه الصفحة متاح بصيغة OpenAPI على /api/v2/openapi.json.
https://tellmelo.com/api/v2/openapi.jsonما نتوقعه تسري القواعد نفسها كما في كل مكان: لا تحرّش، ولا رسائل مزعجة، ولا محتوى لا تملك حقوقه. أنت مسؤول عمّا ينشره مفتاحك.