tellmelotellmelo.
প্রকাশকের তথ্যগোপনীয়তাব্যবহারের শর্তাবলিকপিরাইট লঙ্ঘনের রিপোর্টযোগাযোগAPIঅ্যাপ

API

এটি একটি অনুবাদ। জার্মান সংস্করণই প্রামাণ্য। যেখানে এই লেখা তা থেকে আলাদা, সেখানে জার্মান লেখা প্রযোজ্য। পাতার নিচে তুমি ভাষা বদলাতে পারো।

শুরু করা

  • সংক্ষিপ্ত বিবরণ
  • দ্রুত শুরু
  • চেষ্টা করো
  • তোমার চাবি
  • একটি চাবি কী করতে পারে

মৌলিক বিষয়

  • অনুরোধ আর উত্তর
  • পাতা
  • শুধু যা নতুন
  • সীমা
  • হেডার
  • যখন কিছু কাজ করে না
  • সংস্করণ

এন্ডপয়েন্ট

  • এন্ডপয়েন্ট
  • প্রবেশপথ
    • 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

অবজেক্ট

  • অবজেক্ট
  • Service
  • RateLimit
  • Post
  • Reply
  • Counts
  • Media
  • Poll
  • PollOption
  • ProfileBrief
  • Profile
  • CommunityBrief
  • Community
  • Tag
  • SearchResult
  • Emoji
  • Notification
  • Actor
  • Conversation
  • Message
  • Created
  • Ok

আরও

  • যন্ত্রে পাঠযোগ্য বিবরণ
  • আমরা যা আশা করি
সূচি

শুরু করা

  • সংক্ষিপ্ত বিবরণ
  • দ্রুত শুরু
  • চেষ্টা করো
  • তোমার চাবি
  • একটি চাবি কী করতে পারে

মৌলিক বিষয়

  • অনুরোধ আর উত্তর
  • পাতা
  • শুধু যা নতুন
  • সীমা
  • হেডার
  • যখন কিছু কাজ করে না
  • সংস্করণ

এন্ডপয়েন্ট

  • এন্ডপয়েন্ট
  • প্রবেশপথ
    • 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

অবজেক্ট

  • অবজেক্ট
  • Service
  • RateLimit
  • Post
  • Reply
  • Counts
  • Media
  • Poll
  • PollOption
  • ProfileBrief
  • Profile
  • CommunityBrief
  • Community
  • Tag
  • SearchResult
  • Emoji
  • Notification
  • Actor
  • Conversation
  • Message
  • Created
  • Ok

আরও

  • যন্ত্রে পাঠযোগ্য বিবরণ
  • আমরা যা আশা করি

সংক্ষিপ্ত বিবরণ

v2 তোমার নিজের প্রোগ্রামকে tellmelo-র সঙ্গে কথা বলতে দেয়: প্রতি অনুরোধে একটি চাবি, উত্তরে JSON, প্রতিটি তালিকা একইভাবে পাতায় ভাগ হয়। অ্যাপের মতোই নিয়ম।

  • প্রতিটি পাথ এই সার্ভারের ঠিকানায় /api/v2 দিয়ে শুরু হয়।
  • অনুরোধ আর উত্তর UTF-8-এ JSON। ফিল্ডের নাম, কোড আর মান ইংরেজিতে এবং ইংরেজিতেই থাকে।
  • চাবি তোমার অ্যাকাউন্টের মতো কাজ করে: অ্যাপে যা তুমি দেখতে পাও না, তা-ও পড়তে পারে না।
https://tellmelo.com/api/v2

দ্রুত শুরু

  1. “সেটিংস → অ্যাপ ও ডেটা → API”-এ একটি চাবি তৈরি করে কপি করো। এটি একবারই দেখানো হয়।
  2. এটি দিয়ে রুট কল করো। উত্তরে সংস্করণ, চাবির অধিকার আর এই মিনিটে বাকি অনুরোধ দেখা যায়।
  3. প্রতিটি পাথ একইভাবে কাজ করে: হেডারে চাবি, উত্তরে 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 থেকে কী পড়ে।

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: কাজ করা। পোস্ট করা, উত্তর দেওয়া, ভোট দেওয়া, বার্তা পাঠানো, ফলো করা, যোগ দেওয়া, ব্লক করা, বিজ্ঞপ্তি পড়া হিসেবে চিহ্নিত করা।

কোনো চাবি যা পারে না

কোনো চাবি পাসওয়ার্ড, ইমেল ঠিকানা, অ্যাকাউন্টের ধরন, জায়গা, ভূমিকা, মুছে ফেলা, সেশন, পুশ ডিভাইস বা অন্য চাবিতে পৌঁছায় না, প্রশাসন বা গ্রুপ নেতৃত্বেও নয়। পাসওয়ার্ড যা রক্ষা করে, কোনো চাবি তা পারে না।

অনুরোধ আর উত্তর

  • সব জায়গায় JSON। প্রতিটি উত্তর UTF-8-এ application/json, ত্রুটিসহ। শুধু ছবি ছবি হিসেবে আসে।
  • তুমি যা পাঠাও। একটি POST তার ফিল্ডগুলো বডিতে JSON হিসেবে বহন করে। কোনো ফিল্ড URL-এও থাকলে বডিরটাই গণ্য হয়।
  • সময় ১৯৭০ সালের ১ জানুয়ারি, UTC থেকে মিলিসেকেন্ডে।
  • ID স্ট্রিং। এগুলো শুধু পুরোটা মিলিয়ে তুলনা করো।
  • প্রতিটি ফিল্ড সবসময় থাকে। যা নেই তা null; তালিকা খালি থাকতে পারে।
  • লেখা সাধারণ লেখা, ঠিক যেমন লেখা হয়েছে। #ট্যাগ, @নাম আর লিংক যেমন আছে তেমনই থাকে, সার্ভারের নিজস্ব ইমোজিও, :name: হিসেবে; সেগুলোর ছবি /emojis-এ তালিকাভুক্ত।
  • ছবি আপেক্ষিক ঠিকানা, /api/media?id=…। হেডারে চাবি না থাকলে 401 পাবে।

পাতা

প্রতিটি তালিকা 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

লেখার অনুরোধ অ্যাপের সীমাতেও গোনা হয়, যেমন কয়েক মিনিটে কতগুলো পোস্ট। সেটিও rate_limited-সহ 429 দেয়।

হেডার

চাবি ছাড়া কোনো হেডার আবশ্যক নয়।

তুমি যা পাঠাও

হেডারঅর্থ
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পরের মিনিট কখন শুরু, ১৯৭০, UTC থেকে সেকেন্ডে।
X-Tellmelo-Scopeএই চাবি কী করতে পারে: read বা read write।
Retry-After429-এর সঙ্গে: আবার জিজ্ঞেস করার আগে কত সেকেন্ড অপেক্ষা করতে হবে।
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 }

কিছু ত্রুটিতে আরও একটি ফিল্ড থাকে: চাবি না থাকার 401-এ docs, 429-এ limit।

স্ট্যাটাসকোডঅর্থ
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/v2readAPI সংস্করণ আর এই সার্ভারের নাম।
পোস্ট
GET/api/v2/postsreadসর্বজনীন পোস্ট, নতুনগুলো আগে।
GET/api/v2/posts/{id}readএকটি পোস্ট, তার id দিয়ে।
POST/api/v2/postswriteএকটি পোস্ট প্রকাশ করো।
DELETE/api/v2/posts/{id}writeনিজের একটি পোস্ট সরাও।
উত্তর
GET/api/v2/posts/{id}/repliesreadএকটি পোস্টের উত্তর, ব্লক করা অ্যাকাউন্ট বাদে।
POST/api/v2/posts/{id}/replieswriteএকটি পোস্টের উত্তর দাও।
পোল
POST/api/v2/posts/{id}/votewriteএকটি পোলে অংশ নাও।
প্রোফাইল
GET/api/v2/profiles/{handle}readএকটি প্রোফাইল, তার ছোট নাম দিয়ে।
GET/api/v2/profiles/{handle}/postsreadএকটি প্রোফাইলের সর্বজনীন পোস্ট, নতুনগুলো আগে।
গ্রুপ
GET/api/v2/communitiesreadএই সার্ভারের খোলা গ্রুপগুলো।
GET/api/v2/communities/{id}readএকটি গ্রুপ, তার id দিয়ে।
GET/api/v2/communities/{id}/postsreadএকটি গ্রুপের সর্বজনীন পোস্ট, নতুনগুলো আগে।
ঘুরে দেখো
GET/api/v2/tagsreadএখন চলমান ট্যাগগুলো।
GET/api/v2/searchreadপোস্ট, নাম, ছোট নাম আর ট্যাগে খোঁজ।
GET/api/v2/emojisreadসার্ভারের নিজস্ব ইমোজি, ছবির ঠিকানাসহ।
তোমার অ্যাকাউন্ট
GET/api/v2/mereadতোমার নিজের প্রোফাইল, সেই id-সহ যা অন্য পাথগুলো আশা করে।
GET/api/v2/feedreadতোমার নিজের ফিড, অ্যাপ যেভাবে সাজায়।
বিজ্ঞপ্তি
GET/api/v2/notificationsreadতোমার বিজ্ঞপ্তি, নতুনগুলো আগে।
POST/api/v2/notifications/readwriteতোমার বিজ্ঞপ্তিগুলো পড়া হিসেবে চিহ্নিত করো।
বার্তা
GET/api/v2/conversationsreadতোমার ইনবক্স: প্রতি আলাপে এক সারি, সবচেয়ে নতুন আগে।
GET/api/v2/conversations/{with}/messagesreadএকটি আলাপের বার্তা, নতুনগুলো আগে।
POST/api/v2/conversations/{with}/messageswriteএকটি আলাপে বার্তা পাঠাও।
POST/api/v2/conversations/{with}/readwriteএকটি আলাপের সব বার্তা পড়া হিসেবে চিহ্নিত করো।
সম্পর্ক
POST/api/v2/relationswriteপছন্দ, সংরক্ষণ, রিপোস্ট, ফলো, যোগদান, ব্লক, মিউট, kind অনুযায়ী।

প্রবেশপথ

প্রতিটি প্রোগ্রামের প্রথম অনুরোধ: চাবি কাজ করে কি না, আর তা কী করতে পারে?

GET/api/v2

API সংস্করণ আর এই সার্ভারের নাম।

  • অধিকার read
  • ETag-সহ
  • v2.0 থেকে

শেষে স্ল্যাশ ছাড়া: /api/v2/ 308 দিয়ে /api/v2-এ পাঠায়, আর সব প্রোগ্রাম তা অনুসরণ করে না।

অনুরোধের উদাহরণ

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 দিয়ে।

  • অধিকার read
  • ETag-সহ
  • v2.0 থেকে

সর্বজনীন পাথে 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

একটি পোস্ট প্রকাশ করো।

  • অধিকার write
  • v2.0 থেকে

পোস্টে লেখা বা পোল লাগে। দৈর্ঘ্য, পোলের বিকল্প আর গতি সার্ভার ঠিক করে; তার বাইরে 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}

নিজের একটি পোস্ট সরাও।

  • অধিকার write
  • v2.0 থেকে

প্যারামিটার

নামধরনঅর্থ
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

একটি পোস্টের উত্তর দাও।

  • অধিকার write
  • v2.0 থেকে

ধীর মোডে প্রতি জনের প্রতি 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

একটি পোলে অংশ নাও।

  • অধিকার 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://tellmelo.com/api/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/vote"

উত্তর

একটি Ok দিয়ে উত্তর দেয়।

উদাহরণ
{
  "ok": true
}

সম্ভাব্য স্ট্যাটাস: 200400401403404429

প্রোফাইল

ছোট নাম দিয়ে সর্বজনীন প্রোফাইল, আর তারা কী পোস্ট করেছে।

GET/api/v2/profiles/{handle}

একটি প্রোফাইল, তার ছোট নাম দিয়ে।

  • অধিকার read
  • ETag-সহ
  • v2.0 থেকে

প্যারামিটার

নামধরনঅর্থ
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

এই সার্ভারের খোলা গ্রুপগুলো।

  • অধিকার read
  • ETag-সহ
  • v2.0 থেকে

সদস্যসংখ্যা অনুযায়ী সাজানো এবং পাতায় ভাগ হয় না; 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 দিয়ে।

  • অধিকার read
  • ETag-সহ
  • v2.0 থেকে

প্যারামিটার

নামধরনঅর্থ
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

এখন চলমান ট্যাগগুলো।

  • অধিকার read
  • ETag-সহ
  • v2.0 থেকে

স্কোর অনুযায়ী সর্বোচ্চ 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

পোস্ট, নাম, ছোট নাম আর ট্যাগে খোঁজ।

  • অধিকার read
  • ETag-সহ
  • v2.0 থেকে

শুধু সর্বজনীন বিষয়বস্তু খোঁজে: গ্রুপের বাইরের পোস্ট, প্রোফাইল আর ট্যাগ। 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

সার্ভারের নিজস্ব ইমোজি, ছবির ঠিকানাসহ।

  • অধিকার read
  • ETag-সহ
  • v2.1 থেকে

লেখায় ইমোজি :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-সহ যা অন্য পাথগুলো আশা করে।

  • অধিকার read
  • ETag-সহ
  • v2.0 থেকে

অনুরোধের উদাহরণ

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

তোমার বিজ্ঞপ্তিগুলো পড়া হিসেবে চিহ্নিত করো।

  • অধিকার write
  • v2.0 থেকে

অনুরোধের উদাহরণ

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

একটি আলাপে বার্তা পাঠাও।

  • অধিকার write
  • v2.0 থেকে

অ্যাপের নিয়ম প্রযোজ্য: যে তোমাকে ব্লক করেছে তার কাছে পৌঁছানো যায় না, আর অন্যজনের সেটিংস গণ্য হয়।

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

একটি আলাপের সব বার্তা পড়া হিসেবে চিহ্নিত করো।

  • অধিকার write
  • v2.1 থেকে

প্যারামিটার

নামধরনঅর্থ
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 অনুযায়ী।

  • অধিকার write
  • v2.0 থেকে

like, save আর repost-এর জন্য target একটি পোস্ট, join-এর জন্য একটি গ্রুপ, follow, block আর mute-এর জন্য একটি অ্যাকাউন্ট। active: false সম্পর্ক সরিয়ে দেয়।

প্যারামিটার

নামধরনঅর্থ
kindবডিতেstringআবশ্যককোন সম্পর্ক: like, save, repost, follow, join, block বা mute (2.2 থেকে)।likesaverepostfollowjoinblockmute
targetবডিতেstringআবশ্যকপোস্ট, প্রোফাইল বা গ্রুপের id, kind অনুযায়ী।
activeবডিতেbooleanঐচ্ছিকtrue সম্পর্ক স্থাপন করে, false সরিয়ে দেয়।

অনুরোধের উদাহরণ

curl -X POST \
  -H "Authorization: Bearer tm_key_…" \
  -H "Content-Type: application/json" \
  -d '{"kind":"like","target":"5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1","active":true}' \
  "https://tellmelo.com/api/v2/relations"

উত্তর

একটি Ok দিয়ে উত্তর দেয়।

উদাহরণ
{
  "ok": true
}

সম্ভাব্য স্ট্যাটাস: 200400401403429

অবজেক্ট

সব অবজেক্ট, ফিল্ড ধরে ধরে। [] মানে তালিকা।

Service

রুটের উত্তর: কে উত্তর দিচ্ছে, আর এই চাবি কী করতে পারে।

ফিল্ডধরনঅর্থ
namestringসবসময় tellmelo।
versionstringAPI-র সংস্করণ, যেমন 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পোস্টের id।
textstringবা nullলেখা যেমন লেখা হয়েছে (শুধু পোল বা শুধু ছবির পোস্টে null)।
kindstringপোস্টটি কী।
  • post — লেখা, ছবি বা উদ্ধৃতিসহ পোস্ট।
  • poll — পোলসহ পোস্ট।
authorProfileBriefকে লিখেছে।
communityCommunityBriefবা nullযে গ্রুপে লেখা (সব গ্রুপের বাইরে null)।
mediaMedia[]এর ছবি, ক্রমানুসারে; না থাকলে খালি।
pollPollবা nullপোল (না থাকলে null)।
quotesstringবা nullএটি যে পোস্ট উদ্ধৃত করে তার id।
continuesstringবা nullএটি সংযোজন হিসেবে যে পোস্ট এগিয়ে নেয় তার id।
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
}

Media

একটি পোস্ট বা বার্তার ছবি।

ফিল্ডধরনঅর্থ
urlstringছবি বা ভিডিওর ঠিকানা, এই সার্ভারের সাপেক্ষে। হেডারে চাবি দিয়ে লোড করো।
kindstringimage, video বা gif (2.10 থেকে)। ভিডিও ও GIF হলো MP4 ফাইল।
  • image — একটি ছবি (WebP বা JPEG)।
  • video — শব্দসহ MP4 ভিডিও।
  • gif — একটি GIF, শব্দহীন পুনরাবৃত্ত MP4 হিসেবে।
posterstringবা nullভিডিও ও GIF-এর জন্য প্রিভিউ ছবির ঠিকানা, নইলে null (2.10 থেকে)।
উদাহরণ
{
  "url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
  "kind": "image",
  "poster": null
}

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অ্যাকাউন্টের id: যা /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
}

CommunityBrief

যে গ্রুপে পোস্টটি লেখা হয়েছে।

ফিল্ডধরনঅর্থ
idstringগ্রুপের id।
namestringবা nullএর নাম।
উদাহরণ
{
  "id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
  "name": "Urban Gardening"
}

Community

এই সার্ভারের একটি গ্রুপ।

ফিল্ডধরনঅর্থ
idstringগ্রুপের id।
namestringএর নাম।
descriptionstringবা nullবিবরণ (না থাকলে null)।
tagsstring[]যে বিষয়গুলো নিয়ে।
membersintegerকতজন সদস্য।
joinPolicystringকীভাবে ঢোকা যায়।
  • open — যে কেউ যোগ দিতে পারে।
  • application — যোগ দিতে আবেদন লাগে যা গ্রুপ গ্রহণ করে।
  • invite — শুধু আমন্ত্রণে।
visibilitystringচাবি দিয়ে সবসময় open।
  • open — সবার কাছে দৃশ্যমান।
উদাহরণ
{
  "id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
  "name": "Urban Gardening",
  "description": "Balconies, allotments, rooftops: whatever grows.",
  "tags": [
    "garden",
    "bees"
  ],
  "members": 312,
  "joinPolicy": "open",
  "visibility": "open"
}

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বিজ্ঞপ্তির id।
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অন্য অ্যাকাউন্টের id: যা /conversations/{with}/messages আশা করে।
handlestringতাঁর ছোট নাম।
namestringতাঁর প্রদর্শিত নাম।
excerptstringবা nullশেষ বার্তার শুরু (লেখা না থাকলে null)।
truncatedbooleanঅংশটি কেটে ছোট করা হয়েছে কি না।
fromMebooleanশেষ বার্তাটি তোমার কি না।
lastMessageIdstringশেষ বার্তার id।
unreadintegerতাঁর কতগুলো বার্তা তুমি এখনো পড়োনি।
updatedAtintegerশেষ বার্তা কখন লেখা হয়েছে।
উদাহরণ
{
  "with": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
  "handle": "jon",
  "name": "Jon",
  "excerpt": "See you on Saturday at the market!",
  "truncated": false,
  "fromMe": true,
  "lastMessageId": "7c6b5a49-3827-4165-9f0e-d1c2b3a49586",
  "unread": 0,
  "updatedAt": 1758624060000
}

Message

একটি আলাপের একটি বার্তা।

ফিল্ডধরনঅর্থ
idstringবার্তার id।
textstringবা nullলেখা (শুধু ছবির বার্তায় null)।
fromstringযে অ্যাকাউন্ট লিখেছে তার id।
tostringযে অ্যাকাউন্টকে লেখা হয়েছে তার id।
readbooleanপ্রাপক পড়েছেন কি না।
mediaMedia[]এর ছবি; না থাকলে খালি।
replyTostringবা nullএটি যে বার্তার উত্তর তার id (কোনোটির উত্তর না হলে null)। 2.2 থেকে।
createdAtintegerকখন পাঠানো হয়েছে।
উদাহরণ
{
  "id": "7c6b5a49-3827-4165-9f0e-d1c2b3a49586",
  "text": "See you on Saturday at the market!",
  "from": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
  "to": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
  "read": true,
  "media": [],
  "replyTo": null,
  "createdAt": 1758624060000
}

Created

এমন লেখার অনুরোধের উত্তর যা কিছু তৈরি করেছে।

ফিল্ডধরনঅর্থ
idstringযা তৈরি হয়েছে তার id।
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

আমরা যা আশা করি

সব জায়গার মতো একই নিয়ম: হয়রানি নয়, স্প্যাম নয়, এমন বিষয়বস্তু নয় যার অধিকার তোমার নেই। তোমার চাবি যা পোস্ট করে তার দায় তোমার।

tellmelo-তে ফিরে যাও