Contenido Quiero … Elige lo que tienes en mente; debajo están solo los pasos para ello. La referencia completa sigue más abajo.
crear un bot conectar mi app iniciar sesión con tellmelo en mi web insertar GIF y vídeosCrea el bot en uno de tus grupos, en el menú del grupo en «Bots → Mis bots», con imagen, nombre y @nombre. Su token solo lo ves una vez. Comparte su enlace «Añadir bot» o envíalo al directorio de bots, donde aparece tras la revisión del equipo; quien puede gestionar roles en un grupo lo acepta con los permisos que aprueba. Recibe lo que ocurre en sus grupos como flujo (GET /v2/events/stream) o en tu dirección, y escribe con POST /v2/channels/{id}/messages. Más en Bots . Registra comandos (PUT /v2/me/commands) y responde con tarjetas y botones; un bot pone música con un sitio en un canal de voz (POST /v2/channels/{id}/voice). Visión general Con v2 tus propios programas hablan con tellmelo: una clave por petición, JSON de vuelta, todas las listas se paginan igual. Rigen las mismas reglas que en la app.
Cada ruta empieza por https://api.tellmelo.com/v2. Las peticiones y las respuestas son JSON en UTF-8. Los nombres de campo, los códigos y los valores están en inglés y seguirán así. Una clave actúa como tu cuenta: lo que no puedes ver en la app, tampoco lo puede leer. https://api.tellmelo.com/v2Inicio rápido Crea una clave en «Área de desarrolladores → API» y cópiala. Solo se muestra una vez. Consulta la raíz con ella. La respuesta indica la versión, los permisos de la clave y las peticiones que quedan este minuto. Todas las rutas funcionan igual: clave en la cabecera, JSON de vuelta, items y next en las listas. 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"
}Después: /me para tu perfil, /posts para lo público, /feed para tu feed.
Probar Elige una tarea, rellena los campos y copia la petición o envíala desde aquí. Escribir pregunta antes. El código lee la clave de TELLMELO_KEY.
Tarea 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 Versión de la API y nombre de esta instancia.
curl JavaScript Python
Copiarcurl \
-H "Authorization: Bearer $TELLMELO_KEY" \
"https://api.tellmelo.com/v2"Tu clave Hasta 10 claves por cuenta, cada una con nombre, permisos propios y, si quieres, fecha de caducidad. Una clave empieza por tm_key_ y solo se muestra una vez. ¿La perdiste? Renuévala; el valor antiguo deja de funcionar.
La creas en «Área de desarrolladores → API». Viaja en la cabecera de la petición:
curl -H "Authorization: Bearer tm_key_…" \
https://api.tellmelo.com/v2/postsO, si te resulta más cómodo, en una cabecera propia:
curl -H "X-Tellmelo-Key: tm_key_…" https://api.tellmelo.com/v2No en la URL: acabaría en registros y en el historial del navegador.
La misma clave carga las imágenes: cada url apunta a /api/media; envía la clave también allí en la cabecera.
curl -H "Authorization: Bearer tm_key_…" \
-o picture.webp "https://api.tellmelo.com/media?id=…"Lo que puede una clave Una clave siempre puede leer y, si lo permites, también escribir, regalar, subir medios y gestionar grupos. Cada ruta indica lo que necesita:
read : leer. Publicaciones públicas, perfiles, grupos y tags, además de tu feed, tus notificaciones, tus mensajes y los canales de tus grupos.write : actuar. Publicar, responder, votar, enviar mensajes, escribir en el chat de un grupo, seguir, unirse, bloquear, marcar notificaciones como leídas.gifts : regalar. Desde el contingente de un socio a un miembro, y regalos bajo una nueva publicación. Un permiso aparte, para que una clave pensada para publicar nunca pueda regalar nada.media : tu propia biblioteca multimedia. Subir, cambiar, compartir y eliminar GIF y vídeos. Un permiso propio, porque las subidas cuestan puntos de vídeo de la cuenta. Para encontrar GIF y vídeos compartidos basta con read .groups : administrar grupos. Roles, canales, categorías, enlaces de invitación, el canal del feed, las eliminaciones, silencios, expulsiones y vetos, en la medida en que tu cuenta pueda en el grupo. Un permiso propio, para que una clave para publicar nunca cambie quién puede qué en un grupo.Lo que ninguna clave puede Ninguna clave llega a la contraseña, la dirección de correo, el tipo de cuenta, el lugar, el rol, la eliminación, las sesiones, los dispositivos de aviso u otras claves, ni a la administración o la gestión de grupos. Lo que protege la contraseña, ninguna clave lo puede.
Bots Un bot es una cuenta propia, del tipo bot, para grupos: sin contraseña ni correo, controlada por tu programa con su propia clave. Usa la misma API que cualquier cuenta y puede hacer en los grupos lo que su rol allí permita.
En uno de tus grupos, abre el menú del grupo y en «Bots → Mis bots» crea un bot con imagen, portada, nombre, nombre de usuario y descripción. El token solo se muestra una vez; tiene los permisos read, write, media y groups. Comparte el enlace del bot o envíalo al directorio de bots; aparece allí en cuanto el equipo lo ha revisado. Quien puede gestionar roles en un grupo elige los permisos; el bot se une y recibe un rol propio. Tu programa envía el token como Authorization: Bearer …, lee los eventos de sus grupos como flujo y trabaja con las rutas de Bots , Canales y Grupos . Un pequeño bot que lee los eventos como flujo y responde al comando /ping con pong, solo para quien preguntó:
// 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 });
}
}
}El mismo bot en Python, que obtiene los eventos página a página:
# 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)Lo que un bot puede hacer en un grupo lo decide su rol allí, no el token. El rol lleva su nombre; el grupo cambia sus permisos en los roles de los ajustes del grupo y quita el bot en el menú del grupo, en «Bots → En este grupo». Hasta 5 bots por cuenta; por grupo, tantos como permitan sus ventajas. Un bot escribe como máximo 30 mensajes por minuto y grupo, no se encuentra por la búsqueda y solo escribe a quien le escribió primero. Se aplican los límites . Los eventos también llegan a una dirección HTTPS propia (firmados como los webhooks, con reintentos). Además: comandos (PUT /v2/me/commands) con respuestas para todos o solo para quien preguntó, tarjetas y botones en los mensajes, y música en canales de voz (POST /v2/channels/{id}/voice): todo en Bots . Páginas Cada lista toma limit y cursor y responde con items y next. Devuelve next como cursor para la siguiente página; si next está vacío, has terminado. El cursor es opaco: no lo desmontes ni lo construyas.
{ "items": [ … ], "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx" }
curl -H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts?limit=20&cursor=MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"Sin limit, 20 entradas, como máximo 50. Algunas listas no se paginan; su next es siempre null.
Solo lo nuevo Cada respuesta lleva un ETag. Devuélvelo como If-None-Match la próxima vez: si nada cambió, recibes 304 sin cuerpo.
ETag: W/"3Qk1mJ7fQe2Yb0sVxT9aL4pNdRc"
If-None-Match: W/"3Qk1mJ7fQe2Yb0sVxT9aL4pNdRc" → 304Excepciones: /feed no tiene ETag porque su orden cambia constantemente, y las escrituras nunca responden 304.
Límites Una clave puede hacer 120 peticiones por minuto, 600 con la suscripción «Organización», salvo que la administración fije otra cosa. Por encima llega 429 y no se ha ejecutado nada. Espera un minuto y vuelve a enviar la petición.
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 117
X-RateLimit-Reset: 1758624060Las escrituras cuentan además contra los límites de la app, como cuántas publicaciones en pocos minutos. También responden 429 con rate_limited.
Cuando algo no funciona Los errores llegan como JSON: un código fijo en inglés en error para tu programa y una frase en message para personas, con el código de estado correspondiente. Compara solo el código; la frase puede cambiar.
{ "error": "rate_limited",
"message": "Too many requests. Try again in a minute.",
"limit": 120 }Algunos errores traen un campo más: docs con un 401 por falta de clave, limit con un 429.
Estado Código Significado 400bad_requestLa petición no se puede leer, falta un campo obligatorio o un valor no está permitido. 401key_missingNo hay clave en la cabecera. 401key_invalidLa clave no vale: mal escrita, sustituida o la cuenta está bloqueada. 401unauthorizedRechazada como no identificada, por un motivo distinto de la clave. 403scope_missingA la clave le falta el permiso necesario, normalmente write. 403account_data_lockedLos datos de cuenta como contraseña, correo o eliminación están vetados a las claves. 403forbiddenTu cuenta no puede hacerlo, por ejemplo por un permiso retirado o un bloqueo. 403timed_outUn silencio temporal silencia ahora tu cuenta en este grupo. 404unknown_pathEsta ruta no existe, o no con este método. 404not_foundNo encontrado, o no puedes verlo. 409conflictChoca con algo que ya existe, por ejemplo un nombre ocupado. 409feed_offEl canal del feed de este grupo está desactivado. 413too_largeDemasiado grande para esta instancia. 422unprocessableLegible, pero no posible de esta forma. 429rate_limitedDemasiadas peticiones. No ha pasado nada; espera y vuelve a intentarlo. 500internal_errorAlgo ha fallado en el servidor.
Versiones La versión está en la ruta. Mientras ponga v2, rutas y campos no cambian; lo nuevo solo se añade.
Las novedades suben el segundo número. Cada ruta indica desde cuándo existe.
https://api.tellmelo.com/v1/ ya no existe: las rutas antiguas responden 410 e indican en el cuerpo el nuevo camino.
Rutas Todas las rutas de un vistazo y luego cada una con un ejemplo.
Ruta Derecho Para qué La entrada GET /v2readVersión de la API y nombre de esta instancia. Publicaciones GET /v2/postsreadLas publicaciones públicas, las más nuevas primero. GET /v2/posts/{id}readUna sola publicación, por su id. POST /v2/postswritePublicar una publicación. DELETE /v2/posts/{id}writeRetirar una publicación tuya. GET /v2/me/scheduledreadTus publicaciones que aún no han salido, y qué están esperando. POST /v2/posts/{id}/schedulewriteCambiar cuándo sale una publicación programada, o cuándo se borra sola una publicación. POST /v2/posts/{id}/editwriteCambiar el texto de una de tus publicaciones. GET /v2/posts/{id}/reply-settingsreadQuién puede responder a tu publicación, si las respuestas esperan aprobación y el modo lento. PUT /v2/posts/{id}/reply-settingswriteCambiar los ajustes de respuesta de tu publicación. Lo que no indiques se mantiene. POST /v2/posts/{id}/coauthorwriteAceptar o rechazar una invitación como coautor. DELETE /v2/posts/{id}/coauthorwriteRetirarte como coautor o, como autor, quitar al coautor de la publicación. POST /v2/posts/{id}/pinwriteFijar tu publicación arriba en tu perfil o quitarla. Respuestas GET /v2/posts/{id}/repliesreadLas respuestas a una publicación, sin cuentas bloqueadas. POST /v2/posts/{id}/replieswriteResponder a una publicación. POST /v2/replies/{id}/editwriteCambiar el texto de una de tus respuestas. DELETE /v2/replies/{id}writeQuitar una de tus respuestas. POST /v2/replies/{id}/likewriteVotar a favor de una respuesta (un me gusta es un voto a favor desde que las respuestas se votan) o retirar el voto; un voto en contra se mantiene. POST /v2/replies/{id}/votewriteVotar una respuesta a favor o en contra, o retirar tu voto. Responde con tu voto y la puntuación resultante. POST /v2/replies/{id}/pickwriteDestacar una respuesta bajo tu propia publicación como la mejor, o quitar el destacado. GET /v2/posts/{id}/replies/waitingreadLas respuestas que esperan aprobación bajo una publicación: todas bajo la tuya, si no solo las tuyas. POST /v2/replies/{id}/decidewriteAprobar o rechazar una respuesta en espera bajo tu publicación. Si la rechazas, se borra. GET /v2/posts/{id}/replies/plannedreadTus respuestas programadas para más tarde bajo una publicación. PUT /v2/me/planned-replies/{id}writeCambiar el texto o la hora de una respuesta programada. Si había fallado, vuelve a esperar. POST /v2/me/planned-replies/{id}/sendwriteEnviar ya una respuesta programada. DELETE /v2/me/planned-replies/{id}writeBorrar una respuesta programada. Encuestas POST /v2/posts/{id}/votewriteParticipar en una encuesta. Perfiles GET /v2/profiles/{handle}readUn perfil, por su alias. GET /v2/profiles/{handle}/postsreadLas publicaciones públicas de un perfil, las más nuevas primero. GET /v2/profiles/{handle}/eventsreadLos próximos eventos de un perfil, los más cercanos primero. POST /v2/me/eventswriteCrear un evento. Responde con su id. PUT /v2/me/events/{id}writeCambiar uno de tus eventos. Todos los campos se fijan de nuevo. DELETE /v2/me/events/{id}writeBorrar uno de tus eventos. GET /v2/me/events/{id}/signupsreadQuién se ha apuntado a uno de tus eventos. POST /v2/events/{id}/signupwriteApuntarte a un evento o darte de baja. Grupos GET /v2/communitiesreadLos grupos abiertos de esta instancia; con mine=true, los grupos de tu cuenta. GET /v2/communities/{id}readUn solo grupo, por su id. GET /v2/communities/{id}/postsreadLas publicaciones del canal del feed de un grupo, las más recientes primero. GET /v2/communities/{id}/membersreadLos miembros de un grupo con sus roles. GET /v2/communities/{id}/rolesreadLos roles de un grupo, el más alto primero, @everyone al final. GET /v2/communities/{id}/bellreadQué notificaciones te envía un grupo. GET /v2/invites/{code}readEl grupo detrás de un enlace de invitación, antes de unirse. PUT /v2/roles/{id}/selfwriteTomar o dejar un rol elegible. GET /v2/communities/{id}/emojisreadLos emojis propios de un grupo. PUT /v2/communities/{id}/bellwriteAjustar qué notificaciones te envía un grupo. POST /v2/invites/{code}/joinwriteUnirse a un grupo con un enlace de invitación. GET /v2/communities/{id}/botsreadLos bots de un grupo con lo que permite su rol. Canales GET /v2/communities/{id}/channelsreadLos canales de un grupo que ves, en su orden. GET /v2/channels/{id}/messagesreadLos mensajes de un canal de chat, los más recientes primero. POST /v2/channels/{id}/messageswriteEscribir un mensaje en un canal de chat. POST /v2/channels/{id}/readwriteMarcar un canal de chat como leído hasta un momento. DELETE /v2/channel-messages/{id}writeBorrar uno de tus mensajes en un canal de chat. GET /v2/communities/{id}/voicereadQuién está ahora en los canales de voz de un grupo, por canal. Gestionar grupos POST /v2/communities/{id}/emojisgroupsDar un emoji al grupo. DELETE /v2/communities/{id}/emojis/{name}groupsQuitar un emoji del grupo. POST /v2/communities/{id}/rolesgroupsCrear un rol. PUT /v2/roles/{id}groupsCambiar el nombre, el color y los permisos de un rol. DELETE /v2/roles/{id}groupsBorrar un rol. PUT /v2/communities/{id}/roles/ordergroupsFijar el rango de los roles. PUT /v2/roles/{id}/members/{member}groupsDar o quitar un rol a un miembro. POST /v2/communities/{id}/channelsgroupsCrear un canal de chat. PUT /v2/channels/{id}groupsCambiar el nombre, el tema y la categoría de un canal. DELETE /v2/channels/{id}groupsBorrar un canal de chat con sus mensajes. PUT /v2/communities/{id}/channels/ordergroupsFijar el orden de las categorías y los canales de chat. PUT /v2/communities/{id}/channels/shapegroupsFijar la forma de todos los símbolos de canal del grupo. GET /v2/channels/{id}/overridesgroupsLo que los roles pueden hacer distinto en un canal que en el grupo. PUT /v2/channels/{id}/overrides/{role}groupsFijar lo que un rol puede hacer distinto en un canal. POST /v2/communities/{id}/categoriesgroupsCrear una categoría para canales. PUT /v2/categories/{id}groupsRenombrar una categoría. DELETE /v2/categories/{id}groupsBorrar una categoría. PUT /v2/communities/{id}/feedgroupsActivar o desactivar el canal del feed de un grupo. GET /v2/communities/{id}/invitesgroupsLos enlaces de invitación de un grupo que siguen valiendo. POST /v2/communities/{id}/invitesgroupsCrear un enlace de invitación. DELETE /v2/invites/{code}groupsRetirar un enlace de invitación. POST /v2/channel-messages/{id}/removegroupsQuitar de un canal el mensaje de otro miembro. POST /v2/communities/{id}/posts/{post}/removegroupsQuitar una publicación de un grupo. DELETE /v2/communities/{id}/members/{member}groupsExpulsar a un miembro de un grupo. PUT /v2/communities/{id}/members/{member}/timeoutgroupsSilenciar a un miembro. DELETE /v2/communities/{id}/members/{member}/timeoutgroupsQuitar un silencio. GET /v2/communities/{id}/bansgroupsLos vetos vigentes de un grupo. PUT /v2/communities/{id}/bans/{member}groupsVetar a un miembro. DELETE /v2/communities/{id}/bans/{member}groupsLevantar un veto. GET /v2/communities/{id}/loggroupsEl registro de la dirección: quién quitó qué y por qué. POST /v2/communitiesgroupsFundar un grupo. Responde con su id; tú eres el fundador. PUT /v2/communities/{id}groupsCambiar un grupo que diriges. Lo que no indiques se mantiene. Bots GET /v2/eventsreadLos eventos de los grupos del bot desde un evento, página a página. GET /v2/events/streamreadLos eventos de los grupos del bot en cuanto ocurren (server-sent events). GET /v2/me/commandsreadLos comandos del bot. PUT /v2/me/commandswriteDefinir los comandos del bot, todos a la vez. POST /v2/interactions/{id}/replywriteResponder a un comando o a un botón. POST /v2/channels/{id}/voicewriteOcupar un sitio en un canal de voz para reproducir música o sonido. Descubrir GET /v2/tagsreadLas etiquetas que están en marcha ahora mismo. GET /v2/searchreadUna búsqueda por publicaciones, nombres, alias y etiquetas. GET /v2/emojisreadLos emojis propios de la instancia, con la dirección de sus imágenes. GIF y vídeos GET /v2/mediareadGIF o vídeos compartidos, los más usados primero. GET /v2/media/minemediaTu propia biblioteca multimedia, lo más nuevo primero. GET /v2/media/{id}readUn GIF o vídeo, tuyo o compartido. POST /v2/media/uploadsmediaIniciar una subida. PUT /v2/media/uploads/{upload}mediaEnviar un fragmento del archivo. POST /v2/media/{id}mediaCambiar uno de tus GIF o vídeos. DELETE /v2/media/{id}mediaEliminar uno de tus GIF o vídeos. Tu cuenta GET /v2/mereadTu propio perfil, con el id que esperan las demás rutas. GET /v2/feedreadTu propio feed, tal como lo compone la aplicación. POST /v2/me/pictureswriteSubir una imagen, como sus bytes. Responde con id y url; luego usas la id como foto de perfil, portada o en una publicación. PUT /v2/me/profileprofileCambiar tu perfil: nombre, sobre ti, foto de perfil, portada y color del perfil. Lo que no indiques se mantiene. GET /v2/me/emojisreadTus propios emojis. POST /v2/me/emojis/picturesprofileSubir la imagen de un emoji propio, como sus bytes. POST /v2/me/emojisprofileCrear un emoji propio. Responde con todos tus emojis. DELETE /v2/me/emojis/{name}profileQuitar un emoji propio. Responde con los demás. PUT /v2/me/emojis/sharingprofileDecidir si tus seguidores pueden usar tus emojis en sus propios textos. GET /v2/me/webhookswebhooksTus webhooks con su estado. POST /v2/me/webhookswebhooksCrear un webhook. Responde con la id y el secreto para las firmas, solo esta vez. DELETE /v2/me/webhooks/{id}webhooksBorrar un webhook. POST /v2/me/webhooks/{id}/testwebhooksEnviar una prueba a un webhook. Notificaciones GET /v2/notificationsreadTus notificaciones, las más nuevas primero. POST /v2/notifications/readwriteMarcar tus notificaciones como leídas. Mensajes GET /v2/conversationsreadTu buzón: una fila por conversación, la más reciente primero. GET /v2/conversations/{with}/messagesreadLos mensajes de una conversación, los más nuevos primero. POST /v2/conversations/{with}/messageswriteEnviar un mensaje en una conversación. POST /v2/conversations/{with}/readwriteMarcar como leídos todos los mensajes de una conversación. DELETE /v2/conversations/{with}/messages/{id}writeBorrar uno de tus mensajes. POST /v2/conversations/{with}/plannedwriteProgramar un mensaje para más tarde. Responde con la id del mensaje programado. GET /v2/me/planned-messagesreadTus mensajes que aún se van a enviar, por orden de hora. POST /v2/me/planned-messages/{id}/sendwriteEnviar ahora un mensaje programado retenido o fallido. DELETE /v2/me/planned-messages/{id}writeBorrar un mensaje programado antes de que se envíe. Relaciones POST /v2/relationswriteDar me gusta, guardar, compartir, seguir, unirse, bloquear, silenciar, según kind. GET /v2/profiles/{handle}/followersreadQuién sigue a un perfil, los más recientes primero. GET /v2/profiles/{handle}/followingreadA quién sigue un perfil, los más recientes primero. GET /v2/me/relationsreadA quién has bloqueado, silenciado o bloqueado solo para mensajes, los más recientes primero. Colecciones GET /v2/me/collectionsreadTus colecciones con el número de publicaciones. POST /v2/me/collectionswriteCrear una colección. Responde con su id. PUT /v2/me/collections/{id}writeCambiar el nombre de una colección. DELETE /v2/me/collections/{id}writeBorrar una colección. GET /v2/me/collections/{id}/postsreadLas publicaciones de una colección, como en la pestaña de guardados. POST /v2/me/collections/{id}/postswriteMeter una publicación en una colección o sacarla. Regalos GET /v2/partner/quotareadLo que te queda por regalar en tu contingente. GET /v2/partner/giftsreadLo que has regalado de tu contingente, a quién y cuándo, lo más reciente primero. POST /v2/partner/giftsgiftsRegalar meses de suscripción o chispas de tu contingente a un miembro. GET /v2/gift-dropsreadTus regalos bajo publicaciones: cuántas plazas siguen libres y cómo se pagaron. POST /v2/gift-dropsgiftsPublicar una publicación con regalos para que otros los recojan.
La entrada La primera petición de todo programa: ¿funciona la clave y qué puede hacer?
GET /v2Versión de la API y nombre de esta instancia.
Derecho read con ETag desde v2.0 Sin barra al final: https://api.tellmelo.com/v2/ redirige a https://api.tellmelo.com/v2 con 308, y no todos los programas lo siguen.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2"Respuesta Responde con un Service .
Ejemplo {
"name": "tellmelo",
"version": "2.20",
"scope": "read write",
"rateLimit": {
"limit": 120,
"remaining": 117
},
"docs": "/developers/docs",
"spec": "/api/v2/openapi.json"
}Estados posibles: 200304401429
Publicaciones Leer publicaciones públicas, publicar las tuyas y volver a quitarlas.
GET /v2/postsLas publicaciones públicas, las más nuevas primero.
Derecho read paginable con ETag desde v2.0 En las rutas públicas, counts.likes y counts.reposts son siempre 0 y pinned es false.
Las publicaciones de grupos no están aquí, sino en /communities/{id}/posts.
Parámetros Nombre Tipo Significado limiten la dirección integeropcional Entradas por página: 20 por defecto, como máximo 50. cursoren la dirección stringopcional El next de la respuesta anterior. Sin él, desde el principio.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts?limit=20"Respuesta Responde con una página de Post , como `items` y `next`.
Ejemplo {
"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"
}Estados posibles: 200304401429
GET /v2/posts/{id}Una sola publicación, por su id.
Derecho read con ETag desde v2.0 En las rutas públicas, counts.likes y counts.reposts son siempre 0 y pinned es false.
Las publicaciones de grupos no están aquí, sino en /communities/{id}/posts.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de una publicación.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1"Respuesta Responde con un Post .
Ejemplo {
"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
}Estados posibles: 200304400401404429
POST /v2/postsPublicar una publicación.
Una publicación necesita texto o una encuesta. La longitud, las opciones y el ritmo los fija la instancia; si se superan, llega 400 o 429.
Adjunta imágenes, un GIF o un vídeo con media. Un GIF o vídeo va solo. Puedes usar en tellmelo los GIF y vídeos compartidos de otros.
Una publicación para amigos cercanos o con coautor sale de inmediato, no en un grupo ni programada. No se pueden combinar ambas.
Parámetros Nombre Tipo Significado texten el cuerpo stringopcional El texto de la publicación, la respuesta o el mensaje. communityen el cuerpo stringopcional El id del grupo a cuyo canal del feed va la publicación; debe estar activado y necesitas el permiso. Sin él, la publicación queda fuera de cualquier grupo. quotesen el cuerpo stringopcional El id de la publicación que esta cita. pollen el cuerpo string[]opcional Las opciones como lista de textos. mediaen el cuerpo string[]opcional IDs de imágenes subidas en la app, o de un GIF o vídeo de la biblioteca multimedia (desde 2.14). audienceen el cuerpo stringopcional Quién ve la publicación: everyone todos los que pueden verla, close solo tus amigos cercanos.everyoneclose coauthoren el cuerpo stringopcional La id de una cuenta que invitas como coautor. Tenéis que seguiros mutuamente.
Petición de ejemplo 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"Respuesta Responde con un Created .
Ejemplo {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"scheduledFor": null,
"deleteAt": null
}Estados posibles: 200400401403429
DELETE /v2/posts/{id}Retirar una publicación tuya.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de una publicación.
Petición de ejemplo curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
GET /v2/me/scheduledTus publicaciones que aún no han salido, y qué están esperando.
Derecho read con ETag desde v2.12 Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/scheduled"Respuesta Responde con una página de ScheduledPost , como `items` y `next`.
Ejemplo {
"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
}Estados posibles: 200304401429
POST /v2/posts/{id}/scheduleCambiar cuándo sale una publicación programada, o cuándo se borra sola una publicación.
Solo tus propias publicaciones. Mientras los regalos de una publicación no estén pagados, no se puede programar.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de una publicación. publishAten el cuerpo integeropcional Cuándo sale la publicación programada, en milisegundos desde 1970. deleteAten el cuerpo integeropcional Cuándo se borra sola la publicación, en milisegundos desde 1970.
Petición de ejemplo curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/schedule"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
POST /v2/posts/{id}/editCambiar el texto de una de tus publicaciones.
Solo dentro del tiempo de edición que te da tu suscripción. Las publicaciones programadas no se pueden editar.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de una publicación. texten el cuerpo stringobligatorio El texto de la publicación, la respuesta o el mensaje.
Petición de ejemplo 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"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
GET /v2/posts/{id}/reply-settingsQuién puede responder a tu publicación, si las respuestas esperan aprobación y el modo lento.
Derecho read con ETag desde v2.19 Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de una publicación.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/reply-settings"Respuesta Responde con un ReplySettings .
Ejemplo {
"audience": "following",
"approval": false,
"slow": "auto"
}Estados posibles: 200304400401404429
PUT /v2/posts/{id}/reply-settingsCambiar los ajustes de respuesta de tu publicación. Lo que no indiques se mantiene.
Solo tus propias publicaciones.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de una publicación. audienceen el cuerpo stringopcional Quién puede responder: todos, cuentas que sigues, las mencionadas o nadie.allfollowingmentionednobody approvalen el cuerpo booleanopcional Si las respuestas solo aparecen después de que las apruebes. slowen el cuerpo stringopcional Modo lento: auto se activa solo cuando llegan muchas respuestas, on siempre, off nunca.autoonoff
Petición de ejemplo 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"Respuesta Responde con un ReplySettings .
Ejemplo {
"audience": "following",
"approval": false,
"slow": "auto"
}Estados posibles: 200400401403404429
POST /v2/posts/{id}/coauthorAceptar o rechazar una invitación como coautor.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de una publicación. accepten el cuerpo booleanobligatorio true acepta la invitación, false la rechaza.
Petición de ejemplo 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"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
DELETE /v2/posts/{id}/coauthorRetirarte como coautor o, como autor, quitar al coautor de la publicación.
Para el coautor y el autor de la publicación.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de una publicación.
Petición de ejemplo curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/coauthor"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
POST /v2/posts/{id}/pinFijar tu publicación arriba en tu perfil o quitarla.
Solo tus publicaciones visibles. Cuántas puedes fijar depende de tu suscripción.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de una publicación. activeen el cuerpo booleanobligatorio true fija la publicación, false la quita.
Petición de ejemplo 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"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
Respuestas Respuestas bajo una publicación, como lista con parentId.
GET /v2/posts/{id}/repliesLas respuestas a una publicación, sin cuentas bloqueadas.
Derecho read paginable con ETag desde v2.0 La lista es plana y en orden de escritura; parentId la convierte en árbol. Una página siempre contiene hilos enteros. Faltan las respuestas de cuentas bloqueadas.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de una publicación. limiten la dirección integeropcional Entradas por página: 20 por defecto, como máximo 50. cursoren la dirección stringopcional El next de la respuesta anterior. Sin él, desde el principio.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/replies?limit=20"Respuesta Responde con una página de Reply , como `items` y `next`.
Ejemplo {
"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"
}Estados posibles: 200304400401404429
POST /v2/posts/{id}/repliesResponder a una publicación.
En modo lento, una respuesta por persona cada 10 minutos; si no, 429. El autor y las cuentas que sigue quedan exentos.
Con media, como máximo una imagen, un GIF o un vídeo.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de una publicación. texten el cuerpo stringobligatorio El texto de la publicación, la respuesta o el mensaje. parentIden el cuerpo stringopcional El id de la respuesta a la que esta responde. Sin él, directo a la publicación. mediaen el cuerpo string[]opcional IDs de imágenes subidas en la app, o de un GIF o vídeo de la biblioteca multimedia (desde 2.14). publishAten el cuerpo integeropcional Cuándo debe salir la respuesta, en milisegundos desde 1970. Sin ella sale de inmediato.
Petición de ejemplo 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"Respuesta Responde con un Created .
Ejemplo {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"scheduledFor": null,
"deleteAt": null
}Estados posibles: 200400401403404429
POST /v2/replies/{id}/editCambiar el texto de una de tus respuestas.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El identificador de la respuesta. texten el cuerpo stringobligatorio El texto de la publicación, la respuesta o el mensaje.
Petición de ejemplo 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"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
DELETE /v2/replies/{id}Quitar una de tus respuestas.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El identificador de la respuesta.
Petición de ejemplo curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/replies/9e4b1c7d-2a3f-4d5e-8b6c-0f1e2d3c4b5a"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
POST /v2/replies/{id}/likeVotar a favor de una respuesta (un me gusta es un voto a favor desde que las respuestas se votan) o retirar el voto; un voto en contra se mantiene.
Derecho write desde v2.12 obsoleta Obsoleta desde 2.19: usa POST /replies/{id}/vote. Esta ruta se mantiene por ahora.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El identificador de la respuesta. activeen el cuerpo booleanobligatorio true la establece, false la retira.
Petición de ejemplo 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"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
POST /v2/replies/{id}/voteVotar una respuesta a favor o en contra, o retirar tu voto. Responde con tu voto y la puntuación resultante.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El identificador de la respuesta. voteen el cuerpo stringobligatorio up vota a favor, down en contra, none retira tu voto.updownnone
Petición de ejemplo 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"Respuesta Responde con un ReplyVote .
Ejemplo {
"vote": "up",
"score": 12
}Estados posibles: 200400401403404429
POST /v2/replies/{id}/pickDestacar una respuesta bajo tu propia publicación como la mejor, o quitar el destacado.
Solo bajo tus propias publicaciones y solo respuestas directas a la publicación. Un nuevo destacado sustituye al anterior.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El identificador de la respuesta. activeen el cuerpo booleanobligatorio true destaca la respuesta, false quita el destacado.
Petición de ejemplo 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"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
GET /v2/posts/{id}/replies/waitingLas respuestas que esperan aprobación bajo una publicación: todas bajo la tuya, si no solo las tuyas.
Derecho read con ETag desde v2.19 Si las respuestas esperan lo decide el autor en los ajustes de respuesta.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de una publicación.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/replies/waiting"Respuesta Responde con una página de Reply , como `items` y `next`.
Ejemplo {
"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
}Estados posibles: 200304400401404429
POST /v2/replies/{id}/decideAprobar o rechazar una respuesta en espera bajo tu publicación. Si la rechazas, se borra.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El identificador de la respuesta. approveen el cuerpo booleanobligatorio true aprueba la respuesta, false la rechaza.
Petición de ejemplo 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"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
GET /v2/posts/{id}/replies/plannedTus respuestas programadas para más tarde bajo una publicación.
Derecho read con ETag desde v2.19 Se programa con publishAt al responder. Como máximo 20 respuestas programadas a la vez.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de una publicación.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/replies/planned"Respuesta Responde con una página de PlannedReply , como `items` y `next`.
Ejemplo {
"items": [
{
"id": "3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9",
"parentId": null,
"text": "Count me in for Saturday!",
"publishAt": 1758710400000,
"state": "waiting"
}
],
"next": null
}Estados posibles: 200304400401404429
PUT /v2/me/planned-replies/{id}Cambiar el texto o la hora de una respuesta programada. Si había fallado, vuelve a esperar.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio La id de la respuesta programada. texten el cuerpo stringopcional El texto de la publicación, la respuesta o el mensaje. publishAten el cuerpo integeropcional Cuándo debe salir la respuesta, en milisegundos desde 1970. Sin ella sale de inmediato.
Petición de ejemplo 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"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
POST /v2/me/planned-replies/{id}/sendEnviar ya una respuesta programada.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio La id de la respuesta programada.
Petición de ejemplo curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/planned-replies/3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9/send"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
DELETE /v2/me/planned-replies/{id}Borrar una respuesta programada.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio La id de la respuesta programada.
Petición de ejemplo curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/planned-replies/3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
Encuestas Una encuesta es una publicación con poll rellenado. Votar tiene su propia ruta.
POST /v2/posts/{id}/voteParticipar en una encuesta.
Los votos por opción son null hasta que votes o termine la encuesta. total está siempre.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de una publicación. optionen el cuerpo integerobligatorio Qué opción, contando desde 0. Con varias opciones, una llamada por opción. retracten el cuerpo booleanopcional true retira el voto.
Petición de ejemplo 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"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
Perfiles Perfiles públicos por su nombre corto, y lo que han publicado.
GET /v2/profiles/{handle}Un perfil, por su alias.
Derecho read con ETag desde v2.0 Parámetros Nombre Tipo Significado handleen la ruta stringobligatorio El alias de un perfil, con mayúsculas o minúsculas, da igual.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/profiles/mara"Respuesta Responde con un Profile .
Ejemplo {
"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
}Estados posibles: 200304400401404429
GET /v2/profiles/{handle}/postsLas publicaciones públicas de un perfil, las más nuevas primero.
Derecho read paginable con ETag desde v2.0 En las rutas públicas, counts.likes y counts.reposts son siempre 0 y pinned es false.
Las publicaciones de grupos no están aquí, sino en /communities/{id}/posts.
Parámetros Nombre Tipo Significado handleen la ruta stringobligatorio El alias de un perfil, con mayúsculas o minúsculas, da igual. limiten la dirección integeropcional Entradas por página: 20 por defecto, como máximo 50. cursoren la dirección stringopcional El next de la respuesta anterior. Sin él, desde el principio.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/profiles/mara/posts?limit=20"Respuesta Responde con una página de Post , como `items` y `next`.
Ejemplo {
"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"
}Estados posibles: 200304400401404429
GET /v2/profiles/{handle}/eventsLos próximos eventos de un perfil, los más cercanos primero.
Derecho read con ETag desde v2.19 Solo mientras la suscripción del perfil incluya eventos. Nada entre cuentas que se han bloqueado.
Parámetros Nombre Tipo Significado handleen la ruta stringobligatorio El alias de un perfil, con mayúsculas o minúsculas, da igual.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/profiles/mara/events"Respuesta Responde con una página de Event , como `items` y `next`.
Ejemplo {
"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
}Estados posibles: 200304400401404429
POST /v2/me/eventsCrear un evento. Responde con su id.
Necesita una suscripción con eventos, si no 403. Cuántos pueden estar pendientes depende de la suscripción.
Parámetros Nombre Tipo Significado titleen el cuerpo stringobligatorio El título. startsAten el cuerpo integerobligatorio Inicio, en milisegundos desde 1970. endsAten el cuerpo integeropcional Fin, en milisegundos desde 1970. Opcional. placeen el cuerpo stringopcional Dónde tiene lugar. descriptionen el cuerpo stringopcional Una descripción. signupsen el cuerpo booleanopcional Si la gente puede apuntarse. Necesita una suscripción con inscripciones. capacityen el cuerpo integeropcional Cuántas personas pueden apuntarse como máximo. Sin indicarlo, sin límite.
Petición de ejemplo 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"Respuesta Responde con un Made .
Ejemplo {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Estados posibles: 200400401403429
PUT /v2/me/events/{id}Cambiar uno de tus eventos. Todos los campos se fijan de nuevo.
Un evento que ya ha empezado conserva su inicio.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio La id del evento. titleen el cuerpo stringobligatorio El título. startsAten el cuerpo integerobligatorio Inicio, en milisegundos desde 1970. endsAten el cuerpo integeropcional Fin, en milisegundos desde 1970. Opcional. placeen el cuerpo stringopcional Dónde tiene lugar. descriptionen el cuerpo stringopcional Una descripción. signupsen el cuerpo booleanopcional Si la gente puede apuntarse. Necesita una suscripción con inscripciones. capacityen el cuerpo integeropcional Cuántas personas pueden apuntarse como máximo. Sin indicarlo, sin límite.
Petición de ejemplo 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"Respuesta Responde con un Made .
Ejemplo {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Estados posibles: 200400401403404429
DELETE /v2/me/events/{id}Borrar uno de tus eventos.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio La id del evento.
Petición de ejemplo curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/events/2a3b4c5d-6e7f-4809-9a1b-2c3d4e5f6a7b"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
GET /v2/me/events/{id}/signupsQuién se ha apuntado a uno de tus eventos.
Derecho read con ETag desde v2.19 Parámetros Nombre Tipo Significado iden la ruta stringobligatorio La id del evento.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/events/2a3b4c5d-6e7f-4809-9a1b-2c3d4e5f6a7b/signups"Respuesta Responde con una página de EventSignup , como `items` y `next`.
Ejemplo {
"items": [
{
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"at": 1758624000000
}
],
"next": null
}Estados posibles: 200304400401404429
POST /v2/events/{id}/signupApuntarte a un evento o darte de baja.
Solo en eventos con inscripción, no en los tuyos. Si está lleno, 409.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio La id del evento. goingen el cuerpo booleanobligatorio true te apunta, false te da de baja.
Petición de ejemplo 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"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
Grupos Los grupos abiertos y los tuyos, sus publicaciones, miembros, roles y enlaces de invitación.
GET /v2/communitiesLos grupos abiertos de esta instancia; con mine=true, los grupos de tu cuenta.
Derecho read con ETag desde v2.0 Ordenada por número de miembros y sin paginar; next es siempre null.
Parámetros Nombre Tipo Significado limiten la dirección integeropcional Entradas por página: 20 por defecto, como máximo 50. mineen la dirección booleanopcional true para los grupos de tu cuenta, también internos y ocultos, por nombre.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities?limit=20"Respuesta Responde con una página de Community , como `items` y `next`.
Ejemplo {
"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
}Estados posibles: 200304401429
GET /v2/communities/{id}Un solo grupo, por su id.
Derecho read con ETag desde v2.0 Los grupos internos y ocultos solo si tu cuenta es miembro.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60"Respuesta Responde con un Community .
Ejemplo {
"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
}
}Estados posibles: 200304400401404429
GET /v2/communities/{id}/postsLas publicaciones del canal del feed de un grupo, las más recientes primero.
Derecho read paginable con ETag desde v2.0 En las rutas públicas, counts.likes y counts.reposts son siempre 0 y pinned es false.
Si el canal del feed está desactivado, la ruta responde 409 con feed_off.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo. limiten la dirección integeropcional Entradas por página: 20 por defecto, como máximo 50. cursoren la dirección stringopcional El next de la respuesta anterior. Sin él, desde el principio.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/posts?limit=20"Respuesta Responde con una página de Post , como `items` y `next`.
Ejemplo {
"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"
}Estados posibles: 200304400401404429
GET /v2/communities/{id}/membersLos miembros de un grupo con sus roles.
Derecho read con ETag desde v2.15 Primero la dirección, luego por el rol más alto; como mucho 300.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/members"Respuesta Responde con una página de GroupMember , como `items` y `next`.
Ejemplo {
"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
}Estados posibles: 200304400401404429
GET /v2/communities/{id}/rolesLos roles de un grupo, el más alto primero, @everyone al final.
Derecho read con ETag desde v2.15 Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/roles"Respuesta Responde con una página de Role , como `items` y `next`.
Ejemplo {
"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
}Estados posibles: 200304400401404429
GET /v2/communities/{id}/bellQué notificaciones te envía un grupo.
Derecho read con ETag desde v2.15 Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/bell"Respuesta Responde con un Bell .
Ejemplo {
"level": "important"
}Estados posibles: 200304400401404429
GET /v2/invites/{code}El grupo detrás de un enlace de invitación, antes de unirse.
Derecho read con ETag desde v2.15 Parámetros Nombre Tipo Significado codeen la ruta stringobligatorio El código de un enlace de invitación, el final de su dirección.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/invites/k7Qm2xPa"Respuesta Responde con un InvitePreview .
Ejemplo {
"community": {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening",
"members": 312,
"rules": [
"Be kind.",
"No advertising."
]
},
"member": false
}Estados posibles: 200304400401404429
PUT /v2/roles/{id}/selfTomar o dejar un rol elegible.
Solo roles que la dirección ofrece como elegibles (selfable), y solo para tu propia cuenta.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un rol. activeen el cuerpo booleanopcional false quita el rol; si no, se da.
Petición de ejemplo 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"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
GET /v2/communities/{id}/emojisLos emojis propios de un grupo.
Derecho read con ETag desde v2.20 Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/emojis"Respuesta Responde con una página de GroupEmoji , como `items` y `next`.
Ejemplo {
"items": [
{
"name": "seedling",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false
}
],
"next": null
}Estados posibles: 200304400401404429
PUT /v2/communities/{id}/bellAjustar qué notificaciones te envía un grupo.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo. levelen el cuerpo stringobligatorio Qué notificaciones llegan.allimportantoff
Petición de ejemplo 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"Respuesta Responde con un Bell .
Ejemplo {
"level": "important"
}Estados posibles: 200400401403404429
POST /v2/invites/{code}/joinUnirse a un grupo con un enlace de invitación.
Parámetros Nombre Tipo Significado codeen la ruta stringobligatorio El código de un enlace de invitación, el final de su dirección. rulesen el cuerpo booleanopcional true si aceptas las normas del grupo; necesario si tiene.
Petición de ejemplo curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/invites/k7Qm2xPa/join"Respuesta Responde con un Joined .
Ejemplo {
"community": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60"
}Estados posibles: 200400401403404429
GET /v2/communities/{id}/botsLos bots de un grupo con lo que permite su rol.
Derecho read con ETag desde v2.19 Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/bots"Respuesta Responde con una página de GroupBot , como `items` y `next`.
Ejemplo {
"items": [
{
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "gardenbot",
"name": "Garden bot",
"description": "Reminds the group of watering days.",
"permissions": [
"send",
"view"
]
}
],
"next": null
}Estados posibles: 200304400401404429
Canales Los canales de tus grupos y su chat: leer, escribir, marcar como leído.
GET /v2/communities/{id}/channelsLos canales de un grupo que ves, en su orden.
Derecho read con ETag desde v2.15 El canal del feed (kind: feed) solo aparece aquí mientras está activado; sus publicaciones llegan por /communities/{id}/posts.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/channels"Respuesta Responde con una página de Channel , como `items` y `next`.
Ejemplo {
"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
}Estados posibles: 200304400401404429
GET /v2/channels/{id}/messagesLos mensajes de un canal de chat, los más recientes primero.
Derecho read paginable con ETag desde v2.15 Hasta 50 mensajes por página. Faltan los mensajes de cuentas que bloqueaste o que te bloquearon.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un canal. cursoren la dirección stringopcional El next de la respuesta anterior. Sin él, desde el principio. threaden la dirección stringopcional El mensaje cuyo hilo se lee: él y sus respuestas en lugar del chat.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a/messages"Respuesta Responde con una página de ChannelMessage , como `items` y `next`.
Ejemplo {
"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"
}Estados posibles: 200304400401404429
POST /v2/channels/{id}/messagesEscribir un mensaje en un canal de chat.
@nombre avisa a un miembro, @everyone con el permiso a todos, como mucho seis veces por hora.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un canal. texten el cuerpo stringopcional El texto de la publicación, la respuesta o el mensaje. replyToen el cuerpo stringopcional El id del mensaje del mismo canal al que respondes. mediaen el cuerpo string[]opcional IDs de imágenes subidas en la app, o de un GIF o vídeo de la biblioteca multimedia (desde 2.14). threaden el cuerpo stringopcional El mensaje del chat en cuyo hilo se responde; sin él, el mensaje va al chat. carden el cuerpo objectopcional Una tarjeta { title, text, color, fields: [{ name, value }] }, como máximo 10 campos. buttonsen el cuerpo object[]opcional Hasta 5 botones, cada uno { id, label, style } con style primary, secondary o danger. Una pulsación llega como evento interaction.
Petición de ejemplo 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"Respuesta Responde con un Made .
Ejemplo {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Estados posibles: 200400401403404429
POST /v2/channels/{id}/readMarcar un canal de chat como leído hasta un momento.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un canal. aten el cuerpo integerobligatorio Hasta cuándo está leído, en milisegundos, normalmente el createdAt del mensaje más reciente.
Petición de ejemplo curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a/read"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
DELETE /v2/channel-messages/{id}Borrar uno de tus mensajes en un canal de chat.
Solo tus propios mensajes; los de otros los quita la dirección con el permiso groups .
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un mensaje en un canal de chat.
Petición de ejemplo curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/channel-messages/61a2b3c4-d5e6-4f70-8192-a3b4c5d6e7f8"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
GET /v2/communities/{id}/voiceQuién está ahora en los canales de voz de un grupo, por canal.
Derecho read con ETag desde v2.19 Solo canales que puedes ver. Sin servidor de medios, la lista está vacía.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/voice"Respuesta Responde con una página de VoiceRoom , como `items` y `next`.
Ejemplo {
"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
}Estados posibles: 200304400401404429
Gestionar grupos Lo que permiten los ajustes de un grupo en la app, con el permiso groups . Lo que puede tu cuenta lo decide el grupo como en la app: dirección, roles y su rango.
POST /v2/communities/{id}/emojisDar un emoji al grupo.
Derecho groups desde v2.20 Solo quien puede gestionar los canales del grupo. La imagen se sube como un emoji propio (POST /me/emojis/pictures); un nombre solo existe una vez entre todos los emojis.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo. nameen el cuerpo stringobligatorio El nombre con el que escribes el emoji, como :nombre:. pictureen el cuerpo stringobligatorio La id de POST /me/emojis/pictures.
Petición de ejemplo 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"Respuesta Responde con una página de GroupEmoji , como `items` y `next`.
Ejemplo {
"items": [
{
"name": "seedling",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false
}
],
"next": null
}Estados posibles: 200400401403404429
DELETE /v2/communities/{id}/emojis/{name}Quitar un emoji del grupo.
Derecho groups desde v2.20 Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo. nameen la ruta stringobligatorio El nombre del emoji, sin dos puntos.
Petición de ejemplo curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/emojis/seedling"Respuesta Responde con una página de GroupEmoji , como `items` y `next`.
Ejemplo {
"items": [
{
"name": "seedling",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false
}
],
"next": null
}Estados posibles: 200400401403404429
POST /v2/communities/{id}/rolesCrear un rol.
Derecho groups desde v2.15 Solo roles por debajo de tu rol más alto y solo permisos que tienes tú; la dirección está por encima de todos.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo. nameen el cuerpo stringopcional El nombre del rol; @everyone conserva el suyo. coloren el cuerpo stringopcional El color; vacío para ninguno.indigovioletroseambergreenteal permissionsen el cuerpo string[]opcional Los permisos: view, send, attach, post_feed, invite, mention_everyone, moderate, timeout_members, kick_members, ban_members, manage_channels, manage_roles. selfableen el cuerpo booleanopcional true: los miembros toman el rol por sí mismos. Solo para roles que no permiten más que participar (view, send, attach, voice_connect, voice_speak, voice_video).
Petición de ejemplo 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"Respuesta Responde con un Made .
Ejemplo {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Estados posibles: 200400401403404429
PUT /v2/roles/{id}Cambiar el nombre, el color y los permisos de un rol.
Derecho groups desde v2.15 Sustituye nombre, color y permisos; lo que omitas queda vacío.
Solo roles por debajo de tu rol más alto y solo permisos que tienes tú; la dirección está por encima de todos.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un rol. nameen el cuerpo stringopcional El nombre del rol; @everyone conserva el suyo. coloren el cuerpo stringopcional El color; vacío para ninguno.indigovioletroseambergreenteal permissionsen el cuerpo string[]opcional Los permisos: view, send, attach, post_feed, invite, mention_everyone, moderate, timeout_members, kick_members, ban_members, manage_channels, manage_roles. selfableen el cuerpo booleanopcional true: los miembros toman el rol por sí mismos. Solo para roles que no permiten más que participar (view, send, attach, voice_connect, voice_speak, voice_video).
Petición de ejemplo 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"Respuesta Responde con un Made .
Ejemplo {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Estados posibles: 200400401403404429
DELETE /v2/roles/{id}Borrar un rol.
Derecho groups desde v2.15 Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un rol.
Petición de ejemplo curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/roles/4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
PUT /v2/communities/{id}/roles/orderFijar el rango de los roles.
Derecho groups desde v2.15 Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo. rolesen el cuerpo string[]obligatorio Los id de todos los roles por debajo de tu rol más alto, el más alto primero; para la dirección, todos excepto @everyone.
Petición de ejemplo curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/roles/order"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
PUT /v2/roles/{id}/members/{member}Dar o quitar un rol a un miembro.
Derecho groups desde v2.15 Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un rol. memberen la ruta stringobligatorio El id de la cuenta de un miembro. activeen el cuerpo booleanopcional false quita el rol; si no, se da.
Petición de ejemplo 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"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
POST /v2/communities/{id}/channelsCrear un canal de chat.
Derecho groups desde v2.15 Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo. nameen el cuerpo stringopcional El nombre, sin #; vacío para el nombre que la app da en cada idioma. topicen el cuerpo stringopcional El tema que aparece encima del canal. categoryen el cuerpo stringopcional El id de la categoría donde va el canal; vacío para ninguna. emojien el cuerpo stringopcional Un emoji como símbolo. iconen el cuerpo stringopcional Un símbolo del conjunto de la app, por su nombre.homehashmegaphonevolumemessagehelpinfobellcalendarbookbookmarkpinshieldstarheartsparklesflamezaptrophygiftrocketlightbulbcodewrenchbriefcasegraduationpalettecamerafilmmusicgamepaddumbbellleafflowerpawsunmooncloudglobemapcoffeepizzasmile imageen el cuerpo stringopcional El id de una imagen que subiste con /media/emoji. coloren el cuerpo stringopcional El color del recuadro.brandindigovioletroseambergreentealred shapeen el cuerpo stringopcional La forma del recuadro; sin ella, un círculo.circlesquaretrianglediamondhexagonoctagonshieldstar
Petición de ejemplo 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"Respuesta Responde con un Made .
Ejemplo {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Estados posibles: 200400401403404429
PUT /v2/channels/{id}Cambiar el nombre, el tema y la categoría de un canal.
Derecho groups desde v2.15 Sustituye nombre, tema y categoría; lo que omitas queda vacío.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un canal. nameen el cuerpo stringopcional El nombre, sin #; vacío para el nombre que la app da en cada idioma. topicen el cuerpo stringopcional El tema que aparece encima del canal. categoryen el cuerpo stringopcional El id de la categoría donde va el canal; vacío para ninguna. emojien el cuerpo stringopcional Un emoji como símbolo. iconen el cuerpo stringopcional Un símbolo del conjunto de la app, por su nombre.homehashmegaphonevolumemessagehelpinfobellcalendarbookbookmarkpinshieldstarheartsparklesflamezaptrophygiftrocketlightbulbcodewrenchbriefcasegraduationpalettecamerafilmmusicgamepaddumbbellleafflowerpawsunmooncloudglobemapcoffeepizzasmile imageen el cuerpo stringopcional El id de una imagen que subiste con /media/emoji. coloren el cuerpo stringopcional El color del recuadro.brandindigovioletroseambergreentealred shapeen el cuerpo stringopcional La forma del recuadro; sin ella, un círculo.circlesquaretrianglediamondhexagonoctagonshieldstar
Petición de ejemplo 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"Respuesta Responde con un Made .
Ejemplo {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Estados posibles: 200400401403404429
DELETE /v2/channels/{id}Borrar un canal de chat con sus mensajes.
Derecho groups desde v2.15 El canal del feed no se puede borrar, solo desactivar.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un canal.
Petición de ejemplo curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
PUT /v2/communities/{id}/channels/orderFijar el orden de las categorías y los canales de chat.
Derecho groups desde v2.15 Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo. categoriesen el cuerpo string[]obligatorio Los id de todas las categorías del grupo en el nuevo orden. channelsen el cuerpo string[]obligatorio Los id de todos los canales de chat del grupo en el nuevo orden.
Petición de ejemplo curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/channels/order"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
PUT /v2/communities/{id}/channels/shapeFijar la forma de todos los símbolos de canal del grupo.
Derecho groups desde v2.20 Solo la dirección del grupo.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo. shapeen el cuerpo stringopcional La forma de todos los símbolos del grupo; si se omite, cada canal tiene la suya.circlesquaretrianglediamondhexagonoctagonshieldstar
Petición de ejemplo curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/channels/shape"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
GET /v2/channels/{id}/overridesLo que los roles pueden hacer distinto en un canal que en el grupo.
Derecho groups con ETag desde v2.15 Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un canal.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a/overrides"Respuesta Responde con una página de ChannelOverride , como `items` y `next`.
Ejemplo {
"items": [
{
"role": "4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8",
"allow": [
"send"
],
"deny": []
}
],
"next": null
}Estados posibles: 200304400401403404429
PUT /v2/channels/{id}/overrides/{role}Fijar lo que un rol puede hacer distinto en un canal.
Derecho groups desde v2.15 No para roles iguales o superiores a tu rol más alto.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un canal. roleen la ruta stringobligatorio El id de un rol. allowen el cuerpo string[]opcional Lo que el rol puede hacer aquí además: en un chat view, send, attach, mention_everyone, moderate, en el canal del feed view y post_feed. denyen el cuerpo string[]opcional Lo que el rol no puede aquí, de los mismos permisos. Ambas listas vacías quitan la diferencia.
Petición de ejemplo 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"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
POST /v2/communities/{id}/categoriesCrear una categoría para canales.
Derecho groups desde v2.15 Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo. nameen el cuerpo stringobligatorio El nombre de la categoría. emojien el cuerpo stringopcional Un emoji como símbolo. iconen el cuerpo stringopcional Un símbolo del conjunto de la app, por su nombre.homehashmegaphonevolumemessagehelpinfobellcalendarbookbookmarkpinshieldstarheartsparklesflamezaptrophygiftrocketlightbulbcodewrenchbriefcasegraduationpalettecamerafilmmusicgamepaddumbbellleafflowerpawsunmooncloudglobemapcoffeepizzasmile imageen el cuerpo stringopcional El id de una imagen que subiste con /media/emoji. coloren el cuerpo stringopcional El color del recuadro.brandindigovioletroseambergreentealred
Petición de ejemplo 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"Respuesta Responde con un Made .
Ejemplo {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Estados posibles: 200400401403404429
PUT /v2/categories/{id}Renombrar una categoría.
Derecho groups desde v2.15 Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de una categoría. nameen el cuerpo stringobligatorio El nombre de la categoría. emojien el cuerpo stringopcional Un emoji como símbolo. iconen el cuerpo stringopcional Un símbolo del conjunto de la app, por su nombre.homehashmegaphonevolumemessagehelpinfobellcalendarbookbookmarkpinshieldstarheartsparklesflamezaptrophygiftrocketlightbulbcodewrenchbriefcasegraduationpalettecamerafilmmusicgamepaddumbbellleafflowerpawsunmooncloudglobemapcoffeepizzasmile imageen el cuerpo stringopcional El id de una imagen que subiste con /media/emoji. coloren el cuerpo stringopcional El color del recuadro.brandindigovioletroseambergreentealred
Petición de ejemplo 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"Respuesta Responde con un Made .
Ejemplo {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Estados posibles: 200400401403404429
DELETE /v2/categories/{id}Borrar una categoría.
Derecho groups desde v2.15 Sus canales se quedan, sin categoría.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de una categoría.
Petición de ejemplo curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/categories/9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
PUT /v2/communities/{id}/feedActivar o desactivar el canal del feed de un grupo.
Derecho groups desde v2.15 Desactivado, las publicaciones siguen guardadas pero solo las ven sus autores.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo. onen el cuerpo booleanobligatorio true activa el canal del feed, false lo desactiva.
Petición de ejemplo curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/feed"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
GET /v2/communities/{id}/invitesLos enlaces de invitación de un grupo que siguen valiendo.
Derecho groups con ETag desde v2.15 La dirección ve todos; los demás, solo los suyos.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/invites"Respuesta Responde con una página de InviteLink , como `items` y `next`.
Ejemplo {
"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
}Estados posibles: 200304400401403404429
POST /v2/communities/{id}/invitesCrear un enlace de invitación.
Derecho groups desde v2.15 Un enlace solo vale mientras puedas invitar, y desaparece cuando sales.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo. daysen el cuerpo integeropcional Cuántos días vale el enlace; sin él, hasta que se retire.1730 usesen el cuerpo integeropcional Cuántas veces se puede usar el enlace; sin él, sin límite.151025100
Petición de ejemplo 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"Respuesta Responde con un Made .
Ejemplo {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Estados posibles: 200400401403404429
DELETE /v2/invites/{code}Retirar un enlace de invitación.
Derecho groups desde v2.15 Parámetros Nombre Tipo Significado codeen la ruta stringobligatorio El código de un enlace de invitación, el final de su dirección.
Petición de ejemplo curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/invites/k7Qm2xPa"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
POST /v2/channel-messages/{id}/removeQuitar de un canal el mensaje de otro miembro.
Derecho groups desde v2.15 Queda en el registro del grupo y como mucho 60 por hora, como en la app.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un mensaje en un canal de chat.
Petición de ejemplo curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/channel-messages/61a2b3c4-d5e6-4f70-8192-a3b4c5d6e7f8/remove"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
POST /v2/communities/{id}/posts/{post}/removeQuitar una publicación de un grupo.
Derecho groups desde v2.15 Queda en el registro del grupo y como mucho 60 por hora, como en la app.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo. posten la ruta stringobligatorio El id de una publicación. reasonen el cuerpo stringobligatorio El motivo que lee el miembro.
Petición de ejemplo 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"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
DELETE /v2/communities/{id}/members/{member}Expulsar a un miembro de un grupo.
Derecho groups desde v2.15 Desde 2.16 es una expulsión: el miembro puede volver. Quien deba quedarse fuera se veta.
Solo con el permiso correspondiente y solo con miembros por debajo de tu rol más alto; a la codirección solo como fundador.
Queda en el registro del grupo y como mucho 60 por hora, como en la app.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo. memberen la ruta stringobligatorio El id de la cuenta de un miembro. reasonen el cuerpo stringobligatorio El motivo que lee el miembro.
Petición de ejemplo 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"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
PUT /v2/communities/{id}/members/{member}/timeoutSilenciar a un miembro.
Derecho groups desde v2.16 Un nuevo silencio sustituye al que esté en curso. Salir y volver a unirse no lo termina.
Solo con el permiso correspondiente y solo con miembros por debajo de tu rol más alto; a la codirección solo como fundador.
Queda en el registro del grupo y como mucho 60 por hora, como en la app.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo. memberen la ruta stringobligatorio El id de la cuenta de un miembro. secondsen el cuerpo integerobligatorio Cuánto tiempo, en segundos.60300600360086400604800 reasonen el cuerpo stringopcional Un motivo que lee el miembro; opcional.
Petición de ejemplo 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"Respuesta Responde con un Until .
Ejemplo {
"until": 1758624600000
}Estados posibles: 200400401403404429
DELETE /v2/communities/{id}/members/{member}/timeoutQuitar un silencio.
Derecho groups desde v2.16 Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo. memberen la ruta stringobligatorio El id de la cuenta de un miembro.
Petición de ejemplo 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"Respuesta Responde con un Until .
Ejemplo {
"until": 1758624600000
}Estados posibles: 200400401403404429
GET /v2/communities/{id}/bansLos vetos vigentes de un grupo.
Derecho groups con ETag desde v2.16 Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/bans"Respuesta Responde con una página de Ban , como `items` y `next`.
Ejemplo {
"items": [
{
"member": {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"bot": false
},
"until": 1759228800000,
"createdAt": 1758624000000,
"by": "Mara 🌻"
}
],
"next": null
}Estados posibles: 200304400401403404429
PUT /v2/communities/{id}/bans/{member}Vetar a un miembro.
Derecho groups desde v2.16 Sin days, el veto dura hasta que se levante.
Solo con el permiso correspondiente y solo con miembros por debajo de tu rol más alto; a la codirección solo como fundador.
Queda en el registro del grupo y como mucho 60 por hora, como en la app.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo. memberen la ruta stringobligatorio El id de la cuenta de un miembro. daysen el cuerpo integeropcional Cuánto tiempo, en días; omítelo para un veto sin fin.1730 reasonen el cuerpo stringobligatorio El motivo que lee el miembro.
Petición de ejemplo 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"Respuesta Responde con un Until .
Ejemplo {
"until": 1758624600000
}Estados posibles: 200400401403404429
DELETE /v2/communities/{id}/bans/{member}Levantar un veto.
Derecho groups desde v2.16 Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo. memberen la ruta stringobligatorio El id de la cuenta de un miembro.
Petición de ejemplo 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"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
GET /v2/communities/{id}/logEl registro de la dirección: quién quitó qué y por qué.
Derecho groups con ETag desde v2.15 Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/log"Respuesta Responde con una página de LogEntry , como `items` y `next`.
Ejemplo {
"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
}Estados posibles: 200304400401403404429
POST /v2/communitiesFundar un grupo. Responde con su id; tú eres el fundador.
Derecho groups desde v2.19 Necesita el permiso groups. Sin indicarlo, el grupo es internal y de entrada libre; uno oculto solo con invitación. Si los miembros pueden fundar grupos lo decide el operador.
Parámetros Nombre Tipo Significado nameen el cuerpo stringobligatorio El nombre, como máximo 60 caracteres. descriptionen el cuerpo stringopcional La descripción, como máximo 240 caracteres. handleen el cuerpo stringopcional El identificador para menciones @# y el enlace: de 3 a 30 minúsculas, cifras o _. tagsen el cuerpo string[]opcional Hasta 5 #tags sobre el tema del grupo. joinPolicyen el cuerpo stringopcional Cómo se entra: open libre, application con solicitud, invite solo con invitación.openapplicationinvite visibilityen el cuerpo stringopcional Quién ve el grupo: open todos, internal su contenido solo los miembros, hidden solo los miembros en absoluto.openinternalhidden
Petición de ejemplo 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"Respuesta Responde con un Made .
Ejemplo {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Estados posibles: 200400401403429
PUT /v2/communities/{id}Cambiar un grupo que diriges. Lo que no indiques se mantiene.
Derecho groups desde v2.19 Necesita el permiso groups y dirigir el grupo. La dirección, la disolución y las ventajas de chispas siguen en la app.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un grupo. nameen el cuerpo stringopcional El nombre, como máximo 60 caracteres. descriptionen el cuerpo stringopcional La descripción, como máximo 240 caracteres. handleen el cuerpo stringopcional El identificador para menciones @# y el enlace: de 3 a 30 minúsculas, cifras o _. tagsen el cuerpo string[]opcional Hasta 5 #tags sobre el tema del grupo. joinPolicyen el cuerpo stringopcional Cómo se entra: open libre, application con solicitud, invite solo con invitación.openapplicationinvite visibilityen el cuerpo stringopcional Quién ve el grupo: open todos, internal su contenido solo los miembros, hidden solo los miembros en absoluto.openinternalhidden imageen el cuerpo stringopcional La id de una imagen subida (POST /me/pictures) como imagen del grupo. Vacía la quita. banneren el cuerpo stringopcional La id de una imagen subida como portada del grupo. Vacía la quita.
Petición de ejemplo 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"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
Bots Lo que ocurre en los grupos de un bot, en tiempo real: como flujo, página a página o entregado a una dirección.
GET /v2/eventsLos eventos de los grupos del bot desde un evento, página a página.
Solo con el token de un bot. Los eventos de un canal solo si el bot puede verlo.
Los eventos se guardan un día. next es el número del último, como since para la página siguiente.
Parámetros Nombre Tipo Significado sinceen la dirección stringopcional El número del último evento que el bot ya tiene. Sin él, el flujo empieza ahora y la lista por el más antiguo.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/events?since=0"Respuesta Responde con una página de BotEvent , como `items` y `next`.
Ejemplo {
"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
}Estados posibles: 200401429
GET /v2/events/streamLos eventos de los grupos del bot en cuanto ocurren (server-sent events).
Derecho read con ETag desde v2.20 La conexión queda abierta y se cierra tras diez minutos; el cliente se reconecta y envía Last-Event-ID.
Solo con el token de un bot. Los eventos de un canal solo si el bot puede verlo.
Parámetros Nombre Tipo Significado sinceen la dirección stringopcional El número del último evento que el bot ya tiene. Sin él, el flujo empieza ahora y la lista por el más antiguo.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/events/stream?since=0"Respuesta Responde con un BotEvent .
Ejemplo {
"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
}
}
}Estados posibles: 200304401429
GET /v2/me/commandsLos comandos del bot.
Derecho read con ETag desde v2.20 Solo con el token de un bot. Los eventos de un canal solo si el bot puede verlo.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/commands"Respuesta Responde con una página de BotCommand , como `items` y `next`.
Ejemplo {
"items": [
{
"name": "dice",
"description": "Rolls a die"
}
],
"next": null
}Estados posibles: 200304401429
PUT /v2/me/commandsDefinir los comandos del bot, todos a la vez.
Sustituye todos los comandos; una lista vacía los quita. En los chats que el bot puede ver, el campo de texto los ofrece tras «/».
Parámetros Nombre Tipo Significado commandsen el cuerpo object[]obligatorio Hasta 25 comandos, cada uno { name, description }.
Petición de ejemplo 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"Respuesta Responde con una página de BotCommand , como `items` y `next`.
Ejemplo {
"items": [
{
"name": "dice",
"description": "Rolls a die"
}
],
"next": null
}Estados posibles: 200400401403429
POST /v2/interactions/{id}/replyResponder a un comando o a un botón.
En los 15 minutos siguientes al evento command o interaction; con private, solo quien usó el comando o el botón ve la respuesta.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id del evento (data.interaction). texten el cuerpo stringopcional El texto de la publicación, la respuesta o el mensaje. privateen el cuerpo booleanopcional true: solo quien usó el comando o el botón ve la respuesta, durante un día.carden el cuerpo objectopcional Una tarjeta { title, text, color, fields: [{ name, value }] }, como máximo 10 campos. buttonsen el cuerpo object[]opcional Hasta 5 botones, cada uno { id, label, style } con style primary, secondary o danger. Una pulsación llega como evento interaction.
Petición de ejemplo 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"Respuesta Responde con un Made .
Ejemplo {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Estados posibles: 200400401403404429
POST /v2/channels/{id}/voiceOcupar un sitio en un canal de voz para reproducir música o sonido.
Solo con el token de un bot, según lo que permita su rol en el canal. El programa se conecta con un SDK de LiveKit y envía su sonido como micrófono; cada cual ajusta su volumen.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El id de un canal.
Petición de ejemplo curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a/voice"Respuesta Responde con un VoiceSeat .
Ejemplo {
"url": "wss://voice.example.org",
"token": "eyJhbGciOiJIUzI1NiJ9…",
"iceServers": [
{
"urls": [
"stun:turn.example.org:3478"
]
}
],
"speak": true,
"video": false
}Estados posibles: 200400401403404429
Descubrir Tendencias, búsqueda y los emojis propios de la instancia.
GET /v2/tagsLas etiquetas que están en marcha ahora mismo.
Derecho read con ETag desde v2.0 Como máximo 10 etiquetas en tendencia por puntos: cada uso cuenta 1 y se reduce a la mitad cada 3 días; una cuenta suma como máximo 3 al día. posts es la puntuación redondeada. limit solo acorta la lista. Las etiquetas que destaca el equipo pueden aparecer más arriba.
Parámetros Nombre Tipo Significado limiten la dirección integeropcional Entradas por página: 20 por defecto, como máximo 50.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/tags?limit=10"Respuesta Responde con una página de Tag , como `items` y `next`.
Ejemplo {
"items": [
{
"tag": "garden",
"posts": 58
}
],
"next": null
}Estados posibles: 200304401429
GET /v2/searchUna búsqueda por publicaciones, nombres, alias y etiquetas.
Derecho read con ETag desde v2.0 Busca solo lo público: publicaciones fuera de grupos, perfiles y etiquetas. limit se aplica por tipo.
Parámetros Nombre Tipo Significado qen la dirección stringobligatorio Las palabras que se buscan. typeen la dirección stringopcional Qué clase de resultado. Sin él, todas las clases.allpostsprofilestags limiten la dirección integeropcional Entradas por página: 20 por defecto, como máximo 50.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/search?q=garden&type=posts"Respuesta Responde con un SearchResult .
Ejemplo {
"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
}
]
}Estados posibles: 200304400401429
GET /v2/emojisLos emojis propios de la instancia, con la dirección de sus imágenes.
Derecho read con ETag desde v2.1 En los textos un emoji aparece como :name:. Sustitúyelo por la imagen de esta lista; los nombres desconocidos quedan como texto.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/emojis"Respuesta Responde con una página de Emoji , como `items` y `next`.
Ejemplo {
"items": [
{
"name": "tellmelo",
"url": "/api/media?id=e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b"
}
],
"next": null
}Estados posibles: 200304401429
GIF y vídeos La biblioteca multimedia: encontrar GIF y vídeos compartidos, subir y gestionar los tuyos e insertarlos en otros sitios web.
GET /v2/mediaGIF o vídeos compartidos, los más usados primero.
Derecho read paginable con ETag desde v2.14 Sin las cuentas que has bloqueado o que te han bloqueado. Carga url y poster con la clave en el encabezado, para las publicaciones en tellmelo.
Para otros sitios web, solo lo que tiene embed: sus direcciones funcionan sin clave, en cualquier navegador.
Parámetros Nombre Tipo Significado kinden la dirección stringopcional gif o video; si no se indica, gif.gifvideoqen la dirección stringopcional Palabras que aparecen en el nombre o en las palabras clave. anywhereen la dirección booleanopcional true: solo lo que también puede aparecer en otros sitios web.limiten la dirección integeropcional Entradas por página: 20 por defecto, como máximo 50. cursoren la dirección stringopcional El next de la respuesta anterior. Sin él, desde el principio.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/media?kind=gif&q=bees&anywhere=true&limit=20"Respuesta Responde con una página de MediaItem , como `items` y `next`.
Ejemplo {
"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"
}Estados posibles: 200304400401429
GET /v2/media/mineTu propia biblioteca multimedia, lo más nuevo primero.
Derecho media paginable con ETag desde v2.14 Parámetros Nombre Tipo Significado kinden la dirección stringopcional gif o video; si no se indica, gif.gifvideoqen la dirección stringopcional Palabras que aparecen en el nombre o en las palabras clave. limiten la dirección integeropcional Entradas por página: 20 por defecto, como máximo 50. cursoren la dirección stringopcional El next de la respuesta anterior. Sin él, desde el principio.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/media/mine?kind=gif&q=bees&limit=20"Respuesta Responde con una página de MediaItem , como `items` y `next`.
Ejemplo {
"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"
}Estados posibles: 200304400401403429
GET /v2/media/{id}Un GIF o vídeo, tuyo o compartido.
Derecho read con ETag desde v2.14 Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El ID del GIF o vídeo.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/media/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918"Respuesta Responde con un MediaItem .
Ejemplo {
"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>"
}
}Estados posibles: 200304400401404429
POST /v2/media/uploadsIniciar una subida.
Después envía el archivo en fragmentos de como máximo piece bytes a /media/uploads/{upload}. Sin un fragmento nuevo, una subida termina a los 15 minutos.
Se aplican los límites de la app: GIF de hasta 15 MB, vídeos según la suscripción en tamaño y duración, GIF por día, GIF privados, puntos de vídeo por semana. Si no, recibes 409, 413 o 429.
Parámetros Nombre Tipo Significado kinden el cuerpo stringobligatorio gif o video; si no se indica, gif.gifvideosizeen el cuerpo integerobligatorio El tamaño del archivo completo en bytes. nameen el cuerpo stringobligatorio El nombre con el que se encuentra: de 2 a 40 caracteres. keywordsen el cuerpo stringopcional Palabras clave para la búsqueda, separadas por espacios. shareden el cuerpo booleanopcional true: compartido con todos en tellmelo.anywhereen el cuerpo booleanopcional true: compartido y permitido también en otros sitios web. Solo junto con shared.
Petición de ejemplo 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"Respuesta Responde con un UploadStarted .
Ejemplo {
"upload": "e7c1a2b3-4d5e-4f60-8a9b-0c1d2e3f4a5b",
"piece": 4194304
}Estados posibles: 200400401403429
PUT /v2/media/uploads/{upload}Enviar un fragmento del archivo.
El cuerpo es el propio fragmento (application/octet-stream), no JSON. Si no continúa lo anterior, recibes 409 con received: sigue desde ahí. Tras el último fragmento se convierte el archivo; la respuesta incluye entonces item.
Parámetros Nombre Tipo Significado uploaden la ruta stringobligatorio El upload del inicio. offseten la dirección integerobligatorio Dónde empieza el fragmento en el archivo, en bytes; 0 para el primero.
Petición de ejemplo 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"Respuesta Responde con un UploadPiece .
Ejemplo {
"received": 4194304,
"item": null
}Estados posibles: 200400401403404429
POST /v2/media/{id}Cambiar uno de tus GIF o vídeos.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El ID del GIF o vídeo. nameen el cuerpo stringopcional El nombre con el que se encuentra: de 2 a 40 caracteres. keywordsen el cuerpo stringopcional Palabras clave para la búsqueda, separadas por espacios. shareden el cuerpo booleanopcional true: compartido con todos en tellmelo.anywhereen el cuerpo booleanopcional true: compartido y permitido también en otros sitios web. Solo junto con shared.
Petición de ejemplo 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"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
DELETE /v2/media/{id}Eliminar uno de tus GIF o vídeos.
Las publicaciones que ya lo muestran lo conservan. En otros sitios web desaparece en pocos minutos.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio El ID del GIF o vídeo.
Petición de ejemplo curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/media/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
Tu cuenta Tu perfil, tu feed, tus propios emojis y tus webhooks.
GET /v2/meTu propio perfil, con el id que esperan las demás rutas.
Derecho read con ETag desde v2.0 Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me"Respuesta Responde con un Profile .
Ejemplo {
"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
}Estados posibles: 200304401429
GET /v2/feedTu propio feed, tal como lo compone la aplicación.
Derecho read paginable desde v2.0 Sin ETag, porque el orden cambia constantemente. Una lista empezada se mantiene igual hasta el final.
Parámetros Nombre Tipo Significado taben la dirección stringopcional Qué feed: for-you, following, latest o bookmarks. latest por defecto.for-youfollowinglatestbookmarks tagen la dirección stringopcional Solo publicaciones sobre esta etiqueta: escritas con ella o en las que el servidor la reconoce. Sin ella, ningún filtro. limiten la dirección integeropcional Entradas por página: 20 por defecto, como máximo 50. cursoren la dirección stringopcional El next de la respuesta anterior. Sin él, desde el principio.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/feed?tab=following&limit=20"Respuesta Responde con una página de Post , como `items` y `next`.
Ejemplo {
"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"
}Estados posibles: 200400401429
POST /v2/me/picturesSubir una imagen, como sus bytes. Responde con id y url; luego usas la id como foto de perfil, portada o en una publicación.
PNG, JPEG, WebP o GIF, reconocido por sus primeros bytes; se guarda de nuevo sin metadatos. Una imagen que no se usa en nada se borra más tarde.
Petición de ejemplo 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"Respuesta Responde con un Picture .
Ejemplo {
"id": "8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9"
}Estados posibles: 200401403429
PUT /v2/me/profileCambiar tu perfil: nombre, sobre ti, foto de perfil, portada y color del perfil. Lo que no indiques se mantiene.
Derecho profile desde v2.19 Necesita el permiso profile. Tu @nombre se queda en la app: también es tu nombre de inicio de sesión.
Parámetros Nombre Tipo Significado nameen el cuerpo stringopcional El nombre visible, como máximo 60 caracteres. abouten el cuerpo stringopcional El texto «Sobre ti». avataren el cuerpo stringopcional La id de una imagen subida como foto de perfil. Vacía la quita. banneren el cuerpo stringopcional La id de una imagen subida como portada. Vacía la quita. coloren el cuerpo stringopcional El color del perfil, con una suscripción. null lo quita.indigovioletrosecoralamberlimegreentealskyslatesandnight
Petición de ejemplo 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"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403429
GET /v2/me/emojisTus propios emojis.
Derecho read con ETag desde v2.19 Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/emojis"Respuesta Responde con una página de OwnEmoji , como `items` y `next`.
Ejemplo {
"items": [
{
"name": "sunflower",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false,
"resting": false
}
],
"next": null
}Estados posibles: 200304401429
POST /v2/me/emojis/picturesSubir la imagen de un emoji propio, como sus bytes.
Derecho profile desde v2.19 Los emojis animados necesitan una suscripción. Si tras convertirla es demasiado grande, la imagen se rechaza.
Petición de ejemplo 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"Respuesta Responde con un EmojiPicture .
Ejemplo {
"id": "8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false
}Estados posibles: 200401403429
POST /v2/me/emojisCrear un emoji propio. Responde con todos tus emojis.
Derecho profile desde v2.19 Cuántos emojis puedes crear depende de tu suscripción.
Parámetros Nombre Tipo Significado nameen el cuerpo stringobligatorio El nombre con el que escribes el emoji, como :nombre:. pictureen el cuerpo stringobligatorio La id de POST /me/emojis/pictures.
Petición de ejemplo 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"Respuesta Responde con una página de OwnEmoji , como `items` y `next`.
Ejemplo {
"items": [
{
"name": "sunflower",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false,
"resting": false
}
],
"next": null
}Estados posibles: 200400401403429
DELETE /v2/me/emojis/{name}Quitar un emoji propio. Responde con los demás.
Derecho profile desde v2.19 Parámetros Nombre Tipo Significado nameen la ruta stringobligatorio El nombre del emoji, sin dos puntos.
Petición de ejemplo curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/emojis/sunflower"Respuesta Responde con una página de OwnEmoji , como `items` y `next`.
Ejemplo {
"items": [
{
"name": "sunflower",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false,
"resting": false
}
],
"next": null
}Estados posibles: 200400401403404429
PUT /v2/me/emojis/sharingDecidir si tus seguidores pueden usar tus emojis en sus propios textos.
Derecho profile desde v2.19 Parámetros Nombre Tipo Significado shareden el cuerpo booleanobligatorio true comparte tus emojis con tus seguidores, false no.
Petición de ejemplo curl -X PUT \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"shared":true}' \
"https://api.tellmelo.com/v2/me/emojis/sharing"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403429
GET /v2/me/webhooksTus webhooks con su estado.
Derecho webhooks con ETag desde v2.19 Necesita el permiso webhooks. Los webhooks vienen con una suscripción de organización o como socio.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/webhooks"Respuesta Responde con una página de Webhook , como `items` y `next`.
Ejemplo {
"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
}Estados posibles: 200304401403429
POST /v2/me/webhooksCrear un webhook. Responde con la id y el secreto para las firmas, solo esta vez.
Derecho webhooks desde v2.19 Cada entrega va firmada con el secreto (X-Tellmelo-Signature). Guárdalo; no se vuelve a mostrar.
Parámetros Nombre Tipo Significado urlen el cuerpo stringobligatorio Una dirección HTTPS fuera de redes locales, sin credenciales. kindsen el cuerpo string[]obligatorio De qué se avisa al webhook. Qué tipos tienes disponibles depende de tu suscripción y de si eres socio.replymentiongroup_mentionfollowlikerepostmessagequota_changedquota_giftdrop_claimeddrop_empty
Petición de ejemplo 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"Respuesta Responde con un WebhookCreated .
Ejemplo {
"id": "1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b",
"secret": "whsec_3f9a…"
}Estados posibles: 200400401403429
DELETE /v2/me/webhooks/{id}Borrar un webhook.
Derecho webhooks desde v2.19 Parámetros Nombre Tipo Significado iden la ruta stringobligatorio La id del webhook.
Petición de ejemplo curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/webhooks/1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
POST /v2/me/webhooks/{id}/testEnviar una prueba a un webhook.
Derecho webhooks desde v2.19 Parámetros Nombre Tipo Significado iden la ruta stringobligatorio La id del webhook.
Petición de ejemplo curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/webhooks/1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b/test"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
Notificaciones Lo que ha pasado en tu cuenta, por páginas.
GET /v2/notificationsTus notificaciones, las más nuevas primero.
Derecho read paginable con ETag desde v2.0 Leer no marca nada como leído; eso lo hace POST /notifications/read. Los eventos del mismo tipo en la misma publicación comparten una fila; more dice cuántos.
Parámetros Nombre Tipo Significado limiten la dirección integeropcional Entradas por página: 20 por defecto, como máximo 50. cursoren la dirección stringopcional El next de la respuesta anterior. Sin él, desde el principio.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/notifications?limit=20"Respuesta Responde con una página de Notification , como `items` y `next`.
Ejemplo {
"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"
}Estados posibles: 200304401429
POST /v2/notifications/readMarcar tus notificaciones como leídas.
Petición de ejemplo curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/notifications/read"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200401403429
Mensajes Tu bandeja y tus conversaciones. Una conversación se identifica por la otra cuenta.
GET /v2/conversationsTu buzón: una fila por conversación, la más reciente primero.
Derecho read paginable con ETag desde v2.0 Parámetros Nombre Tipo Significado limiten la dirección integeropcional Entradas por página: 20 por defecto, como máximo 50. cursoren la dirección stringopcional El next de la respuesta anterior. Sin él, desde el principio.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/conversations?limit=20"Respuesta Responde con una página de Conversation , como `items` y `next`.
Ejemplo {
"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"
}Estados posibles: 200304401429
GET /v2/conversations/{with}/messagesLos mensajes de una conversación, los más nuevos primero.
Derecho read paginable con ETag desde v2.0 Leer no marca nada como leído; eso lo hace POST /conversations/{with}/read.
Parámetros Nombre Tipo Significado withen la ruta stringobligatorio El id de la otra cuenta. Una conversación no tiene id propio. limiten la dirección integeropcional Entradas por página: 20 por defecto, como máximo 50. cursoren la dirección stringopcional El next de la respuesta anterior. Sin él, desde el principio.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/conversations/a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05/messages?limit=20"Respuesta Responde con una página de Message , como `items` y `next`.
Ejemplo {
"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"
}Estados posibles: 200304400401404429
POST /v2/conversations/{with}/messagesEnviar un mensaje en una conversación.
Rigen las reglas de la app: quien te ha bloqueado no es accesible y cuentan los ajustes de la otra persona.
Las imágenes, los GIF y los vídeos no se pueden adjuntar a mensajes a través de la API, solo en la app.
Parámetros Nombre Tipo Significado withen la ruta stringobligatorio El id de la otra cuenta. Una conversación no tiene id propio. texten el cuerpo stringobligatorio El texto de la publicación, la respuesta o el mensaje. replyToen el cuerpo stringopcional El id de un mensaje anterior de esta conversación al que responde este. Desde 2.2.
Petición de ejemplo 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"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
POST /v2/conversations/{with}/readMarcar como leídos todos los mensajes de una conversación.
Parámetros Nombre Tipo Significado withen la ruta stringobligatorio El id de la otra cuenta. Una conversación no tiene id propio.
Petición de ejemplo curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/conversations/a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05/read"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
DELETE /v2/conversations/{with}/messages/{id}Borrar uno de tus mensajes.
Solo tus propios mensajes, y solo en las 24 horas siguientes al envío.
Parámetros Nombre Tipo Significado withen la ruta stringobligatorio El id de la otra cuenta. Una conversación no tiene id propio. iden la ruta stringobligatorio El identificador del mensaje.
Petición de ejemplo 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"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
POST /v2/conversations/{with}/plannedProgramar un mensaje para más tarde. Responde con la id del mensaje programado.
Necesita una suscripción con mensajes programados, si no 403. Con cifrado de extremo a extremo en ambos lados solo funciona en la app.
Parámetros Nombre Tipo Significado withen la ruta stringobligatorio El id de la otra cuenta. Una conversación no tiene id propio. texten el cuerpo stringobligatorio El texto de la publicación, la respuesta o el mensaje. sendAten el cuerpo integerobligatorio Cuándo se envía el mensaje, en milisegundos desde 1970.
Petición de ejemplo 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"Respuesta Responde con un Made .
Ejemplo {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Estados posibles: 200400401403404429
GET /v2/me/planned-messagesTus mensajes que aún se van a enviar, por orden de hora.
Derecho read con ETag desde v2.19 Parámetros Nombre Tipo Significado withen la dirección stringopcional Solo los mensajes para esta cuenta (su id).
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/planned-messages"Respuesta Responde con una página de PlannedMessage , como `items` y `next`.
Ejemplo {
"items": [
{
"id": "3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9",
"to": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"text": "Happy birthday! 🎂",
"sendAt": 1758710400000,
"state": "waiting"
}
],
"next": null
}Estados posibles: 200304401429
POST /v2/me/planned-messages/{id}/sendEnviar ahora un mensaje programado retenido o fallido.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio La id del mensaje programado.
Petición de ejemplo curl -X POST \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/planned-messages/3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9/send"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
DELETE /v2/me/planned-messages/{id}Borrar un mensaje programado antes de que se envíe.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio La id del mensaje programado.
Petición de ejemplo curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/planned-messages/3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
Relaciones Me gusta, guardar, compartir, seguir, unirse, bloquear: una ruta, activada y retirada con active. Desde 2.19 también las listas: seguidores, seguidos y tus propios bloqueos y silencios.
POST /v2/relationsDar me gusta, guardar, compartir, seguir, unirse, bloquear, silenciar, según kind.
target es una publicación con like, save y repost, un grupo con join y una cuenta con follow, block y mute. active: false retira la relación.
Parámetros Nombre Tipo Significado kinden el cuerpo stringobligatorio Qué relación: like, save, repost, follow, join, block o mute (desde 2.2).likesaverepostfollowjoinblockmute targeten el cuerpo stringobligatorio El id de la publicación, el perfil o el grupo, según kind. activeen el cuerpo booleanopcional true la establece, false la retira.
Petición de ejemplo 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"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403429
GET /v2/profiles/{handle}/followersQuién sigue a un perfil, los más recientes primero.
Derecho read paginable con ETag desde v2.19 Parámetros Nombre Tipo Significado handleen la ruta stringobligatorio El alias de un perfil, con mayúsculas o minúsculas, da igual. limiten la dirección integeropcional Entradas por página: 20 por defecto, como máximo 50. cursoren la dirección stringopcional El next de la respuesta anterior. Sin él, desde el principio.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/profiles/mara/followers?limit=20"Respuesta Responde con una página de ProfileBrief , como `items` y `next`.
Ejemplo {
"items": [
{
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}Estados posibles: 200304400401404429
GET /v2/profiles/{handle}/followingA quién sigue un perfil, los más recientes primero.
Derecho read paginable con ETag desde v2.19 Parámetros Nombre Tipo Significado handleen la ruta stringobligatorio El alias de un perfil, con mayúsculas o minúsculas, da igual. limiten la dirección integeropcional Entradas por página: 20 por defecto, como máximo 50. cursoren la dirección stringopcional El next de la respuesta anterior. Sin él, desde el principio.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/profiles/mara/following?limit=20"Respuesta Responde con una página de ProfileBrief , como `items` y `next`.
Ejemplo {
"items": [
{
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}Estados posibles: 200304400401404429
GET /v2/me/relationsA quién has bloqueado, silenciado o bloqueado solo para mensajes, los más recientes primero.
Derecho read paginable con ETag desde v2.19 Solo tus propias listas. Activar y retirar se hace con POST /relations.
Parámetros Nombre Tipo Significado kinden la dirección stringobligatorio block bloqueados, mute silenciados, dm_block bloqueados solo para mensajes.blockmutedm_blocklimiten la dirección integeropcional Entradas por página: 20 por defecto, como máximo 50. cursoren la dirección stringopcional El next de la respuesta anterior. Sin él, desde el principio.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/relations?kind=mute&limit=20"Respuesta Responde con una página de ProfileBrief , como `items` y `next`.
Ejemplo {
"items": [
{
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}Estados posibles: 200304400401429
Colecciones Ordena las publicaciones guardadas en tus propias colecciones. Una publicación puede estar en varias; si la sacas de una colección, sigue guardada.
GET /v2/me/collectionsTus colecciones con el número de publicaciones.
Derecho read con ETag desde v2.19 Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/collections"Respuesta Responde con una página de Collection , como `items` y `next`.
Ejemplo {
"items": [
{
"id": "6d5c4b3a-2918-4e7f-a1b2-c3d4e5f60718",
"name": "Recipes",
"count": 12
}
],
"next": null
}Estados posibles: 200304401429
POST /v2/me/collectionsCrear una colección. Responde con su id.
Cuántas colecciones puedes crear depende de tu suscripción.
Parámetros Nombre Tipo Significado nameen el cuerpo stringobligatorio El nombre, como máximo 40 caracteres. Único por cuenta, sin distinguir mayúsculas.
Petición de ejemplo curl -X POST \
-H "Authorization: Bearer tm_key_…" \
-H "Content-Type: application/json" \
-d '{"name":"Recipes"}' \
"https://api.tellmelo.com/v2/me/collections"Respuesta Responde con un Made .
Ejemplo {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}Estados posibles: 200400401403429
PUT /v2/me/collections/{id}Cambiar el nombre de una colección.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio La id de la colección. nameen el cuerpo stringobligatorio El nombre, como máximo 40 caracteres. Único por cuenta, sin distinguir mayúsculas.
Petición de ejemplo 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"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
DELETE /v2/me/collections/{id}Borrar una colección.
Las publicaciones que contiene siguen guardadas.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio La id de la colección.
Petición de ejemplo curl -X DELETE \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/collections/6d5c4b3a-2918-4e7f-a1b2-c3d4e5f60718"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
GET /v2/me/collections/{id}/postsLas publicaciones de una colección, como en la pestaña de guardados.
Derecho read paginable desde v2.19 Parámetros Nombre Tipo Significado iden la ruta stringobligatorio La id de la colección. limiten la dirección integeropcional Entradas por página: 20 por defecto, como máximo 50. cursoren la dirección stringopcional El next de la respuesta anterior. Sin él, desde el principio.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/me/collections/6d5c4b3a-2918-4e7f-a1b2-c3d4e5f60718/posts?limit=20"Respuesta Responde con una página de Post , como `items` y `next`.
Ejemplo {
"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"
}Estados posibles: 200400401404429
POST /v2/me/collections/{id}/postsMeter una publicación en una colección o sacarla.
Meter una publicación también la guarda. Solo publicaciones visibles.
Parámetros Nombre Tipo Significado iden la ruta stringobligatorio La id de la colección. posten el cuerpo stringobligatorio La id de la publicación. insideen el cuerpo booleanopcional true mete la publicación (por defecto), false la saca.
Petición de ejemplo 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"Respuesta Responde con un Ok .
Ejemplo {
"ok": true
}Estados posibles: 200400401403404429
Regalos Consultar el contingente de un socio y regalar desde él, poner regalos bajo publicaciones y seguirlos de cerca. Recogerlos queda reservado a las personas, en la app.
GET /v2/partner/quotaLo que te queda por regalar en tu contingente.
Derecho read con ETag desde v2.12 Solo para socios con contingente; los demás reciben 403.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/partner/quota"Respuesta Responde con un Quota .
Ejemplo {
"months": 120,
"sparks": 500,
"looks": [
{
"id": "frame-gold",
"name": "Goldring",
"kind": "frame",
"quantity": 25
}
]
}Estados posibles: 200304401429
GET /v2/partner/giftsLo que has regalado de tu contingente, a quién y cuándo, lo más reciente primero.
Derecho read paginable con ETag desde v2.12 Solo para socios con contingente; los demás reciben 403.
Parámetros Nombre Tipo Significado limiten la dirección integeropcional Entradas por página: 20 por defecto, como máximo 50. cursoren la dirección stringopcional El next de la respuesta anterior. Sin él, desde el principio.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/partner/gifts?limit=20"Respuesta Responde con una página de QuotaGift , como `items` y `next`.
Ejemplo {
"items": [
{
"item": "plan",
"quantity": 3,
"itemId": null,
"recipient": {
"handle": "jon",
"name": "Jon"
},
"createdAt": 1758627600000
}
],
"next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}Estados posibles: 200304401429
POST /v2/partner/giftsRegalar meses de suscripción o chispas de tu contingente a un miembro.
Solo para socios con contingente; los demás reciben 403.
Igual que en la app, el miembro ve de quién es el regalo. Como máximo 60 regalos por hora.
Parámetros Nombre Tipo Significado handleen el cuerpo stringobligatorio El @nombre del miembro al que regalas, con o sin @. itemen el cuerpo stringobligatorio plan para meses de suscripción, sparks para chispas, shop para un estilo de tu reserva (desde 2.13).plansparksshopquantityen el cuerpo integeropcional Cuánto: hasta 12 meses o 35 chispas por regalo. itemIden el cuerpo stringopcional Para shop: el ID del estilo, tal como lo indica looks en el contingente. Un ejemplar por regalo; quantity no se aplica entonces.
Petición de ejemplo 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"Respuesta Responde con un Quota .
Ejemplo {
"months": 120,
"sparks": 500,
"looks": [
{
"id": "frame-gold",
"name": "Goldring",
"kind": "frame",
"quantity": 25
}
]
}Estados posibles: 200400401403429
GET /v2/gift-dropsTus regalos bajo publicaciones: cuántas plazas siguen libres y cómo se pagaron.
Derecho read paginable con ETag desde v2.12 Parámetros Nombre Tipo Significado limiten la dirección integeropcional Entradas por página: 20 por defecto, como máximo 50. cursoren la dirección stringopcional El next de la respuesta anterior. Sin él, desde el principio.
Petición de ejemplo curl \
-H "Authorization: Bearer tm_key_…" \
"https://api.tellmelo.com/v2/gift-drops?limit=20"Respuesta Responde con una página de OwnGiftDrop , como `items` y `next`.
Ejemplo {
"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"
}Estados posibles: 200304401429
POST /v2/gift-dropsPublicar una publicación con regalos para que otros los recojan.
Gratis para el propietario y los miembros del equipo con ese permiso; si no, sale de tu contingente. Lo que habría que pagar se rechaza con 422: pagar solo se puede en la app.
Recoger solo se puede en la app, para que ningún programa se lleve todas las plazas. Cuántas quedan libres aparece en giftDrop de la publicación.
Parámetros Nombre Tipo Significado texten el cuerpo stringopcional El texto de la publicación, la respuesta o el mensaje. communityen el cuerpo stringopcional El id del grupo a cuyo canal del feed va la publicación; debe estar activado y necesitas el permiso. Sin él, la publicación queda fuera de cualquier grupo. itemen el cuerpo stringobligatorio plan para meses de suscripción, sparks para chispas.plansparksquantityen el cuerpo integerobligatorio Lo que lleva cada plaza: hasta 12 meses o 35 chispas. placesen el cuerpo integerobligatorio Para cuántas personas, hasta 10 000. audienceen el cuerpo stringopcional Quién puede recoger: all todos, followers solo tus seguidores, group solo los miembros del grupo (solo junto con community).allfollowersgroup newAccountsen el cuerpo booleanopcional true deja recoger también a cuentas con menos de 7 días. Si no lo indicas, se quedan fuera.
Petición de ejemplo 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"Respuesta Responde con un DropCreated .
Ejemplo {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"funding": "quota"
}Estados posibles: 200400401403429
Objetos Todos los objetos, campo por campo. [] significa lista.
ServiceLa respuesta de la raíz: quién responde y qué puede hacer esta clave.
Campo Tipo Significado namestringSiempre tellmelo. versionstringLa versión de la API, por ejemplo 2.1. scopestringLo que puede hacer esta clave: read o read write. rateLimitRateLimitEl cupo de esta clave. docsstringDónde está esta documentación, como ruta en esta instancia. specstringDónde está la descripción legible por máquina.
Ejemplo {
"name": "tellmelo",
"version": "2.20",
"scope": "read write",
"rateLimit": {
"limit": 120,
"remaining": 117
},
"docs": "/developers/docs",
"spec": "/api/v2/openapi.json"
}RateLimitEl cupo de esta clave en el minuto actual.
Campo Tipo Significado limitintegerPeticiones por minuto. remainingintegerCuántas quedan en este minuto.
Ejemplo {
"limit": 120,
"remaining": 117
}PostUna publicación, con la misma forma en todas partes.
Campo Tipo Significado idstringEl identificador de la publicación. textstringo null El texto tal como se escribió (null para una publicación que solo es una encuesta o solo imágenes). kindstringQué es la publicación.post — Una publicación con texto, imágenes o una cita.poll — Una publicación con una encuesta. authorProfileBriefQuién la escribió. communityCommunityBriefo null El grupo en el que se escribió (null fuera de cualquier grupo). mediaMedia[]Sus imágenes, en orden; vacía si no hay ninguna. pollPollo null La encuesta (null si no hay ninguna). quotesstringo null El identificador de la publicación que esta cita. continuesstringo null El identificador de la publicación que esta continúa, como añadido. countsCountsRespuestas, me gusta y publicaciones compartidas. pinnedbooleanSi está fijada arriba en el perfil de quien la escribió. giftDropGiftDropo null Los regalos para recoger bajo la publicación (null si no hay). createdAtintegerCuándo se escribió.
Ejemplo {
"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
}ReplyUna respuesta bajo una publicación: una publicación con dos campos más.
Todos los campos de Post y, además:
Campo Tipo Significado postIdstringLa publicación de la que cuelga toda la conversación. parentIdstringo null La respuesta a la que responde esta (null si responde directamente a la publicación).
Ejemplo {
"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
}ReplyVoteTu voto en una respuesta y su puntuación.
Campo Tipo Significado votestringTu voto.up — A favor.down — En contra.none — Sin voto. scoreintegerVotos a favor menos votos en contra, también por debajo de cero.
Ejemplo {
"vote": "up",
"score": 12
}PlannedReplyUna respuesta tuya programada para más tarde.
Campo Tipo Significado idstringLa id de la respuesta programada. parentIdstringo null La respuesta a la que contestará (null si contesta directamente a la publicación). textstringEl texto. publishAtintegerCuándo sale. statestringSu estado.waiting — Espera su hora.failed — No se pudo enviar, por ejemplo porque la publicación ya no existe.
Ejemplo {
"id": "3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9",
"parentId": null,
"text": "Count me in for Saturday!",
"publishAt": 1758710400000,
"state": "waiting"
}ReplySettingsLos ajustes de respuesta de una de tus publicaciones.
Campo Tipo Significado audiencestringQuién puede responder.all — Todos.following — Cuentas que sigues.mentioned — Las mencionadas en la publicación.nobody — Nadie salvo tú. approvalbooleanSi las respuestas esperan tu aprobación. slowstringEl modo lento.auto — Se activa solo cuando llegan muchas respuestas.on — Siempre activado.off — Desactivado.
Ejemplo {
"audience": "following",
"approval": false,
"slow": "auto"
}CountsCuántas respuestas, me gusta y publicaciones compartidas tiene una publicación.
Campo Tipo Significado repliesintegerRespuestas, todos los niveles juntos. likesintegerMe gusta. repostsintegerPublicaciones compartidas.
Ejemplo {
"replies": 4,
"likes": 31,
"reposts": 2
}PollLa encuesta de una publicación.
Campo Tipo Significado optionsPollOption[]Las respuestas, en orden. option al votar cuenta desde 0. totalintegerTodos los votos juntos, siempre presente. multiplebooleanSi se puede elegir más de una respuesta. endsAtintegero null Cuándo termina la encuesta (null si no tiene fin). runningbooleanSi todavía se puede votar. resultsVisiblebooleanSi se muestran los votos por respuesta (ver votes). myVotesinteger[]Las respuestas que elegiste, contadas desde 0.
Ejemplo {
"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
]
}PollOptionUna respuesta de una encuesta.
Campo Tipo Significado textstringLa respuesta. votesintegero null Sus votos (null mientras el resultado esté retenido).
Ejemplo {
"text": "Lavender",
"votes": 12
}ProfileBriefUn perfil tal como aparece dentro de otros objetos: como autor, en una búsqueda.
Campo Tipo Significado idstringEl identificador de la cuenta: lo que esperan /relations y /conversations/{with}. handlestringEl nombre corto, sin @, escrito como lo eligió el miembro. namestringEl nombre visible. Puede contener emojis, también :name:. verifiedbooleanSi la cuenta está verificada. accountKindstringQué tipo de cuenta es.person — Una persona.business — Una empresa.association — Una asociación.automated — Una cuenta automatizada, como un bot.bot — Un bot de grupos, controlado por un programa con su propia clave (desde 2.18).
Ejemplo {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"verified": true,
"accountKind": "person"
}ProfileUn perfil por sí solo, con su descripción y sus seguidores.
Todos los campos de ProfileBrief y, además:
Campo Tipo Significado aboutstringo null La descripción (null si no hay ninguna). websitestringo null La web del perfil (null si no hay). Desde 2.3. websiteVerifiedbooleanSi la web enlaza a este perfil con rel=me, comprobado cada semana. Desde 2.3. followersintegerCuántas cuentas la siguen. createdAtintegero null Cuándo se creó la cuenta (null mientras el miembro oculta la fecha de registro; desde 2.9).
Ejemplo {
"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
}MembershipLo que tu cuenta es y puede en el grupo.
Campo Tipo Significado leaderstringo null Si fundaste el grupo o lo codiriges; null si no.founder — Fundado.manager — Codirección. rolesstring[]Los id de tus roles, el más alto primero. permissionsstring[]Lo que puedes hacer en el grupo. mutedUntilintegero null Hasta cuándo te silencia aquí un silencio temporal; null si no hay.
Ejemplo {
"leader": null,
"roles": [
"4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8"
],
"permissions": [
"attach",
"invite",
"send",
"view"
],
"mutedUntil": null
}PersonUn miembro, en breve.
Campo Tipo Significado idstringEl id de la cuenta. handlestringEl nombre de usuario, sin @. namestringEl nombre visible. botbooleanSi la cuenta es un bot (desde 2.18).
Ejemplo {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"bot": false
}ChannelUn canal de un grupo.
Campo Tipo Significado idstringEl id. kindstringQué tipo de canal.feed — El canal del feed, cuyas publicaciones también están en el feed público.chat — Un chat.voice — Un canal de voz; solo se habla en la app.hub — El hub del grupo: su página con lo que es. Siempre está, sin mensajes. namestringo null El nombre sin #; null para el nombre que la app da en cada idioma. topicstringEl tema; vacío si no hay. categoryChannelCategoryo null La categoría; null sin ella. unreadintegerCuántos mensajes de otros aún no has leído, hasta 100. permissionsstring[]Lo que puedes hacer en este canal. symbolChannelSymbolSu símbolo; la forma ya es la del grupo si este la fija.
Ejemplo {
"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 categoría en la que está un canal.
Campo Tipo Significado idstringEl id. namestringEl nombre. symbolChannelSymbolSu símbolo.
Ejemplo {
"id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
"name": "Garden",
"symbol": {
"emoji": null,
"icon": null,
"image": null,
"color": null,
"shape": null
}
}ChannelSymbolEl símbolo de un canal o categoría: como mucho uno de emoji, símbolo e imagen; si no, el signo de su tipo.
Campo Tipo Significado emojistringo null El emoji; null si no hay. iconstringo null El nombre del símbolo del conjunto de la app; null si no hay. imagestringo null La dirección de la imagen propia; null si no hay. colorstringo null El color del recuadro; null para el de su tipo. shapestringo null La forma del recuadro; null para un círculo.
Ejemplo {
"emoji": "🌻",
"icon": null,
"image": null,
"color": "amber",
"shape": "circle"
}ChannelMessageUn mensaje en un canal de chat.
Campo Tipo Significado idstringEl id. textstringo null El texto (null en un mensaje solo de imágenes o voz). authorPersonQuién lo escribió. mediaMedia[]Sus imágenes y mensajes de voz; vacío si no hay. replyTostringo null El id del mensaje al que responde; null si a ninguno. roleColorstringo null El color del rol más alto del autor que tenga uno; null si no hay. threadOfstringo null El mensaje en cuyo hilo responde este; null en el chat. threadCountintegerCuántas respuestas tiene el hilo de este mensaje. cardobjecto null La tarjeta de un bot: title, text, color y fields; si no, null. buttonsobject[]Los botones de un bot: cada uno id, label y style. createdAtintegerCuándo se escribió.
Ejemplo {
"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 rol de un grupo.
Campo Tipo Significado idstringEl id. namestringo null El nombre; null para @everyone. everyonebooleanSi es @everyone, el rol de todos los miembros. colorstringo null El color: indigo, violet, rose, amber, green o teal; null sin color. permissionsstring[]Sus permisos. membersintegerCuántos lo tienen; en @everyone todos los miembros. editablebooleanSi tu cuenta puede cambiarlo. selfablebooleanSi los miembros toman y dejan el rol por sí mismos.
Ejemplo {
"id": "4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8",
"name": "Gardeners",
"everyone": false,
"color": "green",
"permissions": [
"attach",
"invite",
"send",
"view"
],
"members": 24,
"editable": true,
"selfable": false
}GroupMemberUn miembro de un grupo con sus roles.
Todos los campos de Person y, además:
Campo Tipo Significado leaderstringo null Si el miembro fundó el grupo o lo codirige; null si no.founder — Fundado.manager — Codirección. rolesstring[]Los id de sus roles, el más alto primero. mutedUntilintegero null Hasta cuándo está silenciado el miembro, si tu cuenta puede silenciar; si no, null.
Ejemplo {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"bot": false,
"leader": null,
"roles": [
"4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8"
],
"mutedUntil": null
}ChannelOverrideLo que un rol puede hacer distinto en un canal que en el grupo.
Campo Tipo Significado rolestringEl id del rol. allowstring[]Lo que puede además aquí. denystring[]Lo que no puede aquí.
Ejemplo {
"role": "4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8",
"allow": [
"send"
],
"deny": []
}BellLa campana de un grupo.
Campo Tipo Significado levelstringQué notificaciones llegan.all — Cada publicación nueva del canal del feed, y @everyone.important — Las publicaciones de la dirección en el canal del feed, y @everyone.off — Nada, salvo que te mencionen con @nombre.
Ejemplo {
"level": "important"
}InviteLinkUn enlace de invitación de un grupo.
Campo Tipo Significado codestringEl código. urlstringLa dirección para compartir. createdByPersono null Quién lo creó; null si la cuenta está borrada. createdAtintegerCuándo se creó. expiresAtintegero null Hasta cuándo vale; null sin fin. usesintegerCuántas veces se usó. maxUsesintegero null Cuántas veces se puede usar; null sin límite.
Ejemplo {
"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
}InvitePreviewAdónde lleva un enlace de invitación.
Campo Tipo Significado communityInviteGroupEl grupo. memberbooleanSi tu cuenta ya es miembro.
Ejemplo {
"community": {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening",
"members": 312,
"rules": [
"Be kind.",
"No advertising."
]
},
"member": false
}InviteGroupEl grupo detrás de un enlace de invitación.
Campo Tipo Significado idstringEl id. namestringEl nombre. membersintegerCuántos miembros tiene. rulesstring[]Sus normas, que se aceptan al unirse; vacío si no hay.
Ejemplo {
"id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
"name": "Urban Gardening",
"members": 312,
"rules": [
"Be kind.",
"No advertising."
]
}JoinedLa entrada con un enlace de invitación.
Campo Tipo Significado communitystringEl id del grupo.
Ejemplo {
"community": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60"
}LogEntryUna entrada del registro de la dirección.
Campo Tipo Significado idstringEl id. actionstringQué pasó.post_removed — Una publicación.member_removed — Un miembro quitado, antes de 2.16 (fuera durante 90 días).message_removed — Un mensaje en un canal de chat.member_kicked — Una expulsión.member_banned — Un veto.member_unbanned — Un veto levantado.member_timed_out — Un silencio temporal.timeout_lifted — Un silencio levantado.voice_muted — Silenciado en un canal de voz.voice_removed — Desconectado de un canal de voz.bot_added — Un bot entró en el grupo (desde 2.18).bot_removed — Un bot salió del grupo (desde 2.18). memberPersonA quién afectó. reasonstringEl motivo; vacío en los mensajes y cuando no se dio ninguno. bystringo null El nombre de quien lo hizo; null si la cuenta está eliminada. createdAtintegerCuándo.
Ejemplo {
"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 veto de un grupo.
Campo Tipo Significado memberPersonQuién está vetado. untilintegero null Hasta cuándo; null hasta que se levante. createdAtintegero null Desde cuándo; null en vetos anteriores a 2.16. bystringo null El nombre de quien vetó; null si se desconoce.
Ejemplo {
"member": {
"id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
"handle": "jon",
"name": "Jon",
"bot": false
},
"until": 1759228800000,
"createdAt": 1758624000000,
"by": "Mara 🌻"
}UntilCuándo termina un silencio o un veto.
Campo Tipo Significado untilintegero null El momento; null en un veto sin fin o en un silencio levantado.
Ejemplo {
"until": 1758624600000
}TagUna etiqueta y cuántas publicaciones la llevan.
Campo Tipo Significado tagstringLa etiqueta, sin #. postsintegerCuántas publicaciones recientes la llevan.
Ejemplo {
"tag": "garden",
"posts": 58
}SearchResultTres listas, quizá vacías.
Campo Tipo Significado postsPost[]Publicaciones encontradas, las más nuevas primero. profilesProfileBrief[]Perfiles encontrados, por nombre corto. tagsTag[]Etiquetas encontradas, las más usadas primero.
Ejemplo {
"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 emoji de esta instancia.
Campo Tipo Significado namestringEl nombre, tal como aparece entre los dos puntos. urlstringLa dirección de la imagen, relativa a esta instancia.
Ejemplo {
"name": "tellmelo",
"url": "/api/media?id=e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b"
}NotificationUna notificación. Una fila puede agrupar varios eventos del mismo tipo.
Campo Tipo Significado idstringEl identificador de la notificación. kindstringQué ha pasado.reply — Alguien te ha respondido.like — A alguien le gusta tu publicación.reply_like — Alguien vota a favor de tu respuesta.duel — Alguien te reta al Duelo de feeds, o tu reto ya se ha jugado.reply_pick — El autor de una publicación destaca tu respuesta.repost — Alguien ha compartido tu publicación.follow — Alguien te sigue.mention — Alguien te ha mencionado.group_mention — Alguien ha mencionado un grupo que diriges; text es su nombre.channel_mention — Alguien te mencionó en un canal de chat de uno de tus grupos, también con @everyone; el miembro es el actor, la frase nombra el canal y el grupo, nunca el mensaje.message — Alguien te ha escrito un mensaje.scheduled — Una publicación tuya programada ya ha salido.video — Una publicación tuya que esperaba su vídeo salió o volvió a ser un borrador.reminder — Ha llegado un recordatorio de una publicación guardada.report — Qué ha sido de una denuncia que enviaste.moderation — Una decisión sobre tu cuenta: una advertencia, una restricción, un recurso.team — Trabajo nuevo para el equipo (solo propietarios, admins y moderadores).reward — Una recompensa por invitar está a punto de perderse o se ha perdido.gift — Un regalo del equipo: una suscripción, o chispas para ti o para un grupo que diriges.present — Un regalo de un miembro: chispas o tiempo de suscripción; el miembro es el actor.spark — Unas chispas caducan pronto, o a un grupo que diriges ya no le alcanzan las chispas para sus ventajas.loyalty — Sobre el ritmo de fidelidad: una semana activa cuenta o le falta un día, una recompensa es nueva o está a punto de perderse.impact — Cómo les fue tras un día a tus publicaciones de doce horas, en un solo aviso.discovery — Una invitación al programa Descubierto, o que un puesto en él empieza o termina.group_post — Una nueva publicación en un grupo cuya campana suena para ello.group_moderation — La dirección de un grupo quitó una de tus publicaciones, o a ti, del grupo.group — Algo que un miembro hizo contigo en un grupo: invitarte, aceptarte o rechazarte, hacerte coadministrador, traspasarte el grupo o disolverlo, o solicitar unirse a tu grupo; el miembro es el actor y el nombre del grupo cierra la frase.coauthor — Alguien te ha invitado como coautor de una publicación.partner — Un recordatorio del programa de socios o el fin del distintivo de socio.news — Un artículo nuevo en una región que sigues.pick — Una publicación tuya opta a publicación de la semana o del año, o ha ganado.advent — Se abrió una puerta nueva del calendario de Adviento, se abrió una o la de hoy todavía espera.team_message — Un mensaje que el equipo de tellmelo escribió a miembros elegidos.challenge — Ha empezado un nuevo reto de la semana.nudge — Una sola vez: una publicación que nadie ha respondido aún, o el reto en curso.signin — Un ordenador pregunta si estás iniciando sesión allí ahora mismo. textstringo null Solo en denuncias y moderación: el texto correspondiente; si no, null. actorActorQuién lo hizo. postIdstringo null La publicación de la que trata (null si no trata de ninguna). readbooleanSi se ha marcado como leída. moreintegerPor cuántos eventos más vale esta fila, además del nombrado. createdAtintegerCuándo ocurrió por primera vez. updatedAtintegerCuándo agrupó otro evento por última vez. La lista se ordena por esto.
Ejemplo {
"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én provocó una notificación.
Campo Tipo Significado handlestringEl nombre corto. namestringEl nombre visible.
Ejemplo {
"handle": "jon",
"name": "Jon"
}ConversationUna fila de tu bandeja de entrada.
Campo Tipo Significado withstringEl identificador de la otra cuenta: lo que espera /conversations/{with}/messages. handlestringSu nombre corto. namestringSu nombre visible. excerptstringo null El comienzo del último mensaje (null si no tiene texto). truncatedbooleanSi el extracto se acortó. fromMebooleanSi el último mensaje es tuyo. lastMessageIdstringEl identificador del último mensaje. unreadintegerCuántos de sus mensajes no has leído aún. updatedAtintegerCuándo se escribió el último mensaje.
Ejemplo {
"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 mensaje en una conversación.
Campo Tipo Significado idstringEl identificador del mensaje. textstringo null El texto (null para un mensaje que solo son imágenes). fromstringEl identificador de la cuenta que lo escribió. tostringEl identificador de la cuenta a la que se escribió. readbooleanSi quien lo recibió lo ha leído. mediaMedia[]Sus imágenes; vacía si no hay ninguna. replyTostringo null El id del mensaje al que responde este (null si no responde a ninguno). Desde 2.2. createdAtintegerCuándo se envió.
Ejemplo {
"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 mensaje tuyo programado para más tarde.
Campo Tipo Significado idstringLa id del mensaje programado. tostringLa id de la cuenta que lo recibe. textstringo null El texto, null con cifrado de extremo a extremo. sendAtintegerCuándo se envía. statestringSu estado.waiting — Espera su hora.held — Retenido porque terminó la suscripción. Puedes enviarlo tú o borrarlo.failed — No se pudo enviar.
Ejemplo {
"id": "3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9",
"to": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"text": "Happy birthday! 🎂",
"sendAt": 1758710400000,
"state": "waiting"
}ScheduledPostUna de tus publicaciones que aún no ha salido.
Campo Tipo Significado idstringEl identificador de la publicación. textstringo null El texto. communityIdstringo null El grupo donde sale (null fuera de los grupos). publishAtintegero null Cuándo sale (null mientras espera otra cosa). deleteAtintegero null Cuándo se borra sola (null: nunca). waitingForstringQué está esperando.time — Su hora.review — La aprobación de un texto escrito para revisión.check — La revisión de la moderación automática.payment — El pago de sus regalos. createdAtintegerCuándo se escribió.
Ejemplo {
"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
}CollectionUna colección de publicaciones guardadas.
Campo Tipo Significado idstringLa id de la colección. namestringSu nombre. countintegerCuántas publicaciones contiene.
Ejemplo {
"id": "6d5c4b3a-2918-4e7f-a1b2-c3d4e5f60718",
"name": "Recipes",
"count": 12
}EventUn próximo evento de un perfil.
Campo Tipo Significado idstringLa id del evento. titlestringEl título. startsAtintegerInicio. endsAtintegero null Fin, null sin fin. placestringo null El lugar. descriptionstringo null La descripción. signupsEventSignupso null Las inscripciones, null sin inscripción.
Ejemplo {
"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
}
}EventSignupsCuántas personas se han apuntado.
Campo Tipo Significado countintegerEl número de inscripciones. goingbooleanSi estás apuntado.
Ejemplo {
"count": 14,
"going": true
}EventSignupAlguien que se ha apuntado a uno de tus eventos.
Campo Tipo Significado idstringLa id de la cuenta. handlestringEl nombre de usuario. namestringEl nombre visible. atintegerCuándo se apuntó.
Ejemplo {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"at": 1758624000000
}PictureUna imagen subida.
Campo Tipo Significado idstringLa id de la imagen. urlstringDónde se puede ver.
Ejemplo {
"id": "8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9"
}EmojiPictureLa imagen subida de un emoji.
Campo Tipo Significado idstringLa id de la imagen. urlstringDónde se puede ver. animatedbooleanSi se mueve.
Ejemplo {
"id": "8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false
}OwnEmojiUno de tus propios emojis.
Campo Tipo Significado namestringSu nombre. urlstringSu imagen. animatedbooleanSi se mueve. restingbooleanEn reposo porque ahora la suscripción permite menos emojis: se queda, pero no se puede usar.
Ejemplo {
"name": "sunflower",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false,
"resting": false
}GroupEmojiUn emoji de un grupo.
Campo Tipo Significado namestringSu nombre. urlstringSu imagen. animatedbooleanSi se mueve.
Ejemplo {
"name": "seedling",
"url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
"animated": false
}BotEventUn evento en un grupo del bot.
Campo Tipo Significado idstringSu número, ascendente; con él se continúa (since, Last-Event-ID). typestringQué ocurrió.message.created — Se escribió un mensaje.message.deleted — Se eliminó un mensaje.member.joined — Alguien se unió.member.left — Alguien se fue o fue retirado.voice.joined — Alguien entró en un canal de voz.command — Alguien usó un comando del bot.interaction — Alguien pulsó un botón en un mensaje del bot. communitystringEl grupo. channelstringo null El canal; null para todo el grupo. createdAtintegerCuándo ocurrió. dataobjectLo que lo acompaña, según el tipo: message, member (con reason), command o interaction.
Ejemplo {
"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
}
}
}BotCommandUn comando de un bot.
Campo Tipo Significado namestringSu nombre, sin «/». descriptionstringLo que hace.
Ejemplo {
"name": "dice",
"description": "Rolls a die"
}VoiceSeatUn sitio en un canal de voz.
Campo Tipo Significado urlstringLa dirección del servidor de medios (LiveKit). tokenstringEl token para este canal, válido unos minutos. iceServersobject[]Los servidores STUN y TURN para la conexión. speakbooleanSi el bot puede enviar sonido allí. videobooleanSi el bot puede enviar vídeo allí.
Ejemplo {
"url": "wss://voice.example.org",
"token": "eyJhbGciOiJIUzI1NiJ9…",
"iceServers": [
{
"urls": [
"stun:turn.example.org:3478"
]
}
],
"speak": true,
"video": false
}WebhookUno de tus webhooks.
Campo Tipo Significado idstringLa id del webhook. urlstringSu dirección. kindsstring[]De qué se le avisa. activebooleanSi recibe entregas. Tras muchos fallos seguidos se desactiva. lastStatusintegero null El estado HTTP de la última entrega. lastAtintegero null Cuándo fue la última entrega. failuresintegerFallos seguidos.
Ejemplo {
"id": "1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b",
"url": "https://example.org/tellmelo-hook",
"kinds": [
"reply",
"mention"
],
"active": true,
"lastStatus": 200,
"lastAt": 1758624000000,
"failures": 0
}WebhookCreatedUn webhook nuevo con su secreto.
Campo Tipo Significado idstringLa id del webhook. secretstringEl secreto para las firmas, solo esta vez.
Ejemplo {
"id": "1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b",
"secret": "whsec_3f9a…"
}GroupBotUn bot de un grupo.
Campo Tipo Significado idstringLa id de la cuenta del bot. handlestringSu identificador. namestringSu nombre. descriptionstringLo que hace, según su dueño. permissionsstring[]Lo que permite su rol en el grupo.
Ejemplo {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "gardenbot",
"name": "Garden bot",
"description": "Reminds the group of watering days.",
"permissions": [
"send",
"view"
]
}VoiceRoomUn canal de voz con las personas que hay dentro.
Campo Tipo Significado channelstringLa id del canal. peopleVoicePerson[]Quién está ahora.
Ejemplo {
"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
}
]
}VoicePersonAlguien en un canal de voz.
Campo Tipo Significado idstringLa id de la cuenta. handlestringEl identificador. namestringEl nombre visible. mutedbooleanSi tiene el micrófono apagado. deafbooleanSi no oye nada (por decisión propia). camerabooleanSi tiene la cámara encendida. screenbooleanSi comparte la pantalla.
Ejemplo {
"id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
"handle": "mara",
"name": "Mara 🌻",
"muted": true,
"deaf": false,
"camera": false,
"screen": false
}GiftDropRegalos bajo una publicación, nunca con los nombres de quienes los recogieron.
Campo Tipo Significado itemstringLo que lleva una plaza.plan — Meses de suscripción (Apoyo).sparks — Chispas. quantityintegerCuánto lleva cada plaza: meses o chispas. placesintegerCuántas plazas hay en total. leftintegerCuántas siguen libres. audiencestringQuién puede recoger.all — Todos.followers — Solo los seguidores de quien regala.group — Solo los miembros del grupo de la publicación. newAccountsbooleanSi también pueden recoger cuentas con menos de 7 días. statusstringEn qué punto está.awaiting_payment — Esperando el pago; la publicación aún no ha salido.open — Todavía quedan plazas por recoger.closed — Terminado: todo recogido, el pago reembolsado o la publicación borrada. claimedbooleanSi ya tienes una plaza (siempre false en las rutas públicas).
Ejemplo {
"item": "plan",
"quantity": 3,
"places": 10,
"left": 4,
"audience": "followers",
"newAccounts": false,
"status": "open",
"claimed": true
}OwnGiftDropTus regalos bajo una publicación, con la publicación y cómo se pagaron.
Todos los campos de GiftDrop y, además:
Campo Tipo Significado postIdstringLa publicación bajo la que están. fundingstringCómo se pagaron.free — Gratis.quota — Del contingente.payment — Pagado. createdAtintegerCuándo se crearon.
Ejemplo {
"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
}QuotaLo que hay en un contingente.
Campo Tipo Significado monthsintegerMeses de suscripción que quedan por regalar. sparksintegerChispas que quedan por regalar. looksQuotaLook[]Estilos de la reserva que quedan por regalar (desde 2.13).
Ejemplo {
"months": 120,
"sparks": 500,
"looks": [
{
"id": "frame-gold",
"name": "Goldring",
"kind": "frame",
"quantity": 25
}
]
}QuotaLookUn estilo en la reserva de un socio, con los ejemplares que quedan (desde 2.13).
Campo Tipo Significado idstringEl ID del estilo; al regalarlo, pásalo como itemId. namestringEl nombre del estilo. kindstringEl tipo de estilo.frame — Marco de perfil.background — Efecto de portada.card — Tarjeta de perfil. quantityintegerCuántos ejemplares quedan.
Ejemplo {
"id": "frame-gold",
"name": "Goldring",
"kind": "frame",
"quantity": 25
}QuotaGiftUn regalo del contingente.
Campo Tipo Significado itemstringQué se regaló.plan — Meses de suscripción (Apoyo).sparks — Chispas.shop — Un estilo de la reserva (desde 2.13). quantityintegerCuánto. itemIdstringo null El estilo regalado cuando item es shop; si no, null. recipientActorA quién. createdAtintegerCuándo.
Ejemplo {
"item": "plan",
"quantity": 3,
"itemId": null,
"recipient": {
"handle": "jon",
"name": "Jon"
},
"createdAt": 1758627600000
}EmbedLas direcciones para otros sitios web. Funcionan sin clave.
Campo Tipo Significado pagestringEl reproductor para un <iframe>. filestringEl archivo MP4 para un reproductor propio. posterstringLa imagen de vista previa. codestringEl código listo para insertar.
Ejemplo {
"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>"
}UploadStartedUna subida iniciada.
Campo Tipo Significado uploadstringEl ID de esta subida. pieceintegerEl tamaño máximo de un fragmento, en bytes.
Ejemplo {
"upload": "e7c1a2b3-4d5e-4f60-8a9b-0c1d2e3f4a5b",
"piece": 4194304
}UploadPieceUn fragmento recibido.
Campo Tipo Significado receivedintegerCuántos bytes han llegado. itemMediaItemo null Tras el último fragmento, el nuevo GIF o vídeo; si no, null.
Ejemplo {
"received": 4194304,
"item": null
}CreatedLa respuesta de una escritura que creó algo.
Campo Tipo Significado idstringEl identificador de lo que se creó. scheduledForintegero null Cuándo aparece, si se programó la publicación (si no, null). deleteAtintegero null Cuándo se borra solo, si se configuró (si no, null).
Ejemplo {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"scheduledFor": null,
"deleteAt": null
}DropCreatedLa respuesta cuando se ha creado una publicación con regalos.
Campo Tipo Significado idstringEl identificador de la nueva publicación. fundingstringCómo se pagan los regalos.free — Gratis.quota — Del contingente.
Ejemplo {
"id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
"funding": "quota"
}MadeLo que se acaba de crear o cambiar.
Campo Tipo Significado idstringEl id; en un enlace de invitación, su código.
Ejemplo {
"id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}OkLa respuesta de una escritura que no tiene nada que devolver.
Campo Tipo Significado okbooleanSiempre true.
Ejemplo {
"ok": true
}La descripción legible por una máquina La tabla detrás de esta página está disponible como OpenAPI en https://api.tellmelo.com/v2/openapi.json.
https://api.tellmelo.com/v2/openapi.jsonGIF y vídeos en otros sitios web Lo que un miembro comparte y también permite en otros sitios web puede mostrarlo cualquier sitio: la búsqueda con anywhere=true lo encuentra y su embed tiene las direcciones. Si el miembro lo retira, desaparece de allí en pocos minutos.
Subir en fragmentos Primero inicia, luego envía el archivo en fragmentos. Divide un archivo más grande en fragmentos de piece bytes, con offset en la posición de cada uno. Tras el último fragmento recibes el GIF o vídeo terminado.
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": { … } } }Insertar El reproductor muestra el GIF en bucle o el vídeo con controles y, debajo, el nombre y quién lo compartió. Pon el código de embed.code en la página:
<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>Los foros y programas que conocen oEmbed obtienen el código por sí mismos si les das la dirección del reproductor:
https://tellmelo.com/api/oembed?url=https%3A%2F%2Ftellmelo.com%2Fmedia-embed%2Fb2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918La clave va en tu servidor, nunca en el código de una página web. Busca y sube a través de tu servidor; las direcciones de embed no necesitan clave.
Selector de GIF para tu web Con una clave de sitio (Área de desarrolladores → Selector de GIF para tu web ), tu web obtiene una búsqueda lista para usar: dos líneas en la página, y un clic en el botón la abre. La clave es pública y solo funciona en las direcciones que introduzcas para ella. El selector solo muestra lo que los miembros han permitido en otros sitios web.
<script src="https://tellmelo.com/picker.js" data-key="tmsk_…" defer></script>
<button type="button" data-tellmelo-picker>GIF</button>Al elegir algo, el botón lanza tellmelo:pick con el elemento: code para insertarlo, file, poster, name y author. Con data-target="#field" pone code directamente en un campo de texto; con data-kind="video" busca vídeos. Si insertas el archivo por tu cuenta, muestra el nombre de la persona que lo compartió.
document.addEventListener('tellmelo:pick', (event) => {
const { code, file, name, author } = event.detail;
});Iniciar sesión con tellmelo Otros sitios permiten a los miembros iniciar sesión con su cuenta de tellmelo mediante OpenID Connect (código de autorización con PKCE). El sitio solo recibe el nombre de usuario, el correo confirmado y un identificador propio por miembro (sub).
Solicitas una app en «Área de desarrolladores → Iniciar sesión con tellmelo». El equipo revisa cada app; después ves allí el ID de cliente y, para apps con servidor, creas el secreto de cliente, que se muestra una sola vez.
Todo lo que necesita una biblioteca está en el documento de descubrimiento:
https://tellmelo.com/.well-known/openid-configurationEnvía al miembro a /oauth/authorize con response_type=code, client_id, redirect_uri (exactamente como se registró), scope=openid profile email, state, nonce y code_challenge con code_challenge_method=S256. Canjea el código en menos de un minuto en /oauth/token: grant_type=authorization_code, code, redirect_uri y code_verifier; las apps con servidor envían además el secreto, con autenticación Basic o en el formulario. El token de ID (RS256, claves en /oauth/jwks) contiene sub, con profile también preferred_username, con email también email y email_verified. El token de acceso vale 10 minutos y solo lee /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
}No hay tokens de actualización: tellmelo inicia la sesión y no da acceso duradero. Si un miembro quita el sitio o el equipo suspende la app, /oauth/userinfo responde 401 al instante. prompt=none comprueba sin página, prompt=consent vuelve a preguntar.
Lo que esperamos Rigen las mismas reglas que en todas partes: nada de acoso, nada de spam, nada de contenido ajeno sin derechos. Respondes de lo que publica tu clave.
Muestra los GIF y vídeos de otros en tu sitio web solo si tienen embed, a través de esas direcciones y con el nombre de quien los compartió. Si algo ya no está disponible, deja de mostrarlo. No copies los archivos a una colección propia.