Inhalt Ich will … Wähl aus, was du vorhast; darunter stehen nur die Schritte dafür. Die vollständige Referenz folgt weiter unten.
einen Bot bauen meine App anbinden Anmeldung mit tellmelo auf meiner Seite GIFs und Videos einbindenErstelle den Bot in einer deiner Gruppen im Gruppenmenü unter „Bots → Meine Bots“, mit Bild, Name und @Name. Sein Token siehst du nur einmal. Teile seinen Link „Bot hinzufügen“ oder reiche ihn für das Bot-Verzeichnis ein, wo er nach der Prüfung durch das Team steht; wer in einer Gruppe Rollen verwalten darf, nimmt ihn mit den Rechten auf, denen er zustimmt. Empfange, was in seinen Gruppen geschieht, als Strom (GET /v2/events/stream) oder an deine Adresse, und schreib mit POST /v2/channels/{id}/messages. Mehr unter Bots . Melde Befehle an (PUT /v2/me/commands) und antworte mit Karten und Knöpfen; Musik spielt ein Bot mit einem Platz im Sprachkanal (POST /v2/channels/{id}/voice). Überblick Mit v2 sprechen eigene Programme mit tellmelo: ein Schlüssel je Anfrage, JSON zurück, jede Liste blättert gleich. Es gelten dieselben Regeln wie in der App.
Jeder Pfad beginnt mit https://api.tellmelo.com/v2. Anfragen und Antworten sind JSON in UTF-8. Feldnamen, Codes und Werte sind englisch und bleiben es. Ein Schlüssel handelt als dein Konto: Was du in der App nicht sehen kannst, kann er auch nicht lesen. https://api.tellmelo.com/v2Schnellstart Leg unter „Developer-Bereich → API“ einen Schlüssel an und kopier ihn. Er wird nur ein einziges Mal gezeigt. Frag damit die Wurzel ab. Die Antwort nennt Version, Rechte des Schlüssels und die restlichen Anfragen dieser Minute. Jeder Pfad funktioniert gleich: Schlüssel im Header, JSON zurück, bei Listen items und next. curl -H "Authorization: Bearer tm_key_…" https://api.tellmelo.com/v2{
"name": "tellmelo",
"version": "2.20",
"scope": "read write",
"rateLimit": {
"limit": 120,
"remaining": 117
},
"docs": "/developers/docs",
"spec": "/api/v2/openapi.json"
}Weiter mit /me für dein Profil, /posts für Öffentliches, /feed für deinen Feed.
Ausprobieren Wähl eine Aufgabe, füll die Felder aus und kopier die Anfrage oder schick sie hier ab. Schreiben fragt vorher nach. Der Code liest den Schlüssel aus TELLMELO_KEY.
Aufgabe GET / GET /posts GET /posts/{id} POST /posts DELETE /posts/{id} GET /me/scheduled POST /posts/{id}/schedule POST /posts/{id}/edit GET /posts/{id}/reply-settings PUT /posts/{id}/reply-settings POST /posts/{id}/coauthor DELETE /posts/{id}/coauthor POST /posts/{id}/pin GET /posts/{id}/replies POST /posts/{id}/replies POST /replies/{id}/edit DELETE /replies/{id} POST /replies/{id}/like POST /replies/{id}/vote POST /replies/{id}/pick GET /posts/{id}/replies/waiting POST /replies/{id}/decide GET /posts/{id}/replies/planned PUT /me/planned-replies/{id} POST /me/planned-replies/{id}/send DELETE /me/planned-replies/{id} POST /posts/{id}/vote GET /profiles/{handle} GET /profiles/{handle}/posts GET /profiles/{handle}/events POST /me/events PUT /me/events/{id} DELETE /me/events/{id} GET /me/events/{id}/signups POST /events/{id}/signup GET /communities GET /communities/{id} GET /communities/{id}/posts GET /communities/{id}/members GET /communities/{id}/roles GET /communities/{id}/bell GET /invites/{code} PUT /roles/{id}/self GET /communities/{id}/emojis PUT /communities/{id}/bell POST /invites/{code}/join GET /communities/{id}/bots GET /communities/{id}/channels GET /channels/{id}/messages POST /channels/{id}/messages POST /channels/{id}/read DELETE /channel-messages/{id} GET /communities/{id}/voice POST /communities/{id}/emojis DELETE /communities/{id}/emojis/{name} POST /communities/{id}/roles PUT /roles/{id} DELETE /roles/{id} PUT /communities/{id}/roles/order PUT /roles/{id}/members/{member} POST /communities/{id}/channels PUT /channels/{id} DELETE /channels/{id} PUT /communities/{id}/channels/order PUT /communities/{id}/channels/shape GET /channels/{id}/overrides PUT /channels/{id}/overrides/{role} POST /communities/{id}/categories PUT /categories/{id} DELETE /categories/{id} PUT /communities/{id}/feed GET /communities/{id}/invites POST /communities/{id}/invites DELETE /invites/{code} POST /channel-messages/{id}/remove POST /communities/{id}/posts/{post}/remove DELETE /communities/{id}/members/{member} PUT /communities/{id}/members/{member}/timeout DELETE /communities/{id}/members/{member}/timeout GET /communities/{id}/bans PUT /communities/{id}/bans/{member} DELETE /communities/{id}/bans/{member} GET /communities/{id}/log POST /communities PUT /communities/{id} GET /events GET /events/stream GET /me/commands PUT /me/commands POST /interactions/{id}/reply POST /channels/{id}/voice GET /tags GET /search GET /emojis GET /media GET /media/mine GET /media/{id} POST /media/uploads POST /media/{id} DELETE /media/{id} GET /me GET /feed POST /me/pictures PUT /me/profile GET /me/emojis POST /me/emojis/pictures POST /me/emojis DELETE /me/emojis/{name} PUT /me/emojis/sharing GET /me/webhooks POST /me/webhooks DELETE /me/webhooks/{id} POST /me/webhooks/{id}/test GET /notifications POST /notifications/read GET /conversations GET /conversations/{with}/messages POST /conversations/{with}/messages POST /conversations/{with}/read DELETE /conversations/{with}/messages/{id} POST /conversations/{with}/planned GET /me/planned-messages POST /me/planned-messages/{id}/send DELETE /me/planned-messages/{id} POST /relations GET /profiles/{handle}/followers GET /profiles/{handle}/following GET /me/relations GET /me/collections POST /me/collections PUT /me/collections/{id} DELETE /me/collections/{id} GET /me/collections/{id}/posts POST /me/collections/{id}/posts GET /partner/quota GET /partner/gifts POST /partner/gifts GET /gift-drops POST /gift-drops read API-Version und Name dieser Instanz.
curl JavaScript Python
Kopierencurl \
-H "Authorization: Bearer $TELLMELO_KEY" \
"https://api.tellmelo.com/v2"Dein Schlüssel Bis zu 10 Schlüssel je Konto, jeder mit Namen, eigenen Rechten und auf Wunsch einem Ablaufdatum. Ein Schlüssel beginnt mit tm_key_ und wird nur einmal gezeigt. Verloren? Erneuere ihn, der alte Wert gilt dann nicht mehr.
Du legst ihn unter „Developer-Bereich → API“ an. Er geht im Header der Anfrage mit:
curl -H "Authorization: Bearer tm_key_…" \
https://api.tellmelo.com/v2/postsOder, wenn das bequemer ist, in einem eigenen Header:
curl -H "X-Tellmelo-Key: tm_key_…" https://api.tellmelo.com/v2Nicht in der Adresszeile: Dort landet er in Protokollen und im Browserverlauf.
Derselbe Schlüssel lädt auch Bilder: Jede url zeigt auf /api/media; schick den Schlüssel dort ebenfalls im Header mit.
curl -H "Authorization: Bearer tm_key_…" \
-o picture.webp "https://api.tellmelo.com/media?id=…"Was ein Schlüssel darf Ein Schlüssel kann immer lesen und, wenn du es erlaubst, auch schreiben, verschenken, Medien hochladen und Gruppen verwalten. Jeder Pfad unten sagt, was er braucht:
read : lesen. Öffentliche Beiträge, Profile, Gruppen und Tags, dazu dein Feed, deine Mitteilungen, Nachrichten und die Kanäle deiner Gruppen.write : handeln. Veröffentlichen, antworten, abstimmen, Nachrichten senden, im Chat einer Gruppe schreiben, folgen, beitreten, blockieren, Mitteilungen als gelesen markieren.gifts : verschenken. Aus dem Kontingent eines Partners an ein Mitglied und Geschenke unter einem neuen Beitrag. Ein eigenes Recht, damit ein Schlüssel zum Posten nie etwas verschenken kann.media : die eigene Mediathek. GIFs und Videos hochladen, ändern, teilen und entfernen. Ein eigenes Recht, weil Uploads die Videopunkte des Kontos kosten. Geteilte GIFs und Videos finden braucht nur read .groups : Gruppen verwalten. Rollen, Kanäle, Kategorien, Einladungslinks, den Feed-Kanal, das Entfernen, Timeouts, Kicks und Banns, so weit dein Konto das in der Gruppe darf. Ein eigenes Recht, damit ein Schlüssel zum Posten nie ändert, wer in einer Gruppe was darf.Was kein Schlüssel kann Kein Schlüssel kommt an Passwort, E-Mail-Adresse, Kontotyp, Ort, Rolle, Löschung, Sitzungen, Push-Geräte oder andere Schlüssel, und auch nicht an Verwaltung oder Gruppenleitung. Was das Passwort schützt, kann kein Schlüssel.
Bots Ein Bot ist ein eigenes Konto der Art bot für Gruppen: ohne Passwort und E-Mail-Adresse, gesteuert von deinem Programm mit seinem eigenen Schlüssel. Er nutzt dieselbe API wie jedes Konto und kann in Gruppen alles, was seine Rolle dort erlaubt.
In einer deiner Gruppen im Gruppenmenü unter „Bots → Meine Bots“ einen Bot mit Bild, Titelbild, Name, Benutzername und Beschreibung anlegen. Das Token wird nur einmal angezeigt; es hat die Rechte read, write, media und groups. Den Link des Bots weitergeben oder ihn für das Bot-Verzeichnis einreichen; dort steht er, sobald das Team ihn geprüft hat. Wer in einer Gruppe Rollen verwalten darf, wählt die Rechte; der Bot tritt bei und bekommt eine eigene Rolle. Dein Programm schickt das Token als Authorization: Bearer …, liest die Ereignisse seiner Gruppen als Strom und arbeitet mit den Routen unter Bots , Kanäle und Gruppen . Ein kleiner Bot, der die Ereignisse als Strom liest und auf den Befehl /ping mit pong antwortet, nur für den Fragenden:
// Node 18 or newer: reads the events of the bot's groups as they happen and answers /ping.
const BASE = 'https://api.tellmelo.com/v2';
const KEY = process.env.TELLMELO_BOT_TOKEN;
const call = (method, path, body) =>
fetch(BASE + path, {
method,
headers: { Authorization: 'Bearer ' + KEY, 'Content-Type': 'application/json' },
body: body && JSON.stringify(body),
}).then((r) => r.json());
await call('PUT', '/me/commands', { commands: [{ name: 'ping', description: 'Answers pong' }] });
let last = '';
for (;;) {
// The stream closes after ten minutes; Last-Event-ID goes on where it stopped.
const res = await fetch(BASE + '/events/stream', {
headers: { Authorization: 'Bearer ' + KEY, ...(last && { 'Last-Event-ID': last }) },
});
const reader = res.body.pipeThrough(new TextDecoderStream()).getReader();
let buffer = '';
for (;;) {
const { value, done } = await reader.read();
if (done) break;
buffer += value;
let end;
while ((end = buffer.indexOf('
')) >= 0) {
const data = buffer.slice(0, end).split('
').find((l) => l.startsWith('data: '));
buffer = buffer.slice(end + 2);
if (!data) continue;
const event = JSON.parse(data.slice(6));
last = event.id;
if (event.type === 'command' && event.data.command === 'ping')
await call('POST', '/interactions/' + event.data.interaction + '/reply', { text: 'pong', private: true });
}
}
}Derselbe Bot in Python, der die Ereignisse Seite für Seite holt:
# Python 3 with requests: the same bot, reading the events page by page.
import os, time, requests
BASE = 'https://api.tellmelo.com/v2'
H = {'Authorization': 'Bearer ' + os.environ['TELLMELO_BOT_TOKEN']}
requests.put(BASE + '/me/commands', headers=H,
json={'commands': [{'name': 'ping', 'description': 'Answers pong'}]})
since = '0'
while True:
page = requests.get(BASE + '/events', headers=H, params={'since': since}).json()
for event in page['items']:
if event['type'] == 'command' and event['data']['command'] == 'ping':
requests.post(f"{BASE}/interactions/{event['data']['interaction']}/reply",
headers=H, json={'text': 'pong'})
since = page['next'] or since
time.sleep(2)Was ein Bot in einer Gruppe darf, bestimmt seine Rolle dort, nicht das Token. Die Rolle trägt seinen Namen; die Gruppe ändert ihre Rechte bei den Rollen in den Gruppen-Einstellungen und entfernt den Bot im Gruppenmenü unter „Bots → In dieser Gruppe“. Bis zu 5 Bots je Konto; je Gruppe so viele, wie ihre Vorteile erlauben. Ein Bot schreibt höchstens 30 Nachrichten pro Minute und Gruppe, ist nicht über die Suche zu finden und schreibt nur Leuten, die ihm zuerst geschrieben haben. Es gelten die Grenzen . Ereignisse kommen auch an eine eigene HTTPS-Adresse (signiert wie die Webhooks, mit Wiederholungen). Dazu Befehle (PUT /v2/me/commands) mit Antworten für alle oder nur den Fragenden, Karten und Knöpfe in Nachrichten und Musik im Sprachkanal (POST /v2/channels/{id}/voice): alles unter Bots . Seiten Jede Liste nimmt limit und cursor und antwortet mit items und next. Schick das next als cursor zurück, um weiterzublättern; ist next leer, ist Schluss. Der Cursor ist undurchsichtig: nicht auseinandernehmen, nicht selbst bauen.
{ "items": [ … ], "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx" }
curl -H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts?limit=20&cursor=MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"Ohne limit 20 Einträge, höchstens 50. Manche Listen blättern nicht, ihr next ist immer null.
Nur das Neue Jede Antwort trägt ein ETag. Schick es beim nächsten Mal als If-None-Match mit: Hat sich nichts geändert, kommt 304 ohne Inhalt.
ETag: W/"3Qk1mJ7fQe2Yb0sVxT9aL4pNdRc"
If-None-Match: W/"3Qk1mJ7fQe2Yb0sVxT9aL4pNdRc" → 304Ausnahmen: /feed hat kein ETag, weil sich die Reihenfolge ständig ändert, und Schreibzugriffe antworten nie 304.
Grenzen Ein Schlüssel darf 120 Anfragen je Minute stellen, mit dem Abo „Organisation“ 600, sofern die Verwaltung nichts anderes festlegt. Darüber kommt 429, und nichts wurde ausgeführt. Warte eine Minute und schick die Anfrage erneut.
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 117
X-RateLimit-Reset: 1758624060Schreibzugriffe zählen außerdem gegen die Grenzen der App, etwa wie viele Beiträge in wenigen Minuten. Auch dann kommt 429 mit rate_limited.
Wenn etwas nicht geht Fehler kommen als JSON: ein fester englischer Code in error für dein Programm und ein Satz in message für Menschen, dazu der passende Statuscode. Vergleich nur den Code, der Satz kann sich ändern.
{ "error": "rate_limited",
"message": "Too many requests. Try again in a minute.",
"limit": 120 }Manche Fehler bringen ein Feld mehr mit: docs bei 401 wegen eines fehlenden Schlüssels, limit bei 429.
Status Code Bedeutung 400bad_requestDie Anfrage ist nicht lesbar, ein Pflichtfeld fehlt oder ein Wert ist nicht erlaubt. 401key_missingKein Schlüssel im Header. 401key_invalidDer Schlüssel gilt nicht: vertippt, ersetzt oder das Konto ist gesperrt. 401unauthorizedAls nicht angemeldet abgewiesen, aus einem anderen Grund als dem Schlüssel. 403scope_missingDem Schlüssel fehlt das nötige Recht, meist write. 403account_data_lockedKontodaten wie Passwort, E-Mail-Adresse oder Löschung sind für Schlüssel gesperrt. 403forbiddenDein Konto darf das nicht, zum Beispiel wegen eines entzogenen Rechts oder einer Blockierung. 403timed_outEin Timeout schaltet dein Konto in dieser Gruppe gerade stumm. 404unknown_pathDiesen Pfad gibt es nicht, oder nicht mit dieser Methode. 404not_foundNicht gefunden, oder du darfst es nicht sehen. 409conflictEs kollidiert mit etwas, das schon da ist, zum Beispiel ein vergebener Name. 409feed_offDer Feed-Kanal dieser Gruppe ist aus. 413too_largeZu groß für diese Instanz. 422unprocessableLesbar, aber in dieser Form nicht möglich. 429rate_limitedZu viele Anfragen. Nichts ist passiert; warte und versuch es noch einmal. 500internal_errorFehler auf dem Server.
Versionen Die Version steht im Pfad. Solange dort v2 steht, bleiben Pfade und Felder gleich; Neues kommt nur dazu.
Ergänzungen erhöhen die zweite Zahl. Jeder Pfad nennt, seit wann es ihn gibt.
https://api.tellmelo.com/v1/ gibt es nicht mehr: Die alten Pfade antworten 410 und nennen im Rumpf den neuen Weg.
Endpunkte Alle Pfade auf einen Blick, danach jeder einzeln mit Beispiel.
Weg Recht Wozu Der Einstieg GET /v2readAPI-Version und Name dieser Instanz. Beiträge GET /v2/postsreadDie öffentlichen Beiträge, neueste zuerst. GET /v2/posts/{id}readEin einzelner Beitrag, über seine id. POST /v2/postswriteEinen Beitrag veröffentlichen. DELETE /v2/posts/{id}writeEinen eigenen Beitrag entfernen. GET /v2/me/scheduledreadDeine Beiträge, die noch nicht erschienen sind, und worauf sie warten. POST /v2/posts/{id}/schedulewriteÄndern, wann ein geplanter Beitrag erscheint oder wann sich ein Beitrag von selbst löscht. POST /v2/posts/{id}/editwriteDen Text eines eigenen Beitrags ändern. GET /v2/posts/{id}/reply-settingsreadWer auf einen eigenen Beitrag antworten darf, ob Antworten auf Freigabe warten und der langsame Modus. PUT /v2/posts/{id}/reply-settingswriteDie Antwort-Einstellungen eines eigenen Beitrags ändern. Was du nicht angibst, bleibt. POST /v2/posts/{id}/coauthorwriteEine Einladung als Co-Autor annehmen oder ablehnen. DELETE /v2/posts/{id}/coauthorwriteAls Co-Autor zurücktreten oder als Verfasser den Co-Autor vom Beitrag nehmen. POST /v2/posts/{id}/pinwriteEinen eigenen Beitrag oben im Profil anheften oder lösen. Antworten GET /v2/posts/{id}/repliesreadDie Antworten auf einen Beitrag, ohne geblockte Konten. POST /v2/posts/{id}/replieswriteAuf einen Beitrag antworten. POST /v2/replies/{id}/editwriteDen Text einer eigenen Antwort ändern. DELETE /v2/replies/{id}writeEine eigene Antwort entfernen. POST /v2/replies/{id}/likewriteEine Antwort hochvoten (ein „Gefällt mir“ ist seit den Votes auf Antworten ein Upvote) oder den Upvote zurücknehmen; ein Downvote bleibt. POST /v2/replies/{id}/votewriteEine Antwort hoch- oder runtervoten oder die eigene Stimme zurücknehmen. Antwortet mit der eigenen Stimme und der Wertung danach. POST /v2/replies/{id}/pickwriteUnter dem eigenen Beitrag eine Antwort als beste hervorheben oder die Hervorhebung zurücknehmen. GET /v2/posts/{id}/replies/waitingreadDie Antworten, die unter einem Beitrag auf Freigabe warten: unter dem eigenen alle, sonst nur die eigenen. POST /v2/replies/{id}/decidewriteEine wartende Antwort unter dem eigenen Beitrag freigeben oder ablehnen. Abgelehnt wird sie gelöscht. GET /v2/posts/{id}/replies/plannedreadDie eigenen Antworten, die unter einem Beitrag für später geplant sind. PUT /v2/me/planned-replies/{id}writeText oder Zeit einer geplanten Antwort ändern. Eine fehlgeschlagene wartet danach wieder. POST /v2/me/planned-replies/{id}/sendwriteEine geplante Antwort sofort senden. DELETE /v2/me/planned-replies/{id}writeEine geplante Antwort löschen. Umfragen POST /v2/posts/{id}/votewriteAn einer Umfrage teilnehmen. Profile GET /v2/profiles/{handle}readEin Profil, über sein Kürzel. GET /v2/profiles/{handle}/postsreadDie öffentlichen Beiträge eines Profils, neueste zuerst. GET /v2/profiles/{handle}/eventsreadDie anstehenden Termine eines Profils, die nächsten zuerst. POST /v2/me/eventswriteEinen Termin anlegen. Antwortet mit seiner id. PUT /v2/me/events/{id}writeEinen eigenen Termin ändern. Alle Felder werden neu gesetzt. DELETE /v2/me/events/{id}writeEinen eigenen Termin löschen. GET /v2/me/events/{id}/signupsreadWer sich für einen deiner Termine angemeldet hat. POST /v2/events/{id}/signupwriteDich für einen Termin an- oder abmelden. Gruppen GET /v2/communitiesreadDie offenen Gruppen dieser Instanz; mit mine=true die Gruppen deines Kontos. GET /v2/communities/{id}readEine einzelne Gruppe, über ihre id. GET /v2/communities/{id}/postsreadDie Beiträge des Feed-Kanals einer Gruppe, neueste zuerst. GET /v2/communities/{id}/membersreadDie Mitglieder einer Gruppe mit ihren Rollen. GET /v2/communities/{id}/rolesreadDie Rollen einer Gruppe, die höchste zuerst, @everyone zuletzt. GET /v2/communities/{id}/bellreadWelche Mitteilungen dir eine Gruppe schickt. GET /v2/invites/{code}readDie Gruppe hinter einem Einladungslink, vor dem Beitritt. PUT /v2/roles/{id}/selfwriteEine selbst wählbare Rolle nehmen oder ablegen. GET /v2/communities/{id}/emojisreadDie eigenen Emojis einer Gruppe. PUT /v2/communities/{id}/bellwriteEinstellen, welche Mitteilungen dir eine Gruppe schickt. POST /v2/invites/{code}/joinwriteMit einem Einladungslink einer Gruppe beitreten. GET /v2/communities/{id}/botsreadDie Bots einer Gruppe mit dem, was ihre Rolle erlaubt. Kanäle GET /v2/communities/{id}/channelsreadDie Kanäle einer Gruppe, die du siehst, in ihrer Reihenfolge. GET /v2/channels/{id}/messagesreadDie Nachrichten eines Chat-Kanals, neueste zuerst. POST /v2/channels/{id}/messageswriteEine Nachricht in einem Chat-Kanal schreiben. POST /v2/channels/{id}/readwriteEinen Chat-Kanal bis zu einem Zeitpunkt als gelesen markieren. DELETE /v2/channel-messages/{id}writeEine eigene Nachricht in einem Chat-Kanal löschen. GET /v2/communities/{id}/voicereadWer gerade in den Sprachkanälen einer Gruppe ist, je Kanal. Gruppen verwalten POST /v2/communities/{id}/emojisgroupsDer Gruppe ein Emoji geben. DELETE /v2/communities/{id}/emojis/{name}groupsEin Emoji der Gruppe entfernen. POST /v2/communities/{id}/rolesgroupsEine Rolle anlegen. PUT /v2/roles/{id}groupsName, Farbe und Rechte einer Rolle ändern. DELETE /v2/roles/{id}groupsEine Rolle löschen. PUT /v2/communities/{id}/roles/ordergroupsDie Rangfolge der Rollen festlegen. PUT /v2/roles/{id}/members/{member}groupsEinem Mitglied eine Rolle geben oder nehmen. POST /v2/communities/{id}/channelsgroupsEinen Chat-Kanal anlegen. PUT /v2/channels/{id}groupsName, Thema und Kategorie eines Kanals ändern. DELETE /v2/channels/{id}groupsEinen Chat-Kanal mit seinen Nachrichten löschen. PUT /v2/communities/{id}/channels/ordergroupsDie Reihenfolge der Kategorien und Chat-Kanäle festlegen. PUT /v2/communities/{id}/channels/shapegroupsDie Form aller Kanal-Symbole der Gruppe festlegen. GET /v2/channels/{id}/overridesgroupsWas Rollen in einem Kanal anders dürfen als in der Gruppe. PUT /v2/channels/{id}/overrides/{role}groupsFestlegen, was eine Rolle in einem Kanal anders darf. POST /v2/communities/{id}/categoriesgroupsEine Kategorie für Kanäle anlegen. PUT /v2/categories/{id}groupsEine Kategorie umbenennen. DELETE /v2/categories/{id}groupsEine Kategorie löschen. PUT /v2/communities/{id}/feedgroupsDen Feed-Kanal einer Gruppe ein- oder ausschalten. GET /v2/communities/{id}/invitesgroupsDie Einladungslinks einer Gruppe, die noch gelten. POST /v2/communities/{id}/invitesgroupsEinen Einladungslink erstellen. DELETE /v2/invites/{code}groupsEinen Einladungslink zurücknehmen. POST /v2/channel-messages/{id}/removegroupsDie Nachricht eines anderen Mitglieds aus einem Kanal entfernen. POST /v2/communities/{id}/posts/{post}/removegroupsEinen Beitrag aus einer Gruppe entfernen. DELETE /v2/communities/{id}/members/{member}groupsEin Mitglied aus einer Gruppe kicken. PUT /v2/communities/{id}/members/{member}/timeoutgroupsEin Mitglied stummschalten. DELETE /v2/communities/{id}/members/{member}/timeoutgroupsEinen Timeout aufheben. GET /v2/communities/{id}/bansgroupsDie laufenden Banns einer Gruppe. PUT /v2/communities/{id}/bans/{member}groupsEin Mitglied bannen. DELETE /v2/communities/{id}/bans/{member}groupsEinen Bann aufheben. GET /v2/communities/{id}/loggroupsDas Protokoll der Leitung: wer was entfernt hat und warum. POST /v2/communitiesgroupsEine Gruppe gründen. Antwortet mit ihrer id; du bist ihr Gründer. PUT /v2/communities/{id}groupsEine Gruppe ändern, die du leitest. Was du nicht angibst, bleibt. Bots GET /v2/eventsreadDie Ereignisse aus den Gruppen des Bots seit einem Ereignis, Seite für Seite. GET /v2/events/streamreadDie Ereignisse aus den Gruppen des Bots, sobald sie geschehen (Server-Sent Events). GET /v2/me/commandsreadDie Befehle des Bots. PUT /v2/me/commandswriteDie Befehle des Bots festlegen, alle auf einmal. POST /v2/interactions/{id}/replywriteAuf einen Befehl oder Knopf antworten. POST /v2/channels/{id}/voicewriteEinen Platz im Sprachkanal nehmen, um Musik oder Ton abzuspielen. Entdecken GET /v2/tagsreadDie Tags, die gerade laufen. GET /v2/searchreadEine Suche über Beiträge, Namen, Kürzel und Tags. GET /v2/emojisreadDie eigenen Emojis der Instanz, mit der Adresse ihrer Bilder. GIFs und Videos GET /v2/mediareadGeteilte GIFs oder Videos, die meistgenutzten zuerst. GET /v2/media/minemediaDeine eigene Mediathek, das Neueste zuerst. GET /v2/media/{id}readEin GIF oder Video, deines oder ein geteiltes. POST /v2/media/uploadsmediaEin Hochladen beginnen. PUT /v2/media/uploads/{upload}mediaEin Stück der Datei senden. POST /v2/media/{id}mediaEines deiner GIFs oder Videos ändern. DELETE /v2/media/{id}mediaEines deiner GIFs oder Videos entfernen. Dein Konto GET /v2/mereadDein eigenes Profil, mit der id, die die anderen Wege erwarten. GET /v2/feedreadDein eigener Feed, so wie die Anwendung ihn zusammenstellt. POST /v2/me/pictureswriteEin Bild hochladen, als seine Bytes. Antwortet mit id und url; die id nimmst du dann als Profilbild, Titelbild oder für einen Beitrag. PUT /v2/me/profileprofileDein Profil ändern: Name, Über dich, Profilbild, Titelbild und Profilfarbe. Was du nicht angibst, bleibt. GET /v2/me/emojisreadDeine eigenen Emojis. POST /v2/me/emojis/picturesprofileDas Bild für ein eigenes Emoji hochladen, als seine Bytes. POST /v2/me/emojisprofileEin eigenes Emoji anlegen. Antwortet mit allen deinen Emojis. DELETE /v2/me/emojis/{name}profileEin eigenes Emoji entfernen. Antwortet mit den übrigen. PUT /v2/me/emojis/sharingprofileFestlegen, ob deine Follower deine Emojis in eigenen Texten nutzen dürfen. GET /v2/me/webhookswebhooksDeine Webhooks mit ihrem Stand. POST /v2/me/webhookswebhooksEinen Webhook anlegen. Antwortet mit id und dem Geheimnis für die Signaturen, nur dieses eine Mal. DELETE /v2/me/webhooks/{id}webhooksEinen Webhook löschen. POST /v2/me/webhooks/{id}/testwebhooksEine Probe an einen Webhook senden. Mitteilungen GET /v2/notificationsreadDeine Mitteilungen, neueste zuerst. POST /v2/notifications/readwriteDeine Mitteilungen als gelesen markieren. Nachrichten GET /v2/conversationsreadDein Postfach: eine Zeile je Gespräch, das jüngste zuerst. GET /v2/conversations/{with}/messagesreadDie Nachrichten eines Gesprächs, neueste zuerst. POST /v2/conversations/{with}/messageswriteEine Nachricht in einem Gespräch senden. POST /v2/conversations/{with}/readwriteAlle Nachrichten eines Gesprächs als gelesen markieren. DELETE /v2/conversations/{with}/messages/{id}writeEine eigene Nachricht löschen. POST /v2/conversations/{with}/plannedwriteEine Nachricht für später planen. Antwortet mit der id der geplanten Nachricht. GET /v2/me/planned-messagesreadDie eigenen Nachrichten, die noch gesendet werden, nach Zeit geordnet. POST /v2/me/planned-messages/{id}/sendwriteEine zurückgehaltene oder fehlgeschlagene geplante Nachricht jetzt senden. DELETE /v2/me/planned-messages/{id}writeEine geplante Nachricht löschen, bevor sie gesendet wird. Beziehungen POST /v2/relationswriteMögen, merken, teilen, folgen, beitreten, blockieren, stummschalten, je nach kind. GET /v2/profiles/{handle}/followersreadWer einem Profil folgt, die neuesten zuerst. GET /v2/profiles/{handle}/followingreadWem ein Profil folgt, die neuesten zuerst. GET /v2/me/relationsreadWen du blockiert, stummgeschaltet oder nur für Nachrichten blockiert hast, die neuesten zuerst. Sammlungen GET /v2/me/collectionsreadDeine Sammlungen mit der Zahl ihrer Beiträge. POST /v2/me/collectionswriteEine Sammlung anlegen. Antwortet mit ihrer id. PUT /v2/me/collections/{id}writeEine Sammlung umbenennen. DELETE /v2/me/collections/{id}writeEine Sammlung löschen. GET /v2/me/collections/{id}/postsreadDie Beiträge einer Sammlung, wie im Reiter „Gemerkt“. POST /v2/me/collections/{id}/postswriteEinen Beitrag in eine Sammlung legen oder herausnehmen. Geschenke GET /v2/partner/quotareadWie viel noch in deinem Kontingent zum Verschenken steckt. GET /v2/partner/giftsreadWas du aus dem Kontingent verschenkt hast, an wen und wann – das Neueste zuerst. POST /v2/partner/giftsgiftsAbo-Monate oder Funken aus deinem Kontingent an ein Mitglied verschenken. GET /v2/gift-dropsreadDeine Geschenke unter Beiträgen: wie viele Plätze noch frei sind und wie sie bezahlt wurden. POST /v2/gift-dropsgiftsEinen Beitrag mit Geschenken zum Abholen veröffentlichen.
Der Einstieg Die erste Anfrage jedes Programms: Funktioniert der Schlüssel, und was darf er?
GET /v2API-Version und Name dieser Instanz.
Recht read mit ETag seit v2.0 Ohne Schrägstrich am Ende: https://api.tellmelo.com/v2/ leitet mit 308 auf https://api.tellmelo.com/v2 um, und nicht jedes Programm folgt.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2"Antwort Antwortet mit einem Service .
Beispiel {
"name": "tellmelo",
"version": "2.20",
"scope": "read write",
"rateLimit": {
"limit": 120,
"remaining": 117
},
"docs": "/developers/docs",
"spec": "/api/v2/openapi.json"
}Mögliche Status: 200304401429
Beiträge Öffentliche Beiträge lesen, eigene veröffentlichen und wieder entfernen.
GET /v2/postsDie öffentlichen Beiträge, neueste zuerst.
Recht read blätterbar mit ETag seit v2.0 Auf öffentlichen Pfaden sind counts.likes und counts.reposts immer 0 und pinned ist false.
Beiträge in Gruppen stehen nicht hier, sondern unter /communities/{id}/posts.
Parameter Name Typ Bedeutung limitin der Adresse integerfreiwillig Einträge je Seite: 20 als Vorgabe, höchstens 50. cursorin der Adresse stringfreiwillig Das next der vorigen Antwort. Ohne ihn von vorn.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts?limit=20"Antwort Antwortet mit einer Seite von Post , als `items` und `next`.
Beispiel {
"items": [
{
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"text": "The bees are back in the garden 🐝 #garden",
"kind": "poll",
"author": {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
},
"community": {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening"
},
"media": [
{
"url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"kind": "image",
"poster": null,
"ai": "without"
}
],
"poll": {
"options": [
{
"text": "Lavender",
"votes": 12
},
{
"text": "Sunflowers",
"votes": 7
},
{
"text": "Clover",
"votes": 3
}
],
"total": 22,
"multiple": false,
"endsAt": null,
"running": true,
"resultsVisible": true,
"myVotes": [
0
]
},
"quotes": null,
"continues": null,
"counts": {
"replies": 4,
"likes": 31,
"reposts": 2
},
"pinned": false,
"giftDrop": {
"item": "plan",
"quantity": 3,
"places": 10,
"left": 4,
"audience": "followers",
"newAccounts": false,
"status": "open",
"claimed": true
},
"createdAt": 1758624000000
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}Mögliche Status: 200304401429
GET /v2/posts/{id}Ein einzelner Beitrag, über seine id.
Recht read mit ETag seit v2.0 Auf öffentlichen Pfaden sind counts.likes und counts.reposts immer 0 und pinned ist false.
Beiträge in Gruppen stehen nicht hier, sondern unter /communities/{id}/posts.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id eines Beitrags.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1"Antwort Antwortet mit einem Post .
Beispiel {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"text": "The bees are back in the garden 🐝 #garden",
"kind": "poll",
"author": {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
},
"community": {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening"
},
"media": [
{
"url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"kind": "image",
"poster": null,
"ai": "without"
}
],
"poll": {
"options": [
{
"text": "Lavender",
"votes": 12
},
{
"text": "Sunflowers",
"votes": 7
},
{
"text": "Clover",
"votes": 3
}
],
"total": 22,
"multiple": false,
"endsAt": null,
"running": true,
"resultsVisible": true,
"myVotes": [
0
]
},
"quotes": null,
"continues": null,
"counts": {
"replies": 4,
"likes": 31,
"reposts": 2
},
"pinned": false,
"giftDrop": {
"item": "plan",
"quantity": 3,
"places": 10,
"left": 4,
"audience": "followers",
"newAccounts": false,
"status": "open",
"claimed": true
},
"createdAt": 1758624000000
}Mögliche Status: 200304400401404429
POST /v2/postsEinen Beitrag veröffentlichen.
Ein Beitrag braucht Text oder eine Umfrage. Länge, Antworten einer Umfrage und Tempo legt die Instanz fest; darüber kommt 400 oder 429.
Bilder, ein GIF oder ein Video mit media anhängen. Ein GIF oder Video steht allein. Geteilte GIFs und Videos anderer darfst du auf tellmelo verwenden.
Ein Beitrag für enge Freunde oder mit Co-Autor erscheint sofort, nicht in einer Gruppe und nicht geplant. Beides zugleich geht nicht.
Parameter Name Typ Bedeutung textim Körper stringfreiwillig Der Text des Beitrags, der Antwort oder der Nachricht. communityim Körper stringfreiwillig Die id der Gruppe, in deren Feed-Kanal der Beitrag geht; er muss an sein, und du brauchst das Recht dazu. Ohne sie steht der Beitrag außerhalb jeder Gruppe. quotesim Körper stringfreiwillig Die id des Beitrags, den dieser zitiert. pollim Körper string[]freiwillig Die Antwortmöglichkeiten als Liste von Texten. mediaim Körper string[]freiwillig IDs von Bildern, die in der App hochgeladen wurden, oder eines GIFs oder Videos aus der Mediathek (seit 2.14). audienceim Körper stringfreiwillig Wer den Beitrag sieht: everyone alle, die ihn sehen dürfen, close nur deine engen Freunde.everyoneclose coauthorim Körper stringfreiwillig Die id eines Kontos, das du als Co-Autor einlädst. Ihr müsst euch gegenseitig folgen.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"text":"The bees are back in the garden 🐝 #garden","audience":"everyone"}' \
"https://api.tellmelo.com/v2/posts"Antwort Antwortet mit einem Created .
Beispiel {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"scheduledFor": null,
"deleteAt": null
}Mögliche Status: 200400401403429
DELETE /v2/posts/{id}Einen eigenen Beitrag entfernen.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id eines Beitrags.
Beispielanfrage curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
GET /v2/me/scheduledDeine Beiträge, die noch nicht erschienen sind, und worauf sie warten.
Recht read mit ETag seit v2.12 Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/scheduled"Antwort Antwortet mit einer Seite von ScheduledPost , als `items` und `next`.
Beispiel {
"items": [
{
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"text": "Market day tomorrow – see you at the bee stand! #garden",
"communityId": null,
"publishAt": 1758710400000,
"deleteAt": null,
"waitingFor": "time",
"createdAt": 1758624000000
}
],
"next": null
}Mögliche Status: 200304401429
POST /v2/posts/{id}/scheduleÄndern, wann ein geplanter Beitrag erscheint oder wann sich ein Beitrag von selbst löscht.
Nur eigene Beiträge. Solange die Geschenke eines Beitrags nicht bezahlt sind, lässt er sich nicht planen.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id eines Beitrags. publishAtim Körper integerfreiwillig Wann der geplante Beitrag erscheint, in Millisekunden seit 1970. deleteAtim Körper integerfreiwillig Wann sich der Beitrag von selbst löscht, in Millisekunden seit 1970.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/schedule"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
POST /v2/posts/{id}/editDen Text eines eigenen Beitrags ändern.
Nur innerhalb der Zeit zum Bearbeiten, die dein Abo vorgibt. Geplante Beiträge lassen sich nicht bearbeiten.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id eines Beitrags. textim Körper stringPflicht Der Text des Beitrags, der Antwort oder der Nachricht.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"text":"The bees are back in the garden 🐝🌻 #garden"}' \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/edit"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
GET /v2/posts/{id}/reply-settingsWer auf einen eigenen Beitrag antworten darf, ob Antworten auf Freigabe warten und der langsame Modus.
Recht read mit ETag seit v2.19 Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id eines Beitrags.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/reply-settings"Antwort Antwortet mit einem ReplySettings .
Beispiel {
"audience": "following",
"approval": false,
"slow": "auto"
}Mögliche Status: 200304400401404429
PUT /v2/posts/{id}/reply-settingsDie Antwort-Einstellungen eines eigenen Beitrags ändern. Was du nicht angibst, bleibt.
Nur eigene Beiträge.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id eines Beitrags. audienceim Körper stringfreiwillig Wer antworten darf: alle, Konten, denen du folgst, Erwähnte oder niemand.allfollowingmentionednobody approvalim Körper booleanfreiwillig Ob Antworten erst nach deiner Freigabe erscheinen. slowim Körper stringfreiwillig Langsamer Modus: auto schaltet ihn bei vielen Antworten von selbst ein, on immer, off nie.autoonoff
Beispielanfrage curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"audience":"following","approval":false,"slow":"auto"}' \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/reply-settings"Antwort Antwortet mit einem ReplySettings .
Beispiel {
"audience": "following",
"approval": false,
"slow": "auto"
}Mögliche Status: 200400401403404429
POST /v2/posts/{id}/coauthorEine Einladung als Co-Autor annehmen oder ablehnen.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id eines Beitrags. acceptim Körper booleanPflicht true nimmt die Einladung an, false lehnt sie ab.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"accept":true}' \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/coauthor"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
DELETE /v2/posts/{id}/coauthorAls Co-Autor zurücktreten oder als Verfasser den Co-Autor vom Beitrag nehmen.
Für den Co-Autor und den Verfasser des Beitrags.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id eines Beitrags.
Beispielanfrage curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/coauthor"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
POST /v2/posts/{id}/pinEinen eigenen Beitrag oben im Profil anheften oder lösen.
Nur eigene, sichtbare Beiträge. Wie viele angeheftet sein können, hängt vom Abo ab.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id eines Beitrags. activeim Körper booleanPflicht true heftet den Beitrag an, false löst ihn.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"active":true}' \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/pin"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
Antworten Antworten unter einem Beitrag, als Liste mit parentId.
GET /v2/posts/{id}/repliesDie Antworten auf einen Beitrag, ohne geblockte Konten.
Recht read blätterbar mit ETag seit v2.0 Die Liste ist flach und nach Zeit sortiert; parentId macht einen Baum daraus. Eine Seite enthält immer ganze Stränge. Antworten blockierter Konten fehlen.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id eines Beitrags. limitin der Adresse integerfreiwillig Einträge je Seite: 20 als Vorgabe, höchstens 50. cursorin der Adresse stringfreiwillig Das next der vorigen Antwort. Ohne ihn von vorn.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/replies?limit=20"Antwort Antwortet mit einer Seite von Reply , als `items` und `next`.
Beispiel {
"items": [
{
"id": "9e4b1c7d-2a3f-4d5e-8b6c-0f1e2d3c4b5a",
"text": "Same here, the lavender is full of them.",
"kind": "post",
"author": {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"verified": false,
"accountKind": "person"
},
"community": null,
"media": [],
"poll": null,
"quotes": null,
"continues": null,
"counts": {
"replies": 0,
"likes": 3,
"reposts": 0
},
"pinned": false,
"giftDrop": null,
"createdAt": 1758624600000,
"postId": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"parentId": null
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}Mögliche Status: 200304400401404429
POST /v2/posts/{id}/repliesAuf einen Beitrag antworten.
Im langsamen Modus geht eine Antwort je Person alle 10 Minuten, sonst kommt 429. Ausgenommen sind der Verfasser und Konten, denen er folgt.
Mit media höchstens ein Bild, GIF oder Video.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id eines Beitrags. textim Körper stringPflicht Der Text des Beitrags, der Antwort oder der Nachricht. parentIdim Körper stringfreiwillig Die id der Antwort, auf die diese antwortet. Ohne sie direkt an den Beitrag. mediaim Körper string[]freiwillig IDs von Bildern, die in der App hochgeladen wurden, oder eines GIFs oder Videos aus der Mediathek (seit 2.14). publishAtim Körper integerfreiwillig Wann die Antwort erscheinen soll, in Millisekunden seit 1970. Ohne sie geht sie sofort raus.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"text":"Same here, the lavender is full of them."}' \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/replies"Antwort Antwortet mit einem Created .
Beispiel {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"scheduledFor": null,
"deleteAt": null
}Mögliche Status: 200400401403404429
POST /v2/replies/{id}/editDen Text einer eigenen Antwort ändern.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id der Antwort. textim Körper stringPflicht Der Text des Beitrags, der Antwort oder der Nachricht.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"text":"Same here, the lavender and the clover are full of them."}' \
"https://api.tellmelo.com/v2/replies/9e4b1c7d-2a3f-4d5e-8b6c-0f1e2d3c4b5a/edit"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
DELETE /v2/replies/{id}Eine eigene Antwort entfernen.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id der Antwort.
Beispielanfrage curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/replies/9e4b1c7d-2a3f-4d5e-8b6c-0f1e2d3c4b5a"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
POST /v2/replies/{id}/likeEine Antwort hochvoten (ein „Gefällt mir“ ist seit den Votes auf Antworten ein Upvote) oder den Upvote zurücknehmen; ein Downvote bleibt.
Recht write seit v2.12 veraltet Veraltet seit 2.19: Nimm POST /replies/{id}/vote. Diese Route bleibt vorerst erhalten.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id der Antwort. activeim Körper booleanPflicht true setzt die Beziehung, false nimmt sie zurück.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"active":true}' \
"https://api.tellmelo.com/v2/replies/9e4b1c7d-2a3f-4d5e-8b6c-0f1e2d3c4b5a/like"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
POST /v2/replies/{id}/voteEine Antwort hoch- oder runtervoten oder die eigene Stimme zurücknehmen. Antwortet mit der eigenen Stimme und der Wertung danach.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id der Antwort. voteim Körper stringPflicht up stimmt hoch, down runter, none nimmt die eigene Stimme zurück.updownnone
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"vote":"up"}' \
"https://api.tellmelo.com/v2/replies/9e4b1c7d-2a3f-4d5e-8b6c-0f1e2d3c4b5a/vote"Antwort Antwortet mit einem ReplyVote .
Beispiel {
"vote": "up",
"score": 12
}Mögliche Status: 200400401403404429
POST /v2/replies/{id}/pickUnter dem eigenen Beitrag eine Antwort als beste hervorheben oder die Hervorhebung zurücknehmen.
Nur unter eigenen Beiträgen und nur Antworten direkt auf den Beitrag. Eine neue Hervorhebung ersetzt die alte.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id der Antwort. activeim Körper booleanPflicht true hebt die Antwort hervor, false nimmt die Hervorhebung zurück.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"active":true}' \
"https://api.tellmelo.com/v2/replies/9e4b1c7d-2a3f-4d5e-8b6c-0f1e2d3c4b5a/pick"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
GET /v2/posts/{id}/replies/waitingDie Antworten, die unter einem Beitrag auf Freigabe warten: unter dem eigenen alle, sonst nur die eigenen.
Recht read mit ETag seit v2.19 Ob Antworten warten, stellt der Verfasser in den Antwort-Einstellungen ein.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id eines Beitrags.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/replies/waiting"Antwort Antwortet mit einer Seite von Reply , als `items` und `next`.
Beispiel {
"items": [
{
"id": "9e4b1c7d-2a3f-4d5e-8b6c-0f1e2d3c4b5a",
"text": "Same here, the lavender is full of them.",
"kind": "post",
"author": {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"verified": false,
"accountKind": "person"
},
"community": null,
"media": [],
"poll": null,
"quotes": null,
"continues": null,
"counts": {
"replies": 0,
"likes": 3,
"reposts": 0
},
"pinned": false,
"giftDrop": null,
"createdAt": 1758624600000,
"postId": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"parentId": null
}
],
"next": null
}Mögliche Status: 200304400401404429
POST /v2/replies/{id}/decideEine wartende Antwort unter dem eigenen Beitrag freigeben oder ablehnen. Abgelehnt wird sie gelöscht.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id der Antwort. approveim Körper booleanPflicht true gibt die Antwort frei, false lehnt sie ab.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"approve":true}' \
"https://api.tellmelo.com/v2/replies/9e4b1c7d-2a3f-4d5e-8b6c-0f1e2d3c4b5a/decide"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
GET /v2/posts/{id}/replies/plannedDie eigenen Antworten, die unter einem Beitrag für später geplant sind.
Recht read mit ETag seit v2.19 Geplant wird mit publishAt beim Antworten. Höchstens 20 geplante Antworten zugleich.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id eines Beitrags.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/replies/planned"Antwort Antwortet mit einer Seite von PlannedReply , als `items` und `next`.
Beispiel {
"items": [
{
"id": "3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9",
"parentId": null,
"text": "Count me in for Saturday!",
"publishAt": 1758710400000,
"state": "waiting"
}
],
"next": null
}Mögliche Status: 200304400401404429
PUT /v2/me/planned-replies/{id}Text oder Zeit einer geplanten Antwort ändern. Eine fehlgeschlagene wartet danach wieder.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id der geplanten Antwort. textim Körper stringfreiwillig Der Text des Beitrags, der Antwort oder der Nachricht. publishAtim Körper integerfreiwillig Wann die Antwort erscheinen soll, in Millisekunden seit 1970. Ohne sie geht sie sofort raus.
Beispielanfrage curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"text":"See you there!","publishAt":1758700000000}' \
"https://api.tellmelo.com/v2/me/planned-replies/3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
POST /v2/me/planned-replies/{id}/sendEine geplante Antwort sofort senden.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id der geplanten Antwort.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/planned-replies/3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9/send"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
DELETE /v2/me/planned-replies/{id}Eine geplante Antwort löschen.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id der geplanten Antwort.
Beispielanfrage curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/planned-replies/3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
Umfragen Eine Umfrage ist ein Beitrag, dessen poll gesetzt ist. Abstimmen hat einen eigenen Pfad.
POST /v2/posts/{id}/voteAn einer Umfrage teilnehmen.
Die Stimmen je Antwort sind null, bis du abgestimmt hast oder die Umfrage endet. total ist immer da.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id eines Beitrags. optionim Körper integerPflicht Welche Antwort, ab 0 gezählt. Bei Mehrfachauswahl einmal je Antwort aufrufen. retractim Körper booleanfreiwillig true nimmt die Stimme zurück.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"option":0}' \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/vote"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
Profile Öffentliche Profile über ihren Kurznamen, und was sie gepostet haben.
GET /v2/profiles/{handle}Ein Profil, über sein Kürzel.
Recht read mit ETag seit v2.0 Parameter Name Typ Bedeutung handleim Pfad stringPflicht Das Kürzel eines Profils, in beliebiger Groß- und Kleinschreibung.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/profiles/mara"Antwort Antwortet mit einem Profile .
Beispiel {
"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
}Mögliche Status: 200304400401404429
GET /v2/profiles/{handle}/postsDie öffentlichen Beiträge eines Profils, neueste zuerst.
Recht read blätterbar mit ETag seit v2.0 Auf öffentlichen Pfaden sind counts.likes und counts.reposts immer 0 und pinned ist false.
Beiträge in Gruppen stehen nicht hier, sondern unter /communities/{id}/posts.
Parameter Name Typ Bedeutung handleim Pfad stringPflicht Das Kürzel eines Profils, in beliebiger Groß- und Kleinschreibung. limitin der Adresse integerfreiwillig Einträge je Seite: 20 als Vorgabe, höchstens 50. cursorin der Adresse stringfreiwillig Das next der vorigen Antwort. Ohne ihn von vorn.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/profiles/mara/posts?limit=20"Antwort Antwortet mit einer Seite von Post , als `items` und `next`.
Beispiel {
"items": [
{
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"text": "The bees are back in the garden 🐝 #garden",
"kind": "poll",
"author": {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
},
"community": {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening"
},
"media": [
{
"url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"kind": "image",
"poster": null,
"ai": "without"
}
],
"poll": {
"options": [
{
"text": "Lavender",
"votes": 12
},
{
"text": "Sunflowers",
"votes": 7
},
{
"text": "Clover",
"votes": 3
}
],
"total": 22,
"multiple": false,
"endsAt": null,
"running": true,
"resultsVisible": true,
"myVotes": [
0
]
},
"quotes": null,
"continues": null,
"counts": {
"replies": 4,
"likes": 31,
"reposts": 2
},
"pinned": false,
"giftDrop": {
"item": "plan",
"quantity": 3,
"places": 10,
"left": 4,
"audience": "followers",
"newAccounts": false,
"status": "open",
"claimed": true
},
"createdAt": 1758624000000
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}Mögliche Status: 200304400401404429
GET /v2/profiles/{handle}/eventsDie anstehenden Termine eines Profils, die nächsten zuerst.
Recht read mit ETag seit v2.19 Nur solange das Abo des Profils Termine enthält. Zwischen Konten, die sich blockiert haben, nichts.
Parameter Name Typ Bedeutung handleim Pfad stringPflicht Das Kürzel eines Profils, in beliebiger Groß- und Kleinschreibung.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/profiles/mara/events"Antwort Antwortet mit einer Seite von Event , als `items` und `next`.
Beispiel {
"items": [
{
"id": "2a3b4c5d-6e7f-4809-9a1b-2c3d4e5f6a7b",
"title": "Seed swap",
"startsAt": 1758883200000,
"endsAt": 1758890400000,
"place": "Community garden",
"description": "Bring seeds, take seeds.",
"signups": {
"count": 14,
"going": true
}
}
],
"next": null
}Mögliche Status: 200304400401404429
POST /v2/me/eventsEinen Termin anlegen. Antwortet mit seiner id.
Braucht ein Abo mit Terminen, sonst 403. Wie viele anstehen können, hängt vom Abo ab.
Parameter Name Typ Bedeutung titleim Körper stringPflicht Der Titel. startsAtim Körper integerPflicht Beginn, in Millisekunden seit 1970. endsAtim Körper integerfreiwillig Ende, in Millisekunden seit 1970. Freiwillig. placeim Körper stringfreiwillig Wo er stattfindet. descriptionim Körper stringfreiwillig Eine Beschreibung. signupsim Körper booleanfreiwillig Ob man sich anmelden kann. Braucht ein Abo mit Anmeldungen. capacityim Körper integerfreiwillig Wie viele sich höchstens anmelden können. Ohne Angabe ohne Grenze.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"title":"Seed swap","startsAt":1758700000000,"place":"Community garden","signups":true,"capacity":30}' \
"https://api.tellmelo.com/v2/me/events"Antwort Antwortet mit einem Made .
Beispiel {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Mögliche Status: 200400401403429
PUT /v2/me/events/{id}Einen eigenen Termin ändern. Alle Felder werden neu gesetzt.
Ein Termin, der schon begonnen hat, behält seinen Beginn.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id des Termins. titleim Körper stringPflicht Der Titel. startsAtim Körper integerPflicht Beginn, in Millisekunden seit 1970. endsAtim Körper integerfreiwillig Ende, in Millisekunden seit 1970. Freiwillig. placeim Körper stringfreiwillig Wo er stattfindet. descriptionim Körper stringfreiwillig Eine Beschreibung. signupsim Körper booleanfreiwillig Ob man sich anmelden kann. Braucht ein Abo mit Anmeldungen. capacityim Körper integerfreiwillig Wie viele sich höchstens anmelden können. Ohne Angabe ohne Grenze.
Beispielanfrage curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"title":"Seed swap","startsAt":1758700000000,"place":"Community garden","signups":true,"capacity":30}' \
"https://api.tellmelo.com/v2/me/events/2a3b4c5d-6e7f-4809-9a1b-2c3d4e5f6a7b"Antwort Antwortet mit einem Made .
Beispiel {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Mögliche Status: 200400401403404429
DELETE /v2/me/events/{id}Einen eigenen Termin löschen.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id des Termins.
Beispielanfrage curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/events/2a3b4c5d-6e7f-4809-9a1b-2c3d4e5f6a7b"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
GET /v2/me/events/{id}/signupsWer sich für einen deiner Termine angemeldet hat.
Recht read mit ETag seit v2.19 Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id des Termins.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/events/2a3b4c5d-6e7f-4809-9a1b-2c3d4e5f6a7b/signups"Antwort Antwortet mit einer Seite von EventSignup , als `items` und `next`.
Beispiel {
"items": [
{
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"at": 1758624000000
}
],
"next": null
}Mögliche Status: 200304400401404429
POST /v2/events/{id}/signupDich für einen Termin an- oder abmelden.
Nur bei Terminen mit Anmeldung, nicht bei den eigenen. Ist er voll, kommt 409.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id des Termins. goingim Körper booleanPflicht true meldet dich an, false ab.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"going":true}' \
"https://api.tellmelo.com/v2/events/2a3b4c5d-6e7f-4809-9a1b-2c3d4e5f6a7b/signup"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
Gruppen Die offenen Gruppen und deine eigenen, ihre Beiträge, Mitglieder, Rollen und Einladungslinks.
GET /v2/communitiesDie offenen Gruppen dieser Instanz; mit mine=true die Gruppen deines Kontos.
Recht read mit ETag seit v2.0 Nach Mitgliederzahl sortiert und nicht geblättert; next ist immer null.
Parameter Name Typ Bedeutung limitin der Adresse integerfreiwillig Einträge je Seite: 20 als Vorgabe, höchstens 50. minein der Adresse booleanfreiwillig true für die Gruppen deines Kontos, auch interne und versteckte, nach Name.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities?limit=20"Antwort Antwortet mit einer Seite von Community , als `items` und `next`.
Beispiel {
"items": [
{
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening",
"handle": "urbangardening",
"description": "Balconies, allotments, rooftops: whatever grows.",
"tags": [
"garden",
"bees"
],
"members": 312,
"joinPolicy": "open",
"visibility": "open",
"feedChannel": true,
"sparks": 24,
"perks": [
"tint",
"welcome"
],
"membership": {
"leader": null,
"roles": [
"4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8"
],
"permissions": [
"attach",
"invite",
"send",
"view"
],
"mutedUntil": null
}
}
],
"next": null
}Mögliche Status: 200304401429
GET /v2/communities/{id}Eine einzelne Gruppe, über ihre id.
Recht read mit ETag seit v2.0 Interne und versteckte Gruppen nur, wenn dein Konto Mitglied ist.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60"Antwort Antwortet mit einem Community .
Beispiel {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening",
"handle": "urbangardening",
"description": "Balconies, allotments, rooftops: whatever grows.",
"tags": [
"garden",
"bees"
],
"members": 312,
"joinPolicy": "open",
"visibility": "open",
"feedChannel": true,
"sparks": 24,
"perks": [
"tint",
"welcome"
],
"membership": {
"leader": null,
"roles": [
"4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8"
],
"permissions": [
"attach",
"invite",
"send",
"view"
],
"mutedUntil": null
}
}Mögliche Status: 200304400401404429
GET /v2/communities/{id}/postsDie Beiträge des Feed-Kanals einer Gruppe, neueste zuerst.
Recht read blätterbar mit ETag seit v2.0 Auf öffentlichen Pfaden sind counts.likes und counts.reposts immer 0 und pinned ist false.
Ist der Feed-Kanal aus, antwortet der Pfad mit 409 und feed_off.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe. limitin der Adresse integerfreiwillig Einträge je Seite: 20 als Vorgabe, höchstens 50. cursorin der Adresse stringfreiwillig Das next der vorigen Antwort. Ohne ihn von vorn.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/posts?limit=20"Antwort Antwortet mit einer Seite von Post , als `items` und `next`.
Beispiel {
"items": [
{
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"text": "The bees are back in the garden 🐝 #garden",
"kind": "poll",
"author": {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
},
"community": {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening"
},
"media": [
{
"url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"kind": "image",
"poster": null,
"ai": "without"
}
],
"poll": {
"options": [
{
"text": "Lavender",
"votes": 12
},
{
"text": "Sunflowers",
"votes": 7
},
{
"text": "Clover",
"votes": 3
}
],
"total": 22,
"multiple": false,
"endsAt": null,
"running": true,
"resultsVisible": true,
"myVotes": [
0
]
},
"quotes": null,
"continues": null,
"counts": {
"replies": 4,
"likes": 31,
"reposts": 2
},
"pinned": false,
"giftDrop": {
"item": "plan",
"quantity": 3,
"places": 10,
"left": 4,
"audience": "followers",
"newAccounts": false,
"status": "open",
"claimed": true
},
"createdAt": 1758624000000
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}Mögliche Status: 200304400401404429
GET /v2/communities/{id}/membersDie Mitglieder einer Gruppe mit ihren Rollen.
Recht read mit ETag seit v2.15 Erst die Leitung, dann nach der höchsten Rolle; höchstens 300.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/members"Antwort Antwortet mit einer Seite von GroupMember , als `items` und `next`.
Beispiel {
"items": [
{
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"bot": false,
"leader": null,
"roles": [
"4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8"
],
"mutedUntil": null
}
],
"next": null
}Mögliche Status: 200304400401404429
GET /v2/communities/{id}/rolesDie Rollen einer Gruppe, die höchste zuerst, @everyone zuletzt.
Recht read mit ETag seit v2.15 Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/roles"Antwort Antwortet mit einer Seite von Role , als `items` und `next`.
Beispiel {
"items": [
{
"id": "4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8",
"name": "Gardeners",
"everyone": false,
"color": "green",
"permissions": [
"attach",
"invite",
"send",
"view"
],
"members": 24,
"editable": true,
"selfable": false
}
],
"next": null
}Mögliche Status: 200304400401404429
GET /v2/communities/{id}/bellWelche Mitteilungen dir eine Gruppe schickt.
Recht read mit ETag seit v2.15 Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/bell"Antwort Antwortet mit einem Bell .
Beispiel {
"level": "important"
}Mögliche Status: 200304400401404429
GET /v2/invites/{code}Die Gruppe hinter einem Einladungslink, vor dem Beitritt.
Recht read mit ETag seit v2.15 Parameter Name Typ Bedeutung codeim Pfad stringPflicht Der Code eines Einladungslinks, das Ende seiner Adresse.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/invites/k7Qm2xPa"Antwort Antwortet mit einem InvitePreview .
Beispiel {
"community": {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening",
"members": 312,
"rules": [
"Be kind.",
"No advertising."
]
},
"member": false
}Mögliche Status: 200304400401404429
PUT /v2/roles/{id}/selfEine selbst wählbare Rolle nehmen oder ablegen.
Nur Rollen, die die Leitung als selbst wählbar anbietet (selfable), und nur für das eigene Konto.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Rolle. activeim Körper booleanfreiwillig false nimmt die Rolle; sonst wird sie gegeben.
Beispielanfrage curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"active":true}' \
"https://api.tellmelo.com/v2/roles/4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8/self"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
GET /v2/communities/{id}/emojisDie eigenen Emojis einer Gruppe.
Recht read mit ETag seit v2.20 Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/emojis"Antwort Antwortet mit einer Seite von GroupEmoji , als `items` und `next`.
Beispiel {
"items": [
{
"name": "seedling",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false
}
],
"next": null
}Mögliche Status: 200304400401404429
PUT /v2/communities/{id}/bellEinstellen, welche Mitteilungen dir eine Gruppe schickt.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe. levelim Körper stringPflicht Welche Mitteilungen kommen.allimportantoff
Beispielanfrage curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"level":"important"}' \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/bell"Antwort Antwortet mit einem Bell .
Beispiel {
"level": "important"
}Mögliche Status: 200400401403404429
POST /v2/invites/{code}/joinMit einem Einladungslink einer Gruppe beitreten.
Parameter Name Typ Bedeutung codeim Pfad stringPflicht Der Code eines Einladungslinks, das Ende seiner Adresse. rulesim Körper booleanfreiwillig true, wenn du die Regeln der Gruppe annimmst; nötig, wenn sie welche hat.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/invites/k7Qm2xPa/join"Antwort Antwortet mit einem Joined .
Beispiel {
"community": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60"
}Mögliche Status: 200400401403404429
GET /v2/communities/{id}/botsDie Bots einer Gruppe mit dem, was ihre Rolle erlaubt.
Recht read mit ETag seit v2.19 Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/bots"Antwort Antwortet mit einer Seite von GroupBot , als `items` und `next`.
Beispiel {
"items": [
{
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "gardenbot",
"name": "Garden bot",
"description": "Reminds the group of watering days.",
"permissions": [
"send",
"view"
]
}
],
"next": null
}Mögliche Status: 200304400401404429
Kanäle Die Kanäle deiner Gruppen und ihr Chat: lesen, schreiben, als gelesen markieren.
GET /v2/communities/{id}/channelsDie Kanäle einer Gruppe, die du siehst, in ihrer Reihenfolge.
Recht read mit ETag seit v2.15 Der Feed-Kanal (kind: feed) steht nur hier, solange er an ist; seine Beiträge kommen über /communities/{id}/posts.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/channels"Antwort Antwortet mit einer Seite von Channel , als `items` und `next`.
Beispiel {
"items": [
{
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a",
"kind": "chat",
"name": "harvest",
"topic": "What came in this week",
"category": {
"id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
"name": "Garden",
"symbol": {
"emoji": null,
"icon": null,
"image": null,
"color": null,
"shape": null
}
},
"unread": 3,
"permissions": [
"view",
"send"
],
"symbol": {
"emoji": "🌻",
"icon": null,
"image": null,
"color": "amber",
"shape": "circle"
}
}
],
"next": null
}Mögliche Status: 200304400401404429
GET /v2/channels/{id}/messagesDie Nachrichten eines Chat-Kanals, neueste zuerst.
Recht read blätterbar mit ETag seit v2.15 Je Seite bis zu 50 Nachrichten. Nachrichten von Konten, die du blockiert hast oder die dich blockiert haben, fehlen.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id eines Kanals. cursorin der Adresse stringfreiwillig Das next der vorigen Antwort. Ohne ihn von vorn. threadin der Adresse stringfreiwillig Die Nachricht, deren Thread gelesen wird: sie selbst und ihre Antworten statt des Chats.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a/messages"Antwort Antwortet mit einer Seite von ChannelMessage , als `items` und `next`.
Beispiel {
"items": [
{
"id": "61a2b3c4-d5e6-4f70-8192-a3b4c5d6e7f8",
"text": "@jon the first tomatoes are ripe 🍅",
"author": {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"bot": false
},
"media": [
{
"url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"kind": "image",
"poster": null,
"ai": "without"
}
],
"replyTo": "72b3c4d5-e6f7-4081-92a3-b4c5d6e7f809",
"roleColor": "green",
"threadOf": null,
"threadCount": 3,
"card": null,
"buttons": [],
"createdAt": 1758631200000
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}Mögliche Status: 200304400401404429
POST /v2/channels/{id}/messagesEine Nachricht in einem Chat-Kanal schreiben.
@Name benachrichtigt ein Mitglied, @everyone mit dem Recht dazu alle, höchstens sechsmal pro Stunde.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id eines Kanals. textim Körper stringfreiwillig Der Text des Beitrags, der Antwort oder der Nachricht. replyToim Körper stringfreiwillig Die id der Nachricht im selben Kanal, auf die du antwortest. mediaim Körper string[]freiwillig IDs von Bildern, die in der App hochgeladen wurden, oder eines GIFs oder Videos aus der Mediathek (seit 2.14). threadim Körper stringfreiwillig Die Nachricht des Chats, in deren Thread geantwortet wird; ohne sie geht die Nachricht in den Chat. cardim Körper objectfreiwillig Eine Karte { title, text, color, fields: [{ name, value }] }, höchstens 10 Felder. buttonsim Körper object[]freiwillig Bis zu 5 Knöpfe, je { id, label, style } mit style primary, secondary oder danger. Ein Druck kommt als Ereignis interaction.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"text":"Who has seeds to swap?"}' \
"https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a/messages"Antwort Antwortet mit einem Made .
Beispiel {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Mögliche Status: 200400401403404429
POST /v2/channels/{id}/readEinen Chat-Kanal bis zu einem Zeitpunkt als gelesen markieren.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id eines Kanals. atim Körper integerPflicht Bis wann gelesen ist, in Millisekunden, meist das createdAt der neuesten Nachricht.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a/read"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
DELETE /v2/channel-messages/{id}Eine eigene Nachricht in einem Chat-Kanal löschen.
Nur eigene Nachrichten; Nachrichten anderer entfernt die Leitung mit dem Recht groups .
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Nachricht in einem Chat-Kanal.
Beispielanfrage curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/channel-messages/61a2b3c4-d5e6-4f70-8192-a3b4c5d6e7f8"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
GET /v2/communities/{id}/voiceWer gerade in den Sprachkanälen einer Gruppe ist, je Kanal.
Recht read mit ETag seit v2.19 Nur Kanäle, die du sehen darfst. Läuft kein Medienserver, ist die Liste leer.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/voice"Antwort Antwortet mit einer Seite von VoiceRoom , als `items` und `next`.
Beispiel {
"items": [
{
"channel": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a",
"people": [
{
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"muted": false,
"deaf": false,
"camera": false,
"screen": true
}
]
}
],
"next": null
}Mögliche Status: 200304400401404429
Gruppen verwalten Was die Einstellungen einer Gruppe in der App können, mit dem Recht groups . Was dein Konto darf, entscheidet die Gruppe wie in der App: Leitung, Rollen und ihre Rangfolge.
POST /v2/communities/{id}/emojisDer Gruppe ein Emoji geben.
Nur wer die Kanäle der Gruppe verwalten darf. Das Bild wird wie ein eigenes Emoji hochgeladen (POST /me/emojis/pictures); der Name ist für alle Emojis nur einmal vergeben.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe. nameim Körper stringPflicht Der Name, unter dem du das Emoji mit :name: schreibst. pictureim Körper stringPflicht Die id aus POST /me/emojis/pictures.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"seedling","picture":"8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9"}' \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/emojis"Antwort Antwortet mit einer Seite von GroupEmoji , als `items` und `next`.
Beispiel {
"items": [
{
"name": "seedling",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false
}
],
"next": null
}Mögliche Status: 200400401403404429
DELETE /v2/communities/{id}/emojis/{name}Ein Emoji der Gruppe entfernen.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe. nameim Pfad stringPflicht Der Name des Emojis, ohne Doppelpunkte.
Beispielanfrage curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/emojis/seedling"Antwort Antwortet mit einer Seite von GroupEmoji , als `items` und `next`.
Beispiel {
"items": [
{
"name": "seedling",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false
}
],
"next": null
}Mögliche Status: 200400401403404429
POST /v2/communities/{id}/rolesEine Rolle anlegen.
Nur Rollen unter deiner eigenen höchsten und nur Rechte, die du selbst hast; die Leitung steht über allen.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe. nameim Körper stringfreiwillig Der Name der Rolle; @everyone behält seinen. colorim Körper stringfreiwillig Die Farbe; leer für keine.indigovioletroseambergreenteal permissionsim Körper string[]freiwillig Die Rechte: view, send, attach, post_feed, invite, mention_everyone, moderate, timeout_members, kick_members, ban_members, manage_channels, manage_roles. selfableim Körper booleanfreiwillig true: Mitglieder nehmen sich die Rolle selbst. Nur für Rollen, die nicht mehr als Mitmachen erlauben (view, send, attach, voice_connect, voice_speak, voice_video).
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"Gardeners","permissions":["view","send","invite"],"selfable":false}' \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/roles"Antwort Antwortet mit einem Made .
Beispiel {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Mögliche Status: 200400401403404429
PUT /v2/roles/{id}Name, Farbe und Rechte einer Rolle ändern.
Ersetzt Name, Farbe und Rechte; was du weglässt, wird leer.
Nur Rollen unter deiner eigenen höchsten und nur Rechte, die du selbst hast; die Leitung steht über allen.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Rolle. nameim Körper stringfreiwillig Der Name der Rolle; @everyone behält seinen. colorim Körper stringfreiwillig Die Farbe; leer für keine.indigovioletroseambergreenteal permissionsim Körper string[]freiwillig Die Rechte: view, send, attach, post_feed, invite, mention_everyone, moderate, timeout_members, kick_members, ban_members, manage_channels, manage_roles. selfableim Körper booleanfreiwillig true: Mitglieder nehmen sich die Rolle selbst. Nur für Rollen, die nicht mehr als Mitmachen erlauben (view, send, attach, voice_connect, voice_speak, voice_video).
Beispielanfrage curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"Gardeners","permissions":["view","send","invite"],"selfable":false}' \
"https://api.tellmelo.com/v2/roles/4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8"Antwort Antwortet mit einem Made .
Beispiel {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Mögliche Status: 200400401403404429
DELETE /v2/roles/{id}Eine Rolle löschen.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Rolle.
Beispielanfrage curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/roles/4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
PUT /v2/communities/{id}/roles/orderDie Rangfolge der Rollen festlegen.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe. rolesim Körper string[]Pflicht Die ids aller Rollen unter deiner eigenen höchsten, die höchste zuerst; für die Leitung alle außer @everyone.
Beispielanfrage curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/roles/order"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
PUT /v2/roles/{id}/members/{member}Einem Mitglied eine Rolle geben oder nehmen.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Rolle. memberim Pfad stringPflicht Die id des Kontos eines Mitglieds. activeim Körper booleanfreiwillig false nimmt die Rolle; sonst wird sie gegeben.
Beispielanfrage curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"active":true}' \
"https://api.tellmelo.com/v2/roles/4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8/members/d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
POST /v2/communities/{id}/channelsEinen Chat-Kanal anlegen.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe. nameim Körper stringfreiwillig Der Name, ohne #; leer für den Namen, den die App in jeder Sprache gibt. topicim Körper stringfreiwillig Das Thema, das über dem Kanal steht. categoryim Körper stringfreiwillig Die id der Kategorie, in die der Kanal kommt; leer für keine. emojiim Körper stringfreiwillig Ein Emoji als Symbol. iconim Körper stringfreiwillig Ein Symbol aus dem Satz der App, mit seinem Namen.homehashmegaphonevolumemessagehelpinfobellcalendarbookbookmarkpinshieldstarheartsparklesflamezaptrophygiftrocketlightbulbcodewrenchbriefcasegraduationpalettecamerafilmmusicgamepaddumbbellleafflowerpawsunmooncloudglobemapcoffeepizzasmile imageim Körper stringfreiwillig Die ID eines Bildes, das du mit /media/emoji hochgeladen hast. colorim Körper stringfreiwillig Die Farbe der Kachel.brandindigovioletroseambergreentealred shapeim Körper stringfreiwillig Die Form der Kachel; ohne ein Kreis.circlesquaretrianglediamondhexagonoctagonshieldstar
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"harvest","emoji":"🌻","color":"amber"}' \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/channels"Antwort Antwortet mit einem Made .
Beispiel {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Mögliche Status: 200400401403404429
PUT /v2/channels/{id}Name, Thema und Kategorie eines Kanals ändern.
Ersetzt Name, Thema und Kategorie; was du weglässt, wird leer.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id eines Kanals. nameim Körper stringfreiwillig Der Name, ohne #; leer für den Namen, den die App in jeder Sprache gibt. topicim Körper stringfreiwillig Das Thema, das über dem Kanal steht. categoryim Körper stringfreiwillig Die id der Kategorie, in die der Kanal kommt; leer für keine. emojiim Körper stringfreiwillig Ein Emoji als Symbol. iconim Körper stringfreiwillig Ein Symbol aus dem Satz der App, mit seinem Namen.homehashmegaphonevolumemessagehelpinfobellcalendarbookbookmarkpinshieldstarheartsparklesflamezaptrophygiftrocketlightbulbcodewrenchbriefcasegraduationpalettecamerafilmmusicgamepaddumbbellleafflowerpawsunmooncloudglobemapcoffeepizzasmile imageim Körper stringfreiwillig Die ID eines Bildes, das du mit /media/emoji hochgeladen hast. colorim Körper stringfreiwillig Die Farbe der Kachel.brandindigovioletroseambergreentealred shapeim Körper stringfreiwillig Die Form der Kachel; ohne ein Kreis.circlesquaretrianglediamondhexagonoctagonshieldstar
Beispielanfrage curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"harvest","emoji":"🌻","color":"amber"}' \
"https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"Antwort Antwortet mit einem Made .
Beispiel {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Mögliche Status: 200400401403404429
DELETE /v2/channels/{id}Einen Chat-Kanal mit seinen Nachrichten löschen.
Der Feed-Kanal lässt sich nicht löschen, nur ausschalten.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id eines Kanals.
Beispielanfrage curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
PUT /v2/communities/{id}/channels/orderDie Reihenfolge der Kategorien und Chat-Kanäle festlegen.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe. categoriesim Körper string[]Pflicht Die ids aller Kategorien der Gruppe in der neuen Reihenfolge. channelsim Körper string[]Pflicht Die ids aller Chat-Kanäle der Gruppe in der neuen Reihenfolge.
Beispielanfrage curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/channels/order"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
PUT /v2/communities/{id}/channels/shapeDie Form aller Kanal-Symbole der Gruppe festlegen.
Nur die Leitung der Gruppe.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe. shapeim Körper stringfreiwillig Die Form aller Symbole der Gruppe; weggelassen hat jeder Kanal seine eigene.circlesquaretrianglediamondhexagonoctagonshieldstar
Beispielanfrage curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/channels/shape"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
GET /v2/channels/{id}/overridesWas Rollen in einem Kanal anders dürfen als in der Gruppe.
Recht groups mit ETag seit v2.15 Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id eines Kanals.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a/overrides"Antwort Antwortet mit einer Seite von ChannelOverride , als `items` und `next`.
Beispiel {
"items": [
{
"role": "4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8",
"allow": [
"send"
],
"deny": []
}
],
"next": null
}Mögliche Status: 200304400401403404429
PUT /v2/channels/{id}/overrides/{role}Festlegen, was eine Rolle in einem Kanal anders darf.
Nicht für Rollen auf oder über deiner eigenen höchsten.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id eines Kanals. roleim Pfad stringPflicht Die id einer Rolle. allowim Körper string[]freiwillig Was die Rolle hier zusätzlich darf: im Chat view, send, attach, mention_everyone, moderate, im Feed-Kanal view und post_feed. denyim Körper string[]freiwillig Was die Rolle hier nicht darf, aus denselben Rechten. Beide Listen leer heben die Abweichung auf.
Beispielanfrage curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"allow":["view"],"deny":["send"]}' \
"https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a/overrides/4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
POST /v2/communities/{id}/categoriesEine Kategorie für Kanäle anlegen.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe. nameim Körper stringPflicht Der Name der Kategorie. emojiim Körper stringfreiwillig Ein Emoji als Symbol. iconim Körper stringfreiwillig Ein Symbol aus dem Satz der App, mit seinem Namen.homehashmegaphonevolumemessagehelpinfobellcalendarbookbookmarkpinshieldstarheartsparklesflamezaptrophygiftrocketlightbulbcodewrenchbriefcasegraduationpalettecamerafilmmusicgamepaddumbbellleafflowerpawsunmooncloudglobemapcoffeepizzasmile imageim Körper stringfreiwillig Die ID eines Bildes, das du mit /media/emoji hochgeladen hast. colorim Körper stringfreiwillig Die Farbe der Kachel.brandindigovioletroseambergreentealred
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"Garden","emoji":"🌻","color":"amber"}' \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/categories"Antwort Antwortet mit einem Made .
Beispiel {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Mögliche Status: 200400401403404429
PUT /v2/categories/{id}Eine Kategorie umbenennen.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Kategorie. nameim Körper stringPflicht Der Name der Kategorie. emojiim Körper stringfreiwillig Ein Emoji als Symbol. iconim Körper stringfreiwillig Ein Symbol aus dem Satz der App, mit seinem Namen.homehashmegaphonevolumemessagehelpinfobellcalendarbookbookmarkpinshieldstarheartsparklesflamezaptrophygiftrocketlightbulbcodewrenchbriefcasegraduationpalettecamerafilmmusicgamepaddumbbellleafflowerpawsunmooncloudglobemapcoffeepizzasmile imageim Körper stringfreiwillig Die ID eines Bildes, das du mit /media/emoji hochgeladen hast. colorim Körper stringfreiwillig Die Farbe der Kachel.brandindigovioletroseambergreentealred
Beispielanfrage curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"Garden","emoji":"🌻","color":"amber"}' \
"https://api.tellmelo.com/v2/categories/9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d"Antwort Antwortet mit einem Made .
Beispiel {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Mögliche Status: 200400401403404429
DELETE /v2/categories/{id}Eine Kategorie löschen.
Ihre Kanäle bleiben, ohne Kategorie.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Kategorie.
Beispielanfrage curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/categories/9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
PUT /v2/communities/{id}/feedDen Feed-Kanal einer Gruppe ein- oder ausschalten.
Aus, bleiben die Beiträge gespeichert, sind aber nur für ihre Verfasser zu sehen.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe. onim Körper booleanPflicht true schaltet den Feed-Kanal ein, false aus.
Beispielanfrage curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/feed"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
GET /v2/communities/{id}/invitesDie Einladungslinks einer Gruppe, die noch gelten.
Recht groups mit ETag seit v2.15 Die Leitung sieht alle, alle anderen nur ihre eigenen.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/invites"Antwort Antwortet mit einer Seite von InviteLink , als `items` und `next`.
Beispiel {
"items": [
{
"code": "k7Qm2xPa",
"url": "https://tellmelo.com/groups?join=k7Qm2xPa",
"createdBy": {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"bot": false
},
"createdAt": 1758624000000,
"expiresAt": 1759228800000,
"uses": 3,
"maxUses": 10
}
],
"next": null
}Mögliche Status: 200304400401403404429
POST /v2/communities/{id}/invitesEinen Einladungslink erstellen.
Ein Link gilt nur, solange du einladen darfst, und geht mit deinem Austritt.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe. daysim Körper integerfreiwillig Wie viele Tage der Link gilt; ohne gilt er, bis er zurückgenommen wird.1730 usesim Körper integerfreiwillig Wie oft der Link genutzt werden kann; ohne beliebig oft.151025100
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"days":7,"uses":10}' \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/invites"Antwort Antwortet mit einem Made .
Beispiel {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Mögliche Status: 200400401403404429
DELETE /v2/invites/{code}Einen Einladungslink zurücknehmen.
Parameter Name Typ Bedeutung codeim Pfad stringPflicht Der Code eines Einladungslinks, das Ende seiner Adresse.
Beispielanfrage curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/invites/k7Qm2xPa"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
POST /v2/channel-messages/{id}/removeDie Nachricht eines anderen Mitglieds aus einem Kanal entfernen.
Mit Eintrag im Protokoll der Gruppe und höchstens 60 pro Stunde, wie in der App.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Nachricht in einem Chat-Kanal.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/channel-messages/61a2b3c4-d5e6-4f70-8192-a3b4c5d6e7f8/remove"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
POST /v2/communities/{id}/posts/{post}/removeEinen Beitrag aus einer Gruppe entfernen.
Mit Eintrag im Protokoll der Gruppe und höchstens 60 pro Stunde, wie in der App.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe. postim Pfad stringPflicht Die id eines Beitrags. reasonim Körper stringPflicht Die Begründung, die das Mitglied liest.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"reason":"Advertising for another site, despite rule 2."}' \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/posts/post/remove"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
DELETE /v2/communities/{id}/members/{member}Ein Mitglied aus einer Gruppe kicken.
Seit 2.16 ein Kick: Das Mitglied kann wieder beitreten. Wer draußen bleiben soll, wird gebannt.
Nur mit dem Recht dafür und nur bei Mitgliedern unter deiner eigenen höchsten Rolle; die Co-Leitung nur als Gründer.
Mit Eintrag im Protokoll der Gruppe und höchstens 60 pro Stunde, wie in der App.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe. memberim Pfad stringPflicht Die id des Kontos eines Mitglieds. reasonim Körper stringPflicht Die Begründung, die das Mitglied liest.
Beispielanfrage curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"reason":"Advertising for another site, despite rule 2."}' \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/members/d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
PUT /v2/communities/{id}/members/{member}/timeoutEin Mitglied stummschalten.
Ein neuer Timeout ersetzt einen laufenden. Austreten und neu beitreten beendet ihn nicht.
Nur mit dem Recht dafür und nur bei Mitgliedern unter deiner eigenen höchsten Rolle; die Co-Leitung nur als Gründer.
Mit Eintrag im Protokoll der Gruppe und höchstens 60 pro Stunde, wie in der App.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe. memberim Pfad stringPflicht Die id des Kontos eines Mitglieds. secondsim Körper integerPflicht Wie lange, in Sekunden.60300600360086400604800 reasonim Körper stringfreiwillig Eine Begründung, die das Mitglied liest; freiwillig.
Beispielanfrage curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"seconds":600}' \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/members/d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d/timeout"Antwort Antwortet mit einem Until .
Beispiel {
"until": 1758624600000
}Mögliche Status: 200400401403404429
DELETE /v2/communities/{id}/members/{member}/timeoutEinen Timeout aufheben.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe. memberim Pfad stringPflicht Die id des Kontos eines Mitglieds.
Beispielanfrage curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/members/d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d/timeout"Antwort Antwortet mit einem Until .
Beispiel {
"until": 1758624600000
}Mögliche Status: 200400401403404429
GET /v2/communities/{id}/bansDie laufenden Banns einer Gruppe.
Recht groups mit ETag seit v2.16 Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/bans"Antwort Antwortet mit einer Seite von Ban , als `items` und `next`.
Beispiel {
"items": [
{
"member": {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"bot": false
},
"until": 1759228800000,
"createdAt": 1758624000000,
"by": "Mara 🌻"
}
],
"next": null
}Mögliche Status: 200304400401403404429
PUT /v2/communities/{id}/bans/{member}Ein Mitglied bannen.
Ohne days gilt der Bann, bis er aufgehoben wird.
Nur mit dem Recht dafür und nur bei Mitgliedern unter deiner eigenen höchsten Rolle; die Co-Leitung nur als Gründer.
Mit Eintrag im Protokoll der Gruppe und höchstens 60 pro Stunde, wie in der App.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe. memberim Pfad stringPflicht Die id des Kontos eines Mitglieds. daysim Körper integerfreiwillig Wie lange, in Tagen; weglassen für einen Bann ohne Ende.1730 reasonim Körper stringPflicht Die Begründung, die das Mitglied liest.
Beispielanfrage curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"days":7,"reason":"Advertising for another site, despite rule 2."}' \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/bans/d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d"Antwort Antwortet mit einem Until .
Beispiel {
"until": 1758624600000
}Mögliche Status: 200400401403404429
DELETE /v2/communities/{id}/bans/{member}Einen Bann aufheben.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe. memberim Pfad stringPflicht Die id des Kontos eines Mitglieds.
Beispielanfrage curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/bans/d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
GET /v2/communities/{id}/logDas Protokoll der Leitung: wer was entfernt hat und warum.
Recht groups mit ETag seit v2.15 Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/log"Antwort Antwortet mit einer Seite von LogEntry , als `items` und `next`.
Beispiel {
"items": [
{
"id": "8f7e6d5c-4b3a-4291-8f7e-6d5c4b3a2918",
"action": "message_removed",
"member": {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"bot": false
},
"reason": "",
"by": "Mara 🌻",
"createdAt": 1758710400000
}
],
"next": null
}Mögliche Status: 200304400401403404429
POST /v2/communitiesEine Gruppe gründen. Antwortet mit ihrer id; du bist ihr Gründer.
Braucht die Berechtigung groups. Ohne Angabe ist die Gruppe internal und frei beitretbar; eine versteckte nur mit Einladung. Ob Mitglieder Gruppen gründen dürfen, legt der Betreiber fest.
Parameter Name Typ Bedeutung nameim Körper stringPflicht Der Name, höchstens 60 Zeichen. descriptionim Körper stringfreiwillig Die Beschreibung, höchstens 240 Zeichen. handleim Körper stringfreiwillig Das Kürzel für @#Erwähnungen und den Link: 3 bis 30 Kleinbuchstaben, Ziffern oder _. tagsim Körper string[]freiwillig Bis zu 5 #Tags, worum es in der Gruppe geht. joinPolicyim Körper stringfreiwillig Wie man beitritt: open frei, application mit Bewerbung, invite nur mit Einladung.openapplicationinvite visibilityim Körper stringfreiwillig Wer die Gruppe sieht: open alle, internal nur Mitglieder ihren Inhalt, hidden nur Mitglieder überhaupt.openinternalhidden
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"Seed swap","handle":"seedswap","tags":["garden","seeds"],"joinPolicy":"open","visibility":"open"}' \
"https://api.tellmelo.com/v2/communities"Antwort Antwortet mit einem Made .
Beispiel {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Mögliche Status: 200400401403429
PUT /v2/communities/{id}Eine Gruppe ändern, die du leitest. Was du nicht angibst, bleibt.
Braucht die Berechtigung groups und die Leitung der Gruppe. Leitung, Auflösen und Funken-Vorteile bleiben in der App.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id einer Gruppe. nameim Körper stringfreiwillig Der Name, höchstens 60 Zeichen. descriptionim Körper stringfreiwillig Die Beschreibung, höchstens 240 Zeichen. handleim Körper stringfreiwillig Das Kürzel für @#Erwähnungen und den Link: 3 bis 30 Kleinbuchstaben, Ziffern oder _. tagsim Körper string[]freiwillig Bis zu 5 #Tags, worum es in der Gruppe geht. joinPolicyim Körper stringfreiwillig Wie man beitritt: open frei, application mit Bewerbung, invite nur mit Einladung.openapplicationinvite visibilityim Körper stringfreiwillig Wer die Gruppe sieht: open alle, internal nur Mitglieder ihren Inhalt, hidden nur Mitglieder überhaupt.openinternalhidden imageim Körper stringfreiwillig Die id eines hochgeladenen Bildes (POST /me/pictures) als Gruppenbild. Leer entfernt es. bannerim Körper stringfreiwillig Die id eines hochgeladenen Bildes als Titelbild der Gruppe. Leer entfernt es.
Beispielanfrage curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"Seed swap","handle":"seedswap","tags":["garden","seeds"],"joinPolicy":"open","visibility":"open"}' \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
Bots Was in den Gruppen eines Bots geschieht, in Echtzeit: als Strom, Seite für Seite oder an eine Adresse geliefert.
GET /v2/eventsDie Ereignisse aus den Gruppen des Bots seit einem Ereignis, Seite für Seite.
Nur mit dem Token eines Bots. Ereignisse eines Kanals nur, wenn der Bot ihn sehen darf.
Ereignisse bleiben einen Tag. next ist die Nummer des letzten, für die nächste Seite als since.
Parameter Name Typ Bedeutung sincein der Adresse stringfreiwillig Die Nummer des letzten Ereignisses, das der Bot schon hat. Ohne sie beginnt der Strom jetzt und die Liste beim ältesten.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/events?since=0"Antwort Antwortet mit einer Seite von BotEvent , als `items` und `next`.
Beispiel {
"items": [
{
"id": "4711",
"type": "message.created",
"community": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"channel": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a",
"createdAt": 1758634800000,
"data": {
"message": {
"id": "61a2b3c4-d5e6-4f70-8192-a3b4c5d6e7f8",
"text": "/dice 6",
"author": {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"bot": false
},
"media": 0,
"replyTo": null,
"threadOf": null,
"createdAt": 1758634800000
}
}
}
],
"next": null
}Mögliche Status: 200401429
GET /v2/events/streamDie Ereignisse aus den Gruppen des Bots, sobald sie geschehen (Server-Sent Events).
Recht read mit ETag seit v2.20 Die Verbindung bleibt offen und schließt nach zehn Minuten; der Client verbindet sich neu und schickt Last-Event-ID mit.
Nur mit dem Token eines Bots. Ereignisse eines Kanals nur, wenn der Bot ihn sehen darf.
Parameter Name Typ Bedeutung sincein der Adresse stringfreiwillig Die Nummer des letzten Ereignisses, das der Bot schon hat. Ohne sie beginnt der Strom jetzt und die Liste beim ältesten.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/events/stream?since=0"Antwort Antwortet mit einem BotEvent .
Beispiel {
"id": "4711",
"type": "message.created",
"community": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"channel": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a",
"createdAt": 1758634800000,
"data": {
"message": {
"id": "61a2b3c4-d5e6-4f70-8192-a3b4c5d6e7f8",
"text": "/dice 6",
"author": {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"bot": false
},
"media": 0,
"replyTo": null,
"threadOf": null,
"createdAt": 1758634800000
}
}
}Mögliche Status: 200304401429
GET /v2/me/commandsDie Befehle des Bots.
Recht read mit ETag seit v2.20 Nur mit dem Token eines Bots. Ereignisse eines Kanals nur, wenn der Bot ihn sehen darf.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/commands"Antwort Antwortet mit einer Seite von BotCommand , als `items` und `next`.
Beispiel {
"items": [
{
"name": "dice",
"description": "Rolls a die"
}
],
"next": null
}Mögliche Status: 200304401429
PUT /v2/me/commandsDie Befehle des Bots festlegen, alle auf einmal.
Ersetzt alle Befehle; eine leere Liste nimmt sie weg. In Chats, die der Bot sehen darf, bietet das Eingabefeld sie nach „/“ an.
Parameter Name Typ Bedeutung commandsim Körper object[]Pflicht Bis zu 25 Befehle, je { name, description }.
Beispielanfrage curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"commands":[{"name":"dice","description":"Rolls a die"}]}' \
"https://api.tellmelo.com/v2/me/commands"Antwort Antwortet mit einer Seite von BotCommand , als `items` und `next`.
Beispiel {
"items": [
{
"name": "dice",
"description": "Rolls a die"
}
],
"next": null
}Mögliche Status: 200400401403429
POST /v2/interactions/{id}/replyAuf einen Befehl oder Knopf antworten.
Innerhalb von 15 Minuten nach dem Ereignis command oder interaction; mit private sieht die Antwort nur, wer den Befehl oder Knopf benutzt hat.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die Kennung aus dem Ereignis (data.interaction). textim Körper stringfreiwillig Der Text des Beitrags, der Antwort oder der Nachricht. privateim Körper booleanfreiwillig true: nur wer den Befehl oder Knopf benutzt hat, sieht die Antwort, einen Tag lang.cardim Körper objectfreiwillig Eine Karte { title, text, color, fields: [{ name, value }] }, höchstens 10 Felder. buttonsim Körper object[]freiwillig Bis zu 5 Knöpfe, je { id, label, style } mit style primary, secondary oder danger. Ein Druck kommt als Ereignis interaction.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"text":"You rolled a 4.","private":true}' \
"https://api.tellmelo.com/v2/interactions/9b8c7d6e-5f4a-4b3c-8d2e-1f0a9b8c7d6e/reply"Antwort Antwortet mit einem Made .
Beispiel {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Mögliche Status: 200400401403404429
POST /v2/channels/{id}/voiceEinen Platz im Sprachkanal nehmen, um Musik oder Ton abzuspielen.
Nur mit dem Token eines Bots, wie es die Rolle des Bots im Kanal erlaubt. Das Programm verbindet sich mit einem LiveKit-SDK und sendet seinen Ton als Mikrofon; alle anderen regeln seine Lautstärke selbst.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id eines Kanals.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a/voice"Antwort Antwortet mit einem VoiceSeat .
Beispiel {
"url": "wss://voice.example.org",
"token": "eyJhbGciOiJIUzI1NiJ9…",
"iceServers": [
{
"urls": [
"stun:turn.example.org:3478"
]
}
],
"speak": true,
"video": false
}Mögliche Status: 200400401403404429
Entdecken Trends, Suche und die eigenen Emojis der Instanz.
GET /v2/tagsDie Tags, die gerade laufen.
Recht read mit ETag seit v2.0 Höchstens 10 laufende Tags nach Punkten: Jede Nutzung zählt 1 und halbiert sich alle 3 Tage, ein Konto zählt je Tag höchstens 3. posts ist der gerundete Punktestand. limit kürzt nur die Liste. Vom Team hervorgehobene Tags können weiter vorn stehen.
Parameter Name Typ Bedeutung limitin der Adresse integerfreiwillig Einträge je Seite: 20 als Vorgabe, höchstens 50.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/tags?limit=10"Antwort Antwortet mit einer Seite von Tag , als `items` und `next`.
Beispiel {
"items": [
{
"tag": "garden",
"posts": 58
}
],
"next": null
}Mögliche Status: 200304401429
GET /v2/searchEine Suche über Beiträge, Namen, Kürzel und Tags.
Recht read mit ETag seit v2.0 Sucht nur Öffentliches: Beiträge außerhalb von Gruppen, Profile und Tags. limit gilt je Art.
Parameter Name Typ Bedeutung qin der Adresse stringPflicht Die Wörter, nach denen gesucht wird. typein der Adresse stringfreiwillig Welche Art von Treffer. Ohne ihn jede Art.allpostsprofilestags limitin der Adresse integerfreiwillig Einträge je Seite: 20 als Vorgabe, höchstens 50.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/search?q=garden&type=posts"Antwort Antwortet mit einem SearchResult .
Beispiel {
"posts": [
{
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"text": "The bees are back in the garden 🐝 #garden",
"kind": "poll",
"author": {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
},
"community": {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening"
},
"media": [
{
"url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"kind": "image",
"poster": null,
"ai": "without"
}
],
"poll": {
"options": [
{
"text": "Lavender",
"votes": 12
},
{
"text": "Sunflowers",
"votes": 7
},
{
"text": "Clover",
"votes": 3
}
],
"total": 22,
"multiple": false,
"endsAt": null,
"running": true,
"resultsVisible": true,
"myVotes": [
0
]
},
"quotes": null,
"continues": null,
"counts": {
"replies": 4,
"likes": 31,
"reposts": 2
},
"pinned": false,
"giftDrop": {
"item": "plan",
"quantity": 3,
"places": 10,
"left": 4,
"audience": "followers",
"newAccounts": false,
"status": "open",
"claimed": true
},
"createdAt": 1758624000000
}
],
"profiles": [
{
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
}
],
"tags": [
{
"tag": "garden",
"posts": 58
}
]
}Mögliche Status: 200304400401429
GET /v2/emojisDie eigenen Emojis der Instanz, mit der Adresse ihrer Bilder.
Recht read mit ETag seit v2.1 In Texten steht ein Emoji als :name:. Ersetz es durch das Bild aus dieser Liste; unbekannte Namen bleiben Text.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/emojis"Antwort Antwortet mit einer Seite von Emoji , als `items` und `next`.
Beispiel {
"items": [
{
"name": "tellmelo",
"url": "/api/media?id=e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b"
}
],
"next": null
}Mögliche Status: 200304401429
GIFs und Videos Die Mediathek: geteilte GIFs und Videos finden, die eigenen hochladen und verwalten und auf anderen Websites einbinden.
GET /v2/mediaGeteilte GIFs oder Videos, die meistgenutzten zuerst.
Recht read blätterbar mit ETag seit v2.14 Ohne Konten, die du blockiert hast oder die dich blockiert haben. url und poster lädst du mit dem Schlüssel im Header, für die Beiträge auf tellmelo.
Für andere Websites nur, was embed hat: Dessen Adressen funktionieren ohne Schlüssel, in jedem Browser.
Parameter Name Typ Bedeutung kindin der Adresse stringfreiwillig gif oder video; ohne Angabe gif.gifvideoqin der Adresse stringfreiwillig Wörter, die im Namen oder in den Stichwörtern vorkommen. anywherein der Adresse booleanfreiwillig true: nur, was auch auf anderen Websites erscheinen darf.limitin der Adresse integerfreiwillig Einträge je Seite: 20 als Vorgabe, höchstens 50. cursorin der Adresse stringfreiwillig Das next der vorigen Antwort. Ohne ihn von vorn.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/media?kind=gif&q=bees&anywhere=true&limit=20"Antwort Antwortet mit einer Seite von MediaItem , als `items` und `next`.
Beispiel {
"items": [
{
"id": "b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"kind": "gif",
"name": "Happy bees",
"keywords": "bees garden happy",
"width": 480,
"height": 270,
"seconds": 0,
"url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"poster": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918&poster=1",
"uploader": {
"handle": "mara",
"name": "Mara 🌻"
},
"mine": false,
"shared": true,
"anywhere": true,
"embed": {
"page": "https://tellmelo.com/media-embed/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"file": "https://tellmelo.com/media-embed/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918/file",
"poster": "https://tellmelo.com/media-embed/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918/poster",
"code": "<iframe src=\"https://tellmelo.com/media-embed/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918\" width=\"480\" height=\"300\" title=\"Happy bees\" style=\"border:0;max-width:100%\" loading=\"lazy\" allowfullscreen></iframe>"
}
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}Mögliche Status: 200304400401429
GET /v2/media/mineDeine eigene Mediathek, das Neueste zuerst.
Recht media blätterbar mit ETag seit v2.14 Parameter Name Typ Bedeutung kindin der Adresse stringfreiwillig gif oder video; ohne Angabe gif.gifvideoqin der Adresse stringfreiwillig Wörter, die im Namen oder in den Stichwörtern vorkommen. limitin der Adresse integerfreiwillig Einträge je Seite: 20 als Vorgabe, höchstens 50. cursorin der Adresse stringfreiwillig Das next der vorigen Antwort. Ohne ihn von vorn.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/media/mine?kind=gif&q=bees&limit=20"Antwort Antwortet mit einer Seite von MediaItem , als `items` und `next`.
Beispiel {
"items": [
{
"id": "b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"kind": "gif",
"name": "Happy bees",
"keywords": "bees garden happy",
"width": 480,
"height": 270,
"seconds": 0,
"url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"poster": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918&poster=1",
"uploader": {
"handle": "mara",
"name": "Mara 🌻"
},
"mine": false,
"shared": true,
"anywhere": true,
"embed": {
"page": "https://tellmelo.com/media-embed/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"file": "https://tellmelo.com/media-embed/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918/file",
"poster": "https://tellmelo.com/media-embed/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918/poster",
"code": "<iframe src=\"https://tellmelo.com/media-embed/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918\" width=\"480\" height=\"300\" title=\"Happy bees\" style=\"border:0;max-width:100%\" loading=\"lazy\" allowfullscreen></iframe>"
}
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}Mögliche Status: 200304400401403429
GET /v2/media/{id}Ein GIF oder Video, deines oder ein geteiltes.
Recht read mit ETag seit v2.14 Parameter Name Typ Bedeutung idim Pfad stringPflicht Die ID des GIFs oder Videos.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/media/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918"Antwort Antwortet mit einem MediaItem .
Beispiel {
"id": "b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"kind": "gif",
"name": "Happy bees",
"keywords": "bees garden happy",
"width": 480,
"height": 270,
"seconds": 0,
"url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"poster": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918&poster=1",
"uploader": {
"handle": "mara",
"name": "Mara 🌻"
},
"mine": false,
"shared": true,
"anywhere": true,
"embed": {
"page": "https://tellmelo.com/media-embed/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"file": "https://tellmelo.com/media-embed/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918/file",
"poster": "https://tellmelo.com/media-embed/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918/poster",
"code": "<iframe src=\"https://tellmelo.com/media-embed/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918\" width=\"480\" height=\"300\" title=\"Happy bees\" style=\"border:0;max-width:100%\" loading=\"lazy\" allowfullscreen></iframe>"
}
}Mögliche Status: 200304400401404429
POST /v2/media/uploadsEin Hochladen beginnen.
Danach die Datei in Stücken von höchstens piece Bytes an /media/uploads/{upload} senden. Ohne neues Stück endet ein Hochladen nach 15 Minuten.
Es gelten die Grenzen der App: GIFs bis 15 MB, Videos nach Abo in Größe und Länge, GIFs je Tag, private GIFs, Videopunkte je Woche. Sonst kommt 409, 413 oder 429.
Parameter Name Typ Bedeutung kindim Körper stringPflicht gif oder video; ohne Angabe gif.gifvideosizeim Körper integerPflicht Die Größe der ganzen Datei in Bytes. nameim Körper stringPflicht Der Name, unter dem man es findet: 2 bis 40 Zeichen. keywordsim Körper stringfreiwillig Stichwörter für die Suche, durch Leerzeichen getrennt. sharedim Körper booleanfreiwillig true: für alle auf tellmelo geteilt.anywhereim Körper booleanfreiwillig true: geteilt und auch auf anderen Websites erlaubt. Nur zusammen mit shared.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"kind":"gif","size":2400000,"name":"Happy bees","keywords":"bees garden","shared":true,"anywhere":false}' \
"https://api.tellmelo.com/v2/media/uploads"Antwort Antwortet mit einem UploadStarted .
Beispiel {
"upload": "e7c1a2b3-4d5e-4f60-8a9b-0c1d2e3f4a5b",
"piece": 4194304
}Mögliche Status: 200400401403429
PUT /v2/media/uploads/{upload}Ein Stück der Datei senden.
Der Körper ist das Stück selbst (application/octet-stream), kein JSON. Schließt es nicht an, kommt 409 mit received: Von dort weitersenden. Nach dem letzten Stück wird umgewandelt; die Antwort hat dann item.
Parameter Name Typ Bedeutung uploadim Pfad stringPflicht Das upload aus dem Beginn. offsetin der Adresse integerPflicht Wo das Stück in der Datei beginnt, in Bytes; für das erste 0.
Beispielanfrage curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/octet-stream" \
--data-binary @piece \
"https://api.tellmelo.com/v2/media/uploads/e7c1a2b3-4d5e-4f60-8a9b-0c1d2e3f4a5b?offset=0"Antwort Antwortet mit einem UploadPiece .
Beispiel {
"received": 4194304,
"item": null
}Mögliche Status: 200400401403404429
POST /v2/media/{id}Eines deiner GIFs oder Videos ändern.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die ID des GIFs oder Videos. nameim Körper stringfreiwillig Der Name, unter dem man es findet: 2 bis 40 Zeichen. keywordsim Körper stringfreiwillig Stichwörter für die Suche, durch Leerzeichen getrennt. sharedim Körper booleanfreiwillig true: für alle auf tellmelo geteilt.anywhereim Körper booleanfreiwillig true: geteilt und auch auf anderen Websites erlaubt. Nur zusammen mit shared.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"Happy bees","anywhere":true}' \
"https://api.tellmelo.com/v2/media/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
DELETE /v2/media/{id}Eines deiner GIFs oder Videos entfernen.
Beiträge, die es schon zeigen, behalten es. Auf anderen Websites verschwindet es innerhalb von Minuten.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die ID des GIFs oder Videos.
Beispielanfrage curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/media/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
Dein Konto Dein Profil, dein Feed, deine eigenen Emojis und deine Webhooks.
GET /v2/meDein eigenes Profil, mit der id, die die anderen Wege erwarten.
Recht read mit ETag seit v2.0 Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me"Antwort Antwortet mit einem Profile .
Beispiel {
"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
}Mögliche Status: 200304401429
GET /v2/feedDein eigener Feed, so wie die Anwendung ihn zusammenstellt.
Recht read blätterbar seit v2.0 Kein ETag, weil sich die Reihenfolge ständig ändert. Eine begonnene Liste bleibt bis zum Ende gleich.
Parameter Name Typ Bedeutung tabin der Adresse stringfreiwillig Welcher Feed: for-you, following, latest oder bookmarks. latest als Vorgabe.for-youfollowinglatestbookmarks tagin der Adresse stringfreiwillig Nur Beiträge zu diesem Tag: mit ihm geschrieben oder vom Server darin erkannt. Ohne ihn kein Filter. limitin der Adresse integerfreiwillig Einträge je Seite: 20 als Vorgabe, höchstens 50. cursorin der Adresse stringfreiwillig Das next der vorigen Antwort. Ohne ihn von vorn.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/feed?tab=following&limit=20"Antwort Antwortet mit einer Seite von Post , als `items` und `next`.
Beispiel {
"items": [
{
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"text": "The bees are back in the garden 🐝 #garden",
"kind": "poll",
"author": {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
},
"community": {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening"
},
"media": [
{
"url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"kind": "image",
"poster": null,
"ai": "without"
}
],
"poll": {
"options": [
{
"text": "Lavender",
"votes": 12
},
{
"text": "Sunflowers",
"votes": 7
},
{
"text": "Clover",
"votes": 3
}
],
"total": 22,
"multiple": false,
"endsAt": null,
"running": true,
"resultsVisible": true,
"myVotes": [
0
]
},
"quotes": null,
"continues": null,
"counts": {
"replies": 4,
"likes": 31,
"reposts": 2
},
"pinned": false,
"giftDrop": {
"item": "plan",
"quantity": 3,
"places": 10,
"left": 4,
"audience": "followers",
"newAccounts": false,
"status": "open",
"claimed": true
},
"createdAt": 1758624000000
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}Mögliche Status: 200400401429
POST /v2/me/picturesEin Bild hochladen, als seine Bytes. Antwortet mit id und url; die id nimmst du dann als Profilbild, Titelbild oder für einen Beitrag.
PNG, JPEG, WebP oder GIF, erkannt an den ersten Bytes; ohne Metadaten neu gespeichert. Ein Bild, das in nichts verwendet wird, wird später gelöscht.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/octet-stream" \
--data-binary @picture.png \
"https://api.tellmelo.com/v2/me/pictures"Antwort Antwortet mit einem Picture .
Beispiel {
"id": "8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9"
}Mögliche Status: 200401403429
PUT /v2/me/profileDein Profil ändern: Name, Über dich, Profilbild, Titelbild und Profilfarbe. Was du nicht angibst, bleibt.
Braucht die Berechtigung profile. Dein @Name bleibt in der App: Er ist auch dein Anmeldename.
Parameter Name Typ Bedeutung nameim Körper stringfreiwillig Der Anzeigename, höchstens 60 Zeichen. aboutim Körper stringfreiwillig Der Text „Über dich“. avatarim Körper stringfreiwillig Die id eines hochgeladenen Bildes als Profilbild. Leer entfernt es. bannerim Körper stringfreiwillig Die id eines hochgeladenen Bildes als Titelbild. Leer entfernt es. colorim Körper stringfreiwillig Die Profilfarbe, mit einem Abo. null entfernt sie.indigovioletrosecoralamberlimegreentealskyslatesandnight
Beispielanfrage curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"Mara 🌻","about":"Gardening in the city.","avatar":"8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9"}' \
"https://api.tellmelo.com/v2/me/profile"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403429
GET /v2/me/emojisDeine eigenen Emojis.
Recht read mit ETag seit v2.19 Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/emojis"Antwort Antwortet mit einer Seite von OwnEmoji , als `items` und `next`.
Beispiel {
"items": [
{
"name": "sunflower",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false,
"resting": false
}
],
"next": null
}Mögliche Status: 200304401429
POST /v2/me/emojis/picturesDas Bild für ein eigenes Emoji hochladen, als seine Bytes.
Bewegte Emojis brauchen ein Abo. Zu groß nach dem Umrechnen, wird das Bild abgelehnt.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/octet-stream" \
--data-binary @picture.png \
"https://api.tellmelo.com/v2/me/emojis/pictures"Antwort Antwortet mit einem EmojiPicture .
Beispiel {
"id": "8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false
}Mögliche Status: 200401403429
POST /v2/me/emojisEin eigenes Emoji anlegen. Antwortet mit allen deinen Emojis.
Wie viele Emojis du anlegen kannst, hängt vom Abo ab.
Parameter Name Typ Bedeutung nameim Körper stringPflicht Der Name, unter dem du das Emoji mit :name: schreibst. pictureim Körper stringPflicht Die id aus POST /me/emojis/pictures.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"sunflower","picture":"8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9"}' \
"https://api.tellmelo.com/v2/me/emojis"Antwort Antwortet mit einer Seite von OwnEmoji , als `items` und `next`.
Beispiel {
"items": [
{
"name": "sunflower",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false,
"resting": false
}
],
"next": null
}Mögliche Status: 200400401403429
DELETE /v2/me/emojis/{name}Ein eigenes Emoji entfernen. Antwortet mit den übrigen.
Parameter Name Typ Bedeutung nameim Pfad stringPflicht Der Name des Emojis, ohne Doppelpunkte.
Beispielanfrage curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/emojis/sunflower"Antwort Antwortet mit einer Seite von OwnEmoji , als `items` und `next`.
Beispiel {
"items": [
{
"name": "sunflower",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false,
"resting": false
}
],
"next": null
}Mögliche Status: 200400401403404429
PUT /v2/me/emojis/sharingFestlegen, ob deine Follower deine Emojis in eigenen Texten nutzen dürfen.
Parameter Name Typ Bedeutung sharedim Körper booleanPflicht true teilt deine Emojis mit deinen Followern, false nicht.
Beispielanfrage curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"shared":true}' \
"https://api.tellmelo.com/v2/me/emojis/sharing"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403429
GET /v2/me/webhooksDeine Webhooks mit ihrem Stand.
Recht webhooks mit ETag seit v2.19 Braucht die Berechtigung webhooks. Webhooks gibt es mit einem Organisations-Abo oder als Partner.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/webhooks"Antwort Antwortet mit einer Seite von Webhook , als `items` und `next`.
Beispiel {
"items": [
{
"id": "1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b",
"url": "https://example.org/tellmelo-hook",
"kinds": [
"reply",
"mention"
],
"active": true,
"lastStatus": 200,
"lastAt": 1758624000000,
"failures": 0
}
],
"next": null
}Mögliche Status: 200304401403429
POST /v2/me/webhooksEinen Webhook anlegen. Antwortet mit id und dem Geheimnis für die Signaturen, nur dieses eine Mal.
Jede Zustellung ist mit dem Geheimnis signiert (X-Tellmelo-Signature). Bewahre es auf; es wird nicht noch einmal gezeigt.
Parameter Name Typ Bedeutung urlim Körper stringPflicht Eine HTTPS-Adresse außerhalb lokaler Netze, ohne Zugangsdaten. kindsim Körper string[]Pflicht Worüber der Webhook Bescheid bekommt. Welche Arten dir offenstehen, hängt von Abo und Partnerschaft ab.replymentiongroup_mentionfollowlikerepostmessagequota_changedquota_giftdrop_claimeddrop_empty
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.org/tellmelo-hook","kinds":["reply","mention"]}' \
"https://api.tellmelo.com/v2/me/webhooks"Antwort Antwortet mit einem WebhookCreated .
Beispiel {
"id": "1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b",
"secret": "whsec_3f9a…"
}Mögliche Status: 200400401403429
DELETE /v2/me/webhooks/{id}Einen Webhook löschen.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id des Webhooks.
Beispielanfrage curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/webhooks/1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
POST /v2/me/webhooks/{id}/testEine Probe an einen Webhook senden.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id des Webhooks.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/webhooks/1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b/test"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
Mitteilungen Was rund um dein Konto passiert ist, seitenweise.
GET /v2/notificationsDeine Mitteilungen, neueste zuerst.
Recht read blätterbar mit ETag seit v2.0 Lesen markiert nichts als gelesen, das tut POST /notifications/read. Gleiche Ereignisse zum selben Beitrag stehen in einer Zeile, more sagt, wie viele.
Parameter Name Typ Bedeutung limitin der Adresse integerfreiwillig Einträge je Seite: 20 als Vorgabe, höchstens 50. cursorin der Adresse stringfreiwillig Das next der vorigen Antwort. Ohne ihn von vorn.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/notifications?limit=20"Antwort Antwortet mit einer Seite von Notification , als `items` und `next`.
Beispiel {
"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"
}Mögliche Status: 200304401429
POST /v2/notifications/readDeine Mitteilungen als gelesen markieren.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/notifications/read"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200401403429
Nachrichten Dein Postfach und deine Gespräche. Ein Gespräch heißt nach dem anderen Konto.
GET /v2/conversationsDein Postfach: eine Zeile je Gespräch, das jüngste zuerst.
Recht read blätterbar mit ETag seit v2.0 Parameter Name Typ Bedeutung limitin der Adresse integerfreiwillig Einträge je Seite: 20 als Vorgabe, höchstens 50. cursorin der Adresse stringfreiwillig Das next der vorigen Antwort. Ohne ihn von vorn.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/conversations?limit=20"Antwort Antwortet mit einer Seite von Conversation , als `items` und `next`.
Beispiel {
"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"
}Mögliche Status: 200304401429
GET /v2/conversations/{with}/messagesDie Nachrichten eines Gesprächs, neueste zuerst.
Recht read blätterbar mit ETag seit v2.0 Lesen markiert nichts als gelesen, das tut POST /conversations/{with}/read.
Parameter Name Typ Bedeutung withim Pfad stringPflicht Die id des anderen Kontos. Ein Gespräch hat keine eigene id. limitin der Adresse integerfreiwillig Einträge je Seite: 20 als Vorgabe, höchstens 50. cursorin der Adresse stringfreiwillig Das next der vorigen Antwort. Ohne ihn von vorn.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/conversations/a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05/messages?limit=20"Antwort Antwortet mit einer Seite von Message , als `items` und `next`.
Beispiel {
"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"
}Mögliche Status: 200304400401404429
POST /v2/conversations/{with}/messagesEine Nachricht in einem Gespräch senden.
Es gelten die Regeln der App: Wer dich blockiert hat, ist nicht erreichbar, und die Einstellungen der anderen Person zählen.
Bilder, GIFs und Videos lassen sich an Nachrichten über die API nicht anhängen, nur in der App.
Parameter Name Typ Bedeutung withim Pfad stringPflicht Die id des anderen Kontos. Ein Gespräch hat keine eigene id. textim Körper stringPflicht Der Text des Beitrags, der Antwort oder der Nachricht. replyToim Körper stringfreiwillig Die id einer früheren Nachricht dieses Gesprächs, auf die diese antwortet. Seit 2.2.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"text":"See you on Saturday at the market!"}' \
"https://api.tellmelo.com/v2/conversations/a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05/messages"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
POST /v2/conversations/{with}/readAlle Nachrichten eines Gesprächs als gelesen markieren.
Parameter Name Typ Bedeutung withim Pfad stringPflicht Die id des anderen Kontos. Ein Gespräch hat keine eigene id.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/conversations/a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05/read"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
DELETE /v2/conversations/{with}/messages/{id}Eine eigene Nachricht löschen.
Nur eigene Nachrichten, und nur in den ersten 24 Stunden nach dem Senden.
Parameter Name Typ Bedeutung withim Pfad stringPflicht Die id des anderen Kontos. Ein Gespräch hat keine eigene id. idim Pfad stringPflicht Die id der Nachricht.
Beispielanfrage curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/conversations/a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05/messages/7c6b5a49-3827-4165-9f0e-d1c2b3a49586"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
POST /v2/conversations/{with}/plannedEine Nachricht für später planen. Antwortet mit der id der geplanten Nachricht.
Braucht ein Abo, das geplante Nachrichten enthält, sonst 403. Mit Ende-zu-Ende-Verschlüsselung auf beiden Seiten geht es nur in der App.
Parameter Name Typ Bedeutung withim Pfad stringPflicht Die id des anderen Kontos. Ein Gespräch hat keine eigene id. textim Körper stringPflicht Der Text des Beitrags, der Antwort oder der Nachricht. sendAtim Körper integerPflicht Wann die Nachricht gesendet wird, in Millisekunden seit 1970.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"text":"Happy birthday! 🎂","sendAt":1758700000000}' \
"https://api.tellmelo.com/v2/conversations/a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05/planned"Antwort Antwortet mit einem Made .
Beispiel {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Mögliche Status: 200400401403404429
GET /v2/me/planned-messagesDie eigenen Nachrichten, die noch gesendet werden, nach Zeit geordnet.
Recht read mit ETag seit v2.19 Parameter Name Typ Bedeutung within der Adresse stringfreiwillig Nur die Nachrichten an dieses Konto (seine id).
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/planned-messages"Antwort Antwortet mit einer Seite von PlannedMessage , als `items` und `next`.
Beispiel {
"items": [
{
"id": "3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9",
"to": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"text": "Happy birthday! 🎂",
"sendAt": 1758710400000,
"state": "waiting"
}
],
"next": null
}Mögliche Status: 200304401429
POST /v2/me/planned-messages/{id}/sendEine zurückgehaltene oder fehlgeschlagene geplante Nachricht jetzt senden.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id der geplanten Nachricht.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/planned-messages/3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9/send"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
DELETE /v2/me/planned-messages/{id}Eine geplante Nachricht löschen, bevor sie gesendet wird.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id der geplanten Nachricht.
Beispielanfrage curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/planned-messages/3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
Beziehungen Gefällt mir, merken, teilen, folgen, beitreten, blockieren: ein Pfad, gesetzt und zurückgenommen mit active. Seit 2.19 auch die Listen: Follower, Gefolgte und eigene Blockierungen und Stummschaltungen.
POST /v2/relationsMögen, merken, teilen, folgen, beitreten, blockieren, stummschalten, je nach kind.
target ist bei like, save und repost ein Beitrag, bei join eine Gruppe, bei follow, block und mute ein Konto. active: false nimmt die Beziehung zurück.
Parameter Name Typ Bedeutung kindim Körper stringPflicht Welche Beziehung: like, save, repost, follow, join, block oder mute (seit 2.2).likesaverepostfollowjoinblockmute targetim Körper stringPflicht Die id des Beitrags, Profils oder der Gruppe, je nach kind. activeim Körper booleanfreiwillig true setzt die Beziehung, false nimmt sie zurück.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"kind":"like","target":"5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1","active":true}' \
"https://api.tellmelo.com/v2/relations"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403429
GET /v2/profiles/{handle}/followersWer einem Profil folgt, die neuesten zuerst.
Recht read blätterbar mit ETag seit v2.19 Parameter Name Typ Bedeutung handleim Pfad stringPflicht Das Kürzel eines Profils, in beliebiger Groß- und Kleinschreibung. limitin der Adresse integerfreiwillig Einträge je Seite: 20 als Vorgabe, höchstens 50. cursorin der Adresse stringfreiwillig Das next der vorigen Antwort. Ohne ihn von vorn.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/profiles/mara/followers?limit=20"Antwort Antwortet mit einer Seite von ProfileBrief , als `items` und `next`.
Beispiel {
"items": [
{
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}Mögliche Status: 200304400401404429
GET /v2/profiles/{handle}/followingWem ein Profil folgt, die neuesten zuerst.
Recht read blätterbar mit ETag seit v2.19 Parameter Name Typ Bedeutung handleim Pfad stringPflicht Das Kürzel eines Profils, in beliebiger Groß- und Kleinschreibung. limitin der Adresse integerfreiwillig Einträge je Seite: 20 als Vorgabe, höchstens 50. cursorin der Adresse stringfreiwillig Das next der vorigen Antwort. Ohne ihn von vorn.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/profiles/mara/following?limit=20"Antwort Antwortet mit einer Seite von ProfileBrief , als `items` und `next`.
Beispiel {
"items": [
{
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}Mögliche Status: 200304400401404429
GET /v2/me/relationsWen du blockiert, stummgeschaltet oder nur für Nachrichten blockiert hast, die neuesten zuerst.
Recht read blätterbar mit ETag seit v2.19 Nur deine eigenen Listen. Setzen und Zurücknehmen geht über POST /relations.
Parameter Name Typ Bedeutung kindin der Adresse stringPflicht block blockiert, mute stummgeschaltet, dm_block nur für Nachrichten blockiert.blockmutedm_blocklimitin der Adresse integerfreiwillig Einträge je Seite: 20 als Vorgabe, höchstens 50. cursorin der Adresse stringfreiwillig Das next der vorigen Antwort. Ohne ihn von vorn.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/relations?kind=mute&limit=20"Antwort Antwortet mit einer Seite von ProfileBrief , als `items` und `next`.
Beispiel {
"items": [
{
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}Mögliche Status: 200304400401429
Sammlungen Gemerkte Beiträge in eigenen Sammlungen ordnen. Ein Beitrag kann in mehreren sein; aus einer Sammlung genommen bleibt er gemerkt.
GET /v2/me/collectionsDeine Sammlungen mit der Zahl ihrer Beiträge.
Recht read mit ETag seit v2.19 Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/collections"Antwort Antwortet mit einer Seite von Collection , als `items` und `next`.
Beispiel {
"items": [
{
"id": "6d5c4b3a-2918-4e7f-a1b2-c3d4e5f60718",
"name": "Recipes",
"count": 12
}
],
"next": null
}Mögliche Status: 200304401429
POST /v2/me/collectionsEine Sammlung anlegen. Antwortet mit ihrer id.
Wie viele Sammlungen du anlegen kannst, hängt vom Abo ab.
Parameter Name Typ Bedeutung nameim Körper stringPflicht Der Name, höchstens 40 Zeichen. Je Konto einmalig, ohne Rücksicht auf Groß- und Kleinschreibung.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"Recipes"}' \
"https://api.tellmelo.com/v2/me/collections"Antwort Antwortet mit einem Made .
Beispiel {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Mögliche Status: 200400401403429
PUT /v2/me/collections/{id}Eine Sammlung umbenennen.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id der Sammlung. nameim Körper stringPflicht Der Name, höchstens 40 Zeichen. Je Konto einmalig, ohne Rücksicht auf Groß- und Kleinschreibung.
Beispielanfrage curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"Baking"}' \
"https://api.tellmelo.com/v2/me/collections/6d5c4b3a-2918-4e7f-a1b2-c3d4e5f60718"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
DELETE /v2/me/collections/{id}Eine Sammlung löschen.
Die Beiträge darin bleiben gemerkt.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id der Sammlung.
Beispielanfrage curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/collections/6d5c4b3a-2918-4e7f-a1b2-c3d4e5f60718"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
GET /v2/me/collections/{id}/postsDie Beiträge einer Sammlung, wie im Reiter „Gemerkt“.
Recht read blätterbar seit v2.19 Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id der Sammlung. limitin der Adresse integerfreiwillig Einträge je Seite: 20 als Vorgabe, höchstens 50. cursorin der Adresse stringfreiwillig Das next der vorigen Antwort. Ohne ihn von vorn.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/collections/6d5c4b3a-2918-4e7f-a1b2-c3d4e5f60718/posts?limit=20"Antwort Antwortet mit einer Seite von Post , als `items` und `next`.
Beispiel {
"items": [
{
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"text": "The bees are back in the garden 🐝 #garden",
"kind": "poll",
"author": {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
},
"community": {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening"
},
"media": [
{
"url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"kind": "image",
"poster": null,
"ai": "without"
}
],
"poll": {
"options": [
{
"text": "Lavender",
"votes": 12
},
{
"text": "Sunflowers",
"votes": 7
},
{
"text": "Clover",
"votes": 3
}
],
"total": 22,
"multiple": false,
"endsAt": null,
"running": true,
"resultsVisible": true,
"myVotes": [
0
]
},
"quotes": null,
"continues": null,
"counts": {
"replies": 4,
"likes": 31,
"reposts": 2
},
"pinned": false,
"giftDrop": {
"item": "plan",
"quantity": 3,
"places": 10,
"left": 4,
"audience": "followers",
"newAccounts": false,
"status": "open",
"claimed": true
},
"createdAt": 1758624000000
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}Mögliche Status: 200400401404429
POST /v2/me/collections/{id}/postsEinen Beitrag in eine Sammlung legen oder herausnehmen.
Hineinlegen merkt den Beitrag auch. Nur sichtbare Beiträge.
Parameter Name Typ Bedeutung idim Pfad stringPflicht Die id der Sammlung. postim Körper stringPflicht Die id des Beitrags. insideim Körper booleanfreiwillig true legt den Beitrag hinein (Standard), false nimmt ihn heraus.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"post":"5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1","inside":true}' \
"https://api.tellmelo.com/v2/me/collections/6d5c4b3a-2918-4e7f-a1b2-c3d4e5f60718/posts"Antwort Antwortet mit einem Ok .
Beispiel {
"ok": true
}Mögliche Status: 200400401403404429
Geschenke Das Kontingent eines Partners lesen und daraus verschenken, Geschenke unter Beiträgen verteilen und im Blick behalten. Abholen bleibt Menschen in der App vorbehalten.
GET /v2/partner/quotaWie viel noch in deinem Kontingent zum Verschenken steckt.
Recht read mit ETag seit v2.12 Nur für Partner mit Kontingent; alle anderen bekommen 403.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/partner/quota"Antwort Antwortet mit einem Quota .
Beispiel {
"months": 120,
"sparks": 500,
"looks": [
{
"id": "frame-gold",
"name": "Goldring",
"kind": "frame",
"quantity": 25
}
]
}Mögliche Status: 200304401429
GET /v2/partner/giftsWas du aus dem Kontingent verschenkt hast, an wen und wann – das Neueste zuerst.
Recht read blätterbar mit ETag seit v2.12 Nur für Partner mit Kontingent; alle anderen bekommen 403.
Parameter Name Typ Bedeutung limitin der Adresse integerfreiwillig Einträge je Seite: 20 als Vorgabe, höchstens 50. cursorin der Adresse stringfreiwillig Das next der vorigen Antwort. Ohne ihn von vorn.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/partner/gifts?limit=20"Antwort Antwortet mit einer Seite von QuotaGift , als `items` und `next`.
Beispiel {
"items": [
{
"item": "plan",
"quantity": 3,
"itemId": null,
"recipient": {
"handle": "jon",
"name": "Jon"
},
"createdAt": 1758627600000
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}Mögliche Status: 200304401429
POST /v2/partner/giftsAbo-Monate oder Funken aus deinem Kontingent an ein Mitglied verschenken.
Nur für Partner mit Kontingent; alle anderen bekommen 403.
Das Mitglied erfährt wie in der App, von wem das Geschenk kommt. Höchstens 60 Geschenke je Stunde.
Parameter Name Typ Bedeutung handleim Körper stringPflicht Der @Name des Mitglieds, das du beschenkst, mit oder ohne @. itemim Körper stringPflicht plan für Abo-Monate, sparks für Funken, shop für einen Look aus deinem Vorrat (seit 2.13).plansparksshopquantityim Körper integerfreiwillig Wie viel: bis zu 12 Monate oder 35 Funken je Geschenk. itemIdim Körper stringfreiwillig Für shop: die ID des Looks, wie looks im Kontingent sie nennt. Ein Stück je Geschenk; quantity gilt dann nicht.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"handle":"jon","item":"plan","quantity":3,"itemId":"frame-gold"}' \
"https://api.tellmelo.com/v2/partner/gifts"Antwort Antwortet mit einem Quota .
Beispiel {
"months": 120,
"sparks": 500,
"looks": [
{
"id": "frame-gold",
"name": "Goldring",
"kind": "frame",
"quantity": 25
}
]
}Mögliche Status: 200400401403429
GET /v2/gift-dropsDeine Geschenke unter Beiträgen: wie viele Plätze noch frei sind und wie sie bezahlt wurden.
Recht read blätterbar mit ETag seit v2.12 Parameter Name Typ Bedeutung limitin der Adresse integerfreiwillig Einträge je Seite: 20 als Vorgabe, höchstens 50. cursorin der Adresse stringfreiwillig Das next der vorigen Antwort. Ohne ihn von vorn.
Beispielanfrage curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/gift-drops?limit=20"Antwort Antwortet mit einer Seite von OwnGiftDrop , als `items` und `next`.
Beispiel {
"items": [
{
"item": "plan",
"quantity": 3,
"places": 10,
"left": 4,
"audience": "followers",
"newAccounts": false,
"status": "open",
"claimed": false,
"postId": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"funding": "quota",
"createdAt": 1758624000000
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}Mögliche Status: 200304401429
POST /v2/gift-dropsEinen Beitrag mit Geschenken zum Abholen veröffentlichen.
Kostenlos für den Inhaber und Teammitglieder mit dem Recht dazu, sonst aus deinem Kontingent. Was bezahlt werden müsste, lehnt die API mit 422 ab – bezahlen geht nur in der App.
Abholen geht nur in der App, damit kein Programm alle Plätze abräumt. Wie viele noch frei sind, steht am Beitrag in giftDrop.
Parameter Name Typ Bedeutung textim Körper stringfreiwillig Der Text des Beitrags, der Antwort oder der Nachricht. communityim Körper stringfreiwillig Die id der Gruppe, in deren Feed-Kanal der Beitrag geht; er muss an sein, und du brauchst das Recht dazu. Ohne sie steht der Beitrag außerhalb jeder Gruppe. itemim Körper stringPflicht plan für Abo-Monate, sparks für Funken.plansparksquantityim Körper integerPflicht Was jeder Platz enthält: bis zu 12 Monate oder 35 Funken. placesim Körper integerPflicht Für wie viele Personen, bis zu 10 000. audienceim Körper stringfreiwillig Wer abholen darf: all alle, followers nur deine Follower, group nur die Mitglieder der Gruppe (nur zusammen mit community).allfollowersgroup newAccountsim Körper booleanfreiwillig true lässt auch Konten abholen, die jünger als 7 Tage sind. Ohne Angabe bleiben sie außen vor.
Beispielanfrage curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"text":"Ten times three months of Supporter – first come, first served! 🎁","item":"plan","quantity":3,"places":10,"audience":"all","newAccounts":false}' \
"https://api.tellmelo.com/v2/gift-drops"Antwort Antwortet mit einem DropCreated .
Beispiel {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"funding": "quota"
}Mögliche Status: 200400401403429
Objekte Alle Objekte, Feld für Feld. [] heißt Liste.
ServiceDie Antwort der Wurzel: wer antwortet, und was dieser Schlüssel darf.
Feld Typ Bedeutung namestringImmer tellmelo. versionstringDie Version der API, zum Beispiel 2.1. scopestringWas dieser Schlüssel darf: read oder read write. rateLimitRateLimitDas Kontingent dieses Schlüssels. docsstringWo diese Dokumentation steht, als Pfad auf dieser Instanz. specstringWo die maschinenlesbare Beschreibung steht.
Beispiel {
"name": "tellmelo",
"version": "2.20",
"scope": "read write",
"rateLimit": {
"limit": 120,
"remaining": 117
},
"docs": "/developers/docs",
"spec": "/api/v2/openapi.json"
}RateLimitDas Kontingent dieses Schlüssels in der laufenden Minute.
Feld Typ Bedeutung limitintegerAnfragen je Minute. remainingintegerWie viele in dieser Minute übrig sind.
Beispiel {
"limit": 120,
"remaining": 117
}PostEin Beitrag, überall in derselben Form.
Feld Typ Bedeutung idstringDie ID des Beitrags. textstringoder null Der Text, wie geschrieben (null bei einem Beitrag, der nur Umfrage oder nur Bilder ist). kindstringWas der Beitrag ist.post — Ein Beitrag mit Text, Bildern oder einem Zitat.poll — Ein Beitrag mit einer Umfrage. authorProfileBriefWer ihn geschrieben hat. communityCommunityBriefoder null Die Gruppe, in der er geschrieben wurde (null außerhalb jeder Gruppe). mediaMedia[]Seine Bilder, in Reihenfolge; leer, wenn es keine gibt. pollPolloder null Die Umfrage (null, wenn es keine gibt). quotesstringoder null Die ID des Beitrags, den dieser zitiert. continuesstringoder null Die ID des Beitrags, den dieser als Nachtrag fortsetzt. countsCountsAntworten, Gefällt-mir und Reposts. pinnedbooleanOb er oben im Profil seines Verfassers angeheftet ist. giftDropGiftDropoder null Geschenke zum Abholen unter dem Beitrag (null, wenn es keine gibt). createdAtintegerWann er geschrieben wurde.
Beispiel {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"text": "The bees are back in the garden 🐝 #garden",
"kind": "poll",
"author": {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
},
"community": {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening"
},
"media": [
{
"url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"kind": "image",
"poster": null,
"ai": "without"
}
],
"poll": {
"options": [
{
"text": "Lavender",
"votes": 12
},
{
"text": "Sunflowers",
"votes": 7
},
{
"text": "Clover",
"votes": 3
}
],
"total": 22,
"multiple": false,
"endsAt": null,
"running": true,
"resultsVisible": true,
"myVotes": [
0
]
},
"quotes": null,
"continues": null,
"counts": {
"replies": 4,
"likes": 31,
"reposts": 2
},
"pinned": false,
"giftDrop": {
"item": "plan",
"quantity": 3,
"places": 10,
"left": 4,
"audience": "followers",
"newAccounts": false,
"status": "open",
"claimed": true
},
"createdAt": 1758624000000
}ReplyEine Antwort unter einem Beitrag: ein Beitrag mit zwei Feldern mehr.
Jedes Feld von Post , und dazu:
Feld Typ Bedeutung postIdstringDer Beitrag, an dem das ganze Gespräch hängt. parentIdstringoder null Die Antwort, auf die diese antwortet (null, wenn sie direkt auf den Beitrag antwortet).
Beispiel {
"id": "9e4b1c7d-2a3f-4d5e-8b6c-0f1e2d3c4b5a",
"text": "Same here, the lavender is full of them.",
"kind": "post",
"author": {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"verified": false,
"accountKind": "person"
},
"community": null,
"media": [],
"poll": null,
"quotes": null,
"continues": null,
"counts": {
"replies": 0,
"likes": 3,
"reposts": 0
},
"pinned": false,
"giftDrop": null,
"createdAt": 1758624600000,
"postId": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"parentId": null
}ReplyVoteDeine Stimme zu einer Antwort und ihre Wertung.
Feld Typ Bedeutung votestringDeine Stimme.up — Hochgevotet.down — Runtergevotet.none — Keine Stimme. scoreintegerUpvotes minus Downvotes, auch unter null.
Beispiel {
"vote": "up",
"score": 12
}PlannedReplyEine eigene Antwort, die für später geplant ist.
Feld Typ Bedeutung idstringDie id der geplanten Antwort. parentIdstringoder null Die Antwort, auf die sie antworten wird (null, wenn direkt auf den Beitrag). textstringDer Text. publishAtintegerWann sie erscheint. statestringIhr Stand.waiting — Wartet auf ihre Zeit.failed — Konnte nicht gesendet werden, etwa weil der Beitrag weg ist.
Beispiel {
"id": "3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9",
"parentId": null,
"text": "Count me in for Saturday!",
"publishAt": 1758710400000,
"state": "waiting"
}ReplySettingsDie Antwort-Einstellungen eines eigenen Beitrags.
Feld Typ Bedeutung audiencestringWer antworten darf.all — Alle.following — Konten, denen du folgst.mentioned — Im Beitrag Erwähnte.nobody — Niemand außer dir. approvalbooleanOb Antworten auf deine Freigabe warten. slowstringDer langsame Modus.auto — Schaltet sich bei vielen Antworten von selbst ein.on — Immer an.off — Aus.
Beispiel {
"audience": "following",
"approval": false,
"slow": "auto"
}CountsWie viele Antworten, Gefällt-mir und Reposts ein Beitrag hat.
Feld Typ Bedeutung repliesintegerAntworten, alle Ebenen zusammen. likesintegerGefällt-mir. repostsintegerReposts.
Beispiel {
"replies": 4,
"likes": 31,
"reposts": 2
}PollDie Umfrage eines Beitrags.
Feld Typ Bedeutung optionsPollOption[]Die Antworten, in Reihenfolge. option beim Abstimmen zählt ab 0. totalintegerAlle Stimmen zusammen, immer vorhanden. multiplebooleanOb mehr als eine Antwort gewählt werden darf. endsAtintegeroder null Wann die Umfrage endet (null, wenn sie ohne Ende läuft). runningbooleanOb noch abgestimmt werden kann. resultsVisiblebooleanOb die Stimmen je Antwort gezeigt werden (siehe votes). myVotesinteger[]Die Antworten, die du gewählt hast, ab 0 gezählt.
Beispiel {
"options": [
{
"text": "Lavender",
"votes": 12
},
{
"text": "Sunflowers",
"votes": 7
},
{
"text": "Clover",
"votes": 3
}
],
"total": 22,
"multiple": false,
"endsAt": null,
"running": true,
"resultsVisible": true,
"myVotes": [
0
]
}PollOptionEine Antwort einer Umfrage.
Feld Typ Bedeutung textstringDie Antwort. votesintegeroder null Ihre Stimmen (null, solange das Ergebnis zurückgehalten wird).
Beispiel {
"text": "Lavender",
"votes": 12
}ProfileBriefEin Profil, wie es in anderen Objekten erscheint: als Verfasser, in einer Suche.
Feld Typ Bedeutung idstringDie ID des Kontos: das, was /relations und /conversations/{with} erwarten. handlestringDer Kurzname, ohne @, so geschrieben, wie das Mitglied ihn gewählt hat. namestringDer Anzeigename. Er kann Emojis enthalten, auch :name:. verifiedbooleanOb das Konto verifiziert ist. accountKindstringWas für ein Konto es ist.person — Eine Person.business — Ein Unternehmen.association — Ein Verein.automated — Ein automatisiertes Konto, etwa ein Bot.bot — Ein Bot einer Gruppe, gesteuert von einem Programm mit eigenem Schlüssel (seit 2.18).
Beispiel {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
}ProfileEin Profil für sich, mit Beschreibung und Folgenden.
Jedes Feld von ProfileBrief , und dazu:
Feld Typ Bedeutung aboutstringoder null Die Beschreibung (null, wenn es keine gibt). websitestringoder null Die Website des Profils (null, wenn es keine gibt). Seit 2.3. websiteVerifiedbooleanOb die Website per rel=me auf dieses Profil verlinkt, wöchentlich geprüft. Seit 2.3. followersintegerWie viele Konten ihm folgen. createdAtintegeroder null Wann das Konto angelegt wurde (null, solange das Mitglied das Beitrittsdatum ausblendet; seit 2.9).
Beispiel {
"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
}MembershipWas dein Konto in der Gruppe ist und darf.
Feld Typ Bedeutung leaderstringoder null Ob du die Gruppe gegründet hast oder mitleitest; null sonst.founder — Gegründet.manager — Mitleitung. rolesstring[]Die ids deiner Rollen, die höchste zuerst. permissionsstring[]Was du in der Gruppe darfst. mutedUntilintegeroder null Bis wann ein Timeout dich hier stummschaltet; null ohne.
Beispiel {
"leader": null,
"roles": [
"4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8"
],
"permissions": [
"attach",
"invite",
"send",
"view"
],
"mutedUntil": null
}PersonEin Mitglied, kurz.
Feld Typ Bedeutung idstringDie id des Kontos. handlestringDer Nutzername, ohne @. namestringDer angezeigte Name. botbooleanOb das Konto ein Bot ist (seit 2.18).
Beispiel {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"bot": false
}ChannelEin Kanal einer Gruppe.
Feld Typ Bedeutung idstringDie id. kindstringWelche Art Kanal.feed — Der Feed-Kanal, dessen Beiträge auch im öffentlichen Feed stehen.chat — Ein Chat.voice — Ein Sprachkanal; gesprochen wird nur in der App.hub — Der Hub der Gruppe: ihre Seite mit dem, was sie ist. Immer da, ohne Nachrichten. namestringoder null Der Name ohne #; null für den Namen, den die App in jeder Sprache gibt. topicstringDas Thema; leer, wenn es keins gibt. categoryChannelCategoryoder null Die Kategorie; null ohne. unreadintegerWie viele Nachrichten anderer du noch nicht gelesen hast, bis 100. permissionsstring[]Was du in diesem Kanal darfst. symbolChannelSymbolSein Symbol; die Form schon die der Gruppe, wenn sie eine vorgibt.
Beispiel {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a",
"kind": "chat",
"name": "harvest",
"topic": "What came in this week",
"category": {
"id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
"name": "Garden",
"symbol": {
"emoji": null,
"icon": null,
"image": null,
"color": null,
"shape": null
}
},
"unread": 3,
"permissions": [
"view",
"send"
],
"symbol": {
"emoji": "🌻",
"icon": null,
"image": null,
"color": "amber",
"shape": "circle"
}
}ChannelCategoryDie Kategorie, unter der ein Kanal steht.
Feld Typ Bedeutung idstringDie id. namestringDer Name. symbolChannelSymbolIhr Symbol.
Beispiel {
"id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
"name": "Garden",
"symbol": {
"emoji": null,
"icon": null,
"image": null,
"color": null,
"shape": null
}
}ChannelSymbolDas Symbol eines Kanals oder einer Kategorie: höchstens eins von Emoji, Symbol und Bild, sonst das Zeichen seiner Art.
Feld Typ Bedeutung emojistringoder null Das Emoji; null ohne. iconstringoder null Der Name des Symbols aus dem Satz der App; null ohne. imagestringoder null Die Adresse des eigenen Bildes; null ohne. colorstringoder null Die Farbe der Kachel; null für die seiner Art. shapestringoder null Die Form der Kachel; null für einen Kreis.
Beispiel {
"emoji": "🌻",
"icon": null,
"image": null,
"color": "amber",
"shape": "circle"
}ChannelMessageEine Nachricht in einem Chat-Kanal.
Feld Typ Bedeutung idstringDie id. textstringoder null Der Text (null bei einer Nachricht nur aus Bildern oder Sprache). authorPersonWer sie geschrieben hat. mediaMedia[]Ihre Bilder und Sprachnachrichten; leer, wenn es keine gibt. replyTostringoder null Die id der Nachricht, auf die sie antwortet; null, wenn auf keine. roleColorstringoder null Die Farbe der höchsten Rolle des Autors, die eine Farbe hat; null ohne. threadOfstringoder null Die Nachricht, in deren Thread diese antwortet; null im Chat. threadCountintegerWie viele Antworten der Thread dieser Nachricht hat. cardobjectoder null Die Karte eines Bots: title, text, color und fields; sonst null. buttonsobject[]Die Knöpfe eines Bots: je id, label und style. createdAtintegerWann sie geschrieben wurde.
Beispiel {
"id": "61a2b3c4-d5e6-4f70-8192-a3b4c5d6e7f8",
"text": "@jon the first tomatoes are ripe 🍅",
"author": {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"bot": false
},
"media": [
{
"url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"kind": "image",
"poster": null,
"ai": "without"
}
],
"replyTo": "72b3c4d5-e6f7-4081-92a3-b4c5d6e7f809",
"roleColor": "green",
"threadOf": null,
"threadCount": 3,
"card": null,
"buttons": [],
"createdAt": 1758631200000
}RoleEine Rolle einer Gruppe.
Feld Typ Bedeutung idstringDie id. namestringoder null Der Name; null für @everyone. everyonebooleanOb es @everyone ist, die Rolle aller Mitglieder. colorstringoder null Die Farbe: indigo, violet, rose, amber, green oder teal; null ohne. permissionsstring[]Ihre Rechte. membersintegerWie viele sie haben; bei @everyone alle Mitglieder. editablebooleanOb dein Konto sie ändern darf. selfablebooleanOb Mitglieder sich die Rolle selbst nehmen und ablegen.
Beispiel {
"id": "4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8",
"name": "Gardeners",
"everyone": false,
"color": "green",
"permissions": [
"attach",
"invite",
"send",
"view"
],
"members": 24,
"editable": true,
"selfable": false
}GroupMemberEin Mitglied einer Gruppe mit seinen Rollen.
Jedes Feld von Person , und dazu:
Feld Typ Bedeutung leaderstringoder null Ob das Mitglied die Gruppe gegründet hat oder mitleitet; null sonst.founder — Gegründet.manager — Mitleitung. rolesstring[]Die ids seiner Rollen, die höchste zuerst. mutedUntilintegeroder null Bis wann ein Timeout das Mitglied stummschaltet, wenn dein Konto Timeouts geben darf; sonst null.
Beispiel {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"bot": false,
"leader": null,
"roles": [
"4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8"
],
"mutedUntil": null
}ChannelOverrideWas eine Rolle in einem Kanal anders darf als in der Gruppe.
Feld Typ Bedeutung rolestringDie id der Rolle. allowstring[]Was sie hier zusätzlich darf. denystring[]Was sie hier nicht darf.
Beispiel {
"role": "4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8",
"allow": [
"send"
],
"deny": []
}BellDie Glocke einer Gruppe.
Feld Typ Bedeutung levelstringWelche Mitteilungen kommen.all — Jeder neue Beitrag im Feed-Kanal, dazu @everyone.important — Beiträge der Leitung im Feed-Kanal, dazu @everyone.off — Nichts, außer du wirst mit @Name erwähnt.
Beispiel {
"level": "important"
}InviteLinkEin Einladungslink einer Gruppe.
Feld Typ Bedeutung codestringDer Code. urlstringDie Adresse zum Teilen. createdByPersonoder null Wer ihn erstellt hat; null, wenn das Konto gelöscht ist. createdAtintegerWann er erstellt wurde. expiresAtintegeroder null Bis wann er gilt; null ohne Ablauf. usesintegerWie oft er genutzt wurde. maxUsesintegeroder null Wie oft er genutzt werden kann; null beliebig oft.
Beispiel {
"code": "k7Qm2xPa",
"url": "https://tellmelo.com/groups?join=k7Qm2xPa",
"createdBy": {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"bot": false
},
"createdAt": 1758624000000,
"expiresAt": 1759228800000,
"uses": 3,
"maxUses": 10
}InvitePreviewWohin ein Einladungslink führt.
Feld Typ Bedeutung communityInviteGroupDie Gruppe. memberbooleanOb dein Konto schon Mitglied ist.
Beispiel {
"community": {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening",
"members": 312,
"rules": [
"Be kind.",
"No advertising."
]
},
"member": false
}InviteGroupDie Gruppe hinter einem Einladungslink.
Feld Typ Bedeutung idstringDie id. namestringDer Name. membersintegerWie viele Mitglieder sie hat. rulesstring[]Ihre Regeln, die man beim Beitritt annimmt; leer, wenn es keine gibt.
Beispiel {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening",
"members": 312,
"rules": [
"Be kind.",
"No advertising."
]
}JoinedDer Beitritt mit einem Einladungslink.
Feld Typ Bedeutung communitystringDie id der Gruppe.
Beispiel {
"community": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60"
}LogEntryEin Eintrag im Protokoll der Leitung.
Feld Typ Bedeutung idstringDie id. actionstringWas geschah.post_removed — Ein Beitrag.member_removed — Ein Mitglied entfernt, vor 2.16 (mit 90 Tagen Sperre).message_removed — Eine Nachricht in einem Chat-Kanal.member_kicked — Ein Kick.member_banned — Ein Bann.member_unbanned — Ein aufgehobener Bann.member_timed_out — Ein Timeout.timeout_lifted — Ein aufgehobener Timeout.voice_muted — Im Sprachkanal stummgeschaltet.voice_removed — Aus dem Sprachkanal getrennt.bot_added — Ein Bot wurde in die Gruppe aufgenommen (seit 2.18).bot_removed — Ein Bot wurde aus der Gruppe entfernt (seit 2.18). memberPersonWen es betraf. reasonstringDie Begründung; leer bei Nachrichten und wenn keine gegeben wurde. bystringoder null Der Name, wer es getan hat; null, wenn das Konto gelöscht ist. createdAtintegerWann.
Beispiel {
"id": "8f7e6d5c-4b3a-4291-8f7e-6d5c4b3a2918",
"action": "message_removed",
"member": {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"bot": false
},
"reason": "",
"by": "Mara 🌻",
"createdAt": 1758710400000
}BanEin Bann aus einer Gruppe.
Feld Typ Bedeutung memberPersonWer gebannt ist. untilintegeroder null Bis wann; null, bis er aufgehoben wird. createdAtintegeroder null Seit wann; null bei Banns von vor 2.16. bystringoder null Der Name, wer gebannt hat; null, wenn unbekannt.
Beispiel {
"member": {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"bot": false
},
"until": 1759228800000,
"createdAt": 1758624000000,
"by": "Mara 🌻"
}UntilWann ein Timeout oder Bann endet.
Feld Typ Bedeutung untilintegeroder null Der Zeitpunkt; null bei einem Bann ohne Ende oder einem aufgehobenen Timeout.
Beispiel {
"until": 1758624600000
}TagEin Tag und wie viele Beiträge ihn tragen.
Feld Typ Bedeutung tagstringDer Tag, ohne #. postsintegerWie viele neuere Beiträge ihn tragen.
Beispiel {
"tag": "garden",
"posts": 58
}SearchResultDrei Listen, notfalls leer.
Feld Typ Bedeutung postsPost[]Passende Beiträge, neueste zuerst. profilesProfileBrief[]Passende Profile, nach Kurzname. tagsTag[]Passende Tags, meistbenutzte zuerst.
Beispiel {
"posts": [
{
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"text": "The bees are back in the garden 🐝 #garden",
"kind": "poll",
"author": {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
},
"community": {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening"
},
"media": [
{
"url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"kind": "image",
"poster": null,
"ai": "without"
}
],
"poll": {
"options": [
{
"text": "Lavender",
"votes": 12
},
{
"text": "Sunflowers",
"votes": 7
},
{
"text": "Clover",
"votes": 3
}
],
"total": 22,
"multiple": false,
"endsAt": null,
"running": true,
"resultsVisible": true,
"myVotes": [
0
]
},
"quotes": null,
"continues": null,
"counts": {
"replies": 4,
"likes": 31,
"reposts": 2
},
"pinned": false,
"giftDrop": {
"item": "plan",
"quantity": 3,
"places": 10,
"left": 4,
"audience": "followers",
"newAccounts": false,
"status": "open",
"claimed": true
},
"createdAt": 1758624000000
}
],
"profiles": [
{
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
}
],
"tags": [
{
"tag": "garden",
"posts": 58
}
]
}EmojiEin Emoji dieser Instanz.
Feld Typ Bedeutung namestringDer Name, wie er zwischen den Doppelpunkten steht. urlstringDie Adresse des Bildes, relativ zu dieser Instanz.
Beispiel {
"name": "tellmelo",
"url": "/api/media?id=e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b"
}NotificationEine Mitteilung. Eine Zeile kann mehrere Ereignisse derselben Art sammeln.
Feld Typ Bedeutung idstringDie ID der Mitteilung. kindstringWas passiert ist.reply — Jemand hat dir geantwortet.like — Jemandem gefällt dein Beitrag.reply_like — Jemand votet deine Antwort hoch.duel — Jemand fordert dich zum Duell der Feeds heraus, oder deine Herausforderung ist gespielt.reply_pick — Wer den Beitrag geschrieben hat, hebt deine Antwort hervor.repost — Jemand hat deinen Beitrag geteilt.follow — Jemand folgt dir.mention — Jemand hat dich erwähnt.group_mention — Jemand hat eine Gruppe erwähnt, die du leitest; text ist ihr Name.channel_mention — Jemand hat dich in einem Chat-Kanal einer deiner Gruppen erwähnt, auch mit @everyone; das Mitglied steht als actor, Kanal und Gruppe stehen im Satz, nie die Nachricht.message — Jemand hat dir eine Nachricht geschrieben.scheduled — Ein geplanter Beitrag von dir ist erschienen.video — Ein Beitrag von dir, der auf sein Video gewartet hat, ist erschienen oder wieder zum Entwurf geworden.reminder — Eine Erinnerung an einen gespeicherten Beitrag ist fällig.report — Was aus einer Meldung geworden ist, die du geschickt hast.moderation — Eine Entscheidung über dein Konto: eine Verwarnung, eine Einschränkung, ein Widerspruch.team — Neue Arbeit fürs Team (nur Inhaber, Admins und Moderatoren).reward — Eine Belohnung fürs Einladen droht wegzufallen oder ist weggefallen.gift — Ein Geschenk vom Team: ein Abo, oder Funken an dich oder an eine Gruppe, die du leitest.present — Ein Geschenk eines Mitglieds: Funken oder Abo-Zeit; das Mitglied steht als actor.spark — Funken laufen bald ab, oder einer Gruppe, die du leitest, reichen die Funken nicht mehr für ihre Vorteile.loyalty — Rund um den Treue-Rhythmus: Eine aktive Woche zählt oder es fehlt ihr noch ein Tag, eine Belohnung ist neu oder droht zu verfallen.impact — Wie deine Beiträge der ersten zwölf Stunden nach einem Tag ankamen, in einer Mitteilung.discovery — Eine Einladung in das Entdecken-Programm, oder dass ein Platz dort beginnt oder endet.group_post — Ein neuer Beitrag in einer Gruppe, deren Glocke dafür läutet.group_moderation — Die Leitung einer Gruppe hat einen deiner Beiträge oder dich aus der Gruppe entfernt.group — Etwas, das ein Mitglied in einer Gruppe mit dir getan hat: eingeladen, aufgenommen oder abgelehnt, zur Mitleitung gemacht, die Gruppe übergeben oder aufgelöst, oder sich in deiner Gruppe beworben; das Mitglied steht als actor, der Name der Gruppe am Ende des Satzes.coauthor — Jemand hat dich als Mitautor eines Beitrags eingeladen.partner — Eine Erinnerung aus dem Partnerprogramm oder das Ende des Partner-Abzeichens.news — Ein neuer Artikel in einer Region, der du folgst.pick — Ein Beitrag von dir steht zur Wahl für den Beitrag der Woche oder des Jahres, oder er hat gewonnen.advent — Ein neues Türchen des Adventskalenders ist offen, eines wurde geöffnet oder das von heute wartet noch.team_message — Eine Nachricht, die das tellmelo-Team an ausgewählte Mitglieder geschrieben hat.challenge — Eine neue Challenge der Woche hat begonnen.nudge — Einmalig: ein Beitrag, auf den noch niemand geantwortet hat, oder die laufende Challenge.signin — Ein Computer fragt, ob du dich dort gerade anmeldest. textstringoder null Nur bei Meldungen und Moderation der zugehörige Text, sonst null. actorActorWer es getan hat. postIdstringoder null Der Beitrag, um den es geht (null, wenn es um keinen geht). readbooleanOb sie als gelesen markiert ist. moreintegerFür wie viele weitere Ereignisse diese Zeile steht, über das genannte hinaus. createdAtintegerWann es zum ersten Mal passiert ist. updatedAtintegerWann sie zuletzt ein weiteres Ereignis gesammelt hat. Danach ist die Liste sortiert.
Beispiel {
"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
}ActorWer eine Mitteilung ausgelöst hat.
Feld Typ Bedeutung handlestringDer Kurzname. namestringDer Anzeigename.
Beispiel {
"handle": "jon",
"name": "Jon"
}ConversationEine Zeile deines Postfachs.
Feld Typ Bedeutung withstringDie ID des anderen Kontos: das, was /conversations/{with}/messages erwartet. handlestringSein Kurzname. namestringSein Anzeigename. excerptstringoder null Der Anfang der letzten Nachricht (null, wenn sie keinen Text hat). truncatedbooleanOb der Anfang gekürzt wurde. fromMebooleanOb die letzte Nachricht von dir ist. lastMessageIdstringDie ID der letzten Nachricht. unreadintegerWie viele seiner Nachrichten du noch nicht gelesen hast. updatedAtintegerWann die letzte Nachricht geschrieben wurde.
Beispiel {
"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
}MessageEine Nachricht in einem Gespräch.
Feld Typ Bedeutung idstringDie ID der Nachricht. textstringoder null Der Text (null bei einer Nachricht, die nur aus Bildern besteht). fromstringDie ID des Kontos, das sie geschrieben hat. tostringDie ID des Kontos, an das sie ging. readbooleanOb die Empfängerin oder der Empfänger sie gelesen hat. mediaMedia[]Ihre Bilder; leer, wenn es keine gibt. replyTostringoder null Die id der Nachricht, auf die diese antwortet (null, wenn sie auf keine antwortet). Seit 2.2. createdAtintegerWann sie gesendet wurde.
Beispiel {
"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
}PlannedMessageEine eigene Nachricht, die für später geplant ist.
Feld Typ Bedeutung idstringDie id der geplanten Nachricht. tostringDie id des Kontos, das sie erhält. textstringoder null Der Text, null bei Ende-zu-Ende-Verschlüsselung. sendAtintegerWann sie gesendet wird. statestringIhr Stand.waiting — Wartet auf ihre Zeit.held — Zurückgehalten, weil das Abo endete. Du kannst sie selbst senden oder löschen.failed — Konnte nicht gesendet werden.
Beispiel {
"id": "3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9",
"to": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"text": "Happy birthday! 🎂",
"sendAt": 1758710400000,
"state": "waiting"
}ScheduledPostEin eigener Beitrag, der noch nicht erschienen ist.
Feld Typ Bedeutung idstringDie id des Beitrags. textstringoder null Der Text. communityIdstringoder null Die Gruppe, in der er erscheint (null außerhalb von Gruppen). publishAtintegeroder null Wann er erscheint (null, solange er auf etwas anderes wartet). deleteAtintegeroder null Wann er sich von selbst löscht (null: nie). waitingForstringWorauf er wartet.time — Auf seine Zeit.review — Auf die Freigabe eines Textes, der zur Prüfung geschrieben wurde.check — Auf die Prüfung durch die automatische Moderation.payment — Auf die Bezahlung seiner Geschenke. createdAtintegerWann er geschrieben wurde.
Beispiel {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"text": "Market day tomorrow – see you at the bee stand! #garden",
"communityId": null,
"publishAt": 1758710400000,
"deleteAt": null,
"waitingFor": "time",
"createdAt": 1758624000000
}CollectionEine Sammlung gemerkter Beiträge.
Feld Typ Bedeutung idstringDie id der Sammlung. namestringIhr Name. countintegerWie viele Beiträge darin sind.
Beispiel {
"id": "6d5c4b3a-2918-4e7f-a1b2-c3d4e5f60718",
"name": "Recipes",
"count": 12
}EventEin anstehender Termin eines Profils.
Feld Typ Bedeutung idstringDie id des Termins. titlestringDer Titel. startsAtintegerBeginn. endsAtintegeroder null Ende, null ohne Ende. placestringoder null Der Ort. descriptionstringoder null Die Beschreibung. signupsEventSignupsoder null Die Anmeldungen, null ohne Anmeldung.
Beispiel {
"id": "2a3b4c5d-6e7f-4809-9a1b-2c3d4e5f6a7b",
"title": "Seed swap",
"startsAt": 1758883200000,
"endsAt": 1758890400000,
"place": "Community garden",
"description": "Bring seeds, take seeds.",
"signups": {
"count": 14,
"going": true
}
}EventSignupsWie viele angemeldet sind.
Feld Typ Bedeutung countintegerDie Zahl der Anmeldungen. goingbooleanOb du angemeldet bist.
Beispiel {
"count": 14,
"going": true
}EventSignupJemand, der sich für einen deiner Termine angemeldet hat.
Feld Typ Bedeutung idstringDie id des Kontos. handlestringDas Kürzel. namestringDer Anzeigename. atintegerWann angemeldet.
Beispiel {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"at": 1758624000000
}PictureEin hochgeladenes Bild.
Feld Typ Bedeutung idstringDie id des Bildes. urlstringWo es zu sehen ist.
Beispiel {
"id": "8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9"
}EmojiPictureDas hochgeladene Bild eines Emojis.
Feld Typ Bedeutung idstringDie id des Bildes. urlstringWo es zu sehen ist. animatedbooleanOb es sich bewegt.
Beispiel {
"id": "8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false
}OwnEmojiEines deiner eigenen Emojis.
Feld Typ Bedeutung namestringSein Name. urlstringSein Bild. animatedbooleanOb es sich bewegt. restingbooleanRuht, weil das Abo gerade weniger Emojis erlaubt: Es bleibt, ist aber nicht nutzbar.
Beispiel {
"name": "sunflower",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false,
"resting": false
}GroupEmojiEin Emoji einer Gruppe.
Feld Typ Bedeutung namestringSein Name. urlstringSein Bild. animatedbooleanOb es sich bewegt.
Beispiel {
"name": "seedling",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false
}BotEventEin Ereignis in einer Gruppe des Bots.
Feld Typ Bedeutung idstringSeine Nummer, aufsteigend; mit ihr geht es weiter (since, Last-Event-ID). typestringWas geschah.message.created — Eine Nachricht wurde geschrieben.message.deleted — Eine Nachricht wurde gelöscht.member.joined — Jemand ist beigetreten.member.left — Jemand ist gegangen oder wurde entfernt.voice.joined — Jemand ist einem Sprachkanal beigetreten.command — Jemand hat einen Befehl des Bots benutzt.interaction — Jemand hat einen Knopf in einer Nachricht des Bots gedrückt. communitystringDie Gruppe. channelstringoder null Der Kanal; null für die ganze Gruppe. createdAtintegerWann es geschah. dataobjectWas dazu gehört, je nach Art: message, member (mit reason), command oder interaction.
Beispiel {
"id": "4711",
"type": "message.created",
"community": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"channel": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a",
"createdAt": 1758634800000,
"data": {
"message": {
"id": "61a2b3c4-d5e6-4f70-8192-a3b4c5d6e7f8",
"text": "/dice 6",
"author": {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"bot": false
},
"media": 0,
"replyTo": null,
"threadOf": null,
"createdAt": 1758634800000
}
}
}BotCommandEin Befehl eines Bots.
Feld Typ Bedeutung namestringSein Name, ohne „/“. descriptionstringWas er tut.
Beispiel {
"name": "dice",
"description": "Rolls a die"
}VoiceSeatEin Platz im Sprachkanal.
Feld Typ Bedeutung urlstringDie Adresse des Medienservers (LiveKit). tokenstringDas Token für diesen Kanal, einige Minuten gültig. iceServersobject[]Die STUN- und TURN-Server für die Verbindung. speakbooleanOb der Bot dort Ton senden darf. videobooleanOb der Bot dort Bild senden darf.
Beispiel {
"url": "wss://voice.example.org",
"token": "eyJhbGciOiJIUzI1NiJ9…",
"iceServers": [
{
"urls": [
"stun:turn.example.org:3478"
]
}
],
"speak": true,
"video": false
}WebhookEiner deiner Webhooks.
Feld Typ Bedeutung idstringDie id des Webhooks. urlstringSeine Adresse. kindsstring[]Worüber er Bescheid bekommt. activebooleanOb er zugestellt bekommt. Nach vielen Fehlschlägen in Folge wird er abgeschaltet. lastStatusintegeroder null Der HTTP-Status der letzten Zustellung. lastAtintegeroder null Wann zuletzt zugestellt wurde. failuresintegerFehlschläge in Folge.
Beispiel {
"id": "1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b",
"url": "https://example.org/tellmelo-hook",
"kinds": [
"reply",
"mention"
],
"active": true,
"lastStatus": 200,
"lastAt": 1758624000000,
"failures": 0
}WebhookCreatedEin neuer Webhook mit seinem Geheimnis.
Feld Typ Bedeutung idstringDie id des Webhooks. secretstringDas Geheimnis für die Signaturen, nur dieses eine Mal.
Beispiel {
"id": "1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b",
"secret": "whsec_3f9a…"
}GroupBotEin Bot einer Gruppe.
Feld Typ Bedeutung idstringDie id des Bot-Kontos. handlestringSein Kürzel. namestringSein Name. descriptionstringWas er tut, in den Worten seines Besitzers. permissionsstring[]Was seine Rolle in der Gruppe erlaubt.
Beispiel {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "gardenbot",
"name": "Garden bot",
"description": "Reminds the group of watering days.",
"permissions": [
"send",
"view"
]
}VoiceRoomEin Sprachkanal mit den Menschen darin.
Feld Typ Bedeutung channelstringDie id des Kanals. peopleVoicePerson[]Wer gerade drin ist.
Beispiel {
"channel": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a",
"people": [
{
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"muted": false,
"deaf": false,
"camera": false,
"screen": true
}
]
}VoicePersonJemand in einem Sprachkanal.
Feld Typ Bedeutung idstringDie id des Kontos. handlestringDas Kürzel. namestringDer Anzeigename. mutedbooleanOb das Mikrofon aus ist. deafbooleanOb die Person nichts hört (selbst gewählt). camerabooleanOb die Kamera an ist. screenbooleanOb der Bildschirm geteilt wird.
Beispiel {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"muted": true,
"deaf": false,
"camera": false,
"screen": false
}GiftDropGeschenke unter einem Beitrag – nie mit den Namen derer, die abgeholt haben.
Feld Typ Bedeutung itemstringWas ein Platz enthält.plan — Abo-Monate (Unterstützer).sparks — Funken. quantityintegerWie viel jeder Platz enthält: Monate oder Funken. placesintegerWie viele Plätze es insgesamt gibt. leftintegerWie viele noch frei sind. audiencestringWer abholen darf.all — Alle.followers — Nur Follower der Person, die verteilt.group — Nur Mitglieder der Gruppe des Beitrags. newAccountsbooleanOb auch Konten unter 7 Tagen abholen dürfen. statusstringDer Stand.awaiting_payment — Wartet auf die Bezahlung; der Beitrag ist noch nicht erschienen.open — Es gibt noch Plätze zum Abholen.closed — Vorbei: alles vergeben, die Zahlung erstattet oder der Beitrag gelöscht. claimedbooleanOb du selbst schon einen Platz hast (bei öffentlichen Pfaden immer false).
Beispiel {
"item": "plan",
"quantity": 3,
"places": 10,
"left": 4,
"audience": "followers",
"newAccounts": false,
"status": "open",
"claimed": true
}OwnGiftDropDeine Geschenke unter einem Beitrag, mit Beitrag und Bezahlung.
Jedes Feld von GiftDrop , und dazu:
Feld Typ Bedeutung postIdstringDer Beitrag, unter dem sie stehen. fundingstringWie sie bezahlt sind.free — Kostenlos.quota — Aus dem Kontingent.payment — Bezahlt. createdAtintegerWann sie angelegt wurden.
Beispiel {
"item": "plan",
"quantity": 3,
"places": 10,
"left": 4,
"audience": "followers",
"newAccounts": false,
"status": "open",
"claimed": false,
"postId": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"funding": "quota",
"createdAt": 1758624000000
}QuotaWas in einem Kontingent steckt.
Feld Typ Bedeutung monthsintegerAbo-Monate, die noch zu verschenken sind. sparksintegerFunken, die noch zu verschenken sind. looksQuotaLook[]Looks im Vorrat, die noch zu verschenken sind (seit 2.13).
Beispiel {
"months": 120,
"sparks": 500,
"looks": [
{
"id": "frame-gold",
"name": "Goldring",
"kind": "frame",
"quantity": 25
}
]
}QuotaLookEin Look im Vorrat eines Partners, mit der Zahl der übrigen Stücke (seit 2.13).
Feld Typ Bedeutung idstringKennung des Looks; beim Verschenken als itemId. namestringName des Looks. kindstringArt des Looks.frame — Profilrahmen.background — Titelbild-Effekt.card — Profilkarte. quantityintegerWie viele Stück noch übrig sind.
Beispiel {
"id": "frame-gold",
"name": "Goldring",
"kind": "frame",
"quantity": 25
}QuotaGiftEin Geschenk aus dem Kontingent.
Feld Typ Bedeutung itemstringWas verschenkt wurde.plan — Abo-Monate (Unterstützer).sparks — Funken.shop — Ein Look aus dem Vorrat (seit 2.13). quantityintegerWie viel. itemIdstringoder null Der verschenkte Look, wenn item shop ist; sonst null. recipientActorAn wen. createdAtintegerWann.
Beispiel {
"item": "plan",
"quantity": 3,
"itemId": null,
"recipient": {
"handle": "jon",
"name": "Jon"
},
"createdAt": 1758627600000
}EmbedDie Adressen für andere Websites. Sie funktionieren ohne Schlüssel.
Feld Typ Bedeutung pagestringDer Player für ein <iframe>. filestringDie MP4-Datei für einen eigenen Player. posterstringDas Vorschaubild. codestringDer fertige Code zum Einbinden.
Beispiel {
"page": "https://tellmelo.com/media-embed/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
"file": "https://tellmelo.com/media-embed/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918/file",
"poster": "https://tellmelo.com/media-embed/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918/poster",
"code": "<iframe src=\"https://tellmelo.com/media-embed/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918\" width=\"480\" height=\"300\" title=\"Happy bees\" style=\"border:0;max-width:100%\" loading=\"lazy\" allowfullscreen></iframe>"
}UploadStartedEin begonnenes Hochladen.
Feld Typ Bedeutung uploadstringDie ID dieses Hochladens. pieceintegerWie groß ein Stück höchstens sein darf, in Bytes.
Beispiel {
"upload": "e7c1a2b3-4d5e-4f60-8a9b-0c1d2e3f4a5b",
"piece": 4194304
}UploadPieceEin angekommenes Stück.
Feld Typ Bedeutung receivedintegerWie viele Bytes angekommen sind. itemMediaItemoder null Nach dem letzten Stück das neue GIF oder Video, sonst null.
Beispiel {
"received": 4194304,
"item": null
}CreatedDie Antwort eines Schreibzugriffs, der etwas angelegt hat.
Feld Typ Bedeutung idstringDie ID dessen, was angelegt wurde. scheduledForintegeroder null Wann es erscheint, wenn die Veröffentlichung geplant wurde (sonst null). deleteAtintegeroder null Wann es sich selbst löscht, wenn das eingestellt wurde (sonst null).
Beispiel {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"scheduledFor": null,
"deleteAt": null
}DropCreatedDie Antwort, wenn ein Beitrag mit Geschenken angelegt wurde.
Feld Typ Bedeutung idstringDie id des neuen Beitrags. fundingstringWie die Geschenke bezahlt sind.free — Kostenlos.quota — Aus dem Kontingent.
Beispiel {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"funding": "quota"
}MadeWas gerade angelegt oder geändert wurde.
Feld Typ Bedeutung idstringDie id, bei einem Einladungslink sein Code.
Beispiel {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}OkDie Antwort eines Schreibzugriffs, der nichts zurückzugeben hat.
Feld Typ Bedeutung okbooleanImmer true.
Beispiel {
"ok": true
}Die maschinenlesbare Beschreibung Die Tabelle hinter dieser Seite liegt als OpenAPI unter https://api.tellmelo.com/v2/openapi.json.
https://api.tellmelo.com/v2/openapi.jsonGIFs und Videos auf anderen Websites Was ein Mitglied teilt und auch auf anderen Websites erlaubt, kann jede Website zeigen: Die Suche mit anywhere=true findet es, und sein embed hat die Adressen. Nimmt das Mitglied es zurück, verschwindet es dort innerhalb von Minuten.
Hochladen in Stücken Zuerst beginnen, dann die Datei in Stücken senden. Eine größere Datei teilst du in Stücke von piece Bytes, mit offset an der jeweiligen Stelle. Nach dem letzten Stück kommt das fertige GIF oder Video.
curl -X POST -H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"kind":"gif","size":2400000,"name":"Happy bees","shared":true,"anywhere":true}' \
"https://api.tellmelo.com/v2/media/uploads"
→ { "upload": "e7c1a2b3-4d5e-4f60-8a9b-0c1d2e3f4a5b", "piece": 4194304 }
curl -X PUT -H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/octet-stream" \
--data-binary @bees.gif \
"https://api.tellmelo.com/v2/media/uploads/e7c1a2b3-4d5e-4f60-8a9b-0c1d2e3f4a5b?offset=0"
→ { "received": 2400000, "item": { "id": "…", "embed": { … } } }Einbinden Der Player zeigt das GIF in Schleife oder das Video mit Steuerung, darunter den Namen und wer es geteilt hat. Setz den Code aus embed.code in die Seite:
<iframe src="https://tellmelo.com/media-embed/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918" width="480" height="300" title="Happy bees" style="border:0;max-width:100%" loading="lazy" allowfullscreen></iframe>Foren und Programme, die oEmbed kennen, holen sich den Code selbst, wenn man ihnen die Adresse des Players gibt:
https://tellmelo.com/api/oembed?url=https%3A%2F%2Ftellmelo.com%2Fmedia-embed%2Fb2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918Der Schlüssel gehört auf deinen Server, nie in den Code einer Website. Such und lade über deinen Server hoch; die Adressen in embed brauchen keinen Schlüssel.
GIF-Auswahl für deine Website Mit einem Seiten-Schlüssel (Developer-Bereich → GIF-Auswahl für deine Website ) bekommt deine Website eine fertige Suche: zwei Zeilen in die Seite, ein Klick auf den Knopf öffnet sie. Der Schlüssel ist öffentlich und gilt nur auf den Adressen, die du dafür einträgst. Die Auswahl zeigt nur, was Mitglieder für andere Websites erlaubt haben.
<script src="https://tellmelo.com/picker.js" data-key="tmsk_…" defer></script>
<button type="button" data-tellmelo-picker>GIF</button>Beim Auswählen meldet der Knopf tellmelo:pick mit dem Eintrag: code zum Einbetten, file, poster, name und author. Mit data-target="#feld" fügt er code gleich in ein Textfeld ein, mit data-kind="video" sucht er Videos. Zeig den Namen der Person, die es geteilt hat, wenn du die Datei selbst einbindest.
document.addEventListener('tellmelo:pick', (event) => {
const { code, file, name, author } = event.detail;
});Mit tellmelo anmelden Andere Seiten lassen Mitglieder sich über OpenID Connect mit ihrem tellmelo-Konto anmelden (Autorisierungscode mit PKCE). Die Seite erhält nur den Nutzernamen, die bestätigte E-Mail-Adresse und je Mitglied eine eigene Kennung (sub).
Du beantragst eine App unter „Developer-Bereich → Mit tellmelo anmelden“. Das Team prüft jede App; danach siehst du dort die Client-ID und erstellst bei Apps mit Server das Client-Geheimnis, das einmal angezeigt wird.
Alles, was eine Bibliothek braucht, steht im Discovery-Dokument:
https://tellmelo.com/.well-known/openid-configurationSchicke das Mitglied zu /oauth/authorize mit response_type=code, client_id, redirect_uri (genau wie eingetragen), scope=openid profile email, state, nonce und code_challenge mit code_challenge_method=S256. Tausche den Code innerhalb einer Minute bei /oauth/token ein: grant_type=authorization_code, code, redirect_uri und code_verifier; Apps mit Server schicken dazu das Geheimnis per Basic-Anmeldung oder im Formular. Das ID-Token (RS256, Schlüssel unter /oauth/jwks) enthält sub, mit profile auch preferred_username, mit email auch email und email_verified. Das Access-Token gilt 10 Minuten und liest nur /oauth/userinfo. https://tellmelo.com/oauth/authorize?response_type=code&client_id=tm_…
&redirect_uri=https%3A%2F%2Fexample.com%2Fcallback&scope=openid%20profile%20email
&state=…&nonce=…&code_challenge=…&code_challenge_method=S256
curl -u "tm_…:tms_…" https://tellmelo.com/oauth/token \
-d grant_type=authorization_code -d code=… \
-d redirect_uri=https://example.com/callback -d code_verifier=…{
"iss": "https://example.social",
"sub": "Xq3vR0b8yJm1cW4tZ2kPn6sLd9fHa7gE5uTo0iBeVxY",
"aud": "tm_5f2c9e1a7b3d4c6e8f0a1b2c",
"iat": 1760432400,
"exp": 1760433000,
"nonce": "n-0S6_WzA2Mj",
"at_hash": "HK6E_P6Dh8Y93mRNtsDB1Q",
"preferred_username": "anna",
"email": "anna@example.com",
"email_verified": true
}Es gibt keine Refresh-Tokens: tellmelo meldet an und gibt keinen dauerhaften Zugriff. Entfernt ein Mitglied die Seite oder setzt das Team die App aus, antwortet /oauth/userinfo sofort mit 401. prompt=none prüft ohne Seite, prompt=consent fragt erneut.
Was wir erwarten Es gelten dieselben Regeln wie überall: keine Belästigung, kein Spam, keine fremden Inhalte ohne Recht daran. Für das, was dein Schlüssel schreibt, stehst du gerade.
GIFs und Videos anderer zeigst du auf deiner Website nur, wenn sie embed haben, über diese Adressen und mit dem Namen der Person, die es geteilt hat. Ist etwas nicht mehr verfügbar, zeigst du es nicht weiter. Kopier die Dateien nicht in eine eigene Sammlung.