Sommaire Je veux … Choisis ce que tu prévois ; en dessous figurent seulement les étapes pour cela. La référence complète suit plus bas.
créer un bot connecter mon app la connexion avec tellmelo sur mon site intégrer des GIF et des vidéosCrée le bot dans l’un de tes groupes, dans le menu du groupe sous « Bots → Mes bots », avec image, nom et @nom. Tu ne vois son jeton qu’une fois. Partage son lien « Ajouter le bot » ou soumets-le à l’annuaire des bots, où il figure après la vérification de l’équipe ; quiconque peut gérer les rôles d’un groupe l’accueille avec les droits qu’il accepte. Reçois ce qui se passe dans ses groupes en flux (GET /v2/events/stream) ou à ton adresse, et écris avec POST /v2/channels/{id}/messages. Plus sous Bots . Déclare des commandes (PUT /v2/me/commands) et réponds avec des cartes et des boutons ; un bot joue de la musique avec une place dans un salon vocal (POST /v2/channels/{id}/voice). Vue d’ensemble Avec v2, tes propres programmes parlent à tellmelo : une clé par requête, du JSON en retour, toutes les listes se paginent de la même façon. Les mêmes règles que dans l’app s’appliquent.
Chaque chemin commence par https://api.tellmelo.com/v2. Requêtes et réponses sont en JSON, en UTF-8. Les noms de champs, les codes et les valeurs sont en anglais et le restent. Une clé agit comme ton compte : ce que tu ne vois pas dans l’app, elle ne peut pas le lire non plus. https://api.tellmelo.com/v2Démarrage rapide Crée une clé sous « Espace développeurs → API » et copie-la. Elle n’est montrée qu’une seule fois. Interroge la racine avec elle. La réponse indique la version, les droits de la clé et les requêtes restantes pour cette minute. Tous les chemins fonctionnent pareil : clé dans l’en-tête, JSON en retour, items et next pour les listes. 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"
}Ensuite : /me pour ton profil, /posts pour le public, /feed pour ton fil.
Essayer Choisis une tâche, remplis les champs et copie la requête ou envoie-la d’ici. Écrire demande confirmation. Le code lit la clé dans TELLMELO_KEY.
Tâche 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 Version de l’API et nom de cette instance.
curl JavaScript Python
Copiercurl \
-H "Authorization: Bearer $TELLMELO_KEY" \
"https://api.tellmelo.com/v2"Ta clé Jusqu’à 10 clés par compte, chacune avec un nom, ses propres droits et, si tu veux, une date d’expiration. Une clé commence par tm_key_ et n’est affichée qu’une fois. Perdue ? Renouvelle-la ; l’ancienne valeur ne fonctionne plus.
Tu la crées sous « Espace développeurs → API ». Elle voyage dans l’en-tête de la requête :
curl -H "Authorization: Bearer tm_key_…" \
https://api.tellmelo.com/v2/postsOu, si c’est plus commode, dans un en-tête à part :
curl -H "X-Tellmelo-Key: tm_key_…" https://api.tellmelo.com/v2Pas dans l’URL : elle finirait dans les journaux et l’historique du navigateur.
La même clé charge les images : chaque url pointe vers /api/media ; envoie aussi la clé dans l’en-tête.
curl -H "Authorization: Bearer tm_key_…" \
-o picture.webp "https://api.tellmelo.com/media?id=…"Ce qu’une clé a le droit de faire Une clé peut toujours lire et, si tu l’autorises, aussi écrire, offrir, importer des médias et gérer des groupes. Chaque chemin ci-dessous indique ce dont il a besoin :
read : lire. Publications publiques, profils, groupes et tags, plus ton fil, tes notifications, tes messages et les salons de tes groupes.write : agir. Publier, répondre, voter, envoyer des messages, écrire dans la discussion d’un groupe, suivre, rejoindre, bloquer, marquer les notifications comme lues.gifts : offrir. Depuis le contingent d’un partenaire à un membre, et des cadeaux sous une nouvelle publication. Un droit à part, pour qu’une clé faite pour publier ne puisse jamais rien offrir.media : ta propre médiathèque. Importer, modifier, partager et supprimer des GIF et des vidéos. Une autorisation à part, car les imports coûtent des points vidéo au compte. Trouver des GIF et vidéos partagés ne demande que read .groups : gérer des groupes. Rôles, salons, catégories, liens d’invitation, le salon du fil, les retraits, exclusions temporaires, expulsions et bannissements, dans la mesure où ton compte en a le droit dans le groupe. Un droit à part, pour qu’une clé servant à publier ne change jamais qui peut faire quoi dans un groupe.Ce qu’aucune clé ne peut Aucune clé n’atteint le mot de passe, l’adresse e-mail, le type de compte, le lieu, le rôle, la suppression, les connexions, les appareils de notification ou d’autres clés, ni l’administration ou l’animation de groupes. Ce que protège le mot de passe, aucune clé ne le peut.
Bots Un bot est un compte à part entière, du type bot, pour les groupes : sans mot de passe ni adresse e-mail, piloté par ton programme avec sa propre clé. Il utilise la même API que tout compte et peut faire dans les groupes ce que son rôle y permet.
Dans l’un de tes groupes, ouvre le menu du groupe et, sous « Bots → Mes bots », crée un bot avec image, bannière, nom, nom d’utilisateur et description. Le jeton n’est affiché qu’une fois ; il a les droits read, write, media et groups. Partage le lien du bot ou soumets-le à l’annuaire des bots ; il y figure dès que l’équipe l’a vérifié. Quiconque peut gérer les rôles d’un groupe choisit les droits ; le bot rejoint le groupe et reçoit son propre rôle. Ton programme envoie le jeton comme Authorization: Bearer …, lit les événements de ses groupes en flux et travaille avec les routes sous Bots , Salons et Groupes . Un petit bot qui lit les événements en flux et répond à la commande /ping par pong, seulement pour qui a demandé :
// 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 });
}
}
}Le même bot en Python, qui récupère les événements page par page :
# 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)Ce qu’un bot peut faire dans un groupe dépend de son rôle là-bas, pas du jeton. Le rôle porte son nom ; le groupe modifie ses droits dans les rôles des réglages du groupe et retire le bot dans le menu du groupe, sous « Bots → Dans ce groupe ». Jusqu’à 5 bots par compte ; par groupe autant que ses avantages le permettent. Un bot écrit au plus 30 messages par minute et par groupe, n’est pas trouvable par la recherche et n’écrit qu’aux personnes qui lui ont écrit d’abord. Les limites s’appliquent. Les événements arrivent aussi à ta propre adresse HTTPS (signés comme les webhooks, avec renvois). En plus : commandes (PUT /v2/me/commands) avec réponses pour tous ou seulement pour qui a demandé, cartes et boutons dans les messages, et musique dans les salons vocaux (POST /v2/channels/{id}/voice) : tout sous Bots . Pages Chaque liste prend limit et cursor et répond par items et next. Renvoie next comme cursor pour la page suivante ; si next est vide, c’est fini. Le curseur est opaque : ne le décompose pas, n’en fabrique pas.
{ "items": [ … ], "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx" }
curl -H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts?limit=20&cursor=MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"Sans limit, 20 entrées, 50 au plus. Certaines listes ne se paginent pas ; leur next vaut toujours null.
Seulement ce qui est nouveau Chaque réponse porte un ETag. Renvoie-le comme If-None-Match la fois suivante : si rien n’a changé, tu reçois 304 sans corps.
ETag: W/"3Qk1mJ7fQe2Yb0sVxT9aL4pNdRc"
If-None-Match: W/"3Qk1mJ7fQe2Yb0sVxT9aL4pNdRc" → 304Exceptions : /feed n’a pas d’ETag car son ordre change sans cesse, et une écriture ne répond jamais 304.
Limites Une clé peut faire 120 requêtes par minute, 600 avec l’abonnement « Organisation », sauf si l’administration en décide autrement. Au-delà, la réponse est 429 et rien n’a été exécuté. Attends une minute et renvoie la requête.
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 117
X-RateLimit-Reset: 1758624060Les écritures comptent aussi dans les limites de l’app, par exemple le nombre de publications en quelques minutes. Là aussi, la réponse est 429 avec rate_limited.
Quand quelque chose ne marche pas Les erreurs arrivent en JSON : un code anglais fixe dans error pour ton programme et une phrase dans message pour les humains, avec le code de statut correspondant. Compare seulement le code ; la phrase peut changer.
{ "error": "rate_limited",
"message": "Too many requests. Try again in a minute.",
"limit": 120 }Certaines erreurs apportent un champ de plus : docs avec un 401 pour une clé absente, limit avec un 429.
Statut Code Signification 400bad_requestLa requête est illisible, un champ obligatoire manque ou une valeur n’est pas autorisée. 401key_missingPas de clé dans l’en-tête. 401key_invalidLa clé n’est pas valide : mal saisie, remplacée, ou le compte est banni. 401unauthorizedRefusée comme non connectée, pour une autre raison que la clé. 403scope_missingIl manque à la clé le droit nécessaire, en général write. 403account_data_lockedLes données du compte comme le mot de passe, l’adresse e-mail ou la suppression sont interdites aux clés. 403forbiddenTon compte n’a pas le droit, par exemple à cause d’un droit retiré ou d’un blocage. 403timed_outUne exclusion temporaire réduit ton compte au silence dans ce groupe en ce moment. 404unknown_pathCe chemin n’existe pas, ou pas avec cette méthode. 404not_foundIntrouvable, ou tu n’as pas le droit de le voir. 409conflictCela entre en conflit avec ce qui existe déjà, par exemple un nom déjà pris. 409feed_offLe salon du fil de ce groupe est désactivé. 413too_largeTrop volumineux pour cette instance. 422unprocessableLisible, mais pas possible sous cette forme. 429rate_limitedTrop de requêtes. Rien ne s’est passé ; attends et réessaie. 500internal_errorUne erreur s’est produite sur le serveur.
Versions La version figure dans le chemin. Tant qu’il indique v2, chemins et champs restent les mêmes ; le nouveau s’ajoute seulement.
Les ajouts augmentent le deuxième chiffre. Chaque chemin indique depuis quand il existe.
https://api.tellmelo.com/v1/ n’existe plus : les anciens chemins répondent 410 et indiquent le nouveau dans le corps.
Points d’accès Tous les chemins d’un coup d’œil, puis chacun avec un exemple.
Chemin Droit À quoi L’entrée GET /v2readVersion de l’API et nom de cette instance. Publications GET /v2/postsreadLes publications publiques, les plus récentes d’abord. GET /v2/posts/{id}readUne seule publication, par son id. POST /v2/postswritePublier une publication. DELETE /v2/posts/{id}writeRetirer une de tes publications. GET /v2/me/scheduledreadTes publications pas encore parues, et ce qu’elles attendent. POST /v2/posts/{id}/schedulewriteChanger quand une publication programmée paraît, ou quand une publication se supprime d’elle-même. POST /v2/posts/{id}/editwriteModifier le texte d’une de tes publications. GET /v2/posts/{id}/reply-settingsreadQui peut répondre à ta publication, si les réponses attendent ta validation, et le mode lent. PUT /v2/posts/{id}/reply-settingswriteModifier les réglages de réponse de ta publication. Ce que tu n’indiques pas reste inchangé. POST /v2/posts/{id}/coauthorwriteAccepter ou refuser une invitation comme coauteur. DELETE /v2/posts/{id}/coauthorwriteTe retirer comme coauteur ou, en tant qu’auteur, retirer le coauteur de la publication. POST /v2/posts/{id}/pinwriteÉpingler ta publication en haut de ton profil, ou la désépingler. Réponses GET /v2/posts/{id}/repliesreadLes réponses à une publication, sans les comptes bloqués. POST /v2/posts/{id}/replieswriteRépondre à une publication. POST /v2/replies/{id}/editwriteModifier le texte d’une de tes réponses. DELETE /v2/replies/{id}writeRetirer une de tes réponses. POST /v2/replies/{id}/likewriteVoter pour une réponse (un j’aime est un vote positif depuis que les réponses se votent) ou retirer le vote ; un vote négatif reste. POST /v2/replies/{id}/votewriteVoter pour ou contre une réponse, ou retirer ton vote. Répond avec ton vote et le score qui en résulte. POST /v2/replies/{id}/pickwriteMettre en avant une réponse sous ta propre publication comme la meilleure, ou retirer la mise en avant. GET /v2/posts/{id}/replies/waitingreadLes réponses en attente de validation sous une publication : toutes sous la tienne, sinon seulement les tiennes. POST /v2/replies/{id}/decidewriteValider ou refuser une réponse en attente sous ta publication. Refusée, elle est supprimée. GET /v2/posts/{id}/replies/plannedreadTes réponses programmées pour plus tard sous une publication. PUT /v2/me/planned-replies/{id}writeModifier le texte ou l’heure d’une réponse programmée. Une réponse en échec attend à nouveau. POST /v2/me/planned-replies/{id}/sendwriteEnvoyer tout de suite une réponse programmée. DELETE /v2/me/planned-replies/{id}writeSupprimer une réponse programmée. Sondages POST /v2/posts/{id}/votewriteParticiper à un sondage. Profils GET /v2/profiles/{handle}readUn profil, par son identifiant court. GET /v2/profiles/{handle}/postsreadLes publications publiques d’un profil, les plus récentes d’abord. GET /v2/profiles/{handle}/eventsreadLes prochains événements d’un profil, les plus proches d’abord. POST /v2/me/eventswriteCréer un événement. Répond avec son id. PUT /v2/me/events/{id}writeModifier un de tes événements. Tous les champs sont redéfinis. DELETE /v2/me/events/{id}writeSupprimer un de tes événements. GET /v2/me/events/{id}/signupsreadQui s’est inscrit à un de tes événements. POST /v2/events/{id}/signupwriteT’inscrire à un événement ou te désinscrire. Groupes GET /v2/communitiesreadLes groupes ouverts de cette instance ; avec mine=true, les groupes de ton compte. GET /v2/communities/{id}readUn seul groupe, par son id. GET /v2/communities/{id}/postsreadLes publications du salon du fil d’un groupe, les plus récentes d’abord. GET /v2/communities/{id}/membersreadLes membres d’un groupe avec leurs rôles. GET /v2/communities/{id}/rolesreadLes rôles d’un groupe, le plus haut d’abord, @everyone en dernier. GET /v2/communities/{id}/bellreadQuelles notifications un groupe t’envoie. GET /v2/invites/{code}readLe groupe derrière un lien d’invitation, avant de rejoindre. PUT /v2/roles/{id}/selfwritePrendre ou retirer un rôle au choix. GET /v2/communities/{id}/emojisreadLes emojis propres d’un groupe. PUT /v2/communities/{id}/bellwriteChoisir quelles notifications un groupe t’envoie. POST /v2/invites/{code}/joinwriteRejoindre un groupe avec un lien d’invitation. GET /v2/communities/{id}/botsreadLes bots d’un groupe avec ce que leur rôle permet. Salons GET /v2/communities/{id}/channelsreadLes salons d’un groupe que tu vois, dans leur ordre. GET /v2/channels/{id}/messagesreadLes messages d’un salon de discussion, les plus récents d’abord. POST /v2/channels/{id}/messageswriteÉcrire un message dans un salon de discussion. POST /v2/channels/{id}/readwriteMarquer un salon de discussion comme lu jusqu’à un moment donné. DELETE /v2/channel-messages/{id}writeSupprimer un de tes messages dans un salon de discussion. GET /v2/communities/{id}/voicereadQui est en ce moment dans les salons vocaux d’un groupe, par salon. Gérer des groupes POST /v2/communities/{id}/emojisgroupsDonner un emoji au groupe. DELETE /v2/communities/{id}/emojis/{name}groupsRetirer un emoji du groupe. POST /v2/communities/{id}/rolesgroupsCréer un rôle. PUT /v2/roles/{id}groupsModifier le nom, la couleur et les droits d’un rôle. DELETE /v2/roles/{id}groupsSupprimer un rôle. PUT /v2/communities/{id}/roles/ordergroupsFixer le rang des rôles. PUT /v2/roles/{id}/members/{member}groupsDonner un rôle à un membre ou le lui retirer. POST /v2/communities/{id}/channelsgroupsCréer un salon de discussion. PUT /v2/channels/{id}groupsModifier le nom, le sujet et la catégorie d’un salon. DELETE /v2/channels/{id}groupsSupprimer un salon de discussion avec ses messages. PUT /v2/communities/{id}/channels/ordergroupsFixer l’ordre des catégories et des salons de discussion. PUT /v2/communities/{id}/channels/shapegroupsFixer la forme de tous les symboles de salon du groupe. GET /v2/channels/{id}/overridesgroupsCe que des rôles peuvent faire autrement dans un salon que dans le groupe. PUT /v2/channels/{id}/overrides/{role}groupsFixer ce qu’un rôle peut faire autrement dans un salon. POST /v2/communities/{id}/categoriesgroupsCréer une catégorie de salons. PUT /v2/categories/{id}groupsRenommer une catégorie. DELETE /v2/categories/{id}groupsSupprimer une catégorie. PUT /v2/communities/{id}/feedgroupsActiver ou désactiver le salon du fil d’un groupe. GET /v2/communities/{id}/invitesgroupsLes liens d’invitation d’un groupe encore valides. POST /v2/communities/{id}/invitesgroupsCréer un lien d’invitation. DELETE /v2/invites/{code}groupsRetirer un lien d’invitation. POST /v2/channel-messages/{id}/removegroupsRetirer d’un salon le message d’un autre membre. POST /v2/communities/{id}/posts/{post}/removegroupsRetirer une publication d’un groupe. DELETE /v2/communities/{id}/members/{member}groupsExpulser un membre d’un groupe. PUT /v2/communities/{id}/members/{member}/timeoutgroupsRéduire un membre au silence. DELETE /v2/communities/{id}/members/{member}/timeoutgroupsLever une exclusion temporaire. GET /v2/communities/{id}/bansgroupsLes bannissements en cours d’un groupe. PUT /v2/communities/{id}/bans/{member}groupsBannir un membre. DELETE /v2/communities/{id}/bans/{member}groupsLever un bannissement. GET /v2/communities/{id}/loggroupsLe journal de la direction : qui a retiré quoi et pourquoi. POST /v2/communitiesgroupsFonder un groupe. Répond avec son id ; tu en es le fondateur. PUT /v2/communities/{id}groupsModifier un groupe que tu diriges. Ce que tu n’indiques pas reste inchangé. Bots GET /v2/eventsreadLes événements des groupes du bot depuis un événement, page par page. GET /v2/events/streamreadLes événements des groupes du bot dès qu’ils se produisent (server-sent events). GET /v2/me/commandsreadLes commandes du bot. PUT /v2/me/commandswriteDéfinir les commandes du bot, toutes à la fois. POST /v2/interactions/{id}/replywriteRépondre à une commande ou à un bouton. POST /v2/channels/{id}/voicewritePrendre une place dans un salon vocal pour jouer de la musique ou du son. Découvrir GET /v2/tagsreadLes tags qui tournent en ce moment. GET /v2/searchreadUne recherche sur les publications, les noms, les identifiants courts et les tags. GET /v2/emojisreadLes émojis propres à l’instance, avec l’adresse de leurs images. GIF et vidéos GET /v2/mediareadGIF ou vidéos partagés, les plus utilisés d’abord. GET /v2/media/minemediaTa propre médiathèque, les plus récents d’abord. GET /v2/media/{id}readUn GIF ou une vidéo, à toi ou partagé. POST /v2/media/uploadsmediaCommencer un import. PUT /v2/media/uploads/{upload}mediaEnvoyer un morceau du fichier. POST /v2/media/{id}mediaModifier un de tes GIF ou une de tes vidéos. DELETE /v2/media/{id}mediaSupprimer un de tes GIF ou une de tes vidéos. Ton compte GET /v2/mereadTon propre profil, avec l’id que les autres chemins attendent. GET /v2/feedreadTon propre fil, tel que l’application le compose. POST /v2/me/pictureswriteTéléverser une image, sous forme d’octets. Répond avec id et url ; tu utilises ensuite l’id comme photo de profil, bannière ou dans une publication. PUT /v2/me/profileprofileModifier ton profil : nom, à propos, photo de profil, bannière et couleur du profil. Ce que tu n’indiques pas reste inchangé. GET /v2/me/emojisreadTes propres emojis. POST /v2/me/emojis/picturesprofileTéléverser l’image d’un emoji à toi, sous forme d’octets. POST /v2/me/emojisprofileCréer un emoji à toi. Répond avec tous tes emojis. DELETE /v2/me/emojis/{name}profileRetirer un emoji à toi. Répond avec les autres. PUT /v2/me/emojis/sharingprofileDécider si tes abonnés peuvent utiliser tes emojis dans leurs propres textes. GET /v2/me/webhookswebhooksTes webhooks avec leur état. POST /v2/me/webhookswebhooksCréer un webhook. Répond avec l’id et le secret des signatures, cette fois seulement. DELETE /v2/me/webhooks/{id}webhooksSupprimer un webhook. POST /v2/me/webhooks/{id}/testwebhooksEnvoyer un test à un webhook. Notifications GET /v2/notificationsreadTes notifications, les plus récentes d’abord. POST /v2/notifications/readwriteMarquer tes notifications comme lues. Messages GET /v2/conversationsreadTa boîte : une ligne par conversation, la plus récente d’abord. GET /v2/conversations/{with}/messagesreadLes messages d’une conversation, les plus récents d’abord. POST /v2/conversations/{with}/messageswriteEnvoyer un message dans une conversation. POST /v2/conversations/{with}/readwriteMarquer tous les messages d’une conversation comme lus. DELETE /v2/conversations/{with}/messages/{id}writeSupprimer un de tes messages. POST /v2/conversations/{with}/plannedwriteProgrammer un message pour plus tard. Répond avec l’id du message programmé. GET /v2/me/planned-messagesreadTes messages encore à envoyer, dans l’ordre de leur heure. POST /v2/me/planned-messages/{id}/sendwriteEnvoyer maintenant un message programmé retenu ou en échec. DELETE /v2/me/planned-messages/{id}writeSupprimer un message programmé avant son envoi. Relations POST /v2/relationswriteAimer, garder, partager, suivre, rejoindre, bloquer, masquer, selon kind. GET /v2/profiles/{handle}/followersreadQui suit un profil, les plus récents d’abord. GET /v2/profiles/{handle}/followingreadQui un profil suit, les plus récents d’abord. GET /v2/me/relationsreadQui tu as bloqué, masqué ou bloqué pour les messages seulement, les plus récents d’abord. Collections GET /v2/me/collectionsreadTes collections avec le nombre de leurs publications. POST /v2/me/collectionswriteCréer une collection. Répond avec son id. PUT /v2/me/collections/{id}writeRenommer une collection. DELETE /v2/me/collections/{id}writeSupprimer une collection. GET /v2/me/collections/{id}/postsreadLes publications d’une collection, comme dans l’onglet des enregistrements. POST /v2/me/collections/{id}/postswriteMettre une publication dans une collection ou l’en retirer. Cadeaux GET /v2/partner/quotareadCe qu’il reste à offrir dans ton contingent. GET /v2/partner/giftsreadCe que tu as offert depuis ton contingent, à qui et quand – le plus récent d’abord. POST /v2/partner/giftsgiftsOffrir des mois d’abonnement ou des étincelles de ton contingent à un membre. GET /v2/gift-dropsreadTes cadeaux sous des publications : combien de places restent libres et comment ils ont été payés. POST /v2/gift-dropsgiftsPublier une publication avec des cadeaux à récupérer.
L’entrée La première requête de tout programme : la clé fonctionne-t-elle, et que peut-elle faire ?
GET /v2Version de l’API et nom de cette instance.
Droit read avec ETag depuis v2.0 Sans barre oblique à la fin : https://api.tellmelo.com/v2/ redirige vers https://api.tellmelo.com/v2 avec 308, et tous les programmes ne suivent pas.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2"Réponse Répond avec un Service .
Exemple {
"name": "tellmelo",
"version": "2.20",
"scope": "read write",
"rateLimit": {
"limit": 120,
"remaining": 117
},
"docs": "/developers/docs",
"spec": "/api/v2/openapi.json"
}Statuts possibles : 200304401429
Publications Lire les publications publiques, publier les tiennes et les retirer.
GET /v2/postsLes publications publiques, les plus récentes d’abord.
Droit read paginé avec ETag depuis v2.0 Sur les chemins publics, counts.likes et counts.reposts valent toujours 0 et pinned vaut false.
Les publications des groupes ne sont pas ici mais sous /communities/{id}/posts.
Paramètres Nom Type Signification limitdans l’adresse integerfacultatif Entrées par page : 20 par défaut, 50 au plus. cursordans l’adresse stringfacultatif Le next de la réponse précédente. Sans lui, depuis le début.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts?limit=20"Réponse Répond avec une page de Post , sous forme de `items` et `next`.
Exemple {
"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"
}Statuts possibles : 200304401429
GET /v2/posts/{id}Une seule publication, par son id.
Droit read avec ETag depuis v2.0 Sur les chemins publics, counts.likes et counts.reposts valent toujours 0 et pinned vaut false.
Les publications des groupes ne sont pas ici mais sous /communities/{id}/posts.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’une publication.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1"Réponse Répond avec un Post .
Exemple {
"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
}Statuts possibles : 200304400401404429
POST /v2/postsPublier une publication.
Une publication a besoin d’un texte ou d’un sondage. Longueur, options et rythme sont fixés par l’instance ; au-delà, la réponse est 400 ou 429.
Joins des images, un GIF ou une vidéo avec media. Un GIF ou une vidéo reste seul. Tu peux utiliser sur tellmelo les GIF et vidéos partagés par d’autres.
Une publication pour les amis proches ou avec coauteur part tout de suite, pas dans un groupe ni programmée. Les deux à la fois ne sont pas possibles.
Paramètres Nom Type Signification textdans le corps stringfacultatif Le texte de la publication, de la réponse ou du message. communitydans le corps stringfacultatif L’id du groupe dont le salon du fil reçoit la publication ; il doit être activé et tu dois en avoir le droit. Sans lui, la publication n’est dans aucun groupe. quotesdans le corps stringfacultatif L’id de la publication que celle-ci cite. polldans le corps string[]facultatif Les options sous forme de liste de textes. mediadans le corps string[]facultatif ID d’images importées dans l’app, ou d’un GIF ou d’une vidéo de la médiathèque (depuis 2.14). audiencedans le corps stringfacultatif Qui voit la publication : everyone tous ceux qui peuvent la voir, close seulement tes amis proches.everyoneclose coauthordans le corps stringfacultatif L’id d’un compte que tu invites comme coauteur. Vous devez vous suivre mutuellement.
Exemple de requête 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"Réponse Répond avec un Created .
Exemple {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"scheduledFor": null,
"deleteAt": null
}Statuts possibles : 200400401403429
DELETE /v2/posts/{id}Retirer une de tes publications.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’une publication.
Exemple de requête curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
GET /v2/me/scheduledTes publications pas encore parues, et ce qu’elles attendent.
Droit read avec ETag depuis v2.12 Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/scheduled"Réponse Répond avec une page de ScheduledPost , sous forme de `items` et `next`.
Exemple {
"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
}Statuts possibles : 200304401429
POST /v2/posts/{id}/scheduleChanger quand une publication programmée paraît, ou quand une publication se supprime d’elle-même.
Seulement tes propres publications. Tant que les cadeaux d’une publication ne sont pas payés, elle ne peut pas être programmée.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’une publication. publishAtdans le corps integerfacultatif Quand la publication programmée paraît, en millisecondes depuis 1970. deleteAtdans le corps integerfacultatif Quand la publication se supprime d’elle-même, en millisecondes depuis 1970.
Exemple de requête curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/schedule"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
POST /v2/posts/{id}/editModifier le texte d’une de tes publications.
Seulement pendant le délai de modification que t’accorde ton abonnement. Les publications programmées ne peuvent pas être modifiées.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’une publication. textdans le corps stringobligatoire Le texte de la publication, de la réponse ou du message.
Exemple de requête 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"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
GET /v2/posts/{id}/reply-settingsQui peut répondre à ta publication, si les réponses attendent ta validation, et le mode lent.
Droit read avec ETag depuis v2.19 Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’une publication.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/reply-settings"Réponse Répond avec un ReplySettings .
Exemple {
"audience": "following",
"approval": false,
"slow": "auto"
}Statuts possibles : 200304400401404429
PUT /v2/posts/{id}/reply-settingsModifier les réglages de réponse de ta publication. Ce que tu n’indiques pas reste inchangé.
Seulement tes propres publications.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’une publication. audiencedans le corps stringfacultatif Qui peut répondre : tout le monde, les comptes que tu suis, les personnes mentionnées ou personne.allfollowingmentionednobody approvaldans le corps booleanfacultatif Si les réponses n’apparaissent qu’après ta validation. slowdans le corps stringfacultatif Mode lent : auto s’active tout seul quand beaucoup de réponses arrivent, on toujours, off jamais.autoonoff
Exemple de requête 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"Réponse Répond avec un ReplySettings .
Exemple {
"audience": "following",
"approval": false,
"slow": "auto"
}Statuts possibles : 200400401403404429
POST /v2/posts/{id}/coauthorAccepter ou refuser une invitation comme coauteur.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’une publication. acceptdans le corps booleanobligatoire true accepte l’invitation, false la refuse.
Exemple de requête 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"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
DELETE /v2/posts/{id}/coauthorTe retirer comme coauteur ou, en tant qu’auteur, retirer le coauteur de la publication.
Pour le coauteur et l’auteur de la publication.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’une publication.
Exemple de requête curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/coauthor"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
POST /v2/posts/{id}/pinÉpingler ta publication en haut de ton profil, ou la désépingler.
Seulement tes publications visibles. Le nombre de publications épinglées dépend de ton abonnement.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’une publication. activedans le corps booleanobligatoire true épingle la publication, false la désépingle.
Exemple de requête 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"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
Réponses Les réponses sous une publication, en liste avec parentId.
GET /v2/posts/{id}/repliesLes réponses à une publication, sans les comptes bloqués.
Droit read paginé avec ETag depuis v2.0 La liste est plate et dans l’ordre d’écriture ; parentId en fait un arbre. Une page contient toujours des fils entiers. Les réponses des comptes bloqués sont exclues.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’une publication. limitdans l’adresse integerfacultatif Entrées par page : 20 par défaut, 50 au plus. cursordans l’adresse stringfacultatif Le next de la réponse précédente. Sans lui, depuis le début.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/replies?limit=20"Réponse Répond avec une page de Reply , sous forme de `items` et `next`.
Exemple {
"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"
}Statuts possibles : 200304400401404429
POST /v2/posts/{id}/repliesRépondre à une publication.
En mode lent, une réponse par personne toutes les 10 minutes, sinon 429. L’auteur et les comptes qu’il suit en sont exemptés.
Avec media, au plus une image, un GIF ou une vidéo.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’une publication. textdans le corps stringobligatoire Le texte de la publication, de la réponse ou du message. parentIddans le corps stringfacultatif L’id de la réponse à laquelle celle-ci répond. Sans elle, directement à la publication. mediadans le corps string[]facultatif ID d’images importées dans l’app, ou d’un GIF ou d’une vidéo de la médiathèque (depuis 2.14). publishAtdans le corps integerfacultatif Quand la réponse doit paraître, en millisecondes depuis 1970. Sans cela, elle part tout de suite.
Exemple de requête 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"Réponse Répond avec un Created .
Exemple {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"scheduledFor": null,
"deleteAt": null
}Statuts possibles : 200400401403404429
POST /v2/replies/{id}/editModifier le texte d’une de tes réponses.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’identifiant de la réponse. textdans le corps stringobligatoire Le texte de la publication, de la réponse ou du message.
Exemple de requête 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"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
DELETE /v2/replies/{id}Retirer une de tes réponses.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’identifiant de la réponse.
Exemple de requête curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/replies/9e4b1c7d-2a3f-4d5e-8b6c-0f1e2d3c4b5a"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
POST /v2/replies/{id}/likeVoter pour une réponse (un j’aime est un vote positif depuis que les réponses se votent) ou retirer le vote ; un vote négatif reste.
Droit write depuis v2.12 obsolète Obsolète depuis 2.19 : utilise POST /replies/{id}/vote. Cette route reste disponible pour l’instant.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’identifiant de la réponse. activedans le corps booleanobligatoire true l’établit, false la retire.
Exemple de requête 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"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
POST /v2/replies/{id}/voteVoter pour ou contre une réponse, ou retirer ton vote. Répond avec ton vote et le score qui en résulte.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’identifiant de la réponse. votedans le corps stringobligatoire up vote pour, down vote contre, none retire ton vote.updownnone
Exemple de requête 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"Réponse Répond avec un ReplyVote .
Exemple {
"vote": "up",
"score": 12
}Statuts possibles : 200400401403404429
POST /v2/replies/{id}/pickMettre en avant une réponse sous ta propre publication comme la meilleure, ou retirer la mise en avant.
Seulement sous tes propres publications et seulement les réponses directes à la publication. Une nouvelle mise en avant remplace l’ancienne.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’identifiant de la réponse. activedans le corps booleanobligatoire true met la réponse en avant, false retire la mise en avant.
Exemple de requête 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"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
GET /v2/posts/{id}/replies/waitingLes réponses en attente de validation sous une publication : toutes sous la tienne, sinon seulement les tiennes.
Droit read avec ETag depuis v2.19 Si les réponses attendent, c’est l’auteur qui le règle dans les réglages de réponse.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’une publication.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/replies/waiting"Réponse Répond avec une page de Reply , sous forme de `items` et `next`.
Exemple {
"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
}Statuts possibles : 200304400401404429
POST /v2/replies/{id}/decideValider ou refuser une réponse en attente sous ta publication. Refusée, elle est supprimée.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’identifiant de la réponse. approvedans le corps booleanobligatoire true valide la réponse, false la refuse.
Exemple de requête 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"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
GET /v2/posts/{id}/replies/plannedTes réponses programmées pour plus tard sous une publication.
Droit read avec ETag depuis v2.19 On programme avec publishAt en répondant. Au plus 20 réponses programmées à la fois.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’une publication.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/replies/planned"Réponse Répond avec une page de PlannedReply , sous forme de `items` et `next`.
Exemple {
"items": [
{
"id": "3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9",
"parentId": null,
"text": "Count me in for Saturday!",
"publishAt": 1758710400000,
"state": "waiting"
}
],
"next": null
}Statuts possibles : 200304400401404429
PUT /v2/me/planned-replies/{id}Modifier le texte ou l’heure d’une réponse programmée. Une réponse en échec attend à nouveau.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id de la réponse programmée. textdans le corps stringfacultatif Le texte de la publication, de la réponse ou du message. publishAtdans le corps integerfacultatif Quand la réponse doit paraître, en millisecondes depuis 1970. Sans cela, elle part tout de suite.
Exemple de requête 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"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
POST /v2/me/planned-replies/{id}/sendEnvoyer tout de suite une réponse programmée.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id de la réponse programmée.
Exemple de requête curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/planned-replies/3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9/send"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
DELETE /v2/me/planned-replies/{id}Supprimer une réponse programmée.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id de la réponse programmée.
Exemple de requête curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/planned-replies/3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
Sondages Un sondage est une publication dont poll est renseigné. Voter a son propre chemin.
POST /v2/posts/{id}/voteParticiper à un sondage.
Les votes par option valent null jusqu’à ton vote ou la fin du sondage. total est toujours là.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’une publication. optiondans le corps integerobligatoire Quelle option, à partir de 0. Pour plusieurs choix, un appel par option. retractdans le corps booleanfacultatif true retire le vote.
Exemple de requête 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"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
Profils Les profils publics par leur nom court, et ce qu’ils ont publié.
GET /v2/profiles/{handle}Un profil, par son identifiant court.
Droit read avec ETag depuis v2.0 Paramètres Nom Type Signification handledans le chemin stringobligatoire L’identifiant court d’un profil, majuscules ou minuscules indifféremment.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/profiles/mara"Réponse Répond avec un Profile .
Exemple {
"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
}Statuts possibles : 200304400401404429
GET /v2/profiles/{handle}/postsLes publications publiques d’un profil, les plus récentes d’abord.
Droit read paginé avec ETag depuis v2.0 Sur les chemins publics, counts.likes et counts.reposts valent toujours 0 et pinned vaut false.
Les publications des groupes ne sont pas ici mais sous /communities/{id}/posts.
Paramètres Nom Type Signification handledans le chemin stringobligatoire L’identifiant court d’un profil, majuscules ou minuscules indifféremment. limitdans l’adresse integerfacultatif Entrées par page : 20 par défaut, 50 au plus. cursordans l’adresse stringfacultatif Le next de la réponse précédente. Sans lui, depuis le début.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/profiles/mara/posts?limit=20"Réponse Répond avec une page de Post , sous forme de `items` et `next`.
Exemple {
"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"
}Statuts possibles : 200304400401404429
GET /v2/profiles/{handle}/eventsLes prochains événements d’un profil, les plus proches d’abord.
Droit read avec ETag depuis v2.19 Seulement tant que l’abonnement du profil inclut les événements. Rien entre des comptes qui se sont bloqués.
Paramètres Nom Type Signification handledans le chemin stringobligatoire L’identifiant court d’un profil, majuscules ou minuscules indifféremment.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/profiles/mara/events"Réponse Répond avec une page de Event , sous forme de `items` et `next`.
Exemple {
"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
}Statuts possibles : 200304400401404429
POST /v2/me/eventsCréer un événement. Répond avec son id.
Nécessite un abonnement avec événements, sinon 403. Le nombre d’événements à venir dépend de l’abonnement.
Paramètres Nom Type Signification titledans le corps stringobligatoire Le titre. startsAtdans le corps integerobligatoire Début, en millisecondes depuis 1970. endsAtdans le corps integerfacultatif Fin, en millisecondes depuis 1970. Facultatif. placedans le corps stringfacultatif Où il a lieu. descriptiondans le corps stringfacultatif Une description. signupsdans le corps booleanfacultatif Si l’on peut s’inscrire. Nécessite un abonnement avec inscriptions. capacitydans le corps integerfacultatif Combien de personnes peuvent s’inscrire au plus. Sans indication, pas de limite.
Exemple de requête 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"Réponse Répond avec un Made .
Exemple {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Statuts possibles : 200400401403429
PUT /v2/me/events/{id}Modifier un de tes événements. Tous les champs sont redéfinis.
Un événement déjà commencé garde son début.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id de l’événement. titledans le corps stringobligatoire Le titre. startsAtdans le corps integerobligatoire Début, en millisecondes depuis 1970. endsAtdans le corps integerfacultatif Fin, en millisecondes depuis 1970. Facultatif. placedans le corps stringfacultatif Où il a lieu. descriptiondans le corps stringfacultatif Une description. signupsdans le corps booleanfacultatif Si l’on peut s’inscrire. Nécessite un abonnement avec inscriptions. capacitydans le corps integerfacultatif Combien de personnes peuvent s’inscrire au plus. Sans indication, pas de limite.
Exemple de requête 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"Réponse Répond avec un Made .
Exemple {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Statuts possibles : 200400401403404429
DELETE /v2/me/events/{id}Supprimer un de tes événements.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id de l’événement.
Exemple de requête curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/events/2a3b4c5d-6e7f-4809-9a1b-2c3d4e5f6a7b"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
GET /v2/me/events/{id}/signupsQui s’est inscrit à un de tes événements.
Droit read avec ETag depuis v2.19 Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id de l’événement.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/events/2a3b4c5d-6e7f-4809-9a1b-2c3d4e5f6a7b/signups"Réponse Répond avec une page de EventSignup , sous forme de `items` et `next`.
Exemple {
"items": [
{
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"at": 1758624000000
}
],
"next": null
}Statuts possibles : 200304400401404429
POST /v2/events/{id}/signupT’inscrire à un événement ou te désinscrire.
Seulement pour les événements avec inscription, pas les tiens. S’il est complet, 409.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id de l’événement. goingdans le corps booleanobligatoire true t’inscrit, false te désinscrit.
Exemple de requête 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"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
Groupes Les groupes ouverts et les tiens, leurs publications, membres, rôles et liens d’invitation.
GET /v2/communitiesLes groupes ouverts de cette instance ; avec mine=true, les groupes de ton compte.
Droit read avec ETag depuis v2.0 Triée par nombre de membres, sans pagination ; next vaut toujours null.
Paramètres Nom Type Signification limitdans l’adresse integerfacultatif Entrées par page : 20 par défaut, 50 au plus. minedans l’adresse booleanfacultatif true pour les groupes de ton compte, internes et cachés compris, par nom.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities?limit=20"Réponse Répond avec une page de Community , sous forme de `items` et `next`.
Exemple {
"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
}Statuts possibles : 200304401429
GET /v2/communities/{id}Un seul groupe, par son id.
Droit read avec ETag depuis v2.0 Les groupes internes et cachés seulement si ton compte en est membre.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60"Réponse Répond avec un Community .
Exemple {
"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
}
}Statuts possibles : 200304400401404429
GET /v2/communities/{id}/postsLes publications du salon du fil d’un groupe, les plus récentes d’abord.
Droit read paginé avec ETag depuis v2.0 Sur les chemins publics, counts.likes et counts.reposts valent toujours 0 et pinned vaut false.
Si le salon du fil est désactivé, le chemin répond 409 avec feed_off.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe. limitdans l’adresse integerfacultatif Entrées par page : 20 par défaut, 50 au plus. cursordans l’adresse stringfacultatif Le next de la réponse précédente. Sans lui, depuis le début.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/posts?limit=20"Réponse Répond avec une page de Post , sous forme de `items` et `next`.
Exemple {
"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"
}Statuts possibles : 200304400401404429
GET /v2/communities/{id}/membersLes membres d’un groupe avec leurs rôles.
Droit read avec ETag depuis v2.15 D’abord la direction, puis par rôle le plus haut ; 300 au plus.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/members"Réponse Répond avec une page de GroupMember , sous forme de `items` et `next`.
Exemple {
"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
}Statuts possibles : 200304400401404429
GET /v2/communities/{id}/rolesLes rôles d’un groupe, le plus haut d’abord, @everyone en dernier.
Droit read avec ETag depuis v2.15 Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/roles"Réponse Répond avec une page de Role , sous forme de `items` et `next`.
Exemple {
"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
}Statuts possibles : 200304400401404429
GET /v2/communities/{id}/bellQuelles notifications un groupe t’envoie.
Droit read avec ETag depuis v2.15 Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/bell"Réponse Répond avec un Bell .
Exemple {
"level": "important"
}Statuts possibles : 200304400401404429
GET /v2/invites/{code}Le groupe derrière un lien d’invitation, avant de rejoindre.
Droit read avec ETag depuis v2.15 Paramètres Nom Type Signification codedans le chemin stringobligatoire Le code d’un lien d’invitation, la fin de son adresse.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/invites/k7Qm2xPa"Réponse Répond avec un InvitePreview .
Exemple {
"community": {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening",
"members": 312,
"rules": [
"Be kind.",
"No advertising."
]
},
"member": false
}Statuts possibles : 200304400401404429
PUT /v2/roles/{id}/selfPrendre ou retirer un rôle au choix.
Seulement les rôles que la direction propose au choix (selfable), et seulement pour ton propre compte.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un rôle. activedans le corps booleanfacultatif false retire le rôle ; sinon il est donné.
Exemple de requête 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"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
GET /v2/communities/{id}/emojisLes emojis propres d’un groupe.
Droit read avec ETag depuis v2.20 Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/emojis"Réponse Répond avec une page de GroupEmoji , sous forme de `items` et `next`.
Exemple {
"items": [
{
"name": "seedling",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false
}
],
"next": null
}Statuts possibles : 200304400401404429
PUT /v2/communities/{id}/bellChoisir quelles notifications un groupe t’envoie.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe. leveldans le corps stringobligatoire Quelles notifications arrivent.allimportantoff
Exemple de requête 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"Réponse Répond avec un Bell .
Exemple {
"level": "important"
}Statuts possibles : 200400401403404429
POST /v2/invites/{code}/joinRejoindre un groupe avec un lien d’invitation.
Paramètres Nom Type Signification codedans le chemin stringobligatoire Le code d’un lien d’invitation, la fin de son adresse. rulesdans le corps booleanfacultatif true si tu acceptes les règles du groupe ; nécessaire s’il en a.
Exemple de requête curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/invites/k7Qm2xPa/join"Réponse Répond avec un Joined .
Exemple {
"community": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60"
}Statuts possibles : 200400401403404429
GET /v2/communities/{id}/botsLes bots d’un groupe avec ce que leur rôle permet.
Droit read avec ETag depuis v2.19 Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/bots"Réponse Répond avec une page de GroupBot , sous forme de `items` et `next`.
Exemple {
"items": [
{
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "gardenbot",
"name": "Garden bot",
"description": "Reminds the group of watering days.",
"permissions": [
"send",
"view"
]
}
],
"next": null
}Statuts possibles : 200304400401404429
Salons Les salons de tes groupes et leur discussion : lire, écrire, marquer comme lu.
GET /v2/communities/{id}/channelsLes salons d’un groupe que tu vois, dans leur ordre.
Droit read avec ETag depuis v2.15 Le salon du fil (kind: feed) n’apparaît ici que tant qu’il est activé ; ses publications passent par /communities/{id}/posts.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/channels"Réponse Répond avec une page de Channel , sous forme de `items` et `next`.
Exemple {
"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
}Statuts possibles : 200304400401404429
GET /v2/channels/{id}/messagesLes messages d’un salon de discussion, les plus récents d’abord.
Droit read paginé avec ETag depuis v2.15 Jusqu’à 50 messages par page. Les messages de comptes que tu as bloqués ou qui t’ont bloqué sont absents.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un salon. cursordans l’adresse stringfacultatif Le next de la réponse précédente. Sans lui, depuis le début. threaddans l’adresse stringfacultatif Le message dont on lit le fil : lui et ses réponses au lieu du chat.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a/messages"Réponse Répond avec une page de ChannelMessage , sous forme de `items` et `next`.
Exemple {
"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"
}Statuts possibles : 200304400401404429
POST /v2/channels/{id}/messagesÉcrire un message dans un salon de discussion.
@nom notifie un membre, @everyone avec le droit correspondant tout le monde, au plus six fois par heure.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un salon. textdans le corps stringfacultatif Le texte de la publication, de la réponse ou du message. replyTodans le corps stringfacultatif L’id du message du même salon auquel tu réponds. mediadans le corps string[]facultatif ID d’images importées dans l’app, ou d’un GIF ou d’une vidéo de la médiathèque (depuis 2.14). threaddans le corps stringfacultatif Le message du chat dans le fil duquel on répond ; sans lui, le message va dans le chat. carddans le corps objectfacultatif Une carte { title, text, color, fields: [{ name, value }] }, 10 champs au plus. buttonsdans le corps object[]facultatif Jusqu’à 5 boutons, chacun { id, label, style } avec style primary, secondary ou danger. Un appui arrive comme événement interaction.
Exemple de requête 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"Réponse Répond avec un Made .
Exemple {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Statuts possibles : 200400401403404429
POST /v2/channels/{id}/readMarquer un salon de discussion comme lu jusqu’à un moment donné.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un salon. atdans le corps integerobligatoire Jusqu’à quand c’est lu, en millisecondes, en général le createdAt du message le plus récent.
Exemple de requête curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a/read"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
DELETE /v2/channel-messages/{id}Supprimer un de tes messages dans un salon de discussion.
Seulement tes propres messages ; ceux des autres sont retirés par la direction avec l’autorisation groups .
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un message dans un salon de discussion.
Exemple de requête curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/channel-messages/61a2b3c4-d5e6-4f70-8192-a3b4c5d6e7f8"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
GET /v2/communities/{id}/voiceQui est en ce moment dans les salons vocaux d’un groupe, par salon.
Droit read avec ETag depuis v2.19 Seulement les salons que tu peux voir. Sans serveur média, la liste est vide.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/voice"Réponse Répond avec une page de VoiceRoom , sous forme de `items` et `next`.
Exemple {
"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
}Statuts possibles : 200304400401404429
Gérer des groupes Ce que les paramètres d’un groupe permettent dans l’app, avec l’autorisation groups . Ce que ton compte peut faire, le groupe en décide comme dans l’app : direction, rôles et leur rang.
POST /v2/communities/{id}/emojisDonner un emoji au groupe.
Seulement qui peut gérer les salons du groupe. L’image est téléversée comme un emoji à toi (POST /me/emojis/pictures) ; un nom n’est attribué qu’une fois pour tous les emojis.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe. namedans le corps stringobligatoire Le nom avec lequel tu écris l’emoji, sous la forme :nom:. picturedans le corps stringobligatoire L’id de POST /me/emojis/pictures.
Exemple de requête 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"Réponse Répond avec une page de GroupEmoji , sous forme de `items` et `next`.
Exemple {
"items": [
{
"name": "seedling",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false
}
],
"next": null
}Statuts possibles : 200400401403404429
DELETE /v2/communities/{id}/emojis/{name}Retirer un emoji du groupe.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe. namedans le chemin stringobligatoire Le nom de l’emoji, sans deux-points.
Exemple de requête curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/emojis/seedling"Réponse Répond avec une page de GroupEmoji , sous forme de `items` et `next`.
Exemple {
"items": [
{
"name": "seedling",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false
}
],
"next": null
}Statuts possibles : 200400401403404429
POST /v2/communities/{id}/rolesCréer un rôle.
Seulement les rôles sous ton plus haut rôle et seulement les droits que tu as toi-même ; la direction est au-dessus de tous.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe. namedans le corps stringfacultatif Le nom du rôle ; @everyone garde le sien. colordans le corps stringfacultatif La couleur ; vide pour aucune.indigovioletroseambergreenteal permissionsdans le corps string[]facultatif Les droits : view, send, attach, post_feed, invite, mention_everyone, moderate, timeout_members, kick_members, ban_members, manage_channels, manage_roles. selfabledans le corps booleanfacultatif true : les membres prennent le rôle eux-mêmes. Seulement pour les rôles qui ne permettent rien de plus que participer (view, send, attach, voice_connect, voice_speak, voice_video).
Exemple de requête 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"Réponse Répond avec un Made .
Exemple {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Statuts possibles : 200400401403404429
PUT /v2/roles/{id}Modifier le nom, la couleur et les droits d’un rôle.
Remplace le nom, la couleur et les droits ; ce que tu omets devient vide.
Seulement les rôles sous ton plus haut rôle et seulement les droits que tu as toi-même ; la direction est au-dessus de tous.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un rôle. namedans le corps stringfacultatif Le nom du rôle ; @everyone garde le sien. colordans le corps stringfacultatif La couleur ; vide pour aucune.indigovioletroseambergreenteal permissionsdans le corps string[]facultatif Les droits : view, send, attach, post_feed, invite, mention_everyone, moderate, timeout_members, kick_members, ban_members, manage_channels, manage_roles. selfabledans le corps booleanfacultatif true : les membres prennent le rôle eux-mêmes. Seulement pour les rôles qui ne permettent rien de plus que participer (view, send, attach, voice_connect, voice_speak, voice_video).
Exemple de requête 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"Réponse Répond avec un Made .
Exemple {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Statuts possibles : 200400401403404429
DELETE /v2/roles/{id}Supprimer un rôle.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un rôle.
Exemple de requête curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/roles/4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
PUT /v2/communities/{id}/roles/orderFixer le rang des rôles.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe. rolesdans le corps string[]obligatoire Les id de tous les rôles en dessous de ton rôle le plus élevé, le plus haut en premier ; pour la direction, tous sauf @everyone.
Exemple de requête curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/roles/order"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
PUT /v2/roles/{id}/members/{member}Donner un rôle à un membre ou le lui retirer.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un rôle. memberdans le chemin stringobligatoire L’id du compte d’un membre. activedans le corps booleanfacultatif false retire le rôle ; sinon il est donné.
Exemple de requête 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"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
POST /v2/communities/{id}/channelsCréer un salon de discussion.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe. namedans le corps stringfacultatif Le nom, sans # ; vide pour le nom que l’app donne dans chaque langue. topicdans le corps stringfacultatif Le sujet affiché au-dessus du salon. categorydans le corps stringfacultatif L’id de la catégorie où va le salon ; vide pour aucune. emojidans le corps stringfacultatif Un emoji comme symbole. icondans le corps stringfacultatif Un symbole du jeu de l’app, par son nom.homehashmegaphonevolumemessagehelpinfobellcalendarbookbookmarkpinshieldstarheartsparklesflamezaptrophygiftrocketlightbulbcodewrenchbriefcasegraduationpalettecamerafilmmusicgamepaddumbbellleafflowerpawsunmooncloudglobemapcoffeepizzasmile imagedans le corps stringfacultatif L’id d’une image importée avec /media/emoji. colordans le corps stringfacultatif La couleur de la vignette.brandindigovioletroseambergreentealred shapedans le corps stringfacultatif La forme de la vignette ; un cercle sinon.circlesquaretrianglediamondhexagonoctagonshieldstar
Exemple de requête 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"Réponse Répond avec un Made .
Exemple {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Statuts possibles : 200400401403404429
PUT /v2/channels/{id}Modifier le nom, le sujet et la catégorie d’un salon.
Remplace le nom, le sujet et la catégorie ; ce que tu omets devient vide.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un salon. namedans le corps stringfacultatif Le nom, sans # ; vide pour le nom que l’app donne dans chaque langue. topicdans le corps stringfacultatif Le sujet affiché au-dessus du salon. categorydans le corps stringfacultatif L’id de la catégorie où va le salon ; vide pour aucune. emojidans le corps stringfacultatif Un emoji comme symbole. icondans le corps stringfacultatif Un symbole du jeu de l’app, par son nom.homehashmegaphonevolumemessagehelpinfobellcalendarbookbookmarkpinshieldstarheartsparklesflamezaptrophygiftrocketlightbulbcodewrenchbriefcasegraduationpalettecamerafilmmusicgamepaddumbbellleafflowerpawsunmooncloudglobemapcoffeepizzasmile imagedans le corps stringfacultatif L’id d’une image importée avec /media/emoji. colordans le corps stringfacultatif La couleur de la vignette.brandindigovioletroseambergreentealred shapedans le corps stringfacultatif La forme de la vignette ; un cercle sinon.circlesquaretrianglediamondhexagonoctagonshieldstar
Exemple de requête 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"Réponse Répond avec un Made .
Exemple {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Statuts possibles : 200400401403404429
DELETE /v2/channels/{id}Supprimer un salon de discussion avec ses messages.
Le salon du fil ne peut pas être supprimé, seulement désactivé.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un salon.
Exemple de requête curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
PUT /v2/communities/{id}/channels/orderFixer l’ordre des catégories et des salons de discussion.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe. categoriesdans le corps string[]obligatoire Les id de toutes les catégories du groupe dans le nouvel ordre. channelsdans le corps string[]obligatoire Les id de tous les salons de discussion du groupe dans le nouvel ordre.
Exemple de requête curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/channels/order"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
PUT /v2/communities/{id}/channels/shapeFixer la forme de tous les symboles de salon du groupe.
Réservé à la direction du groupe.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe. shapedans le corps stringfacultatif La forme de tous les symboles du groupe ; omise, chaque salon a la sienne.circlesquaretrianglediamondhexagonoctagonshieldstar
Exemple de requête curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/channels/shape"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
GET /v2/channels/{id}/overridesCe que des rôles peuvent faire autrement dans un salon que dans le groupe.
Droit groups avec ETag depuis v2.15 Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un salon.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a/overrides"Réponse Répond avec une page de ChannelOverride , sous forme de `items` et `next`.
Exemple {
"items": [
{
"role": "4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8",
"allow": [
"send"
],
"deny": []
}
],
"next": null
}Statuts possibles : 200304400401403404429
PUT /v2/channels/{id}/overrides/{role}Fixer ce qu’un rôle peut faire autrement dans un salon.
Pas pour les rôles égaux ou supérieurs à ton plus haut rôle.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un salon. roledans le chemin stringobligatoire L’id d’un rôle. allowdans le corps string[]facultatif Ce que le rôle peut faire ici en plus : dans une discussion view, send, attach, mention_everyone, moderate, dans le salon du fil view et post_feed. denydans le corps string[]facultatif Ce que le rôle ne peut pas faire ici, parmi les mêmes droits. Les deux listes vides suppriment la différence.
Exemple de requête 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"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
POST /v2/communities/{id}/categoriesCréer une catégorie de salons.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe. namedans le corps stringobligatoire Le nom de la catégorie. emojidans le corps stringfacultatif Un emoji comme symbole. icondans le corps stringfacultatif Un symbole du jeu de l’app, par son nom.homehashmegaphonevolumemessagehelpinfobellcalendarbookbookmarkpinshieldstarheartsparklesflamezaptrophygiftrocketlightbulbcodewrenchbriefcasegraduationpalettecamerafilmmusicgamepaddumbbellleafflowerpawsunmooncloudglobemapcoffeepizzasmile imagedans le corps stringfacultatif L’id d’une image importée avec /media/emoji. colordans le corps stringfacultatif La couleur de la vignette.brandindigovioletroseambergreentealred
Exemple de requête 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"Réponse Répond avec un Made .
Exemple {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Statuts possibles : 200400401403404429
PUT /v2/categories/{id}Renommer une catégorie.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’une catégorie. namedans le corps stringobligatoire Le nom de la catégorie. emojidans le corps stringfacultatif Un emoji comme symbole. icondans le corps stringfacultatif Un symbole du jeu de l’app, par son nom.homehashmegaphonevolumemessagehelpinfobellcalendarbookbookmarkpinshieldstarheartsparklesflamezaptrophygiftrocketlightbulbcodewrenchbriefcasegraduationpalettecamerafilmmusicgamepaddumbbellleafflowerpawsunmooncloudglobemapcoffeepizzasmile imagedans le corps stringfacultatif L’id d’une image importée avec /media/emoji. colordans le corps stringfacultatif La couleur de la vignette.brandindigovioletroseambergreentealred
Exemple de requête 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"Réponse Répond avec un Made .
Exemple {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Statuts possibles : 200400401403404429
DELETE /v2/categories/{id}Supprimer une catégorie.
Ses salons restent, sans catégorie.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’une catégorie.
Exemple de requête curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/categories/9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
PUT /v2/communities/{id}/feedActiver ou désactiver le salon du fil d’un groupe.
Désactivé, les publications restent enregistrées mais seuls leurs auteurs les voient.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe. ondans le corps booleanobligatoire true active le salon du fil, false le désactive.
Exemple de requête curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/feed"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
GET /v2/communities/{id}/invitesLes liens d’invitation d’un groupe encore valides.
Droit groups avec ETag depuis v2.15 La direction les voit tous, les autres seulement les leurs.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/invites"Réponse Répond avec une page de InviteLink , sous forme de `items` et `next`.
Exemple {
"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
}Statuts possibles : 200304400401403404429
POST /v2/communities/{id}/invitesCréer un lien d’invitation.
Un lien ne vaut que tant que tu peux inviter, et disparaît quand tu pars.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe. daysdans le corps integerfacultatif Combien de jours le lien est valable ; sans, jusqu’à ce qu’il soit retiré.1730 usesdans le corps integerfacultatif Combien de fois le lien peut servir ; sans, sans limite.151025100
Exemple de requête 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"Réponse Répond avec un Made .
Exemple {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Statuts possibles : 200400401403404429
DELETE /v2/invites/{code}Retirer un lien d’invitation.
Paramètres Nom Type Signification codedans le chemin stringobligatoire Le code d’un lien d’invitation, la fin de son adresse.
Exemple de requête curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/invites/k7Qm2xPa"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
POST /v2/channel-messages/{id}/removeRetirer d’un salon le message d’un autre membre.
Inscrit au journal du groupe et 60 par heure au plus, comme dans l’app.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un message dans un salon de discussion.
Exemple de requête curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/channel-messages/61a2b3c4-d5e6-4f70-8192-a3b4c5d6e7f8/remove"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
POST /v2/communities/{id}/posts/{post}/removeRetirer une publication d’un groupe.
Inscrit au journal du groupe et 60 par heure au plus, comme dans l’app.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe. postdans le chemin stringobligatoire L’id d’une publication. reasondans le corps stringobligatoire La justification que lit le membre.
Exemple de requête 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"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
DELETE /v2/communities/{id}/members/{member}Expulser un membre d’un groupe.
Une expulsion depuis 2.16 : le membre peut revenir. Qui doit rester dehors est banni.
Seulement avec le droit correspondant et pour des membres en dessous de ton rôle le plus élevé ; la co-direction seulement en tant que fondateur.
Inscrit au journal du groupe et 60 par heure au plus, comme dans l’app.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe. memberdans le chemin stringobligatoire L’id du compte d’un membre. reasondans le corps stringobligatoire La justification que lit le membre.
Exemple de requête 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"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
PUT /v2/communities/{id}/members/{member}/timeoutRéduire un membre au silence.
Une nouvelle exclusion remplace celle en cours. Quitter puis rejoindre le groupe n’y met pas fin.
Seulement avec le droit correspondant et pour des membres en dessous de ton rôle le plus élevé ; la co-direction seulement en tant que fondateur.
Inscrit au journal du groupe et 60 par heure au plus, comme dans l’app.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe. memberdans le chemin stringobligatoire L’id du compte d’un membre. secondsdans le corps integerobligatoire Combien de temps, en secondes.60300600360086400604800 reasondans le corps stringfacultatif Une raison que le membre lit ; facultative.
Exemple de requête 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"Réponse Répond avec un Until .
Exemple {
"until": 1758624600000
}Statuts possibles : 200400401403404429
DELETE /v2/communities/{id}/members/{member}/timeoutLever une exclusion temporaire.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe. memberdans le chemin stringobligatoire L’id du compte d’un membre.
Exemple de requête 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"Réponse Répond avec un Until .
Exemple {
"until": 1758624600000
}Statuts possibles : 200400401403404429
GET /v2/communities/{id}/bansLes bannissements en cours d’un groupe.
Droit groups avec ETag depuis v2.16 Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/bans"Réponse Répond avec une page de Ban , sous forme de `items` et `next`.
Exemple {
"items": [
{
"member": {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"bot": false
},
"until": 1759228800000,
"createdAt": 1758624000000,
"by": "Mara 🌻"
}
],
"next": null
}Statuts possibles : 200304400401403404429
PUT /v2/communities/{id}/bans/{member}Bannir un membre.
Sans days, le bannissement dure jusqu’à ce qu’il soit levé.
Seulement avec le droit correspondant et pour des membres en dessous de ton rôle le plus élevé ; la co-direction seulement en tant que fondateur.
Inscrit au journal du groupe et 60 par heure au plus, comme dans l’app.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe. memberdans le chemin stringobligatoire L’id du compte d’un membre. daysdans le corps integerfacultatif Combien de temps, en jours ; à omettre pour un bannissement sans fin.1730 reasondans le corps stringobligatoire La justification que lit le membre.
Exemple de requête 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"Réponse Répond avec un Until .
Exemple {
"until": 1758624600000
}Statuts possibles : 200400401403404429
DELETE /v2/communities/{id}/bans/{member}Lever un bannissement.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe. memberdans le chemin stringobligatoire L’id du compte d’un membre.
Exemple de requête 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"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
GET /v2/communities/{id}/logLe journal de la direction : qui a retiré quoi et pourquoi.
Droit groups avec ETag depuis v2.15 Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/log"Réponse Répond avec une page de LogEntry , sous forme de `items` et `next`.
Exemple {
"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
}Statuts possibles : 200304400401403404429
POST /v2/communitiesFonder un groupe. Répond avec son id ; tu en es le fondateur.
Nécessite la permission groups. Sans précision, le groupe est internal et libre d’accès ; un groupe caché sur invitation seulement. C’est l’exploitant qui décide si les membres peuvent fonder des groupes.
Paramètres Nom Type Signification namedans le corps stringobligatoire Le nom, 60 caractères au plus. descriptiondans le corps stringfacultatif La description, 240 caractères au plus. handledans le corps stringfacultatif L’identifiant pour les mentions @# et le lien : 3 à 30 minuscules, chiffres ou _. tagsdans le corps string[]facultatif Jusqu’à 5 #tags sur le sujet du groupe. joinPolicydans le corps stringfacultatif Comment on rejoint : open librement, application sur candidature, invite sur invitation seulement.openapplicationinvite visibilitydans le corps stringfacultatif Qui voit le groupe : open tout le monde, internal son contenu seulement les membres, hidden seulement les membres du tout.openinternalhidden
Exemple de requête 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"Réponse Répond avec un Made .
Exemple {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Statuts possibles : 200400401403429
PUT /v2/communities/{id}Modifier un groupe que tu diriges. Ce que tu n’indiques pas reste inchangé.
Nécessite la permission groups et la direction du groupe. La direction, la dissolution et les avantages des étincelles restent dans l’app.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un groupe. namedans le corps stringfacultatif Le nom, 60 caractères au plus. descriptiondans le corps stringfacultatif La description, 240 caractères au plus. handledans le corps stringfacultatif L’identifiant pour les mentions @# et le lien : 3 à 30 minuscules, chiffres ou _. tagsdans le corps string[]facultatif Jusqu’à 5 #tags sur le sujet du groupe. joinPolicydans le corps stringfacultatif Comment on rejoint : open librement, application sur candidature, invite sur invitation seulement.openapplicationinvite visibilitydans le corps stringfacultatif Qui voit le groupe : open tout le monde, internal son contenu seulement les membres, hidden seulement les membres du tout.openinternalhidden imagedans le corps stringfacultatif L’id d’une image téléversée (POST /me/pictures) comme image du groupe. Vide la retire. bannerdans le corps stringfacultatif L’id d’une image téléversée comme bannière du groupe. Vide la retire.
Exemple de requête 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"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
Bots Ce qui se passe dans les groupes d’un bot, en temps réel : en flux, page par page ou livré à une adresse.
GET /v2/eventsLes événements des groupes du bot depuis un événement, page par page.
Seulement avec le jeton d’un bot. Les événements d’un salon seulement si le bot peut le voir.
Les événements sont gardés un jour. next est le numéro du dernier, comme since pour la page suivante.
Paramètres Nom Type Signification sincedans l’adresse stringfacultatif Le numéro du dernier événement que le bot a déjà. Sans lui, le flux commence maintenant et la liste au plus ancien.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/events?since=0"Réponse Répond avec une page de BotEvent , sous forme de `items` et `next`.
Exemple {
"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
}Statuts possibles : 200401429
GET /v2/events/streamLes événements des groupes du bot dès qu’ils se produisent (server-sent events).
Droit read avec ETag depuis v2.20 La connexion reste ouverte et se ferme après dix minutes ; le client se reconnecte et envoie Last-Event-ID.
Seulement avec le jeton d’un bot. Les événements d’un salon seulement si le bot peut le voir.
Paramètres Nom Type Signification sincedans l’adresse stringfacultatif Le numéro du dernier événement que le bot a déjà. Sans lui, le flux commence maintenant et la liste au plus ancien.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/events/stream?since=0"Réponse Répond avec un BotEvent .
Exemple {
"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
}
}
}Statuts possibles : 200304401429
GET /v2/me/commandsLes commandes du bot.
Droit read avec ETag depuis v2.20 Seulement avec le jeton d’un bot. Les événements d’un salon seulement si le bot peut le voir.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/commands"Réponse Répond avec une page de BotCommand , sous forme de `items` et `next`.
Exemple {
"items": [
{
"name": "dice",
"description": "Rolls a die"
}
],
"next": null
}Statuts possibles : 200304401429
PUT /v2/me/commandsDéfinir les commandes du bot, toutes à la fois.
Remplace toutes les commandes ; une liste vide les retire. Dans les chats que le bot peut voir, le champ de saisie les propose après « / ».
Paramètres Nom Type Signification commandsdans le corps object[]obligatoire Jusqu’à 25 commandes, chacune { name, description }.
Exemple de requête 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"Réponse Répond avec une page de BotCommand , sous forme de `items` et `next`.
Exemple {
"items": [
{
"name": "dice",
"description": "Rolls a die"
}
],
"next": null
}Statuts possibles : 200400401403429
POST /v2/interactions/{id}/replyRépondre à une commande ou à un bouton.
Dans les 15 minutes suivant l’événement command ou interaction ; avec private, seul celui qui a utilisé la commande ou le bouton voit la réponse.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’identifiant tiré de l’événement (data.interaction). textdans le corps stringfacultatif Le texte de la publication, de la réponse ou du message. privatedans le corps booleanfacultatif true : seul celui qui a utilisé la commande ou le bouton voit la réponse, pendant un jour.carddans le corps objectfacultatif Une carte { title, text, color, fields: [{ name, value }] }, 10 champs au plus. buttonsdans le corps object[]facultatif Jusqu’à 5 boutons, chacun { id, label, style } avec style primary, secondary ou danger. Un appui arrive comme événement interaction.
Exemple de requête 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"Réponse Répond avec un Made .
Exemple {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Statuts possibles : 200400401403404429
POST /v2/channels/{id}/voicePrendre une place dans un salon vocal pour jouer de la musique ou du son.
Seulement avec le jeton d’un bot, selon ce que permet son rôle dans le salon. Le programme se connecte avec un SDK LiveKit et envoie son son comme micro ; chacun règle son volume pour soi.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id d’un salon.
Exemple de requête curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a/voice"Réponse Répond avec un VoiceSeat .
Exemple {
"url": "wss://voice.example.org",
"token": "eyJhbGciOiJIUzI1NiJ9…",
"iceServers": [
{
"urls": [
"stun:turn.example.org:3478"
]
}
],
"speak": true,
"video": false
}Statuts possibles : 200400401403404429
Découvrir Tendances, recherche et les émojis propres à l’instance.
GET /v2/tagsLes tags qui tournent en ce moment.
Droit read avec ETag depuis v2.0 Au plus 10 tags tendance par points : chaque usage compte 1 et diminue de moitié tous les 3 jours, un compte compte au plus 3 par jour. posts est le score arrondi. limit raccourcit seulement la liste. Les tags mis en avant par l’équipe peuvent figurer plus haut.
Paramètres Nom Type Signification limitdans l’adresse integerfacultatif Entrées par page : 20 par défaut, 50 au plus.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/tags?limit=10"Réponse Répond avec une page de Tag , sous forme de `items` et `next`.
Exemple {
"items": [
{
"tag": "garden",
"posts": 58
}
],
"next": null
}Statuts possibles : 200304401429
GET /v2/searchUne recherche sur les publications, les noms, les identifiants courts et les tags.
Droit read avec ETag depuis v2.0 Cherche seulement le public : publications hors groupes, profils et tags. limit s’applique par type.
Paramètres Nom Type Signification qdans l’adresse stringobligatoire Les mots cherchés. typedans l’adresse stringfacultatif Quel genre de résultat. Sans lui, tous les genres.allpostsprofilestags limitdans l’adresse integerfacultatif Entrées par page : 20 par défaut, 50 au plus.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/search?q=garden&type=posts"Réponse Répond avec un SearchResult .
Exemple {
"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
}
]
}Statuts possibles : 200304400401429
GET /v2/emojisLes émojis propres à l’instance, avec l’adresse de leurs images.
Droit read avec ETag depuis v2.1 Dans les textes, un émoji apparaît sous la forme :name:. Remplace-le par l’image de cette liste ; les noms inconnus restent du texte.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/emojis"Réponse Répond avec une page de Emoji , sous forme de `items` et `next`.
Exemple {
"items": [
{
"name": "tellmelo",
"url": "/api/media?id=e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b"
}
],
"next": null
}Statuts possibles : 200304401429
GIF et vidéos La médiathèque : trouver des GIF et vidéos partagés, importer et gérer les tiens, et les intégrer sur d’autres sites web.
GET /v2/mediaGIF ou vidéos partagés, les plus utilisés d’abord.
Droit read paginé avec ETag depuis v2.14 Sans les comptes que tu as bloqués ou qui t’ont bloqué. Charge url et poster avec la clé dans l’en-tête, pour les publications sur tellmelo.
Pour d’autres sites web, uniquement ce qui a embed : ses adresses fonctionnent sans clé, dans n’importe quel navigateur.
Paramètres Nom Type Signification kinddans l’adresse stringfacultatif gif ou video ; par défaut gif.gifvideoqdans l’adresse stringfacultatif Mots présents dans le nom ou les mots-clés. anywheredans l’adresse booleanfacultatif true : uniquement ce qui peut aussi apparaître sur d’autres sites web.limitdans l’adresse integerfacultatif Entrées par page : 20 par défaut, 50 au plus. cursordans l’adresse stringfacultatif Le next de la réponse précédente. Sans lui, depuis le début.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/media?kind=gif&q=bees&anywhere=true&limit=20"Réponse Répond avec une page de MediaItem , sous forme de `items` et `next`.
Exemple {
"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"
}Statuts possibles : 200304400401429
GET /v2/media/mineTa propre médiathèque, les plus récents d’abord.
Droit media paginé avec ETag depuis v2.14 Paramètres Nom Type Signification kinddans l’adresse stringfacultatif gif ou video ; par défaut gif.gifvideoqdans l’adresse stringfacultatif Mots présents dans le nom ou les mots-clés. limitdans l’adresse integerfacultatif Entrées par page : 20 par défaut, 50 au plus. cursordans l’adresse stringfacultatif Le next de la réponse précédente. Sans lui, depuis le début.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/media/mine?kind=gif&q=bees&limit=20"Réponse Répond avec une page de MediaItem , sous forme de `items` et `next`.
Exemple {
"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"
}Statuts possibles : 200304400401403429
GET /v2/media/{id}Un GIF ou une vidéo, à toi ou partagé.
Droit read avec ETag depuis v2.14 Paramètres Nom Type Signification iddans le chemin stringobligatoire L’ID du GIF ou de la vidéo.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/media/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918"Réponse Répond avec un MediaItem .
Exemple {
"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>"
}
}Statuts possibles : 200304400401404429
POST /v2/media/uploadsCommencer un import.
Ensuite, envoie le fichier en morceaux d’au plus piece octets à /media/uploads/{upload}. Sans nouveau morceau, un import se termine après 15 minutes.
Les limites de l’app s’appliquent : GIF jusqu’à 15 Mo, vidéos selon l’abonnement en taille et en durée, GIF par jour, GIF privés, points vidéo par semaine. Sinon tu reçois 409, 413 ou 429.
Paramètres Nom Type Signification kinddans le corps stringobligatoire gif ou video ; par défaut gif.gifvideosizedans le corps integerobligatoire La taille du fichier entier en octets. namedans le corps stringobligatoire Le nom sous lequel on le trouve : 2 à 40 caractères. keywordsdans le corps stringfacultatif Mots-clés pour la recherche, séparés par des espaces. shareddans le corps booleanfacultatif true : partagé avec tout le monde sur tellmelo.anywheredans le corps booleanfacultatif true : partagé et aussi autorisé sur d’autres sites web. Uniquement avec shared.
Exemple de requête 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"Réponse Répond avec un UploadStarted .
Exemple {
"upload": "e7c1a2b3-4d5e-4f60-8a9b-0c1d2e3f4a5b",
"piece": 4194304
}Statuts possibles : 200400401403429
PUT /v2/media/uploads/{upload}Envoyer un morceau du fichier.
Le corps est le morceau lui-même (application/octet-stream), pas du JSON. S’il ne fait pas suite, tu reçois 409 avec received : reprends à partir de là. Après le dernier morceau, le fichier est converti ; la réponse contient alors item.
Paramètres Nom Type Signification uploaddans le chemin stringobligatoire L’upload reçu au début. offsetdans l’adresse integerobligatoire Où le morceau commence dans le fichier, en octets ; 0 pour le premier.
Exemple de requête 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"Réponse Répond avec un UploadPiece .
Exemple {
"received": 4194304,
"item": null
}Statuts possibles : 200400401403404429
POST /v2/media/{id}Modifier un de tes GIF ou une de tes vidéos.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’ID du GIF ou de la vidéo. namedans le corps stringfacultatif Le nom sous lequel on le trouve : 2 à 40 caractères. keywordsdans le corps stringfacultatif Mots-clés pour la recherche, séparés par des espaces. shareddans le corps booleanfacultatif true : partagé avec tout le monde sur tellmelo.anywheredans le corps booleanfacultatif true : partagé et aussi autorisé sur d’autres sites web. Uniquement avec shared.
Exemple de requête 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"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
DELETE /v2/media/{id}Supprimer un de tes GIF ou une de tes vidéos.
Les publications qui l’affichent déjà le gardent. Sur d’autres sites web, il disparaît en quelques minutes.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’ID du GIF ou de la vidéo.
Exemple de requête curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/media/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
Ton compte Ton profil, ton fil, tes propres emojis et tes webhooks.
GET /v2/meTon propre profil, avec l’id que les autres chemins attendent.
Droit read avec ETag depuis v2.0 Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me"Réponse Répond avec un Profile .
Exemple {
"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
}Statuts possibles : 200304401429
GET /v2/feedTon propre fil, tel que l’application le compose.
Droit read paginé depuis v2.0 Pas d’ETag, car l’ordre change sans cesse. Une liste commencée reste la même jusqu’au bout.
Paramètres Nom Type Signification tabdans l’adresse stringfacultatif Quel fil : for-you, following, latest ou bookmarks. latest par défaut.for-youfollowinglatestbookmarks tagdans l’adresse stringfacultatif Seulement les publications sur ce tag : écrites avec lui ou dans lesquelles le serveur le reconnaît. Sans lui, aucun filtre. limitdans l’adresse integerfacultatif Entrées par page : 20 par défaut, 50 au plus. cursordans l’adresse stringfacultatif Le next de la réponse précédente. Sans lui, depuis le début.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/feed?tab=following&limit=20"Réponse Répond avec une page de Post , sous forme de `items` et `next`.
Exemple {
"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"
}Statuts possibles : 200400401429
POST /v2/me/picturesTéléverser une image, sous forme d’octets. Répond avec id et url ; tu utilises ensuite l’id comme photo de profil, bannière ou dans une publication.
PNG, JPEG, WebP ou GIF, reconnu à ses premiers octets ; réenregistré sans métadonnées. Une image utilisée nulle part est supprimée plus tard.
Exemple de requête 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"Réponse Répond avec un Picture .
Exemple {
"id": "8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9"
}Statuts possibles : 200401403429
PUT /v2/me/profileModifier ton profil : nom, à propos, photo de profil, bannière et couleur du profil. Ce que tu n’indiques pas reste inchangé.
Droit profile depuis v2.19 Nécessite la permission profile. Ton @nom reste dans l’app : c’est aussi ton identifiant de connexion.
Paramètres Nom Type Signification namedans le corps stringfacultatif Le nom affiché, 60 caractères au plus. aboutdans le corps stringfacultatif Le texte « À propos ». avatardans le corps stringfacultatif L’id d’une image téléversée comme photo de profil. Vide la retire. bannerdans le corps stringfacultatif L’id d’une image téléversée comme bannière. Vide la retire. colordans le corps stringfacultatif La couleur du profil, avec un abonnement. null la retire.indigovioletrosecoralamberlimegreentealskyslatesandnight
Exemple de requête 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"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403429
GET /v2/me/emojisTes propres emojis.
Droit read avec ETag depuis v2.19 Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/emojis"Réponse Répond avec une page de OwnEmoji , sous forme de `items` et `next`.
Exemple {
"items": [
{
"name": "sunflower",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false,
"resting": false
}
],
"next": null
}Statuts possibles : 200304401429
POST /v2/me/emojis/picturesTéléverser l’image d’un emoji à toi, sous forme d’octets.
Droit profile depuis v2.19 Les emojis animés nécessitent un abonnement. Trop lourde après conversion, l’image est refusée.
Exemple de requête 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"Réponse Répond avec un EmojiPicture .
Exemple {
"id": "8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false
}Statuts possibles : 200401403429
POST /v2/me/emojisCréer un emoji à toi. Répond avec tous tes emojis.
Droit profile depuis v2.19 Le nombre d’emojis que tu peux créer dépend de ton abonnement.
Paramètres Nom Type Signification namedans le corps stringobligatoire Le nom avec lequel tu écris l’emoji, sous la forme :nom:. picturedans le corps stringobligatoire L’id de POST /me/emojis/pictures.
Exemple de requête 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"Réponse Répond avec une page de OwnEmoji , sous forme de `items` et `next`.
Exemple {
"items": [
{
"name": "sunflower",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false,
"resting": false
}
],
"next": null
}Statuts possibles : 200400401403429
DELETE /v2/me/emojis/{name}Retirer un emoji à toi. Répond avec les autres.
Droit profile depuis v2.19 Paramètres Nom Type Signification namedans le chemin stringobligatoire Le nom de l’emoji, sans deux-points.
Exemple de requête curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/emojis/sunflower"Réponse Répond avec une page de OwnEmoji , sous forme de `items` et `next`.
Exemple {
"items": [
{
"name": "sunflower",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false,
"resting": false
}
],
"next": null
}Statuts possibles : 200400401403404429
PUT /v2/me/emojis/sharingDécider si tes abonnés peuvent utiliser tes emojis dans leurs propres textes.
Droit profile depuis v2.19 Paramètres Nom Type Signification shareddans le corps booleanobligatoire true partage tes emojis avec tes abonnés, false non.
Exemple de requête curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"shared":true}' \
"https://api.tellmelo.com/v2/me/emojis/sharing"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403429
GET /v2/me/webhooksTes webhooks avec leur état.
Droit webhooks avec ETag depuis v2.19 Nécessite la permission webhooks. Les webhooks viennent avec un abonnement organisation ou en tant que partenaire.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/webhooks"Réponse Répond avec une page de Webhook , sous forme de `items` et `next`.
Exemple {
"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
}Statuts possibles : 200304401403429
POST /v2/me/webhooksCréer un webhook. Répond avec l’id et le secret des signatures, cette fois seulement.
Droit webhooks depuis v2.19 Chaque envoi est signé avec le secret (X-Tellmelo-Signature). Garde-le ; il ne sera plus affiché.
Paramètres Nom Type Signification urldans le corps stringobligatoire Une adresse HTTPS hors réseaux locaux, sans identifiants. kindsdans le corps string[]obligatoire Ce dont le webhook est averti. Les types qui te sont ouverts dépendent de ton abonnement et de ton partenariat.replymentiongroup_mentionfollowlikerepostmessagequota_changedquota_giftdrop_claimeddrop_empty
Exemple de requête 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"Réponse Répond avec un WebhookCreated .
Exemple {
"id": "1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b",
"secret": "whsec_3f9a…"
}Statuts possibles : 200400401403429
DELETE /v2/me/webhooks/{id}Supprimer un webhook.
Droit webhooks depuis v2.19 Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id du webhook.
Exemple de requête curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/webhooks/1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
POST /v2/me/webhooks/{id}/testEnvoyer un test à un webhook.
Droit webhooks depuis v2.19 Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id du webhook.
Exemple de requête curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/webhooks/1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b/test"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
Notifications Ce qui s’est passé autour de ton compte, page par page.
GET /v2/notificationsTes notifications, les plus récentes d’abord.
Droit read paginé avec ETag depuis v2.0 Lire ne marque rien comme lu ; c’est POST /notifications/read qui le fait. Les événements du même type sur la même publication tiennent sur une ligne ; more dit combien.
Paramètres Nom Type Signification limitdans l’adresse integerfacultatif Entrées par page : 20 par défaut, 50 au plus. cursordans l’adresse stringfacultatif Le next de la réponse précédente. Sans lui, depuis le début.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/notifications?limit=20"Réponse Répond avec une page de Notification , sous forme de `items` et `next`.
Exemple {
"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"
}Statuts possibles : 200304401429
POST /v2/notifications/readMarquer tes notifications comme lues.
Exemple de requête curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/notifications/read"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200401403429
Messages Ta boîte et tes conversations. Une conversation porte le nom de l’autre compte.
GET /v2/conversationsTa boîte : une ligne par conversation, la plus récente d’abord.
Droit read paginé avec ETag depuis v2.0 Paramètres Nom Type Signification limitdans l’adresse integerfacultatif Entrées par page : 20 par défaut, 50 au plus. cursordans l’adresse stringfacultatif Le next de la réponse précédente. Sans lui, depuis le début.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/conversations?limit=20"Réponse Répond avec une page de Conversation , sous forme de `items` et `next`.
Exemple {
"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"
}Statuts possibles : 200304401429
GET /v2/conversations/{with}/messagesLes messages d’une conversation, les plus récents d’abord.
Droit read paginé avec ETag depuis v2.0 Lire ne marque rien comme lu ; c’est POST /conversations/{with}/read qui le fait.
Paramètres Nom Type Signification withdans le chemin stringobligatoire L’id de l’autre compte. Une conversation n’a pas d’id propre. limitdans l’adresse integerfacultatif Entrées par page : 20 par défaut, 50 au plus. cursordans l’adresse stringfacultatif Le next de la réponse précédente. Sans lui, depuis le début.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/conversations/a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05/messages?limit=20"Réponse Répond avec une page de Message , sous forme de `items` et `next`.
Exemple {
"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"
}Statuts possibles : 200304400401404429
POST /v2/conversations/{with}/messagesEnvoyer un message dans une conversation.
Les règles de l’app s’appliquent : qui t’a bloqué est injoignable, et les réglages de l’autre personne comptent.
Les images, GIF et vidéos ne peuvent pas être joints aux messages via l’API, seulement dans l’app.
Paramètres Nom Type Signification withdans le chemin stringobligatoire L’id de l’autre compte. Une conversation n’a pas d’id propre. textdans le corps stringobligatoire Le texte de la publication, de la réponse ou du message. replyTodans le corps stringfacultatif L’id d’un message précédent de cette conversation auquel celui-ci répond. Depuis 2.2.
Exemple de requête 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"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
POST /v2/conversations/{with}/readMarquer tous les messages d’une conversation comme lus.
Paramètres Nom Type Signification withdans le chemin stringobligatoire L’id de l’autre compte. Une conversation n’a pas d’id propre.
Exemple de requête curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/conversations/a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05/read"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
DELETE /v2/conversations/{with}/messages/{id}Supprimer un de tes messages.
Seulement tes propres messages, et seulement dans les 24 heures après l’envoi.
Paramètres Nom Type Signification withdans le chemin stringobligatoire L’id de l’autre compte. Une conversation n’a pas d’id propre. iddans le chemin stringobligatoire L’identifiant du message.
Exemple de requête 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"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
POST /v2/conversations/{with}/plannedProgrammer un message pour plus tard. Répond avec l’id du message programmé.
Nécessite un abonnement avec les messages programmés, sinon 403. Avec le chiffrement de bout en bout des deux côtés, cela ne marche que dans l’app.
Paramètres Nom Type Signification withdans le chemin stringobligatoire L’id de l’autre compte. Une conversation n’a pas d’id propre. textdans le corps stringobligatoire Le texte de la publication, de la réponse ou du message. sendAtdans le corps integerobligatoire Quand le message est envoyé, en millisecondes depuis 1970.
Exemple de requête 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"Réponse Répond avec un Made .
Exemple {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Statuts possibles : 200400401403404429
GET /v2/me/planned-messagesTes messages encore à envoyer, dans l’ordre de leur heure.
Droit read avec ETag depuis v2.19 Paramètres Nom Type Signification withdans l’adresse stringfacultatif Seulement les messages pour ce compte (son id).
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/planned-messages"Réponse Répond avec une page de PlannedMessage , sous forme de `items` et `next`.
Exemple {
"items": [
{
"id": "3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9",
"to": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"text": "Happy birthday! 🎂",
"sendAt": 1758710400000,
"state": "waiting"
}
],
"next": null
}Statuts possibles : 200304401429
POST /v2/me/planned-messages/{id}/sendEnvoyer maintenant un message programmé retenu ou en échec.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id du message programmé.
Exemple de requête curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/planned-messages/3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9/send"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
DELETE /v2/me/planned-messages/{id}Supprimer un message programmé avant son envoi.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id du message programmé.
Exemple de requête curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/planned-messages/3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
Relations J’aime, enregistrer, partager, suivre, rejoindre, bloquer : un seul chemin, activé et retiré avec active. Depuis 2.19 aussi les listes : abonnés, abonnements et tes propres blocages et masquages.
POST /v2/relationsAimer, garder, partager, suivre, rejoindre, bloquer, masquer, selon kind.
target est une publication pour like, save et repost, un groupe pour join, un compte pour follow, block et mute. active: false retire la relation.
Paramètres Nom Type Signification kinddans le corps stringobligatoire Quelle relation : like, save, repost, follow, join, block ou mute (depuis 2.2).likesaverepostfollowjoinblockmute targetdans le corps stringobligatoire L’id de la publication, du profil ou du groupe, selon kind. activedans le corps booleanfacultatif true l’établit, false la retire.
Exemple de requête 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"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403429
GET /v2/profiles/{handle}/followersQui suit un profil, les plus récents d’abord.
Droit read paginé avec ETag depuis v2.19 Paramètres Nom Type Signification handledans le chemin stringobligatoire L’identifiant court d’un profil, majuscules ou minuscules indifféremment. limitdans l’adresse integerfacultatif Entrées par page : 20 par défaut, 50 au plus. cursordans l’adresse stringfacultatif Le next de la réponse précédente. Sans lui, depuis le début.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/profiles/mara/followers?limit=20"Réponse Répond avec une page de ProfileBrief , sous forme de `items` et `next`.
Exemple {
"items": [
{
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}Statuts possibles : 200304400401404429
GET /v2/profiles/{handle}/followingQui un profil suit, les plus récents d’abord.
Droit read paginé avec ETag depuis v2.19 Paramètres Nom Type Signification handledans le chemin stringobligatoire L’identifiant court d’un profil, majuscules ou minuscules indifféremment. limitdans l’adresse integerfacultatif Entrées par page : 20 par défaut, 50 au plus. cursordans l’adresse stringfacultatif Le next de la réponse précédente. Sans lui, depuis le début.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/profiles/mara/following?limit=20"Réponse Répond avec une page de ProfileBrief , sous forme de `items` et `next`.
Exemple {
"items": [
{
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}Statuts possibles : 200304400401404429
GET /v2/me/relationsQui tu as bloqué, masqué ou bloqué pour les messages seulement, les plus récents d’abord.
Droit read paginé avec ETag depuis v2.19 Seulement tes propres listes. Activer et retirer passe par POST /relations.
Paramètres Nom Type Signification kinddans l’adresse stringobligatoire block bloqués, mute masqués, dm_block bloqués pour les messages seulement.blockmutedm_blocklimitdans l’adresse integerfacultatif Entrées par page : 20 par défaut, 50 au plus. cursordans l’adresse stringfacultatif Le next de la réponse précédente. Sans lui, depuis le début.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/relations?kind=mute&limit=20"Réponse Répond avec une page de ProfileBrief , sous forme de `items` et `next`.
Exemple {
"items": [
{
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}Statuts possibles : 200304400401429
Collections Range les publications enregistrées dans tes propres collections. Une publication peut être dans plusieurs ; retirée d’une collection, elle reste enregistrée.
GET /v2/me/collectionsTes collections avec le nombre de leurs publications.
Droit read avec ETag depuis v2.19 Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/collections"Réponse Répond avec une page de Collection , sous forme de `items` et `next`.
Exemple {
"items": [
{
"id": "6d5c4b3a-2918-4e7f-a1b2-c3d4e5f60718",
"name": "Recipes",
"count": 12
}
],
"next": null
}Statuts possibles : 200304401429
POST /v2/me/collectionsCréer une collection. Répond avec son id.
Le nombre de collections que tu peux créer dépend de ton abonnement.
Paramètres Nom Type Signification namedans le corps stringobligatoire Le nom, 40 caractères au plus. Unique par compte, sans tenir compte de la casse.
Exemple de requête curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"Recipes"}' \
"https://api.tellmelo.com/v2/me/collections"Réponse Répond avec un Made .
Exemple {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Statuts possibles : 200400401403429
PUT /v2/me/collections/{id}Renommer une collection.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id de la collection. namedans le corps stringobligatoire Le nom, 40 caractères au plus. Unique par compte, sans tenir compte de la casse.
Exemple de requête 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"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
DELETE /v2/me/collections/{id}Supprimer une collection.
Les publications qu’elle contient restent enregistrées.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id de la collection.
Exemple de requête curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/collections/6d5c4b3a-2918-4e7f-a1b2-c3d4e5f60718"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
GET /v2/me/collections/{id}/postsLes publications d’une collection, comme dans l’onglet des enregistrements.
Droit read paginé depuis v2.19 Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id de la collection. limitdans l’adresse integerfacultatif Entrées par page : 20 par défaut, 50 au plus. cursordans l’adresse stringfacultatif Le next de la réponse précédente. Sans lui, depuis le début.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/collections/6d5c4b3a-2918-4e7f-a1b2-c3d4e5f60718/posts?limit=20"Réponse Répond avec une page de Post , sous forme de `items` et `next`.
Exemple {
"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"
}Statuts possibles : 200400401404429
POST /v2/me/collections/{id}/postsMettre une publication dans une collection ou l’en retirer.
Mettre une publication l’enregistre aussi. Publications visibles seulement.
Paramètres Nom Type Signification iddans le chemin stringobligatoire L’id de la collection. postdans le corps stringobligatoire L’id de la publication. insidedans le corps booleanfacultatif true met la publication (par défaut), false la retire.
Exemple de requête 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"Réponse Répond avec un Ok .
Exemple {
"ok": true
}Statuts possibles : 200400401403404429
Cadeaux Consulter le contingent d’un partenaire et offrir depuis celui-ci, mettre des cadeaux sous des publications et les suivre. Les récupérer reste réservé aux personnes, dans l’app.
GET /v2/partner/quotaCe qu’il reste à offrir dans ton contingent.
Droit read avec ETag depuis v2.12 Réservé aux partenaires avec un contingent ; les autres reçoivent 403.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/partner/quota"Réponse Répond avec un Quota .
Exemple {
"months": 120,
"sparks": 500,
"looks": [
{
"id": "frame-gold",
"name": "Goldring",
"kind": "frame",
"quantity": 25
}
]
}Statuts possibles : 200304401429
GET /v2/partner/giftsCe que tu as offert depuis ton contingent, à qui et quand – le plus récent d’abord.
Droit read paginé avec ETag depuis v2.12 Réservé aux partenaires avec un contingent ; les autres reçoivent 403.
Paramètres Nom Type Signification limitdans l’adresse integerfacultatif Entrées par page : 20 par défaut, 50 au plus. cursordans l’adresse stringfacultatif Le next de la réponse précédente. Sans lui, depuis le début.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/partner/gifts?limit=20"Réponse Répond avec une page de QuotaGift , sous forme de `items` et `next`.
Exemple {
"items": [
{
"item": "plan",
"quantity": 3,
"itemId": null,
"recipient": {
"handle": "jon",
"name": "Jon"
},
"createdAt": 1758627600000
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}Statuts possibles : 200304401429
POST /v2/partner/giftsOffrir des mois d’abonnement ou des étincelles de ton contingent à un membre.
Réservé aux partenaires avec un contingent ; les autres reçoivent 403.
Comme dans l’app, le membre voit de qui vient le cadeau. 60 cadeaux par heure au maximum.
Paramètres Nom Type Signification handledans le corps stringobligatoire Le @nom du membre à qui tu offres, avec ou sans @. itemdans le corps stringobligatoire plan pour des mois d’abonnement, sparks pour des étincelles, shop pour un look de ta réserve (depuis 2.13).plansparksshopquantitydans le corps integerfacultatif Combien : jusqu’à 12 mois ou 35 étincelles par cadeau. itemIddans le corps stringfacultatif Pour shop : l’ID du look, tel que looks l’indique dans le contingent. Un exemplaire par cadeau ; quantity ne s’applique alors pas.
Exemple de requête 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"Réponse Répond avec un Quota .
Exemple {
"months": 120,
"sparks": 500,
"looks": [
{
"id": "frame-gold",
"name": "Goldring",
"kind": "frame",
"quantity": 25
}
]
}Statuts possibles : 200400401403429
GET /v2/gift-dropsTes cadeaux sous des publications : combien de places restent libres et comment ils ont été payés.
Droit read paginé avec ETag depuis v2.12 Paramètres Nom Type Signification limitdans l’adresse integerfacultatif Entrées par page : 20 par défaut, 50 au plus. cursordans l’adresse stringfacultatif Le next de la réponse précédente. Sans lui, depuis le début.
Exemple de requête curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/gift-drops?limit=20"Réponse Répond avec une page de OwnGiftDrop , sous forme de `items` et `next`.
Exemple {
"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"
}Statuts possibles : 200304401429
POST /v2/gift-dropsPublier une publication avec des cadeaux à récupérer.
Gratuit pour le propriétaire et les membres de l’équipe qui en ont le droit, sinon pris sur ton contingent. Ce qui devrait être payé est refusé avec 422 – payer ne se fait que dans l’app.
Récupérer ne se fait que dans l’app, pour qu’aucun programme ne rafle toutes les places. Le nombre de places libres figure dans giftDrop de la publication.
Paramètres Nom Type Signification textdans le corps stringfacultatif Le texte de la publication, de la réponse ou du message. communitydans le corps stringfacultatif L’id du groupe dont le salon du fil reçoit la publication ; il doit être activé et tu dois en avoir le droit. Sans lui, la publication n’est dans aucun groupe. itemdans le corps stringobligatoire plan pour des mois d’abonnement, sparks pour des étincelles.plansparksquantitydans le corps integerobligatoire Ce que contient chaque place : jusqu’à 12 mois ou 35 étincelles. placesdans le corps integerobligatoire Pour combien de personnes, jusqu’à 10 000. audiencedans le corps stringfacultatif Qui peut récupérer : all tout le monde, followers seulement tes abonnés, group seulement les membres du groupe (uniquement avec community).allfollowersgroup newAccountsdans le corps booleanfacultatif true permet aussi aux comptes de moins de 7 jours de récupérer. Sans ce paramètre, ils sont exclus.
Exemple de requête 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"Réponse Répond avec un DropCreated .
Exemple {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"funding": "quota"
}Statuts possibles : 200400401403429
Objets Tous les objets, champ par champ. [] signifie liste.
ServiceLa réponse de la racine : qui répond, et ce que cette clé peut faire.
Champ Type Signification namestringToujours tellmelo. versionstringLa version de l’API, par exemple 2.1. scopestringCe que cette clé peut faire : read ou read write. rateLimitRateLimitLe quota de cette clé. docsstringOù se trouve cette documentation, comme chemin sur cette instance. specstringOù se trouve la description lisible par machine.
Exemple {
"name": "tellmelo",
"version": "2.20",
"scope": "read write",
"rateLimit": {
"limit": 120,
"remaining": 117
},
"docs": "/developers/docs",
"spec": "/api/v2/openapi.json"
}RateLimitLe quota de cette clé dans la minute en cours.
Champ Type Signification limitintegerRequêtes par minute. remainingintegerCombien il en reste dans cette minute.
Exemple {
"limit": 120,
"remaining": 117
}PostUne publication, sous la même forme partout.
Champ Type Signification idstringL’identifiant de la publication. textstringou null Le texte tel qu’écrit (null pour une publication qui n’est qu’un sondage ou que des images). kindstringCe qu’est la publication.post — Une publication avec du texte, des images ou une citation.poll — Une publication avec un sondage. authorProfileBriefQui l’a écrite. communityCommunityBriefou null Le groupe où elle a été écrite (null hors de tout groupe). mediaMedia[]Ses images, dans l’ordre ; vide s’il n’y en a pas. pollPollou null Le sondage (null s’il n’y en a pas). quotesstringou null L’identifiant de la publication que celle-ci cite. continuesstringou null L’identifiant de la publication que celle-ci prolonge, comme complément. countsCountsRéponses, mentions J’aime et republications. pinnedbooleanSi elle est épinglée en haut du profil de son auteur. giftDropGiftDropou null Les cadeaux à récupérer sous la publication (null s’il n’y en a pas). createdAtintegerQuand elle a été écrite.
Exemple {
"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
}ReplyUne réponse sous une publication : une publication avec deux champs de plus.
Chaque champ de Post , et en plus :
Champ Type Signification postIdstringLa publication à laquelle toute la conversation est rattachée. parentIdstringou null La réponse à laquelle celle-ci répond (null si elle répond directement à la publication).
Exemple {
"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
}ReplyVoteTon vote sur une réponse et son score.
Champ Type Signification votestringTon vote.up — Pour.down — Contre.none — Pas de vote. scoreintegerVotes pour moins votes contre, aussi en dessous de zéro.
Exemple {
"vote": "up",
"score": 12
}PlannedReplyUne de tes réponses programmée pour plus tard.
Champ Type Signification idstringL’id de la réponse programmée. parentIdstringou null La réponse à laquelle elle répondra (null si elle répond directement à la publication). textstringLe texte. publishAtintegerQuand elle paraît. statestringSon état.waiting — Attend son heure.failed — N’a pas pu être envoyée, par exemple parce que la publication n’existe plus.
Exemple {
"id": "3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9",
"parentId": null,
"text": "Count me in for Saturday!",
"publishAt": 1758710400000,
"state": "waiting"
}ReplySettingsLes réglages de réponse d’une de tes publications.
Champ Type Signification audiencestringQui peut répondre.all — Tout le monde.following — Les comptes que tu suis.mentioned — Les personnes mentionnées dans la publication.nobody — Personne d’autre que toi. approvalbooleanSi les réponses attendent ta validation. slowstringLe mode lent.auto — S’active tout seul quand beaucoup de réponses arrivent.on — Toujours actif.off — Désactivé.
Exemple {
"audience": "following",
"approval": false,
"slow": "auto"
}CountsCombien de réponses, de mentions J’aime et de republications a une publication.
Champ Type Signification repliesintegerLes réponses, tous niveaux confondus. likesintegerLes mentions J’aime. repostsintegerLes republications.
Exemple {
"replies": 4,
"likes": 31,
"reposts": 2
}PollLe sondage d’une publication.
Champ Type Signification optionsPollOption[]Les réponses, dans l’ordre. option d’un vote compte à partir de 0. totalintegerTous les votes ensemble, toujours présent. multiplebooleanSi l’on peut choisir plus d’une réponse. endsAtintegerou null Quand le sondage se termine (null s’il n’a pas de fin). runningbooleanSi l’on peut encore voter. resultsVisiblebooleanSi les voix par réponse sont montrées (voir votes). myVotesinteger[]Les réponses que tu as choisies, comptées à partir de 0.
Exemple {
"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
]
}PollOptionUne réponse d’un sondage.
Champ Type Signification textstringLa réponse. votesintegerou null Ses voix (null tant que le résultat est retenu).
Exemple {
"text": "Lavender",
"votes": 12
}ProfileBriefUn profil tel qu’il apparaît dans d’autres objets : comme auteur, dans une recherche.
Champ Type Signification idstringL’identifiant du compte : ce qu’attendent /relations et /conversations/{with}. handlestringLe nom court, sans @, écrit comme le membre l’a choisi. namestringLe nom affiché. Il peut contenir des émojis, y compris :name:. verifiedbooleanSi le compte est vérifié. accountKindstringQuel genre de compte c’est.person — Une personne.business — Une entreprise.association — Une association.automated — Un compte automatisé, comme un bot.bot — Un bot de groupes, piloté par un programme avec sa propre clé (depuis 2.18).
Exemple {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
}ProfileUn profil seul, avec sa description et ses abonnés.
Chaque champ de ProfileBrief , et en plus :
Champ Type Signification aboutstringou null La description (null s’il n’y en a pas). websitestringou null Le site web du profil (null s’il n’y en a pas). Depuis 2.3. websiteVerifiedbooleanSi le site renvoie vers ce profil avec rel=me, vérifié chaque semaine. Depuis 2.3. followersintegerCombien de comptes le suivent. createdAtintegerou null Quand le compte a été créé (null tant que le membre masque la date d’inscription ; depuis 2.9).
Exemple {
"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
}MembershipCe que ton compte est et peut faire dans le groupe.
Champ Type Signification leaderstringou null Si tu as fondé le groupe ou le co-diriges ; null sinon.founder — Fondé.manager — Co-direction. rolesstring[]Les id de tes rôles, le plus haut d’abord. permissionsstring[]Ce que tu peux faire dans le groupe. mutedUntilintegerou null Jusqu’à quand une exclusion temporaire te réduit au silence ici ; null sinon.
Exemple {
"leader": null,
"roles": [
"4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8"
],
"permissions": [
"attach",
"invite",
"send",
"view"
],
"mutedUntil": null
}PersonUn membre, en bref.
Champ Type Signification idstringL’id du compte. handlestringLe nom d’utilisateur, sans @. namestringLe nom affiché. botbooleanSi le compte est un bot (depuis 2.18).
Exemple {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"bot": false
}ChannelUn salon d’un groupe.
Champ Type Signification idstringL’id. kindstringLe type de salon.feed — Le salon du fil, dont les publications figurent aussi dans le fil public.chat — Une discussion.voice — Un salon vocal ; on n’y parle que dans l’app.hub — L’accueil du groupe : sa page qui le présente. Toujours là, sans messages. namestringou null Le nom sans # ; null pour le nom que l’app donne dans chaque langue. topicstringLe sujet ; vide s’il n’y en a pas. categoryChannelCategoryou null La catégorie ; null sans catégorie. unreadintegerCombien de messages des autres tu n’as pas encore lus, jusqu’à 100. permissionsstring[]Ce que tu peux faire dans ce salon. symbolChannelSymbolSon symbole ; la forme est déjà celle du groupe s’il en fixe une.
Exemple {
"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"
}
}ChannelCategoryLa catégorie dans laquelle se trouve un salon.
Champ Type Signification idstringL’id. namestringLe nom. symbolChannelSymbolSon symbole.
Exemple {
"id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
"name": "Garden",
"symbol": {
"emoji": null,
"icon": null,
"image": null,
"color": null,
"shape": null
}
}ChannelSymbolLe symbole d’un salon ou d’une catégorie : au plus un emoji, un symbole ou une image, sinon le signe de son type.
Champ Type Signification emojistringou null L’emoji ; null sinon. iconstringou null Le nom du symbole du jeu de l’app ; null sinon. imagestringou null L’adresse de l’image propre ; null sinon. colorstringou null La couleur de la vignette ; null pour celle de son type. shapestringou null La forme de la vignette ; null pour un cercle.
Exemple {
"emoji": "🌻",
"icon": null,
"image": null,
"color": "amber",
"shape": "circle"
}ChannelMessageUn message dans un salon de discussion.
Champ Type Signification idstringL’id. textstringou null Le texte (null pour un message composé seulement d’images ou de voix). authorPersonQui l’a écrit. mediaMedia[]Ses images et messages vocaux ; vide s’il n’y en a pas. replyTostringou null L’id du message auquel il répond ; null sinon. roleColorstringou null La couleur du rôle le plus élevé de l’auteur qui en a une ; null sinon. threadOfstringou null Le message dans le fil duquel celui-ci répond ; null dans le chat. threadCountintegerCombien de réponses compte le fil de ce message. cardobjectou null La carte d’un bot : title, text, color et fields ; sinon null. buttonsobject[]Les boutons d’un bot : chacun id, label et style. createdAtintegerQuand il a été écrit.
Exemple {
"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
}RoleUn rôle d’un groupe.
Champ Type Signification idstringL’id. namestringou null Le nom ; null pour @everyone. everyonebooleanS’il s’agit de @everyone, le rôle de tous les membres. colorstringou null La couleur : indigo, violet, rose, amber, green ou teal ; null sans couleur. permissionsstring[]Ses droits. membersintegerCombien l’ont ; pour @everyone tous les membres. editablebooleanSi ton compte peut le modifier. selfablebooleanSi les membres prennent et retirent le rôle eux-mêmes.
Exemple {
"id": "4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8",
"name": "Gardeners",
"everyone": false,
"color": "green",
"permissions": [
"attach",
"invite",
"send",
"view"
],
"members": 24,
"editable": true,
"selfable": false
}GroupMemberUn membre d’un groupe avec ses rôles.
Chaque champ de Person , et en plus :
Champ Type Signification leaderstringou null Si le membre a fondé le groupe ou le co-dirige ; null sinon.founder — Fondé.manager — Co-direction. rolesstring[]Les id de ses rôles, le plus haut d’abord. mutedUntilintegerou null Jusqu’à quand une exclusion temporaire réduit le membre au silence, si ton compte peut en donner ; sinon null.
Exemple {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"bot": false,
"leader": null,
"roles": [
"4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8"
],
"mutedUntil": null
}ChannelOverrideCe qu’un rôle peut faire autrement dans un salon que dans le groupe.
Champ Type Signification rolestringL’id du rôle. allowstring[]Ce qu’il peut faire en plus ici. denystring[]Ce qu’il ne peut pas faire ici.
Exemple {
"role": "4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8",
"allow": [
"send"
],
"deny": []
}BellLa cloche d’un groupe.
Champ Type Signification levelstringQuelles notifications arrivent.all — Chaque nouvelle publication du salon du fil, plus @everyone.important — Les publications de la direction dans le salon du fil, plus @everyone.off — Rien, sauf si tu es mentionné·e avec @nom.
Exemple {
"level": "important"
}InviteLinkUn lien d’invitation d’un groupe.
Champ Type Signification codestringLe code. urlstringL’adresse à partager. createdByPersonou null Qui l’a créé ; null si le compte est supprimé. createdAtintegerQuand il a été créé. expiresAtintegerou null Jusqu’à quand il est valable ; null sans fin. usesintegerCombien de fois il a servi. maxUsesintegerou null Combien de fois il peut servir ; null sans limite.
Exemple {
"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
}InvitePreviewOù mène un lien d’invitation.
Champ Type Signification communityInviteGroupLe groupe. memberbooleanSi ton compte est déjà membre.
Exemple {
"community": {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening",
"members": 312,
"rules": [
"Be kind.",
"No advertising."
]
},
"member": false
}InviteGroupLe groupe derrière un lien d’invitation.
Champ Type Signification idstringL’id. namestringLe nom. membersintegerCombien de membres il compte. rulesstring[]Ses règles, acceptées en rejoignant ; vide s’il n’y en a pas.
Exemple {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening",
"members": 312,
"rules": [
"Be kind.",
"No advertising."
]
}JoinedL’adhésion avec un lien d’invitation.
Champ Type Signification communitystringL’id du groupe.
Exemple {
"community": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60"
}LogEntryUne entrée du journal de la direction.
Champ Type Signification idstringL’id. actionstringCe qui s’est passé.post_removed — Une publication.member_removed — Un membre retiré, avant 2.16 (exclu pendant 90 jours).message_removed — Un message dans un salon de discussion.member_kicked — Une expulsion.member_banned — Un bannissement.member_unbanned — Un bannissement levé.member_timed_out — Une exclusion temporaire.timeout_lifted — Une exclusion temporaire levée.voice_muted — Rendu muet dans un salon vocal.voice_removed — Déconnecté d’un salon vocal.bot_added — Un bot a été ajouté au groupe (depuis 2.18).bot_removed — Un bot a été retiré du groupe (depuis 2.18). memberPersonQui était concerné. reasonstringLa raison ; vide pour les messages et quand aucune n’a été donnée. bystringou null Le nom de qui l’a fait ; null si le compte est supprimé. createdAtintegerQuand.
Exemple {
"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
}BanUn bannissement d’un groupe.
Champ Type Signification memberPersonQui est banni. untilintegerou null Jusqu’à quand ; null jusqu’à ce qu’il soit levé. createdAtintegerou null Depuis quand ; null pour les bannissements d’avant 2.16. bystringou null Le nom de qui a banni ; null si inconnu.
Exemple {
"member": {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"bot": false
},
"until": 1759228800000,
"createdAt": 1758624000000,
"by": "Mara 🌻"
}UntilQuand une exclusion temporaire ou un bannissement prend fin.
Champ Type Signification untilintegerou null Le moment ; null pour un bannissement sans fin ou une exclusion levée.
Exemple {
"until": 1758624600000
}TagUn tag et combien de publications le portent.
Champ Type Signification tagstringLe tag, sans #. postsintegerCombien de publications récentes le portent.
Exemple {
"tag": "garden",
"posts": 58
}SearchResultTrois listes, éventuellement vides.
Champ Type Signification postsPost[]Les publications trouvées, les plus récentes d’abord. profilesProfileBrief[]Les profils trouvés, par nom court. tagsTag[]Les tags trouvés, les plus utilisés d’abord.
Exemple {
"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
}
]
}EmojiUn émoji de cette instance.
Champ Type Signification namestringLe nom, tel qu’il figure entre les deux-points. urlstringL’adresse de l’image, relative à cette instance.
Exemple {
"name": "tellmelo",
"url": "/api/media?id=e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b"
}NotificationUne notification. Une ligne peut regrouper plusieurs évènements du même type.
Champ Type Signification idstringL’identifiant de la notification. kindstringCe qui s’est passé.reply — Quelqu’un t’a répondu.like — Quelqu’un aime ta publication.reply_like — Quelqu’un vote pour ta réponse.duel — Quelqu’un te défie au Duel de publications, ou ton défi a été joué.reply_pick — L’auteur d’une publication met ta réponse en avant.repost — Quelqu’un a republié ta publication.follow — Quelqu’un te suit.mention — Quelqu’un t’a mentionné.group_mention — Quelqu’un a mentionné un groupe que tu diriges ; text est son nom.channel_mention — Quelqu’un t’a mentionné·e dans un salon de discussion d’un de tes groupes, @everyone compris ; le membre est l’actor, la phrase nomme le salon et le groupe, jamais le message.message — Quelqu’un t’a écrit un message.scheduled — Une de tes publications programmées est parue.video — Une de tes publications qui attendait sa vidéo est parue ou est redevenue un brouillon.reminder — Un rappel sur une publication enregistrée est arrivé.report — Ce qu’est devenu un signalement que tu as envoyé.moderation — Une décision sur ton compte : un avertissement, une restriction, un recours.team — Nouveau travail pour l’équipe (propriétaires, admins et modérateurs uniquement).reward — Une récompense d’invitation risque de disparaître ou a disparu.gift — Un cadeau de l’équipe : un abonnement, ou des étincelles pour toi ou pour un groupe que tu animes.present — Un cadeau d’un membre : des étincelles ou du temps d’abonnement ; le membre est l’actor.spark — Des étincelles expirent bientôt, ou un groupe que vous dirigez n’a plus assez d’étincelles pour ses avantages.loyalty — À propos du rythme de fidélité : une semaine active compte ou il lui manque un jour, une récompense est nouvelle ou risque de disparaître.impact — L’accueil de tes publications de douze heures après un jour, en une seule notification.discovery — Une invitation au programme Découvert, ou qu’une place y commence ou s’arrête.group_post — Une nouvelle publication dans un groupe dont la cloche sonne pour cela.group_moderation — La direction d’un groupe a retiré une de tes publications, ou toi, du groupe.group — Quelque chose qu’un membre a fait avec toi dans un groupe : t’inviter, t’accepter ou te refuser, te nommer co-administrateur, te transmettre le groupe ou le dissoudre, ou se porter candidat dans ton groupe ; le membre est l’actor, le nom du groupe termine la phrase.coauthor — Quelqu’un t’a invité comme coauteur d’une publication.partner — Un rappel du programme partenaire, ou la fin du badge partenaire.news — Un nouvel article dans une région que tu suis.pick — Une de tes publications est en lice pour la publication de la semaine ou de l’année, ou elle a gagné.advent — Une nouvelle case du calendrier de l’Avent est ouverte, une case a été ouverte ou celle du jour attend encore.team_message — Un message que l’équipe tellmelo a écrit à des membres choisis.challenge — Un nouveau défi de la semaine a commencé.nudge — Une seule fois : une publication à laquelle personne n’a encore répondu, ou le défi en cours.signin — Un ordinateur demande si tu es en train de t’y connecter. textstringou null Seulement pour les signalements et la modération : le texte associé, sinon null. actorActorQui l’a fait. postIdstringou null La publication concernée (null s’il n’y en a pas). readbooleanSi elle a été marquée comme lue. moreintegerPour combien d’autres évènements cette ligne compte, au-delà de celui qui est nommé. createdAtintegerQuand c’est arrivé la première fois. updatedAtintegerQuand elle a regroupé un évènement pour la dernière fois. La liste est triée ainsi.
Exemple {
"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
}ActorQui a déclenché une notification.
Champ Type Signification handlestringLe nom court. namestringLe nom affiché.
Exemple {
"handle": "jon",
"name": "Jon"
}ConversationUne ligne de ta boîte de réception.
Champ Type Signification withstringL’identifiant de l’autre compte : ce qu’attend /conversations/{with}/messages. handlestringSon nom court. namestringSon nom affiché. excerptstringou null Le début du dernier message (null s’il n’a pas de texte). truncatedbooleanSi l’extrait a été raccourci. fromMebooleanSi le dernier message est de toi. lastMessageIdstringL’identifiant du dernier message. unreadintegerCombien de ses messages tu n’as pas encore lus. updatedAtintegerQuand le dernier message a été écrit.
Exemple {
"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
}MessageUn message dans une conversation.
Champ Type Signification idstringL’identifiant du message. textstringou null Le texte (null pour un message qui n’est fait que d’images). fromstringL’identifiant du compte qui l’a écrit. tostringL’identifiant du compte à qui il a été écrit. readbooleanSi le destinataire l’a lu. mediaMedia[]Ses images ; vide s’il n’y en a pas. replyTostringou null L’id du message auquel celui-ci répond (null s’il ne répond à aucun). Depuis 2.2. createdAtintegerQuand il a été envoyé.
Exemple {
"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
}PlannedMessageUn de tes messages programmé pour plus tard.
Champ Type Signification idstringL’id du message programmé. tostringL’id du compte qui le reçoit. textstringou null Le texte, null avec le chiffrement de bout en bout. sendAtintegerQuand il est envoyé. statestringSon état.waiting — Attend son heure.held — Retenu car l’abonnement a pris fin. Tu peux l’envoyer toi-même ou le supprimer.failed — N’a pas pu être envoyé.
Exemple {
"id": "3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9",
"to": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"text": "Happy birthday! 🎂",
"sendAt": 1758710400000,
"state": "waiting"
}ScheduledPostUne de tes publications pas encore parue.
Champ Type Signification idstringL’identifiant de la publication. textstringou null Le texte. communityIdstringou null Le groupe où elle paraît (null hors des groupes). publishAtintegerou null Quand elle paraît (null tant qu’elle attend autre chose). deleteAtintegerou null Quand elle se supprime d’elle-même (null : jamais). waitingForstringCe qu’elle attend.time — Son heure.review — La validation d’un texte écrit pour relecture.check — La vérification par la modération automatique.payment — Le paiement de ses cadeaux. createdAtintegerQuand elle a été écrite.
Exemple {
"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
}CollectionUne collection de publications enregistrées.
Champ Type Signification idstringL’id de la collection. namestringSon nom. countintegerCombien de publications elle contient.
Exemple {
"id": "6d5c4b3a-2918-4e7f-a1b2-c3d4e5f60718",
"name": "Recipes",
"count": 12
}EventUn prochain événement d’un profil.
Champ Type Signification idstringL’id de l’événement. titlestringLe titre. startsAtintegerDébut. endsAtintegerou null Fin, null sans fin. placestringou null Le lieu. descriptionstringou null La description. signupsEventSignupsou null Les inscriptions, null sans inscription.
Exemple {
"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
}
}EventSignupsCombien de personnes se sont inscrites.
Champ Type Signification countintegerLe nombre d’inscriptions. goingbooleanSi tu es inscrit.
Exemple {
"count": 14,
"going": true
}EventSignupQuelqu’un qui s’est inscrit à un de tes événements.
Champ Type Signification idstringL’id du compte. handlestringL’identifiant. namestringLe nom affiché. atintegerQuand il s’est inscrit.
Exemple {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"at": 1758624000000
}PictureUne image téléversée.
Champ Type Signification idstringL’id de l’image. urlstringOù on peut la voir.
Exemple {
"id": "8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9"
}EmojiPictureL’image téléversée d’un emoji.
Champ Type Signification idstringL’id de l’image. urlstringOù on peut la voir. animatedbooleanSi elle bouge.
Exemple {
"id": "8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false
}OwnEmojiUn de tes propres emojis.
Champ Type Signification namestringSon nom. urlstringSon image. animatedbooleanS’il bouge. restingbooleanEn pause car l’abonnement permet moins d’emojis pour l’instant : il reste, mais n’est pas utilisable.
Exemple {
"name": "sunflower",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false,
"resting": false
}GroupEmojiUn emoji d’un groupe.
Champ Type Signification namestringSon nom. urlstringSon image. animatedbooleanS’il bouge.
Exemple {
"name": "seedling",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false
}BotEventUn événement dans un groupe du bot.
Champ Type Signification idstringSon numéro, croissant ; c’est avec lui qu’on continue (since, Last-Event-ID). typestringCe qui s’est passé.message.created — Un message a été écrit.message.deleted — Un message a été supprimé.member.joined — Quelqu’un a rejoint.member.left — Quelqu’un est parti ou a été retiré.voice.joined — Quelqu’un a rejoint un salon vocal.command — Quelqu’un a utilisé une commande du bot.interaction — Quelqu’un a appuyé sur un bouton d’un message du bot. communitystringLe groupe. channelstringou null Le salon ; null pour tout le groupe. createdAtintegerQuand c’est arrivé. dataobjectCe qui l’accompagne, selon le type : message, member (avec reason), command ou interaction.
Exemple {
"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
}
}
}BotCommandUne commande d’un bot.
Champ Type Signification namestringSon nom, sans « / ». descriptionstringCe qu’elle fait.
Exemple {
"name": "dice",
"description": "Rolls a die"
}VoiceSeatUne place dans un salon vocal.
Champ Type Signification urlstringL’adresse du serveur média (LiveKit). tokenstringLe jeton pour ce salon, valable quelques minutes. iceServersobject[]Les serveurs STUN et TURN pour la connexion. speakbooleanSi le bot peut y envoyer du son. videobooleanSi le bot peut y envoyer de la vidéo.
Exemple {
"url": "wss://voice.example.org",
"token": "eyJhbGciOiJIUzI1NiJ9…",
"iceServers": [
{
"urls": [
"stun:turn.example.org:3478"
]
}
],
"speak": true,
"video": false
}WebhookUn de tes webhooks.
Champ Type Signification idstringL’id du webhook. urlstringSon adresse. kindsstring[]Ce dont il est averti. activebooleanS’il reçoit les envois. Après de nombreux échecs d’affilée, il est désactivé. lastStatusintegerou null Le statut HTTP du dernier envoi. lastAtintegerou null Quand a eu lieu le dernier envoi. failuresintegerÉchecs d’affilée.
Exemple {
"id": "1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b",
"url": "https://example.org/tellmelo-hook",
"kinds": [
"reply",
"mention"
],
"active": true,
"lastStatus": 200,
"lastAt": 1758624000000,
"failures": 0
}WebhookCreatedUn nouveau webhook avec son secret.
Champ Type Signification idstringL’id du webhook. secretstringLe secret des signatures, cette fois seulement.
Exemple {
"id": "1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b",
"secret": "whsec_3f9a…"
}GroupBotUn bot d’un groupe.
Champ Type Signification idstringL’id du compte du bot. handlestringSon identifiant. namestringSon nom. descriptionstringCe qu’il fait, selon son propriétaire. permissionsstring[]Ce que son rôle dans le groupe permet.
Exemple {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "gardenbot",
"name": "Garden bot",
"description": "Reminds the group of watering days.",
"permissions": [
"send",
"view"
]
}VoiceRoomUn salon vocal avec les personnes présentes.
Champ Type Signification channelstringL’id du salon. peopleVoicePerson[]Qui y est en ce moment.
Exemple {
"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
}
]
}VoicePersonQuelqu’un dans un salon vocal.
Champ Type Signification idstringL’id du compte. handlestringL’identifiant. namestringLe nom affiché. mutedbooleanSi son micro est coupé. deafbooleanSi la personne n’entend rien (son propre choix). camerabooleanSi sa caméra est allumée. screenbooleanSi l’écran est partagé.
Exemple {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"muted": true,
"deaf": false,
"camera": false,
"screen": false
}GiftDropDes cadeaux sous une publication – jamais avec le nom de ceux qui les ont récupérés.
Champ Type Signification itemstringCe que contient une place.plan — Mois d’abonnement (Soutien).sparks — Étincelles. quantityintegerCombien contient chaque place : mois ou étincelles. placesintegerCombien de places il y a en tout. leftintegerCombien sont encore libres. audiencestringQui peut récupérer.all — Tout le monde.followers — Seulement les abonnés de la personne qui offre.group — Seulement les membres du groupe de la publication. newAccountsbooleanSi les comptes de moins de 7 jours peuvent aussi récupérer. statusstringOù en sont les choses.awaiting_payment — En attente de paiement ; la publication n’est pas encore parue.open — Il reste des places à récupérer.closed — Terminé : tout est parti, le paiement a été remboursé ou la publication supprimée. claimedbooleanSi tu as déjà une place toi-même (toujours false sur les chemins publics).
Exemple {
"item": "plan",
"quantity": 3,
"places": 10,
"left": 4,
"audience": "followers",
"newAccounts": false,
"status": "open",
"claimed": true
}OwnGiftDropTes cadeaux sous une publication, avec la publication et le mode de paiement.
Chaque champ de GiftDrop , et en plus :
Champ Type Signification postIdstringLa publication sous laquelle ils se trouvent. fundingstringComment ils sont payés.free — Gratuit.quota — Pris sur le contingent.payment — Payé. createdAtintegerQuand ils ont été créés.
Exemple {
"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
}QuotaCe que contient un contingent.
Champ Type Signification monthsintegerMois d’abonnement encore à offrir. sparksintegerÉtincelles encore à offrir. looksQuotaLook[]Looks de la réserve encore à offrir (depuis 2.13).
Exemple {
"months": 120,
"sparks": 500,
"looks": [
{
"id": "frame-gold",
"name": "Goldring",
"kind": "frame",
"quantity": 25
}
]
}QuotaLookUn look dans la réserve d’un partenaire, avec les exemplaires restants (depuis 2.13).
Champ Type Signification idstringL’ID du look ; à indiquer comme itemId quand tu l’offres. namestringLe nom du look. kindstringLe type de look.frame — Cadre de profil.background — Effet de couverture.card — Carte de profil. quantityintegerCombien d’exemplaires il reste.
Exemple {
"id": "frame-gold",
"name": "Goldring",
"kind": "frame",
"quantity": 25
}QuotaGiftUn cadeau pris sur le contingent.
Champ Type Signification itemstringCe qui a été offert.plan — Mois d’abonnement (Soutien).sparks — Étincelles.shop — Un look de la réserve (depuis 2.13). quantityintegerCombien. itemIdstringou null Le look offert quand item vaut shop ; sinon null. recipientActorÀ qui. createdAtintegerQuand.
Exemple {
"item": "plan",
"quantity": 3,
"itemId": null,
"recipient": {
"handle": "jon",
"name": "Jon"
},
"createdAt": 1758627600000
}EmbedLes adresses pour d’autres sites web. Elles fonctionnent sans clé.
Champ Type Signification pagestringLe lecteur pour un <iframe>. filestringLe fichier MP4 pour ton propre lecteur. posterstringL’image d’aperçu. codestringLe code d’intégration prêt à l’emploi.
Exemple {
"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>"
}UploadStartedUn import commencé.
Champ Type Signification uploadstringL’ID de cet import. pieceintegerLa taille maximale d’un morceau, en octets.
Exemple {
"upload": "e7c1a2b3-4d5e-4f60-8a9b-0c1d2e3f4a5b",
"piece": 4194304
}UploadPieceUn morceau arrivé.
Champ Type Signification receivedintegerCombien d’octets sont arrivés. itemMediaItemou null Après le dernier morceau, le nouveau GIF ou la nouvelle vidéo, sinon null.
Exemple {
"received": 4194304,
"item": null
}CreatedLa réponse d’une écriture qui a créé quelque chose.
Champ Type Signification idstringL’identifiant de ce qui a été créé. scheduledForintegerou null Quand cela apparaît, si la publication a été programmée (sinon null). deleteAtintegerou null Quand cela se supprime tout seul, si c’était réglé (sinon null).
Exemple {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"scheduledFor": null,
"deleteAt": null
}DropCreatedLa réponse quand une publication avec des cadeaux a été créée.
Champ Type Signification idstringL’identifiant de la nouvelle publication. fundingstringComment les cadeaux sont payés.free — Gratuit.quota — Pris sur le contingent.
Exemple {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"funding": "quota"
}MadeCe qui vient d’être créé ou modifié.
Champ Type Signification idstringL’id ; pour un lien d’invitation, son code.
Exemple {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}OkLa réponse d’une écriture qui n’a rien à rendre.
Champ Type Signification okbooleanToujours true.
Exemple {
"ok": true
}La description lisible par une machine La table derrière cette page est disponible en OpenAPI sous https://api.tellmelo.com/v2/openapi.json.
https://api.tellmelo.com/v2/openapi.jsonGIF et vidéos sur d’autres sites web Ce qu’un membre partage et autorise aussi sur d’autres sites web, n’importe quel site peut l’afficher : la recherche avec anywhere=true le trouve, et son embed contient les adresses. Si le membre le retire, il y disparaît en quelques minutes.
Import en morceaux D’abord commencer, puis envoyer le fichier en morceaux. Découpe un fichier plus grand en morceaux de piece octets, avec offset à la position de chacun. Après le dernier morceau, tu reçois le GIF ou la vidéo terminé.
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": { … } } }Intégrer Le lecteur affiche le GIF en boucle ou la vidéo avec les commandes, et en dessous le nom et qui l’a partagé. Place le code de embed.code dans la page :
<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>Les forums et programmes qui connaissent oEmbed récupèrent le code eux-mêmes quand on leur donne l’adresse du lecteur :
https://tellmelo.com/api/oembed?url=https%3A%2F%2Ftellmelo.com%2Fmedia-embed%2Fb2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918La clé a sa place sur ton serveur, jamais dans le code d’une page web. Recherche et importe via ton serveur ; les adresses dans embed n’ont pas besoin de clé.
Sélecteur de GIF pour ton site Avec une clé de site (Espace développeurs → Sélecteur de GIF pour ton site ), ton site obtient une recherche toute prête : deux lignes dans la page, et un clic sur le bouton l’ouvre. La clé est publique et ne fonctionne que sur les adresses que tu indiques pour elle. Le sélecteur ne montre que ce que les membres ont autorisé sur d’autres sites web.
<script src="https://tellmelo.com/picker.js" data-key="tmsk_…" defer></script>
<button type="button" data-tellmelo-picker>GIF</button>Lors d’un choix, le bouton déclenche tellmelo:pick avec l’élément : code pour l’intégrer, file, poster, name et author. Avec data-target="#field", il insère directement code dans un champ de texte ; avec data-kind="video", il cherche des vidéos. Si tu intègres le fichier toi-même, affiche le nom de la personne qui l’a partagé.
document.addEventListener('tellmelo:pick', (event) => {
const { code, file, name, author } = event.detail;
});Se connecter avec tellmelo D’autres sites permettent aux membres de se connecter avec leur compte tellmelo via OpenID Connect (code d’autorisation avec PKCE). Le site ne reçoit que le nom d’utilisateur, l’adresse e-mail confirmée et un identifiant propre par membre (sub).
Tu demandes une app sous « Espace développeurs → Se connecter avec tellmelo ». L’équipe vérifie chaque app ; ensuite tu y vois l’ID client et, pour les apps avec serveur, tu crées le secret client, affiché une seule fois.
Tout ce dont une bibliothèque a besoin se trouve dans le document de découverte :
https://tellmelo.com/.well-known/openid-configurationEnvoie le membre vers /oauth/authorize avec response_type=code, client_id, redirect_uri (exactement comme enregistré), scope=openid profile email, state, nonce et code_challenge avec code_challenge_method=S256. Échange le code dans la minute auprès de /oauth/token : grant_type=authorization_code, code, redirect_uri et code_verifier ; les apps avec serveur envoient aussi le secret, en authentification Basic ou dans le formulaire. Le jeton d’identité (RS256, clés sous /oauth/jwks) contient sub, avec profile aussi preferred_username, avec email aussi email et email_verified. Le jeton d’accès vaut 10 minutes et ne lit que /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
}Il n’y a pas de jetons de rafraîchissement : tellmelo connecte et ne donne aucun accès durable. Si un membre retire le site ou si l’équipe suspend l’app, /oauth/userinfo répond aussitôt 401. prompt=none vérifie sans page, prompt=consent redemande.
Ce que nous attendons Les mêmes règles s’appliquent partout : pas de harcèlement, pas de spam, pas de contenus d’autrui sans en avoir les droits. Tu réponds de ce que publie ta clé.
N’affiche les GIF et vidéos d’autres membres sur ton site web que s’ils ont embed, via ces adresses et avec le nom de la personne qui les a partagés. Si quelque chose n’est plus disponible, arrête de l’afficher. Ne copie pas les fichiers dans ta propre collection.