tellmelo.DesenvolvedoresIr para o tellmelo
Central de ajudaSuporteJurídicoDesenvolvedores

API

Primeiros passos

  • Quero …
  • Visão geral
  • Início rápido
  • Experimente
  • Sua chave
  • O que uma chave pode fazer
  • Bots

Fundamentos

  • Solicitações e respostas
  • Páginas
  • Só o que é novo
  • Limites
  • Cabeçalhos
  • Quando algo não funciona
  • Versões

Endpoints

  • Endpoints
  • A entrada
    • GET /
  • Posts
    • 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
  • Respostas
    • 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}
  • Enquetes
    • POST /posts/{id}/vote
  • Perfis
    • 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
  • Grupos
    • 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
  • Canais
    • GET /communities/{id}/channels
    • GET /channels/{id}/messages
    • POST /channels/{id}/messages
    • POST /channels/{id}/read
    • DELETE /channel-messages/{id}
    • GET /communities/{id}/voice
  • Gerenciar grupos
    • 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}
  • Bots
    • GET /events
    • GET /events/stream
    • GET /me/commands
    • PUT /me/commands
    • POST /interactions/{id}/reply
    • POST /channels/{id}/voice
  • Descobrir
    • GET /tags
    • GET /search
    • GET /emojis
  • GIFs e vídeos
    • GET /media
    • GET /media/mine
    • GET /media/{id}
    • POST /media/uploads
    • PUT /media/uploads/{upload}
    • POST /media/{id}
    • DELETE /media/{id}
  • Sua conta
    • 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
  • Notificações
    • GET /notifications
    • POST /notifications/read
  • Mensagens
    • 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}
  • Relações
    • POST /relations
    • GET /profiles/{handle}/followers
    • GET /profiles/{handle}/following
    • GET /me/relations
  • Coleções
    • GET /me/collections
    • POST /me/collections
    • PUT /me/collections/{id}
    • DELETE /me/collections/{id}
    • GET /me/collections/{id}/posts
    • POST /me/collections/{id}/posts
  • Presentes
    • GET /partner/quota
    • GET /partner/gifts
    • POST /partner/gifts
    • GET /gift-drops
    • POST /gift-drops

Objetos

  • Objetos
  • Service
  • RateLimit
  • Post
  • Reply
  • ReplyVote
  • PlannedReply
  • ReplySettings
  • Counts
  • Media
  • Poll
  • PollOption
  • ProfileBrief
  • Profile
  • CommunityBrief
  • Community
  • Membership
  • Person
  • Channel
  • ChannelCategory
  • ChannelSymbol
  • ChannelMessage
  • Role
  • GroupMember
  • ChannelOverride
  • Bell
  • InviteLink
  • InvitePreview
  • InviteGroup
  • Joined
  • LogEntry
  • Ban
  • Until
  • Tag
  • SearchResult
  • Emoji
  • Notification
  • Actor
  • Conversation
  • Message
  • PlannedMessage
  • ScheduledPost
  • Collection
  • Event
  • EventSignups
  • EventSignup
  • Picture
  • EmojiPicture
  • OwnEmoji
  • GroupEmoji
  • BotEvent
  • BotCommand
  • VoiceSeat
  • Webhook
  • WebhookCreated
  • GroupBot
  • VoiceRoom
  • VoicePerson
  • GiftDrop
  • OwnGiftDrop
  • Quota
  • QuotaLook
  • QuotaGift
  • MediaItem
  • Embed
  • UploadStarted
  • UploadPiece
  • Created
  • DropCreated
  • Made
  • Ok

Mais

  • A descrição legível por máquina
  • GIFs e vídeos em outros sites
  • Entrar com tellmelo
  • O que esperamos
Conteúdo

Primeiros passos

  • Quero …
  • Visão geral
  • Início rápido
  • Experimente
  • Sua chave
  • O que uma chave pode fazer
  • Bots

Fundamentos

  • Solicitações e respostas
  • Páginas
  • Só o que é novo
  • Limites
  • Cabeçalhos
  • Quando algo não funciona
  • Versões

Endpoints

  • Endpoints
  • A entrada
    • GET /
  • Posts
    • 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
  • Respostas
    • 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}
  • Enquetes
    • POST /posts/{id}/vote
  • Perfis
    • 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
  • Grupos
    • 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
  • Canais
    • GET /communities/{id}/channels
    • GET /channels/{id}/messages
    • POST /channels/{id}/messages
    • POST /channels/{id}/read
    • DELETE /channel-messages/{id}
    • GET /communities/{id}/voice
  • Gerenciar grupos
    • 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}
  • Bots
    • GET /events
    • GET /events/stream
    • GET /me/commands
    • PUT /me/commands
    • POST /interactions/{id}/reply
    • POST /channels/{id}/voice
  • Descobrir
    • GET /tags
    • GET /search
    • GET /emojis
  • GIFs e vídeos
    • GET /media
    • GET /media/mine
    • GET /media/{id}
    • POST /media/uploads
    • PUT /media/uploads/{upload}
    • POST /media/{id}
    • DELETE /media/{id}
  • Sua conta
    • 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
  • Notificações
    • GET /notifications
    • POST /notifications/read
  • Mensagens
    • 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}
  • Relações
    • POST /relations
    • GET /profiles/{handle}/followers
    • GET /profiles/{handle}/following
    • GET /me/relations
  • Coleções
    • GET /me/collections
    • POST /me/collections
    • PUT /me/collections/{id}
    • DELETE /me/collections/{id}
    • GET /me/collections/{id}/posts
    • POST /me/collections/{id}/posts
  • Presentes
    • GET /partner/quota
    • GET /partner/gifts
    • POST /partner/gifts
    • GET /gift-drops
    • POST /gift-drops

Objetos

  • Objetos
  • Service
  • RateLimit
  • Post
  • Reply
  • ReplyVote
  • PlannedReply
  • ReplySettings
  • Counts
  • Media
  • Poll
  • PollOption
  • ProfileBrief
  • Profile
  • CommunityBrief
  • Community
  • Membership
  • Person
  • Channel
  • ChannelCategory
  • ChannelSymbol
  • ChannelMessage
  • Role
  • GroupMember
  • ChannelOverride
  • Bell
  • InviteLink
  • InvitePreview
  • InviteGroup
  • Joined
  • LogEntry
  • Ban
  • Until
  • Tag
  • SearchResult
  • Emoji
  • Notification
  • Actor
  • Conversation
  • Message
  • PlannedMessage
  • ScheduledPost
  • Collection
  • Event
  • EventSignups
  • EventSignup
  • Picture
  • EmojiPicture
  • OwnEmoji
  • GroupEmoji
  • BotEvent
  • BotCommand
  • VoiceSeat
  • Webhook
  • WebhookCreated
  • GroupBot
  • VoiceRoom
  • VoicePerson
  • GiftDrop
  • OwnGiftDrop
  • Quota
  • QuotaLook
  • QuotaGift
  • MediaItem
  • Embed
  • UploadStarted
  • UploadPiece
  • Created
  • DropCreated
  • Made
  • Ok

Mais

  • A descrição legível por máquina
  • GIFs e vídeos em outros sites
  • Entrar com tellmelo
  • O que esperamos

Quero …

Escolha o que você tem em mente; abaixo estão só os passos para isso. A referência completa vem mais abaixo.

  1. Cria o bot num dos teus grupos, no menu do grupo em “Bots → Meus bots”, com imagem, nome e @nome. O seu token só o vês uma vez.
  2. Partilha o seu link “Adicionar bot” ou envia-o para o diretório de bots, onde aparece após a verificação da equipa; quem pode gerir funções num grupo aceita-o com as permissões que aprova.
  3. Receba o que acontece nos grupos dele como fluxo (GET /v2/events/stream) ou no seu endereço, e escreva com POST /v2/channels/{id}/messages. Mais em Bots.
  4. Regista comandos (PUT /v2/me/commands) e responde com cartões e botões; um bot toca música com um lugar num canal de voz (POST /v2/channels/{id}/voice).

Visão geral

A v2 permite que seus próprios programas conversem com o tellmelo: uma chave por solicitação, JSON de volta, todas as listas paginam do mesmo jeito. Valem as mesmas regras do app.

  • Todo caminho começa com https://api.tellmelo.com/v2.
  • Solicitações e respostas são JSON em UTF-8. Nomes de campos, códigos e valores são em inglês e continuam em inglês.
  • Uma chave age como a sua conta: o que você não vê no app, ela também não pode ler.
https://api.tellmelo.com/v2

Início rápido

  1. Crie uma chave em “Área de desenvolvedores → API” e copie-a. Ela só aparece uma vez.
  2. Chame a raiz com ela. A resposta mostra a versão, os direitos da chave e as solicitações que restam neste minuto.
  3. Todo caminho funciona igual: chave no cabeçalho, JSON de volta, items e next para 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"
}

Depois: /me para o seu perfil, /posts para posts públicos, /feed para o seu feed.

Experimente

Escolha uma tarefa, preencha os campos e copie a requisição ou envie daqui. Escrita pede confirmação antes. O código lê a chave de TELLMELO_KEY.

read Versão da API e nome desta instância.

curl \
  -H "Authorization: Bearer $TELLMELO_KEY" \
  "https://api.tellmelo.com/v2"

Sua chave

Até 10 chaves por conta, cada uma com nome, permissões próprias e, se quiser, data de validade. Uma chave começa com tm_key_ e é mostrada só uma vez. Perdeu? Renove-a; o valor antigo deixa de funcionar.

Você a cria em “Área de desenvolvedores → API”. Ela vai no cabeçalho da solicitação:

curl -H "Authorization: Bearer tm_key_…" \
  https://api.tellmelo.com/v2/posts

Ou, se for mais prático, num cabeçalho próprio:

curl -H "X-Tellmelo-Key: tm_key_…" https://api.tellmelo.com/v2

Não na URL: ela acabaria em logs e no histórico do navegador.

A mesma chave carrega imagens: todo url aponta para /api/media; envie a chave no cabeçalho lá também.

curl -H "Authorization: Bearer tm_key_…" \
  -o picture.webp "https://api.tellmelo.com/media?id=…"

O que uma chave pode fazer

Uma chave sempre pode ler e, se você permitir, também escrever, presentear, enviar mídia e gerenciar grupos. Cada caminho abaixo diz do que precisa:

  • read: ler. Publicações públicas, perfis, grupos e tags, além do seu feed, notificações, mensagens e dos canais dos seus grupos.
  • write: agir. Publicar, responder, votar, enviar mensagens, escrever no chat de um grupo, seguir, entrar, bloquear, marcar notificações como lidas.
  • gifts: presentear. Da cota de um parceiro para um membro, e presentes numa nova publicação. Uma permissão à parte, para que uma chave feita para publicar nunca possa dar nada.
  • media: sua própria biblioteca de mídia. Enviar, alterar, compartilhar e remover GIFs e vídeos. Uma permissão separada, porque os envios custam pontos de vídeo da conta. Encontrar GIFs e vídeos compartilhados só precisa de read.
  • groups: gerir grupos. Funções, canais, categorias, links de convite, o canal do feed, as remoções, silêncios, expulsões e banimentos, na medida em que a sua conta pode no grupo. Uma permissão própria, para que uma chave de publicar nunca mude quem pode o quê num grupo.

O que nenhuma chave pode fazer

Nenhuma chave alcança senha, e-mail, tipo de conta, lugar, função, exclusão, sessões, dispositivos de push ou outras chaves, nem a administração ou a liderança de grupos. O que a senha protege, nenhuma chave pode fazer.

Bots

Um bot é uma conta própria, do tipo bot, para grupos: sem senha nem e-mail, controlada pelo seu programa com uma chave própria. Usa a mesma API que qualquer conta e pode fazer nos grupos o que o cargo dele ali permitir.

  1. Num dos seus grupos, abra o menu do grupo e, em “Bots → Meus bots”, crie um bot com imagem, capa, nome, nome de utilizador e descrição. O token só é mostrado uma vez; tem as permissões read, write, media e groups.
  2. Partilhe o link do bot ou envie-o para o diretório de bots; aparece lá assim que a equipa o tiver verificado. Quem pode gerir funções num grupo escolhe as permissões; o bot entra e recebe uma função própria.
  3. Seu programa envia o token como Authorization: Bearer …, lê os eventos dos grupos dele como fluxo e trabalha com as rotas em Bots, Canais e Grupos.

Um pequeno bot que lê os eventos como fluxo e responde ao comando /ping com pong, só para quem perguntou:

// 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 });
    }
  }
}

O mesmo bot em Python, que vai buscar os 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)
  • O que um bot pode fazer num grupo é decidido pela sua função lá, não pelo token. A função tem o nome dele; o grupo altera as permissões nas funções das configurações do grupo e remove o bot no menu do grupo, em “Bots → Neste grupo”.
  • Até 5 bots por conta; por grupo, tantos quantos as suas vantagens permitirem. Um bot escreve no máximo 30 mensagens por minuto e grupo, não se encontra na pesquisa e só escreve a quem lhe escreveu primeiro. Aplicam-se os limites.
  • Os eventos também chegam a um endereço HTTPS seu (assinados como os webhooks, com novas tentativas). Além disso: comandos (PUT /v2/me/commands) com respostas para todos ou só para quem perguntou, cartões e botões nas mensagens, e música nos canais de voz (POST /v2/channels/{id}/voice): tudo em Bots.

Solicitações e respostas

  • JSON em todo lugar. Toda resposta é application/json em UTF-8, inclusive erros. Só imagens vêm como imagens.
  • O que você envia. Um POST leva seus campos como JSON no corpo. Se um campo também estiver na URL, vale o corpo.
  • Horários são milissegundos desde 1º de janeiro de 1970, UTC.
  • IDs são strings. Compare-os só por inteiro.
  • Todo campo está sempre presente. O que falta é null; listas podem estar vazias.
  • Textos são texto simples, exatamente como escritos. #tags, @nomes e links ficam como estão, assim como os emojis próprios da instância, como :nome:; as imagens deles estão listadas em /emojis.
  • Imagens são endereços relativos, /api/media?id=…. Sem a chave no cabeçalho você recebe 401.

Páginas

Toda lista aceita limit e cursor e responde com items e next. Envie next de volta como cursor para obter a próxima página; quando next estiver vazio, acabou. O cursor é opaco: não o analise, não monte um.

{ "items": [ … ], "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx" }

curl -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/posts?limit=20&cursor=MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"

Sem limit, 20 itens, no máximo 50. Algumas listas não paginam; o next delas é sempre null.

Só o que é novo

Toda resposta traz um ETag. Envie-o de volta como If-None-Match da próxima vez: se nada mudou, você recebe 304 sem corpo.

ETag: W/"3Qk1mJ7fQe2Yb0sVxT9aL4pNdRc"
If-None-Match: W/"3Qk1mJ7fQe2Yb0sVxT9aL4pNdRc"  →  304

Exceções: /feed não tem ETag porque a ordem muda o tempo todo, e escritas nunca respondem 304.

Limites

Uma chave pode fazer 120 solicitações por minuto, 600 com o plano “Organização”, salvo se a administração definir outra coisa. Acima disso você recebe 429 e nada foi executado. Espere um minuto e envie de novo.

X-RateLimit-Limit: 120
X-RateLimit-Remaining: 117
X-RateLimit-Reset: 1758624060

Escritas também contam para os limites do app, como quantos posts em poucos minutos. Isso também responde 429 com rate_limited.

Cabeçalhos

Fora a chave, nenhum cabeçalho é obrigatório.

O que você envia

CabeçalhoSignificado
AuthorizationLeva a chave: Bearer tm_key_…. O jeito habitual.
X-Tellmelo-KeyA chave, como alternativa a Authorization.
Content-Typeapplication/json, para uma solicitação com corpo.
If-None-MatchO ETag da última resposta. Se nada mudou desde então, a resposta é 304 sem corpo.

O que volta

CabeçalhoSignificado
ETagA impressão digital desta resposta (W/). Envie-a de volta como If-None-Match.
X-RateLimit-LimitQuantas solicitações esta chave pode fazer por minuto.
X-RateLimit-RemainingQuantas delas restam no minuto atual.
X-RateLimit-ResetQuando começa o próximo minuto, em segundos desde 1970, UTC.
X-Tellmelo-ScopeO que esta chave pode fazer: read ou read write.
Retry-AfterCom um 429: quantos segundos esperar antes de perguntar de novo.
WWW-AuthenticateEm 401 sem chave: Bearer.
Cache-Controlno-store: nenhum proxy pode guardar uma resposta em cache. Você ainda pode verificá-la com o ETag.

Quando algo não funciona

Erros vêm como JSON: um código fixo em inglês em error para o seu programa e uma frase em message para pessoas, além do código de status correspondente. Compare só o código; a frase pode mudar.

{ "error": "rate_limited",
  "message": "Too many requests. Try again in a minute.",
  "limit": 120 }

Alguns erros trazem um campo a mais: docs com um 401 por falta de chave, limit com um 429.

StatusCódigoSignificado
400bad_requestA solicitação não pode ser lida, falta um campo obrigatório ou um valor não é permitido.
401key_missingNenhuma chave no cabeçalho.
401key_invalidA chave não é válida: digitada errado, substituída ou a conta está banida.
401unauthorizedRecusada como não conectada, por um motivo que não é a chave.
403scope_missingFalta à chave o direito necessário, geralmente write.
403account_data_lockedDados da conta como senha, e-mail ou exclusão estão fora do alcance das chaves.
403forbiddenSua conta não pode fazer isso, por exemplo por um direito revogado ou um bloqueio.
403timed_outUm silêncio temporário silencia agora a sua conta neste grupo.
404unknown_pathEsse caminho não existe, ou não com este método.
404not_foundNão encontrado, ou você não pode ver.
409conflictEntra em conflito com o que já existe, por exemplo um nome já em uso.
409feed_offO canal do feed deste grupo está desligado.
413too_largeGrande demais para esta instância.
422unprocessableLegível, mas não é possível nesta forma.
429rate_limitedSolicitações demais. Nada aconteceu; espere e tente de novo.
500internal_errorAlgo deu errado no servidor.

Versões

A versão está no caminho. Enquanto estiver v2, caminhos e campos continuam iguais; só são acrescentadas coisas novas.

Acréscimos aumentam o segundo número. Cada caminho diz desde quando existe.

2.20
PUT /v2/roles/{id}/selfGET /v2/eventsGET /v2/events/streamGET /v2/me/commandsPUT /v2/me/commandsPOST /v2/interactions/{id}/replyGET /v2/communities/{id}/emojisPOST /v2/communities/{id}/emojisDELETE /v2/communities/{id}/emojis/{name}PUT /v2/communities/{id}/channels/shapePOST /v2/channels/{id}/voice
2.19
POST /v2/replies/{id}/votePOST /v2/replies/{id}/pickGET /v2/posts/{id}/replies/waitingPOST /v2/replies/{id}/decideGET /v2/posts/{id}/replies/plannedPUT /v2/me/planned-replies/{id}POST /v2/me/planned-replies/{id}/sendDELETE /v2/me/planned-replies/{id}GET /v2/posts/{id}/reply-settingsPUT /v2/posts/{id}/reply-settingsPOST /v2/posts/{id}/coauthorDELETE /v2/posts/{id}/coauthorPOST /v2/posts/{id}/pinPOST /v2/conversations/{with}/plannedGET /v2/me/planned-messagesPOST /v2/me/planned-messages/{id}/sendDELETE /v2/me/planned-messages/{id}GET /v2/profiles/{handle}/followersGET /v2/profiles/{handle}/followingGET /v2/me/relationsGET /v2/me/collectionsPOST /v2/me/collectionsPUT /v2/me/collections/{id}DELETE /v2/me/collections/{id}GET /v2/me/collections/{id}/postsPOST /v2/me/collections/{id}/postsGET /v2/profiles/{handle}/eventsPOST /v2/me/eventsPUT /v2/me/events/{id}DELETE /v2/me/events/{id}GET /v2/me/events/{id}/signupsPOST /v2/events/{id}/signupPOST /v2/me/picturesPUT /v2/me/profileGET /v2/me/emojisPOST /v2/me/emojis/picturesPOST /v2/me/emojisDELETE /v2/me/emojis/{name}PUT /v2/me/emojis/sharingGET /v2/me/webhooksPOST /v2/me/webhooksDELETE /v2/me/webhooks/{id}POST /v2/me/webhooks/{id}/testPOST /v2/communitiesPUT /v2/communities/{id}GET /v2/communities/{id}/botsGET /v2/communities/{id}/voice
2.16
PUT /v2/communities/{id}/members/{member}/timeoutDELETE /v2/communities/{id}/members/{member}/timeoutGET /v2/communities/{id}/bansPUT /v2/communities/{id}/bans/{member}DELETE /v2/communities/{id}/bans/{member}
2.15
GET /v2/communities/{id}/channelsGET /v2/channels/{id}/messagesGET /v2/communities/{id}/membersGET /v2/communities/{id}/rolesGET /v2/communities/{id}/bellGET /v2/invites/{code}POST /v2/channels/{id}/messagesPOST /v2/channels/{id}/readDELETE /v2/channel-messages/{id}PUT /v2/communities/{id}/bellPOST /v2/invites/{code}/joinPOST /v2/communities/{id}/rolesPUT /v2/roles/{id}DELETE /v2/roles/{id}PUT /v2/communities/{id}/roles/orderPUT /v2/roles/{id}/members/{member}POST /v2/communities/{id}/channelsPUT /v2/channels/{id}DELETE /v2/channels/{id}PUT /v2/communities/{id}/channels/orderGET /v2/channels/{id}/overridesPUT /v2/channels/{id}/overrides/{role}POST /v2/communities/{id}/categoriesPUT /v2/categories/{id}DELETE /v2/categories/{id}PUT /v2/communities/{id}/feedGET /v2/communities/{id}/invitesPOST /v2/communities/{id}/invitesDELETE /v2/invites/{code}POST /v2/channel-messages/{id}/removePOST /v2/communities/{id}/posts/{post}/removeDELETE /v2/communities/{id}/members/{member}GET /v2/communities/{id}/log
2.14
GET /v2/mediaGET /v2/media/mineGET /v2/media/{id}POST /v2/media/uploadsPUT /v2/media/uploads/{upload}POST /v2/media/{id}DELETE /v2/media/{id}
2.12
GET /v2/me/scheduledPOST /v2/posts/{id}/schedulePOST /v2/posts/{id}/editPOST /v2/replies/{id}/editDELETE /v2/replies/{id}POST /v2/replies/{id}/likeDELETE /v2/conversations/{with}/messages/{id}GET /v2/partner/quotaGET /v2/partner/giftsPOST /v2/partner/giftsGET /v2/gift-dropsPOST /v2/gift-drops
2.1
GET /v2/emojisPOST /v2/conversations/{with}/read
2.0
GET /v2GET /v2/postsGET /v2/posts/{id}GET /v2/posts/{id}/repliesGET /v2/profiles/{handle}GET /v2/profiles/{handle}/postsGET /v2/communitiesGET /v2/communities/{id}GET /v2/communities/{id}/postsGET /v2/tagsGET /v2/searchGET /v2/meGET /v2/feedGET /v2/notificationsGET /v2/conversationsGET /v2/conversations/{with}/messagesPOST /v2/postsDELETE /v2/posts/{id}POST /v2/posts/{id}/repliesPOST /v2/posts/{id}/votePOST /v2/relationsPOST /v2/conversations/{with}/messagesPOST /v2/notifications/read

https://api.tellmelo.com/v1/ acabou: os caminhos antigos respondem 410 e indicam o novo caminho no corpo.

Endpoints

Todos os caminhos num relance, depois cada um com um exemplo.

CaminhoDireitoPara quê
A entrada
GET/v2readVersão da API e nome desta instância.
Posts
GET/v2/postsreadOs posts públicos, os mais recentes primeiro.
GET/v2/posts/{id}readUm único post, pelo seu id.
POST/v2/postswritePublicar um post.
DELETE/v2/posts/{id}writeRemover um dos seus próprios posts.
GET/v2/me/scheduledreadSuas publicações que ainda não saíram, e o que elas estão esperando.
POST/v2/posts/{id}/schedulewriteMudar quando uma publicação agendada sai, ou quando uma publicação se apaga sozinha.
POST/v2/posts/{id}/editwriteAlterar o texto de uma publicação sua.
GET/v2/posts/{id}/reply-settingsreadQuem pode responder à sua publicação, se as respostas aguardam aprovação e o modo lento.
PUT/v2/posts/{id}/reply-settingswriteMudar as configurações de resposta da sua publicação. O que você não informar continua igual.
POST/v2/posts/{id}/coauthorwriteAceitar ou recusar um convite para ser coautor.
DELETE/v2/posts/{id}/coauthorwriteSair como coautor ou, como autor, tirar o coautor da publicação.
POST/v2/posts/{id}/pinwriteFixar sua publicação no topo do perfil, ou desafixá-la.
Respostas
GET/v2/posts/{id}/repliesreadAs respostas a um post, sem contas bloqueadas.
POST/v2/posts/{id}/replieswriteResponder a um post.
POST/v2/replies/{id}/editwriteAlterar o texto de uma resposta sua.
DELETE/v2/replies/{id}writeRemover uma resposta sua.
POST/v2/replies/{id}/likewriteVotar positivamente numa resposta (uma curtida é um voto positivo desde que as respostas são votadas) ou retirar o voto; um voto negativo permanece.
POST/v2/replies/{id}/votewriteVotar uma resposta para cima ou para baixo, ou retirar seu voto. Responde com seu voto e a pontuação resultante.
POST/v2/replies/{id}/pickwriteDestacar uma resposta na sua publicação como a melhor, ou retirar o destaque.
GET/v2/posts/{id}/replies/waitingreadAs respostas aguardando aprovação em uma publicação: todas na sua, senão só as suas.
POST/v2/replies/{id}/decidewriteAprovar ou recusar uma resposta pendente na sua publicação. Recusada, ela é apagada.
GET/v2/posts/{id}/replies/plannedreadSuas respostas agendadas para mais tarde em uma publicação.
PUT/v2/me/planned-replies/{id}writeMudar o texto ou o horário de uma resposta agendada. Uma que falhou volta a aguardar.
POST/v2/me/planned-replies/{id}/sendwriteEnviar agora uma resposta agendada.
DELETE/v2/me/planned-replies/{id}writeApagar uma resposta agendada.
Enquetes
POST/v2/posts/{id}/votewriteParticipar de uma enquete.
Perfis
GET/v2/profiles/{handle}readUm perfil, pelo seu nome curto.
GET/v2/profiles/{handle}/postsreadOs posts públicos de um perfil, os mais recentes primeiro.
GET/v2/profiles/{handle}/eventsreadOs próximos eventos de um perfil, os mais próximos primeiro.
POST/v2/me/eventswriteCriar um evento. Responde com o id dele.
PUT/v2/me/events/{id}writeMudar um evento seu. Todos os campos são definidos de novo.
DELETE/v2/me/events/{id}writeApagar um evento seu.
GET/v2/me/events/{id}/signupsreadQuem se inscreveu em um evento seu.
POST/v2/events/{id}/signupwriteInscrever-se em um evento ou cancelar a inscrição.
Grupos
GET/v2/communitiesreadOs grupos abertos desta instância; com mine=true, os grupos da sua conta.
GET/v2/communities/{id}readUm único grupo, pelo seu id.
GET/v2/communities/{id}/postsreadAs publicações do canal do feed de um grupo, as mais novas primeiro.
GET/v2/communities/{id}/membersreadOs membros de um grupo com suas funções.
GET/v2/communities/{id}/rolesreadAs funções de um grupo, a mais alta primeiro, @everyone por último.
GET/v2/communities/{id}/bellreadQuais notificações um grupo envia a você.
GET/v2/invites/{code}readO grupo por trás de um link de convite, antes de entrar.
PUT/v2/roles/{id}/selfwriteAssumir ou deixar uma função escolhível.
GET/v2/communities/{id}/emojisreadOs emojis próprios de um grupo.
PUT/v2/communities/{id}/bellwriteDefinir quais notificações um grupo envia a você.
POST/v2/invites/{code}/joinwriteEntrar num grupo com um link de convite.
GET/v2/communities/{id}/botsreadOs bots de um grupo com o que a função deles permite.
Canais
GET/v2/communities/{id}/channelsreadOs canais de um grupo que você vê, na ordem deles.
GET/v2/channels/{id}/messagesreadAs mensagens de um canal de chat, as mais novas primeiro.
POST/v2/channels/{id}/messageswriteEscrever uma mensagem num canal de chat.
POST/v2/channels/{id}/readwriteMarcar um canal de chat como lido até um momento.
DELETE/v2/channel-messages/{id}writeApagar uma mensagem sua num canal de chat.
GET/v2/communities/{id}/voicereadQuem está agora nos canais de voz de um grupo, por canal.
Gerenciar grupos
POST/v2/communities/{id}/emojisgroupsDar um emoji ao grupo.
DELETE/v2/communities/{id}/emojis/{name}groupsRemover um emoji do grupo.
POST/v2/communities/{id}/rolesgroupsCriar uma função.
PUT/v2/roles/{id}groupsMudar nome, cor e permissões de uma função.
DELETE/v2/roles/{id}groupsApagar uma função.
PUT/v2/communities/{id}/roles/ordergroupsDefinir a hierarquia das funções.
PUT/v2/roles/{id}/members/{member}groupsDar ou tirar uma função de um membro.
POST/v2/communities/{id}/channelsgroupsCriar um canal de chat.
PUT/v2/channels/{id}groupsMudar nome, tema e categoria de um canal.
DELETE/v2/channels/{id}groupsApagar um canal de chat com suas mensagens.
PUT/v2/communities/{id}/channels/ordergroupsDefinir a ordem das categorias e dos canais de chat.
PUT/v2/communities/{id}/channels/shapegroupsDefinir a forma de todos os símbolos de canal do grupo.
GET/v2/channels/{id}/overridesgroupsO que funções podem de outro modo num canal do que no grupo.
PUT/v2/channels/{id}/overrides/{role}groupsDefinir o que uma função pode de outro modo num canal.
POST/v2/communities/{id}/categoriesgroupsCriar uma categoria para canais.
PUT/v2/categories/{id}groupsRenomear uma categoria.
DELETE/v2/categories/{id}groupsApagar uma categoria.
PUT/v2/communities/{id}/feedgroupsLigar ou desligar o canal do feed de um grupo.
GET/v2/communities/{id}/invitesgroupsOs links de convite de um grupo que ainda valem.
POST/v2/communities/{id}/invitesgroupsCriar um link de convite.
DELETE/v2/invites/{code}groupsRetirar um link de convite.
POST/v2/channel-messages/{id}/removegroupsRemover de um canal a mensagem de outro membro.
POST/v2/communities/{id}/posts/{post}/removegroupsRemover uma publicação de um grupo.
DELETE/v2/communities/{id}/members/{member}groupsExpulsar um membro de um grupo.
PUT/v2/communities/{id}/members/{member}/timeoutgroupsSilenciar um membro.
DELETE/v2/communities/{id}/members/{member}/timeoutgroupsRetirar um silêncio.
GET/v2/communities/{id}/bansgroupsOs banimentos em vigor de um grupo.
PUT/v2/communities/{id}/bans/{member}groupsBanir um membro.
DELETE/v2/communities/{id}/bans/{member}groupsRetirar um banimento.
GET/v2/communities/{id}/loggroupsO registro da liderança: quem removeu o quê e por quê.
POST/v2/communitiesgroupsFundar um grupo. Responde com o id dele; você é o fundador.
PUT/v2/communities/{id}groupsMudar um grupo que você lidera. O que você não informar continua igual.
Bots
GET/v2/eventsreadOs eventos dos grupos do bot desde um evento, página a página.
GET/v2/events/streamreadOs eventos dos grupos do bot assim que acontecem (server-sent events).
GET/v2/me/commandsreadOs comandos do bot.
PUT/v2/me/commandswriteDefinir os comandos do bot, todos de uma vez.
POST/v2/interactions/{id}/replywriteResponder a um comando ou botão.
POST/v2/channels/{id}/voicewriteOcupar um lugar num canal de voz para tocar música ou som.
Descobrir
GET/v2/tagsreadAs tags em alta no momento.
GET/v2/searchreadUma busca em posts, nomes, nomes curtos e tags.
GET/v2/emojisreadOs emojis próprios da instância, com o endereço das imagens.
GIFs e vídeos
GET/v2/mediareadGIFs ou vídeos compartilhados, os mais usados primeiro.
GET/v2/media/minemediaSua própria biblioteca de mídia, os mais novos primeiro.
GET/v2/media/{id}readUm GIF ou vídeo, seu ou compartilhado.
POST/v2/media/uploadsmediaIniciar um envio.
PUT/v2/media/uploads/{upload}mediaEnviar um pedaço do arquivo.
POST/v2/media/{id}mediaAlterar um dos seus GIFs ou vídeos.
DELETE/v2/media/{id}mediaRemover um dos seus GIFs ou vídeos.
Sua conta
GET/v2/mereadO seu próprio perfil, com o id que os outros caminhos esperam.
GET/v2/feedreadO seu próprio feed, do jeito que o aplicativo o monta.
POST/v2/me/pictureswriteEnviar uma imagem, como seus bytes. Responde com id e url; depois você usa o id como foto de perfil, capa ou em uma publicação.
PUT/v2/me/profileprofileMudar seu perfil: nome, sobre você, foto de perfil, capa e cor do perfil. O que você não informar continua igual.
GET/v2/me/emojisreadSeus próprios emojis.
POST/v2/me/emojis/picturesprofileEnviar a imagem de um emoji seu, como seus bytes.
POST/v2/me/emojisprofileCriar um emoji seu. Responde com todos os seus emojis.
DELETE/v2/me/emojis/{name}profileRemover um emoji seu. Responde com os demais.
PUT/v2/me/emojis/sharingprofileDefinir se seus seguidores podem usar seus emojis nos próprios textos.
GET/v2/me/webhookswebhooksSeus webhooks com o estado deles.
POST/v2/me/webhookswebhooksCriar um webhook. Responde com o id e o segredo das assinaturas, só desta vez.
DELETE/v2/me/webhooks/{id}webhooksApagar um webhook.
POST/v2/me/webhooks/{id}/testwebhooksEnviar um teste a um webhook.
Notificações
GET/v2/notificationsreadSuas notificações, as mais recentes primeiro.
POST/v2/notifications/readwriteMarcar suas notificações como lidas.
Mensagens
GET/v2/conversationsreadSua caixa de entrada: uma linha por conversa, a mais recente primeiro.
GET/v2/conversations/{with}/messagesreadAs mensagens de uma conversa, as mais recentes primeiro.
POST/v2/conversations/{with}/messageswriteEnviar uma mensagem numa conversa.
POST/v2/conversations/{with}/readwriteMarcar todas as mensagens de uma conversa como lidas.
DELETE/v2/conversations/{with}/messages/{id}writeApagar uma mensagem sua.
POST/v2/conversations/{with}/plannedwriteAgendar uma mensagem para mais tarde. Responde com o id da mensagem agendada.
GET/v2/me/planned-messagesreadSuas mensagens que ainda serão enviadas, em ordem de horário.
POST/v2/me/planned-messages/{id}/sendwriteEnviar agora uma mensagem agendada retida ou que falhou.
DELETE/v2/me/planned-messages/{id}writeApagar uma mensagem agendada antes do envio.
Relações
POST/v2/relationswriteCurtir, salvar, repostar, seguir, entrar, bloquear, silenciar, conforme kind.
GET/v2/profiles/{handle}/followersreadQuem segue um perfil, os mais recentes primeiro.
GET/v2/profiles/{handle}/followingreadQuem um perfil segue, os mais recentes primeiro.
GET/v2/me/relationsreadQuem você bloqueou, silenciou ou bloqueou só para mensagens, os mais recentes primeiro.
Coleções
GET/v2/me/collectionsreadSuas coleções com o número de publicações.
POST/v2/me/collectionswriteCriar uma coleção. Responde com o id dela.
PUT/v2/me/collections/{id}writeRenomear uma coleção.
DELETE/v2/me/collections/{id}writeApagar uma coleção.
GET/v2/me/collections/{id}/postsreadAs publicações de uma coleção, como na aba de salvos.
POST/v2/me/collections/{id}/postswriteColocar uma publicação em uma coleção ou tirá-la.
Presentes
GET/v2/partner/quotareadQuanto ainda há para presentear na sua cota.
GET/v2/partner/giftsreadO que você deu da sua cota, a quem e quando – o mais recente primeiro.
POST/v2/partner/giftsgiftsDar meses de plano ou faíscas da sua cota a um membro.
GET/v2/gift-dropsreadSeus presentes em publicações: quantas vagas ainda estão livres e como foram pagos.
POST/v2/gift-dropsgiftsPublicar uma publicação com presentes para os outros pegarem.

A entrada

A primeira solicitação de todo programa: a chave funciona, e o que ela pode fazer?

GET/v2

Versão da API e nome desta instância.

  • Direito read
  • com ETag
  • desde v2.0

Sem barra no final: https://api.tellmelo.com/v2/ redireciona para https://api.tellmelo.com/v2 com 308, e nem todo programa segue.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2"

Resposta

Responde com um Service.

Exemplo
{
  "name": "tellmelo",
  "version": "2.20",
  "scope": "read write",
  "rateLimit": {
    "limit": 120,
    "remaining": 117
  },
  "docs": "/developers/docs",
  "spec": "/api/v2/openapi.json"
}

Status possíveis: 200304401429

Posts

Ler posts públicos, publicar os seus e removê-los de novo.

GET/v2/posts

Os posts públicos, os mais recentes primeiro.

  • Direito read
  • paginável
  • com ETag
  • desde v2.0

Em caminhos públicos, counts.likes e counts.reposts são sempre 0 e pinned é false.

Posts em grupos não estão aqui, mas em /communities/{id}/posts.

Parâmetros

NomeTipoSignificado
limitna queryintegeropcionalItens por página: 20 por padrão, no máximo 50.
cursorna querystringopcionalO next da resposta anterior. Sem ele, desde o início.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/posts?limit=20"

Resposta

Responde com uma página de Post, como `items` e `next`.

Exemplo
{
  "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"
}

Status possíveis: 200304401429

GET/v2/posts/{id}

Um único post, pelo seu id.

  • Direito read
  • com ETag
  • desde v2.0

Em caminhos públicos, counts.likes e counts.reposts são sempre 0 e pinned é false.

Posts em grupos não estão aqui, mas em /communities/{id}/posts.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um post.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1"

Resposta

Responde com um Post.

Exemplo
{
  "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
}

Status possíveis: 200304400401404429

POST/v2/posts

Publicar um post.

  • Direito write
  • desde v2.0

Um post precisa de texto ou de uma enquete. Tamanho, opções da enquete e ritmo são definidos pela instância; além disso você recebe 400 ou 429.

Anexe imagens, um GIF ou um vídeo com media. Um GIF ou vídeo vai sozinho. Você pode usar no tellmelo GIFs e vídeos compartilhados por outros.

Uma publicação para amigos próximos ou com coautor sai na hora, não em um grupo nem agendada. As duas coisas juntas não são possíveis.

Parâmetros

NomeTipoSignificado
textno corpostringopcionalO texto do post, da resposta ou da mensagem.
communityno corpostringopcionalO id do grupo para cujo canal do feed vai a publicação; ele precisa estar ligado e você precisa da permissão. Sem ele, a publicação fica fora de qualquer grupo.
quotesno corpostringopcionalO id do post que este cita.
pollno corpostring[]opcionalAs opções de resposta como lista de textos.
mediano corpostring[]opcionalIDs de imagens enviadas no app, ou de um GIF ou vídeo da biblioteca de mídia (desde 2.14).
audienceno corpostringopcionalQuem vê a publicação: everyone todos que podem vê-la, close só seus amigos próximos.everyoneclose
coauthorno corpostringopcionalO id de uma conta que você convida como coautora. Vocês precisam se seguir mutuamente.

Exemplo de solicitação

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"

Resposta

Responde com um Created.

Exemplo
{
  "id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
  "scheduledFor": null,
  "deleteAt": null
}

Status possíveis: 200400401403429

DELETE/v2/posts/{id}

Remover um dos seus próprios posts.

  • Direito write
  • desde v2.0

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um post.

Exemplo de solicitação

curl -X DELETE \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

GET/v2/me/scheduled

Suas publicações que ainda não saíram, e o que elas estão esperando.

  • Direito read
  • com ETag
  • desde v2.12

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/me/scheduled"

Resposta

Responde com uma página de ScheduledPost, como `items` e `next`.

Exemplo
{
  "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
}

Status possíveis: 200304401429

POST/v2/posts/{id}/schedule

Mudar quando uma publicação agendada sai, ou quando uma publicação se apaga sozinha.

  • Direito write
  • desde v2.12

Só suas próprias publicações. Enquanto os presentes de uma publicação não forem pagos, ela não pode ser agendada.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um post.
publishAtno corpointegeropcionalQuando a publicação agendada sai, em milissegundos desde 1970.
deleteAtno corpointegeropcionalQuando a publicação se apaga sozinha, em milissegundos desde 1970.

Exemplo de solicitação

curl -X POST \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/schedule"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

POST/v2/posts/{id}/edit

Alterar o texto de uma publicação sua.

  • Direito write
  • desde v2.12

Só dentro do prazo de edição que o seu plano dá. Publicações agendadas não podem ser editadas.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um post.
textno corpostringobrigatórioO texto do post, da resposta ou da mensagem.

Exemplo de solicitação

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"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

GET/v2/posts/{id}/reply-settings

Quem pode responder à sua publicação, se as respostas aguardam aprovação e o modo lento.

  • Direito read
  • com ETag
  • desde v2.19

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um post.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/reply-settings"

Resposta

Responde com um ReplySettings.

Exemplo
{
  "audience": "following",
  "approval": false,
  "slow": "auto"
}

Status possíveis: 200304400401404429

PUT/v2/posts/{id}/reply-settings

Mudar as configurações de resposta da sua publicação. O que você não informar continua igual.

  • Direito write
  • desde v2.19

Só suas próprias publicações.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um post.
audienceno corpostringopcionalQuem pode responder: todos, contas que você segue, as mencionadas ou ninguém.allfollowingmentionednobody
approvalno corpobooleanopcionalSe as respostas só aparecem depois da sua aprovação.
slowno corpostringopcionalModo lento: auto liga sozinho quando chegam muitas respostas, on sempre, off nunca.autoonoff

Exemplo de solicitação

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"

Resposta

Responde com um ReplySettings.

Exemplo
{
  "audience": "following",
  "approval": false,
  "slow": "auto"
}

Status possíveis: 200400401403404429

POST/v2/posts/{id}/coauthor

Aceitar ou recusar um convite para ser coautor.

  • Direito write
  • desde v2.19

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um post.
acceptno corpobooleanobrigatóriotrue aceita o convite, false o recusa.

Exemplo de solicitação

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"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

DELETE/v2/posts/{id}/coauthor

Sair como coautor ou, como autor, tirar o coautor da publicação.

  • Direito write
  • desde v2.19

Para o coautor e o autor da publicação.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um post.

Exemplo de solicitação

curl -X DELETE \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/coauthor"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

POST/v2/posts/{id}/pin

Fixar sua publicação no topo do perfil, ou desafixá-la.

  • Direito write
  • desde v2.19

Só suas publicações visíveis. Quantas podem ficar fixadas depende do plano.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um post.
activeno corpobooleanobrigatóriotrue fixa a publicação, false a desafixa.

Exemplo de solicitação

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"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

Respostas

Respostas sob um post, como lista com parentId.

GET/v2/posts/{id}/replies

As respostas a um post, sem contas bloqueadas.

  • Direito read
  • paginável
  • com ETag
  • desde v2.0

A lista é plana e na ordem em que foi escrita; parentId a transforma em árvore. Uma página sempre traz conversas inteiras. Respostas de contas bloqueadas ficam de fora.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um post.
limitna queryintegeropcionalItens por página: 20 por padrão, no máximo 50.
cursorna querystringopcionalO next da resposta anterior. Sem ele, desde o início.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/replies?limit=20"

Resposta

Responde com uma página de Reply, como `items` e `next`.

Exemplo
{
  "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"
}

Status possíveis: 200304400401404429

POST/v2/posts/{id}/replies

Responder a um post.

  • Direito write
  • desde v2.0

No modo lento, uma resposta por pessoa a cada 10 minutos, senão 429. O autor e as contas que ele segue estão isentos.

Com media, no máximo uma imagem, um GIF ou um vídeo.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um post.
textno corpostringobrigatórioO texto do post, da resposta ou da mensagem.
parentIdno corpostringopcionalO id da resposta a que esta responde. Sem ele, direto ao post.
mediano corpostring[]opcionalIDs de imagens enviadas no app, ou de um GIF ou vídeo da biblioteca de mídia (desde 2.14).
publishAtno corpointegeropcionalQuando a resposta deve sair, em milissegundos desde 1970. Sem isso, sai na hora.

Exemplo de solicitação

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"

Resposta

Responde com um Created.

Exemplo
{
  "id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
  "scheduledFor": null,
  "deleteAt": null
}

Status possíveis: 200400401403404429

POST/v2/replies/{id}/edit

Alterar o texto de uma resposta sua.

  • Direito write
  • desde v2.12

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id da resposta.
textno corpostringobrigatórioO texto do post, da resposta ou da mensagem.

Exemplo de solicitação

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"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

DELETE/v2/replies/{id}

Remover uma resposta sua.

  • Direito write
  • desde v2.12

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id da resposta.

Exemplo de solicitação

curl -X DELETE \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/replies/9e4b1c7d-2a3f-4d5e-8b6c-0f1e2d3c4b5a"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

POST/v2/replies/{id}/like

Votar positivamente numa resposta (uma curtida é um voto positivo desde que as respostas são votadas) ou retirar o voto; um voto negativo permanece.

  • Direito write
  • desde v2.12
  • obsoleta

Obsoleta desde a 2.19: use POST /replies/{id}/vote. Esta rota continua por enquanto.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id da resposta.
activeno corpobooleanobrigatóriotrue define a relação, false a remove.

Exemplo de solicitação

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"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

POST/v2/replies/{id}/vote

Votar uma resposta para cima ou para baixo, ou retirar seu voto. Responde com seu voto e a pontuação resultante.

  • Direito write
  • desde v2.19

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id da resposta.
voteno corpostringobrigatórioup vota para cima, down para baixo, none retira seu voto.updownnone

Exemplo de solicitação

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"

Resposta

Responde com um ReplyVote.

Exemplo
{
  "vote": "up",
  "score": 12
}

Status possíveis: 200400401403404429

POST/v2/replies/{id}/pick

Destacar uma resposta na sua publicação como a melhor, ou retirar o destaque.

  • Direito write
  • desde v2.19

Só nas suas publicações e só respostas diretas à publicação. Um novo destaque substitui o anterior.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id da resposta.
activeno corpobooleanobrigatóriotrue destaca a resposta, false retira o destaque.

Exemplo de solicitação

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"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

GET/v2/posts/{id}/replies/waiting

As respostas aguardando aprovação em uma publicação: todas na sua, senão só as suas.

  • Direito read
  • com ETag
  • desde v2.19

Se as respostas aguardam, quem define é o autor nas configurações de resposta.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um post.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/replies/waiting"

Resposta

Responde com uma página de Reply, como `items` e `next`.

Exemplo
{
  "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
}

Status possíveis: 200304400401404429

POST/v2/replies/{id}/decide

Aprovar ou recusar uma resposta pendente na sua publicação. Recusada, ela é apagada.

  • Direito write
  • desde v2.19

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id da resposta.
approveno corpobooleanobrigatóriotrue aprova a resposta, false a recusa.

Exemplo de solicitação

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"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

GET/v2/posts/{id}/replies/planned

Suas respostas agendadas para mais tarde em uma publicação.

  • Direito read
  • com ETag
  • desde v2.19

Agende com publishAt ao responder. No máximo 20 respostas agendadas ao mesmo tempo.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um post.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/replies/planned"

Resposta

Responde com uma página de PlannedReply, como `items` e `next`.

Exemplo
{
  "items": [
    {
      "id": "3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9",
      "parentId": null,
      "text": "Count me in for Saturday!",
      "publishAt": 1758710400000,
      "state": "waiting"
    }
  ],
  "next": null
}

Status possíveis: 200304400401404429

PUT/v2/me/planned-replies/{id}

Mudar o texto ou o horário de uma resposta agendada. Uma que falhou volta a aguardar.

  • Direito write
  • desde v2.19

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id da resposta agendada.
textno corpostringopcionalO texto do post, da resposta ou da mensagem.
publishAtno corpointegeropcionalQuando a resposta deve sair, em milissegundos desde 1970. Sem isso, sai na hora.

Exemplo de solicitação

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"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

POST/v2/me/planned-replies/{id}/send

Enviar agora uma resposta agendada.

  • Direito write
  • desde v2.19

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id da resposta agendada.

Exemplo de solicitação

curl -X POST \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/me/planned-replies/3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9/send"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

DELETE/v2/me/planned-replies/{id}

Apagar uma resposta agendada.

  • Direito write
  • desde v2.19

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id da resposta agendada.

Exemplo de solicitação

curl -X DELETE \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/me/planned-replies/3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

Enquetes

Uma enquete é um post cujo poll está definido. Votar tem um caminho próprio.

POST/v2/posts/{id}/vote

Participar de uma enquete.

  • Direito write
  • desde v2.0

Os votos por opção são null até você votar ou a enquete acabar. total está sempre lá.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um post.
optionno corpointegerobrigatórioQual opção, contando a partir de 0. Em múltipla escolha, chame uma vez por opção.
retractno corpobooleanopcionaltrue retira o voto.

Exemplo de solicitação

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"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

Perfis

Perfis públicos pelo nome curto, e o que publicaram.

GET/v2/profiles/{handle}

Um perfil, pelo seu nome curto.

  • Direito read
  • com ETag
  • desde v2.0

Parâmetros

NomeTipoSignificado
handleno caminhostringobrigatórioO nome curto de um perfil, com maiúsculas ou minúsculas, tanto faz.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/profiles/mara"

Resposta

Responde com um Profile.

Exemplo
{
  "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
}

Status possíveis: 200304400401404429

GET/v2/profiles/{handle}/posts

Os posts públicos de um perfil, os mais recentes primeiro.

  • Direito read
  • paginável
  • com ETag
  • desde v2.0

Em caminhos públicos, counts.likes e counts.reposts são sempre 0 e pinned é false.

Posts em grupos não estão aqui, mas em /communities/{id}/posts.

Parâmetros

NomeTipoSignificado
handleno caminhostringobrigatórioO nome curto de um perfil, com maiúsculas ou minúsculas, tanto faz.
limitna queryintegeropcionalItens por página: 20 por padrão, no máximo 50.
cursorna querystringopcionalO next da resposta anterior. Sem ele, desde o início.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/profiles/mara/posts?limit=20"

Resposta

Responde com uma página de Post, como `items` e `next`.

Exemplo
{
  "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"
}

Status possíveis: 200304400401404429

GET/v2/profiles/{handle}/events

Os próximos eventos de um perfil, os mais próximos primeiro.

  • Direito read
  • com ETag
  • desde v2.19

Só enquanto o plano do perfil incluir eventos. Nada entre contas que se bloquearam.

Parâmetros

NomeTipoSignificado
handleno caminhostringobrigatórioO nome curto de um perfil, com maiúsculas ou minúsculas, tanto faz.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/profiles/mara/events"

Resposta

Responde com uma página de Event, como `items` e `next`.

Exemplo
{
  "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
}

Status possíveis: 200304400401404429

POST/v2/me/events

Criar um evento. Responde com o id dele.

  • Direito write
  • desde v2.19

Precisa de um plano com eventos, senão 403. Quantos podem estar agendados depende do plano.

Parâmetros

NomeTipoSignificado
titleno corpostringobrigatórioO título.
startsAtno corpointegerobrigatórioInício, em milissegundos desde 1970.
endsAtno corpointegeropcionalFim, em milissegundos desde 1970. Opcional.
placeno corpostringopcionalOnde acontece.
descriptionno corpostringopcionalUma descrição.
signupsno corpobooleanopcionalSe dá para se inscrever. Precisa de um plano com inscrições.
capacityno corpointegeropcionalQuantas pessoas podem se inscrever no máximo. Sem informar, sem limite.

Exemplo de solicitação

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"

Resposta

Responde com um Made.

Exemplo
{
  "id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}

Status possíveis: 200400401403429

PUT/v2/me/events/{id}

Mudar um evento seu. Todos os campos são definidos de novo.

  • Direito write
  • desde v2.19

Um evento que já começou mantém o início.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id do evento.
titleno corpostringobrigatórioO título.
startsAtno corpointegerobrigatórioInício, em milissegundos desde 1970.
endsAtno corpointegeropcionalFim, em milissegundos desde 1970. Opcional.
placeno corpostringopcionalOnde acontece.
descriptionno corpostringopcionalUma descrição.
signupsno corpobooleanopcionalSe dá para se inscrever. Precisa de um plano com inscrições.
capacityno corpointegeropcionalQuantas pessoas podem se inscrever no máximo. Sem informar, sem limite.

Exemplo de solicitação

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"

Resposta

Responde com um Made.

Exemplo
{
  "id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}

Status possíveis: 200400401403404429

DELETE/v2/me/events/{id}

Apagar um evento seu.

  • Direito write
  • desde v2.19

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id do evento.

Exemplo de solicitação

curl -X DELETE \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/me/events/2a3b4c5d-6e7f-4809-9a1b-2c3d4e5f6a7b"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

GET/v2/me/events/{id}/signups

Quem se inscreveu em um evento seu.

  • Direito read
  • com ETag
  • desde v2.19

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id do evento.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/me/events/2a3b4c5d-6e7f-4809-9a1b-2c3d4e5f6a7b/signups"

Resposta

Responde com uma página de EventSignup, como `items` e `next`.

Exemplo
{
  "items": [
    {
      "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
      "handle": "mara",
      "name": "Mara 🌻",
      "at": 1758624000000
    }
  ],
  "next": null
}

Status possíveis: 200304400401404429

POST/v2/events/{id}/signup

Inscrever-se em um evento ou cancelar a inscrição.

  • Direito write
  • desde v2.19

Só em eventos com inscrição, não nos seus. Se estiver lotado, 409.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id do evento.
goingno corpobooleanobrigatóriotrue inscreve você, false cancela.

Exemplo de solicitação

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"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

Grupos

Os grupos abertos e os seus, suas publicações, membros, funções e links de convite.

GET/v2/communities

Os grupos abertos desta instância; com mine=true, os grupos da sua conta.

  • Direito read
  • com ETag
  • desde v2.0

Ordenados pelo número de membros e sem paginação; next é sempre null.

Parâmetros

NomeTipoSignificado
limitna queryintegeropcionalItens por página: 20 por padrão, no máximo 50.
minena querybooleanopcionaltrue para os grupos da sua conta, também internos e ocultos, por nome.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/communities?limit=20"

Resposta

Responde com uma página de Community, como `items` e `next`.

Exemplo
{
  "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
}

Status possíveis: 200304401429

GET/v2/communities/{id}

Um único grupo, pelo seu id.

  • Direito read
  • com ETag
  • desde v2.0

Grupos internos e ocultos só se sua conta for membro.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60"

Resposta

Responde com um Community.

Exemplo
{
  "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
  }
}

Status possíveis: 200304400401404429

GET/v2/communities/{id}/posts

As publicações do canal do feed de um grupo, as mais novas primeiro.

  • Direito read
  • paginável
  • com ETag
  • desde v2.0

Em caminhos públicos, counts.likes e counts.reposts são sempre 0 e pinned é false.

Se o canal do feed estiver desligado, o caminho responde 409 com feed_off.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.
limitna queryintegeropcionalItens por página: 20 por padrão, no máximo 50.
cursorna querystringopcionalO next da resposta anterior. Sem ele, desde o início.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/posts?limit=20"

Resposta

Responde com uma página de Post, como `items` e `next`.

Exemplo
{
  "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"
}

Status possíveis: 200304400401404429

GET/v2/communities/{id}/members

Os membros de um grupo com suas funções.

  • Direito read
  • com ETag
  • desde v2.15

Primeiro a liderança, depois pela função mais alta; no máximo 300.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/members"

Resposta

Responde com uma página de GroupMember, como `items` e `next`.

Exemplo
{
  "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
}

Status possíveis: 200304400401404429

GET/v2/communities/{id}/roles

As funções de um grupo, a mais alta primeiro, @everyone por último.

  • Direito read
  • com ETag
  • desde v2.15

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/roles"

Resposta

Responde com uma página de Role, como `items` e `next`.

Exemplo
{
  "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
}

Status possíveis: 200304400401404429

GET/v2/communities/{id}/bell

Quais notificações um grupo envia a você.

  • Direito read
  • com ETag
  • desde v2.15

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/bell"

Resposta

Responde com um Bell.

Exemplo
{
  "level": "important"
}

Status possíveis: 200304400401404429

GET/v2/invites/{code}

O grupo por trás de um link de convite, antes de entrar.

  • Direito read
  • com ETag
  • desde v2.15

Parâmetros

NomeTipoSignificado
codeno caminhostringobrigatórioO código de um link de convite, o fim do endereço dele.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/invites/k7Qm2xPa"

Resposta

Responde com um InvitePreview.

Exemplo
{
  "community": {
    "id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
    "name": "Urban Gardening",
    "members": 312,
    "rules": [
      "Be kind.",
      "No advertising."
    ]
  },
  "member": false
}

Status possíveis: 200304400401404429

PUT/v2/roles/{id}/self

Assumir ou deixar uma função escolhível.

  • Direito write
  • desde v2.20

Só funções que a liderança oferece como escolhíveis (selfable), e só para a sua própria conta.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de uma função.
activeno corpobooleanopcionalfalse tira a função; caso contrário ela é dada.

Exemplo de solicitação

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"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

GET/v2/communities/{id}/emojis

Os emojis próprios de um grupo.

  • Direito read
  • com ETag
  • desde v2.20

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/emojis"

Resposta

Responde com uma página de GroupEmoji, como `items` e `next`.

Exemplo
{
  "items": [
    {
      "name": "seedling",
      "url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
      "animated": false
    }
  ],
  "next": null
}

Status possíveis: 200304400401404429

PUT/v2/communities/{id}/bell

Definir quais notificações um grupo envia a você.

  • Direito write
  • desde v2.15

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.
levelno corpostringobrigatórioQuais notificações chegam.allimportantoff

Exemplo de solicitação

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"

Resposta

Responde com um Bell.

Exemplo
{
  "level": "important"
}

Status possíveis: 200400401403404429

POST/v2/invites/{code}/join

Entrar num grupo com um link de convite.

  • Direito write
  • desde v2.15

Parâmetros

NomeTipoSignificado
codeno caminhostringobrigatórioO código de um link de convite, o fim do endereço dele.
rulesno corpobooleanopcionaltrue se você aceita as regras do grupo; necessário se ele tiver regras.

Exemplo de solicitação

curl -X POST \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/invites/k7Qm2xPa/join"

Resposta

Responde com um Joined.

Exemplo
{
  "community": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60"
}

Status possíveis: 200400401403404429

GET/v2/communities/{id}/bots

Os bots de um grupo com o que a função deles permite.

  • Direito read
  • com ETag
  • desde v2.19

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/bots"

Resposta

Responde com uma página de GroupBot, como `items` e `next`.

Exemplo
{
  "items": [
    {
      "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
      "handle": "gardenbot",
      "name": "Garden bot",
      "description": "Reminds the group of watering days.",
      "permissions": [
        "send",
        "view"
      ]
    }
  ],
  "next": null
}

Status possíveis: 200304400401404429

Canais

Os canais dos seus grupos e o chat deles: ler, escrever, marcar como lido.

GET/v2/communities/{id}/channels

Os canais de um grupo que você vê, na ordem deles.

  • Direito read
  • com ETag
  • desde v2.15

O canal do feed (kind: feed) só aparece aqui enquanto está ligado; as publicações dele vêm por /communities/{id}/posts.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/channels"

Resposta

Responde com uma página de Channel, como `items` e `next`.

Exemplo
{
  "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
}

Status possíveis: 200304400401404429

GET/v2/channels/{id}/messages

As mensagens de um canal de chat, as mais novas primeiro.

  • Direito read
  • paginável
  • com ETag
  • desde v2.15

Até 50 mensagens por página. Faltam as mensagens de contas que você bloqueou ou que bloquearam você.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um canal.
cursorna querystringopcionalO next da resposta anterior. Sem ele, desde o início.
threadna querystringopcionalA mensagem cuja conversa é lida: ela e suas respostas em vez do chat.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a/messages"

Resposta

Responde com uma página de ChannelMessage, como `items` e `next`.

Exemplo
{
  "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"
}

Status possíveis: 200304400401404429

POST/v2/channels/{id}/messages

Escrever uma mensagem num canal de chat.

  • Direito write
  • desde v2.15

@nome avisa um membro, @everyone com a permissão avisa todos, no máximo seis vezes por hora.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um canal.
textno corpostringopcionalO texto do post, da resposta ou da mensagem.
replyTono corpostringopcionalO id da mensagem do mesmo canal que você responde.
mediano corpostring[]opcionalIDs de imagens enviadas no app, ou de um GIF ou vídeo da biblioteca de mídia (desde 2.14).
threadno corpostringopcionalA mensagem do chat em cuja conversa se responde; sem ela a mensagem vai para o chat.
cardno corpoobjectopcionalUm cartão { title, text, color, fields: [{ name, value }] }, no máximo 10 campos.
buttonsno corpoobject[]opcionalAté 5 botões, cada um { id, label, style } com style primary, secondary ou danger. Um toque chega como evento interaction.

Exemplo de solicitação

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"

Resposta

Responde com um Made.

Exemplo
{
  "id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}

Status possíveis: 200400401403404429

POST/v2/channels/{id}/read

Marcar um canal de chat como lido até um momento.

  • Direito write
  • desde v2.15

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um canal.
atno corpointegerobrigatórioAté quando está lido, em milissegundos, em geral o createdAt da mensagem mais nova.

Exemplo de solicitação

curl -X POST \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a/read"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

DELETE/v2/channel-messages/{id}

Apagar uma mensagem sua num canal de chat.

  • Direito write
  • desde v2.15

Só suas próprias mensagens; as dos outros a liderança remove com a permissão groups.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de uma mensagem num canal de chat.

Exemplo de solicitação

curl -X DELETE \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/channel-messages/61a2b3c4-d5e6-4f70-8192-a3b4c5d6e7f8"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

GET/v2/communities/{id}/voice

Quem está agora nos canais de voz de um grupo, por canal.

  • Direito read
  • com ETag
  • desde v2.19

Só canais que você pode ver. Sem servidor de mídia, a lista fica vazia.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/voice"

Resposta

Responde com uma página de VoiceRoom, como `items` e `next`.

Exemplo
{
  "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
}

Status possíveis: 200304400401404429

Gerenciar grupos

O que as configurações de um grupo fazem no app, com a permissão groups. O que sua conta pode, o grupo decide como no app: liderança, funções e sua hierarquia.

POST/v2/communities/{id}/emojis

Dar um emoji ao grupo.

  • Direito groups
  • desde v2.20

Só quem pode gerir os canais do grupo. A imagem é enviada como um emoji seu (POST /me/emojis/pictures); um nome só existe uma vez entre todos os emojis.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.
nameno corpostringobrigatórioO nome com que você escreve o emoji, como :nome:.
pictureno corpostringobrigatórioO id de POST /me/emojis/pictures.

Exemplo de solicitação

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"

Resposta

Responde com uma página de GroupEmoji, como `items` e `next`.

Exemplo
{
  "items": [
    {
      "name": "seedling",
      "url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
      "animated": false
    }
  ],
  "next": null
}

Status possíveis: 200400401403404429

DELETE/v2/communities/{id}/emojis/{name}

Remover um emoji do grupo.

  • Direito groups
  • desde v2.20

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.
nameno caminhostringobrigatórioO nome do emoji, sem dois-pontos.

Exemplo de solicitação

curl -X DELETE \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/emojis/seedling"

Resposta

Responde com uma página de GroupEmoji, como `items` e `next`.

Exemplo
{
  "items": [
    {
      "name": "seedling",
      "url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
      "animated": false
    }
  ],
  "next": null
}

Status possíveis: 200400401403404429

POST/v2/communities/{id}/roles

Criar uma função.

  • Direito groups
  • desde v2.15

Só funções abaixo da sua mais alta e só permissões que você mesmo tem; a liderança fica acima de todas.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.
nameno corpostringopcionalO nome da função; @everyone mantém o seu.
colorno corpostringopcionalA cor; vazio para nenhuma.indigovioletroseambergreenteal
permissionsno corpostring[]opcionalAs permissões: view, send, attach, post_feed, invite, mention_everyone, moderate, timeout_members, kick_members, ban_members, manage_channels, manage_roles.
selfableno corpobooleanopcionaltrue: os membros assumem a função por conta própria. Só para funções que não permitem mais do que participar (view, send, attach, voice_connect, voice_speak, voice_video).

Exemplo de solicitação

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"

Resposta

Responde com um Made.

Exemplo
{
  "id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}

Status possíveis: 200400401403404429

PUT/v2/roles/{id}

Mudar nome, cor e permissões de uma função.

  • Direito groups
  • desde v2.15

Substitui nome, cor e permissões; o que você omitir fica vazio.

Só funções abaixo da sua mais alta e só permissões que você mesmo tem; a liderança fica acima de todas.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de uma função.
nameno corpostringopcionalO nome da função; @everyone mantém o seu.
colorno corpostringopcionalA cor; vazio para nenhuma.indigovioletroseambergreenteal
permissionsno corpostring[]opcionalAs permissões: view, send, attach, post_feed, invite, mention_everyone, moderate, timeout_members, kick_members, ban_members, manage_channels, manage_roles.
selfableno corpobooleanopcionaltrue: os membros assumem a função por conta própria. Só para funções que não permitem mais do que participar (view, send, attach, voice_connect, voice_speak, voice_video).

Exemplo de solicitação

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"

Resposta

Responde com um Made.

Exemplo
{
  "id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}

Status possíveis: 200400401403404429

DELETE/v2/roles/{id}

Apagar uma função.

  • Direito groups
  • desde v2.15

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de uma função.

Exemplo de solicitação

curl -X DELETE \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/roles/4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

PUT/v2/communities/{id}/roles/order

Definir a hierarquia das funções.

  • Direito groups
  • desde v2.15

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.
rolesno corpostring[]obrigatórioOs id de todos os papéis abaixo do seu mais alto, o mais alto primeiro; para a liderança, todos exceto @everyone.

Exemplo de solicitação

curl -X PUT \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/roles/order"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

PUT/v2/roles/{id}/members/{member}

Dar ou tirar uma função de um membro.

  • Direito groups
  • desde v2.15

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de uma função.
memberno caminhostringobrigatórioO id da conta de um membro.
activeno corpobooleanopcionalfalse tira a função; caso contrário ela é dada.

Exemplo de solicitação

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"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

POST/v2/communities/{id}/channels

Criar um canal de chat.

  • Direito groups
  • desde v2.15

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.
nameno corpostringopcionalO nome, sem #; vazio para o nome que o app dá em cada idioma.
topicno corpostringopcionalO tema mostrado acima do canal.
categoryno corpostringopcionalO id da categoria em que o canal fica; vazio para nenhuma.
emojino corpostringopcionalUm emoji como símbolo.
iconno corpostringopcionalUm símbolo do conjunto da app, pelo nome.homehashmegaphonevolumemessagehelpinfobellcalendarbookbookmarkpinshieldstarheartsparklesflamezaptrophygiftrocketlightbulbcodewrenchbriefcasegraduationpalettecamerafilmmusicgamepaddumbbellleafflowerpawsunmooncloudglobemapcoffeepizzasmile
imageno corpostringopcionalO id de uma imagem carregada com /media/emoji.
colorno corpostringopcionalA cor do quadro.brandindigovioletroseambergreentealred
shapeno corpostringopcionalA forma do quadro; sem ela, um círculo.circlesquaretrianglediamondhexagonoctagonshieldstar

Exemplo de solicitação

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"

Resposta

Responde com um Made.

Exemplo
{
  "id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}

Status possíveis: 200400401403404429

PUT/v2/channels/{id}

Mudar nome, tema e categoria de um canal.

  • Direito groups
  • desde v2.15

Substitui nome, tema e categoria; o que você omitir fica vazio.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um canal.
nameno corpostringopcionalO nome, sem #; vazio para o nome que o app dá em cada idioma.
topicno corpostringopcionalO tema mostrado acima do canal.
categoryno corpostringopcionalO id da categoria em que o canal fica; vazio para nenhuma.
emojino corpostringopcionalUm emoji como símbolo.
iconno corpostringopcionalUm símbolo do conjunto da app, pelo nome.homehashmegaphonevolumemessagehelpinfobellcalendarbookbookmarkpinshieldstarheartsparklesflamezaptrophygiftrocketlightbulbcodewrenchbriefcasegraduationpalettecamerafilmmusicgamepaddumbbellleafflowerpawsunmooncloudglobemapcoffeepizzasmile
imageno corpostringopcionalO id de uma imagem carregada com /media/emoji.
colorno corpostringopcionalA cor do quadro.brandindigovioletroseambergreentealred
shapeno corpostringopcionalA forma do quadro; sem ela, um círculo.circlesquaretrianglediamondhexagonoctagonshieldstar

Exemplo de solicitação

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"

Resposta

Responde com um Made.

Exemplo
{
  "id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}

Status possíveis: 200400401403404429

DELETE/v2/channels/{id}

Apagar um canal de chat com suas mensagens.

  • Direito groups
  • desde v2.15

O canal do feed não pode ser apagado, só desligado.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um canal.

Exemplo de solicitação

curl -X DELETE \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

PUT/v2/communities/{id}/channels/order

Definir a ordem das categorias e dos canais de chat.

  • Direito groups
  • desde v2.15

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.
categoriesno corpostring[]obrigatórioOs ids de todas as categorias do grupo na nova ordem.
channelsno corpostring[]obrigatórioOs ids de todos os canais de chat do grupo na nova ordem.

Exemplo de solicitação

curl -X PUT \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/channels/order"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

PUT/v2/communities/{id}/channels/shape

Definir a forma de todos os símbolos de canal do grupo.

  • Direito groups
  • desde v2.20

Só a liderança do grupo.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.
shapeno corpostringopcionalA forma de todos os símbolos do grupo; omitida, cada canal tem a sua.circlesquaretrianglediamondhexagonoctagonshieldstar

Exemplo de solicitação

curl -X PUT \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/channels/shape"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

GET/v2/channels/{id}/overrides

O que funções podem de outro modo num canal do que no grupo.

  • Direito groups
  • com ETag
  • desde v2.15

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um canal.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a/overrides"

Resposta

Responde com uma página de ChannelOverride, como `items` e `next`.

Exemplo
{
  "items": [
    {
      "role": "4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8",
      "allow": [
        "send"
      ],
      "deny": []
    }
  ],
  "next": null
}

Status possíveis: 200304400401403404429

PUT/v2/channels/{id}/overrides/{role}

Definir o que uma função pode de outro modo num canal.

  • Direito groups
  • desde v2.15

Não para funções iguais ou acima da sua mais alta.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um canal.
roleno caminhostringobrigatórioO id de uma função.
allowno corpostring[]opcionalO que a função pode fazer aqui a mais: num chat view, send, attach, mention_everyone, moderate, no canal do feed view e post_feed.
denyno corpostring[]opcionalO que a função não pode aqui, entre as mesmas permissões. As duas listas vazias removem a diferença.

Exemplo de solicitação

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"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

POST/v2/communities/{id}/categories

Criar uma categoria para canais.

  • Direito groups
  • desde v2.15

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.
nameno corpostringobrigatórioO nome da categoria.
emojino corpostringopcionalUm emoji como símbolo.
iconno corpostringopcionalUm símbolo do conjunto da app, pelo nome.homehashmegaphonevolumemessagehelpinfobellcalendarbookbookmarkpinshieldstarheartsparklesflamezaptrophygiftrocketlightbulbcodewrenchbriefcasegraduationpalettecamerafilmmusicgamepaddumbbellleafflowerpawsunmooncloudglobemapcoffeepizzasmile
imageno corpostringopcionalO id de uma imagem carregada com /media/emoji.
colorno corpostringopcionalA cor do quadro.brandindigovioletroseambergreentealred

Exemplo de solicitação

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"

Resposta

Responde com um Made.

Exemplo
{
  "id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}

Status possíveis: 200400401403404429

PUT/v2/categories/{id}

Renomear uma categoria.

  • Direito groups
  • desde v2.15

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de uma categoria.
nameno corpostringobrigatórioO nome da categoria.
emojino corpostringopcionalUm emoji como símbolo.
iconno corpostringopcionalUm símbolo do conjunto da app, pelo nome.homehashmegaphonevolumemessagehelpinfobellcalendarbookbookmarkpinshieldstarheartsparklesflamezaptrophygiftrocketlightbulbcodewrenchbriefcasegraduationpalettecamerafilmmusicgamepaddumbbellleafflowerpawsunmooncloudglobemapcoffeepizzasmile
imageno corpostringopcionalO id de uma imagem carregada com /media/emoji.
colorno corpostringopcionalA cor do quadro.brandindigovioletroseambergreentealred

Exemplo de solicitação

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"

Resposta

Responde com um Made.

Exemplo
{
  "id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}

Status possíveis: 200400401403404429

DELETE/v2/categories/{id}

Apagar uma categoria.

  • Direito groups
  • desde v2.15

Os canais dela ficam, sem categoria.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de uma categoria.

Exemplo de solicitação

curl -X DELETE \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/categories/9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

PUT/v2/communities/{id}/feed

Ligar ou desligar o canal do feed de um grupo.

  • Direito groups
  • desde v2.15

Desligado, as publicações continuam guardadas, mas só os autores as veem.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.
onno corpobooleanobrigatóriotrue liga o canal do feed, false desliga.

Exemplo de solicitação

curl -X PUT \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/feed"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

GET/v2/communities/{id}/invites

Os links de convite de um grupo que ainda valem.

  • Direito groups
  • com ETag
  • desde v2.15

A liderança vê todos; os demais, só os próprios.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/invites"

Resposta

Responde com uma página de InviteLink, como `items` e `next`.

Exemplo
{
  "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
}

Status possíveis: 200304400401403404429

POST/v2/communities/{id}/invites

Criar um link de convite.

  • Direito groups
  • desde v2.15

Um link só vale enquanto você puder convidar, e some quando você sai.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.
daysno corpointegeropcionalPor quantos dias o link vale; sem isso, até ser retirado.1730
usesno corpointegeropcionalQuantas vezes o link pode ser usado; sem isso, sem limite.151025100

Exemplo de solicitação

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"

Resposta

Responde com um Made.

Exemplo
{
  "id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}

Status possíveis: 200400401403404429

DELETE/v2/invites/{code}

Retirar um link de convite.

  • Direito groups
  • desde v2.15

Parâmetros

NomeTipoSignificado
codeno caminhostringobrigatórioO código de um link de convite, o fim do endereço dele.

Exemplo de solicitação

curl -X DELETE \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/invites/k7Qm2xPa"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

POST/v2/channel-messages/{id}/remove

Remover de um canal a mensagem de outro membro.

  • Direito groups
  • desde v2.15

Fica no registro do grupo e no máximo 60 por hora, como no app.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de uma mensagem num canal de chat.

Exemplo de solicitação

curl -X POST \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/channel-messages/61a2b3c4-d5e6-4f70-8192-a3b4c5d6e7f8/remove"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

POST/v2/communities/{id}/posts/{post}/remove

Remover uma publicação de um grupo.

  • Direito groups
  • desde v2.15

Fica no registro do grupo e no máximo 60 por hora, como no app.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.
postno caminhostringobrigatórioO id de um post.
reasonno corpostringobrigatórioO motivo que o membro lê.

Exemplo de solicitação

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"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

DELETE/v2/communities/{id}/members/{member}

Expulsar um membro de um grupo.

  • Direito groups
  • desde v2.15

Desde a 2.16 é uma expulsão: o membro pode voltar. Quem deve ficar de fora é banido.

Só com a permissão correspondente e só com membros abaixo da sua função mais alta; a co-liderança só como fundador.

Fica no registro do grupo e no máximo 60 por hora, como no app.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.
memberno caminhostringobrigatórioO id da conta de um membro.
reasonno corpostringobrigatórioO motivo que o membro lê.

Exemplo de solicitação

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"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

PUT/v2/communities/{id}/members/{member}/timeout

Silenciar um membro.

  • Direito groups
  • desde v2.16

Um novo silêncio substitui o que estiver em curso. Sair e entrar de novo não o encerra.

Só com a permissão correspondente e só com membros abaixo da sua função mais alta; a co-liderança só como fundador.

Fica no registro do grupo e no máximo 60 por hora, como no app.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.
memberno caminhostringobrigatórioO id da conta de um membro.
secondsno corpointegerobrigatórioPor quanto tempo, em segundos.60300600360086400604800
reasonno corpostringopcionalUm motivo que o membro lê; opcional.

Exemplo de solicitação

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"

Resposta

Responde com um Until.

Exemplo
{
  "until": 1758624600000
}

Status possíveis: 200400401403404429

DELETE/v2/communities/{id}/members/{member}/timeout

Retirar um silêncio.

  • Direito groups
  • desde v2.16

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.
memberno caminhostringobrigatórioO id da conta de um membro.

Exemplo de solicitação

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"

Resposta

Responde com um Until.

Exemplo
{
  "until": 1758624600000
}

Status possíveis: 200400401403404429

GET/v2/communities/{id}/bans

Os banimentos em vigor de um grupo.

  • Direito groups
  • com ETag
  • desde v2.16

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/bans"

Resposta

Responde com uma página de Ban, como `items` e `next`.

Exemplo
{
  "items": [
    {
      "member": {
        "id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
        "handle": "jon",
        "name": "Jon",
        "bot": false
      },
      "until": 1759228800000,
      "createdAt": 1758624000000,
      "by": "Mara 🌻"
    }
  ],
  "next": null
}

Status possíveis: 200304400401403404429

PUT/v2/communities/{id}/bans/{member}

Banir um membro.

  • Direito groups
  • desde v2.16

Sem days, o banimento vale até ser retirado.

Só com a permissão correspondente e só com membros abaixo da sua função mais alta; a co-liderança só como fundador.

Fica no registro do grupo e no máximo 60 por hora, como no app.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.
memberno caminhostringobrigatórioO id da conta de um membro.
daysno corpointegeropcionalPor quanto tempo, em dias; omita para um banimento sem fim.1730
reasonno corpostringobrigatórioO motivo que o membro lê.

Exemplo de solicitação

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"

Resposta

Responde com um Until.

Exemplo
{
  "until": 1758624600000
}

Status possíveis: 200400401403404429

DELETE/v2/communities/{id}/bans/{member}

Retirar um banimento.

  • Direito groups
  • desde v2.16

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.
memberno caminhostringobrigatórioO id da conta de um membro.

Exemplo de solicitação

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"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

GET/v2/communities/{id}/log

O registro da liderança: quem removeu o quê e por quê.

  • Direito groups
  • com ETag
  • desde v2.15

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/communities/c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60/log"

Resposta

Responde com uma página de LogEntry, como `items` e `next`.

Exemplo
{
  "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
}

Status possíveis: 200304400401403404429

POST/v2/communities

Fundar um grupo. Responde com o id dele; você é o fundador.

  • Direito groups
  • desde v2.19

Precisa da permissão groups. Sem informar, o grupo é internal e de entrada livre; um oculto só com convite. Se membros podem fundar grupos, quem decide é o operador.

Parâmetros

NomeTipoSignificado
nameno corpostringobrigatórioO nome, no máximo 60 caracteres.
descriptionno corpostringopcionalA descrição, no máximo 240 caracteres.
handleno corpostringopcionalO identificador para menções @# e o link: de 3 a 30 letras minúsculas, dígitos ou _.
tagsno corpostring[]opcionalAté 5 #tags sobre o tema do grupo.
joinPolicyno corpostringopcionalComo se entra: open livremente, application com candidatura, invite só com convite.openapplicationinvite
visibilityno corpostringopcionalQuem vê o grupo: open todos, internal o conteúdo só os membros, hidden só os membros mesmo.openinternalhidden

Exemplo de solicitação

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"

Resposta

Responde com um Made.

Exemplo
{
  "id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}

Status possíveis: 200400401403429

PUT/v2/communities/{id}

Mudar um grupo que você lidera. O que você não informar continua igual.

  • Direito groups
  • desde v2.19

Precisa da permissão groups e de liderar o grupo. Liderança, dissolução e vantagens de faíscas ficam no app.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.
nameno corpostringopcionalO nome, no máximo 60 caracteres.
descriptionno corpostringopcionalA descrição, no máximo 240 caracteres.
handleno corpostringopcionalO identificador para menções @# e o link: de 3 a 30 letras minúsculas, dígitos ou _.
tagsno corpostring[]opcionalAté 5 #tags sobre o tema do grupo.
joinPolicyno corpostringopcionalComo se entra: open livremente, application com candidatura, invite só com convite.openapplicationinvite
visibilityno corpostringopcionalQuem vê o grupo: open todos, internal o conteúdo só os membros, hidden só os membros mesmo.openinternalhidden
imageno corpostringopcionalO id de uma imagem enviada (POST /me/pictures) como imagem do grupo. Vazio remove.
bannerno corpostringopcionalO id de uma imagem enviada como capa do grupo. Vazio remove.

Exemplo de solicitação

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"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

Bots

O que acontece nos grupos de um bot, em tempo real: como fluxo, página a página ou entregue a um endereço.

GET/v2/events

Os eventos dos grupos do bot desde um evento, página a página.

  • Direito read
  • desde v2.20

Só com o token de um bot. Os eventos de um canal só se o bot o puder ver.

Os eventos ficam um dia. next é o número do último, como since para a página seguinte.

Parâmetros

NomeTipoSignificado
sincena querystringopcionalO número do último evento que o bot já tem. Sem ele, o fluxo começa agora e a lista no mais antigo.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/events?since=0"

Resposta

Responde com uma página de BotEvent, como `items` e `next`.

Exemplo
{
  "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
}

Status possíveis: 200401429

GET/v2/events/stream

Os eventos dos grupos do bot assim que acontecem (server-sent events).

  • Direito read
  • com ETag
  • desde v2.20

A ligação fica aberta e fecha após dez minutos; o cliente volta a ligar-se e envia Last-Event-ID.

Só com o token de um bot. Os eventos de um canal só se o bot o puder ver.

Parâmetros

NomeTipoSignificado
sincena querystringopcionalO número do último evento que o bot já tem. Sem ele, o fluxo começa agora e a lista no mais antigo.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/events/stream?since=0"

Resposta

Responde com um BotEvent.

Exemplo
{
  "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
    }
  }
}

Status possíveis: 200304401429

GET/v2/me/commands

Os comandos do bot.

  • Direito read
  • com ETag
  • desde v2.20

Só com o token de um bot. Os eventos de um canal só se o bot o puder ver.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/me/commands"

Resposta

Responde com uma página de BotCommand, como `items` e `next`.

Exemplo
{
  "items": [
    {
      "name": "dice",
      "description": "Rolls a die"
    }
  ],
  "next": null
}

Status possíveis: 200304401429

PUT/v2/me/commands

Definir os comandos do bot, todos de uma vez.

  • Direito write
  • desde v2.20

Substitui todos os comandos; uma lista vazia remove-os. Nos chats que o bot pode ver, o campo de texto oferece-os após «/».

Parâmetros

NomeTipoSignificado
commandsno corpoobject[]obrigatórioAté 25 comandos, cada um { name, description }.

Exemplo de solicitação

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"

Resposta

Responde com uma página de BotCommand, como `items` e `next`.

Exemplo
{
  "items": [
    {
      "name": "dice",
      "description": "Rolls a die"
    }
  ],
  "next": null
}

Status possíveis: 200400401403429

POST/v2/interactions/{id}/reply

Responder a um comando ou botão.

  • Direito write
  • desde v2.20

Nos 15 minutos seguintes ao evento command ou interaction; com private, só quem usou o comando ou o botão vê a resposta.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id do evento (data.interaction).
textno corpostringopcionalO texto do post, da resposta ou da mensagem.
privateno corpobooleanopcionaltrue: só quem usou o comando ou o botão vê a resposta, durante um dia.
cardno corpoobjectopcionalUm cartão { title, text, color, fields: [{ name, value }] }, no máximo 10 campos.
buttonsno corpoobject[]opcionalAté 5 botões, cada um { id, label, style } com style primary, secondary ou danger. Um toque chega como evento interaction.

Exemplo de solicitação

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"

Resposta

Responde com um Made.

Exemplo
{
  "id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}

Status possíveis: 200400401403404429

POST/v2/channels/{id}/voice

Ocupar um lugar num canal de voz para tocar música ou som.

  • Direito write
  • desde v2.20

Só com o token de um bot, conforme o seu papel no canal permite. O programa liga-se com um SDK LiveKit e envia o seu som como microfone; cada um ajusta o volume para si.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um canal.

Exemplo de solicitação

curl -X POST \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/channels/0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a/voice"

Resposta

Responde com um VoiceSeat.

Exemplo
{
  "url": "wss://voice.example.org",
  "token": "eyJhbGciOiJIUzI1NiJ9…",
  "iceServers": [
    {
      "urls": [
        "stun:turn.example.org:3478"
      ]
    }
  ],
  "speak": true,
  "video": false
}

Status possíveis: 200400401403404429

Descobrir

Tendências, busca e os emojis próprios da instância.

GET/v2/tags

As tags em alta no momento.

  • Direito read
  • com ETag
  • desde v2.0

No máximo 10 tags em alta por pontuação: cada uso conta 1 e cai pela metade a cada 3 dias; uma conta conta no máximo 3 por dia. posts é a pontuação arredondada. limit só encurta a lista. Tags destacadas pela equipe podem ficar mais acima.

Parâmetros

NomeTipoSignificado
limitna queryintegeropcionalItens por página: 20 por padrão, no máximo 50.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/tags?limit=10"

Resposta

Responde com uma página de Tag, como `items` e `next`.

Exemplo
{
  "items": [
    {
      "tag": "garden",
      "posts": 58
    }
  ],
  "next": null
}

Status possíveis: 200304401429

GET/v2/search

Uma busca em posts, nomes, nomes curtos e tags.

  • Direito read
  • com ETag
  • desde v2.0

Busca só conteúdo público: posts fora de grupos, perfis e tags. limit vale para cada tipo.

Parâmetros

NomeTipoSignificado
qna querystringobrigatórioAs palavras procuradas.
typena querystringopcionalQual tipo de resultado. Sem ele, todos os tipos.allpostsprofilestags
limitna queryintegeropcionalItens por página: 20 por padrão, no máximo 50.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/search?q=garden&type=posts"

Resposta

Responde com um SearchResult.

Exemplo
{
  "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
    }
  ]
}

Status possíveis: 200304400401429

GET/v2/emojis

Os emojis próprios da instância, com o endereço das imagens.

  • Direito read
  • com ETag
  • desde v2.1

Nos textos, um emoji aparece como :name:. Substitua-o pela imagem desta lista; nomes desconhecidos ficam como texto.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/emojis"

Resposta

Responde com uma página de Emoji, como `items` e `next`.

Exemplo
{
  "items": [
    {
      "name": "tellmelo",
      "url": "/api/media?id=e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b"
    }
  ],
  "next": null
}

Status possíveis: 200304401429

GIFs e vídeos

A biblioteca de mídia: encontrar GIFs e vídeos compartilhados, enviar e gerenciar os seus e incorporá-los em outros sites.

GET/v2/media

GIFs ou vídeos compartilhados, os mais usados primeiro.

  • Direito read
  • paginável
  • com ETag
  • desde v2.14

Sem contas que você bloqueou ou que bloquearam você. Carregue url e poster com a chave no cabeçalho, para os posts no tellmelo.

Para outros sites, só o que tem embed: os endereços dele funcionam sem chave, em qualquer navegador.

Parâmetros

NomeTipoSignificado
kindna querystringopcionalgif ou video; sem informar, gif.gifvideo
qna querystringopcionalPalavras que aparecem no nome ou nas palavras-chave.
anywherena querybooleanopcionaltrue: só o que também pode aparecer em outros sites.
limitna queryintegeropcionalItens por página: 20 por padrão, no máximo 50.
cursorna querystringopcionalO next da resposta anterior. Sem ele, desde o início.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/media?kind=gif&q=bees&anywhere=true&limit=20"

Resposta

Responde com uma página de MediaItem, como `items` e `next`.

Exemplo
{
  "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"
}

Status possíveis: 200304400401429

GET/v2/media/mine

Sua própria biblioteca de mídia, os mais novos primeiro.

  • Direito media
  • paginável
  • com ETag
  • desde v2.14

Parâmetros

NomeTipoSignificado
kindna querystringopcionalgif ou video; sem informar, gif.gifvideo
qna querystringopcionalPalavras que aparecem no nome ou nas palavras-chave.
limitna queryintegeropcionalItens por página: 20 por padrão, no máximo 50.
cursorna querystringopcionalO next da resposta anterior. Sem ele, desde o início.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/media/mine?kind=gif&q=bees&limit=20"

Resposta

Responde com uma página de MediaItem, como `items` e `next`.

Exemplo
{
  "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"
}

Status possíveis: 200304400401403429

GET/v2/media/{id}

Um GIF ou vídeo, seu ou compartilhado.

  • Direito read
  • com ETag
  • desde v2.14

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO ID do GIF ou vídeo.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/media/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918"

Resposta

Responde com um MediaItem.

Exemplo
{
  "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>"
  }
}

Status possíveis: 200304400401404429

POST/v2/media/uploads

Iniciar um envio.

  • Direito media
  • desde v2.14

Depois envie o arquivo em pedaços de no máximo piece bytes para /media/uploads/{upload}. Sem um novo pedaço, um envio termina após 15 minutos.

Valem os limites do app: GIFs até 15 MB, vídeos conforme o plano em tamanho e duração, GIFs por dia, GIFs privados, pontos de vídeo por semana. Caso contrário, vem 409, 413 ou 429.

Parâmetros

NomeTipoSignificado
kindno corpostringobrigatóriogif ou video; sem informar, gif.gifvideo
sizeno corpointegerobrigatórioO tamanho do arquivo inteiro em bytes.
nameno corpostringobrigatórioO nome pelo qual ele é encontrado: de 2 a 40 caracteres.
keywordsno corpostringopcionalPalavras-chave para a busca, separadas por espaços.
sharedno corpobooleanopcionaltrue: compartilhado com todos no tellmelo.
anywhereno corpobooleanopcionaltrue: compartilhado e permitido também em outros sites. Só junto com shared.

Exemplo de solicitação

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"

Resposta

Responde com um UploadStarted.

Exemplo
{
  "upload": "e7c1a2b3-4d5e-4f60-8a9b-0c1d2e3f4a5b",
  "piece": 4194304
}

Status possíveis: 200400401403429

PUT/v2/media/uploads/{upload}

Enviar um pedaço do arquivo.

  • Direito media
  • desde v2.14

O corpo é o próprio pedaço (application/octet-stream), não JSON. Se ele não continuar o anterior, vem 409 com received: continue a partir dali. Depois do último pedaço, o arquivo é convertido; a resposta então tem item.

Parâmetros

NomeTipoSignificado
uploadno caminhostringobrigatórioO upload do início.
offsetna queryintegerobrigatórioOnde o pedaço começa no arquivo, em bytes; 0 para o primeiro.

Exemplo de solicitação

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"

Resposta

Responde com um UploadPiece.

Exemplo
{
  "received": 4194304,
  "item": null
}

Status possíveis: 200400401403404429

POST/v2/media/{id}

Alterar um dos seus GIFs ou vídeos.

  • Direito media
  • desde v2.14

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO ID do GIF ou vídeo.
nameno corpostringopcionalO nome pelo qual ele é encontrado: de 2 a 40 caracteres.
keywordsno corpostringopcionalPalavras-chave para a busca, separadas por espaços.
sharedno corpobooleanopcionaltrue: compartilhado com todos no tellmelo.
anywhereno corpobooleanopcionaltrue: compartilhado e permitido também em outros sites. Só junto com shared.

Exemplo de solicitação

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"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

DELETE/v2/media/{id}

Remover um dos seus GIFs ou vídeos.

  • Direito media
  • desde v2.14

Posts que já o mostram continuam com ele. Em outros sites, ele some em poucos minutos.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO ID do GIF ou vídeo.

Exemplo de solicitação

curl -X DELETE \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/media/b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

Sua conta

Seu perfil, seu feed, seus próprios emojis e seus webhooks.

GET/v2/me

O seu próprio perfil, com o id que os outros caminhos esperam.

  • Direito read
  • com ETag
  • desde v2.0

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/me"

Resposta

Responde com um Profile.

Exemplo
{
  "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
}

Status possíveis: 200304401429

GET/v2/feed

O seu próprio feed, do jeito que o aplicativo o monta.

  • Direito read
  • paginável
  • desde v2.0

Sem ETag, porque a ordem muda o tempo todo. Uma lista que você começou fica igual até o fim.

Parâmetros

NomeTipoSignificado
tabna querystringopcionalQual feed: for-you, following, latest ou bookmarks. latest por padrão.for-youfollowinglatestbookmarks
tagna querystringopcionalSó posts sobre esta tag: escritos com ela ou reconhecidos nela pelo servidor. Sem ele, sem filtro.
limitna queryintegeropcionalItens por página: 20 por padrão, no máximo 50.
cursorna querystringopcionalO next da resposta anterior. Sem ele, desde o início.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/feed?tab=following&limit=20"

Resposta

Responde com uma página de Post, como `items` e `next`.

Exemplo
{
  "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"
}

Status possíveis: 200400401429

POST/v2/me/pictures

Enviar uma imagem, como seus bytes. Responde com id e url; depois você usa o id como foto de perfil, capa ou em uma publicação.

  • Direito write
  • desde v2.19

PNG, JPEG, WebP ou GIF, reconhecido pelos primeiros bytes; salvo de novo sem metadados. Uma imagem não usada em nada é apagada depois.

Exemplo de solicitação

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"

Resposta

Responde com um Picture.

Exemplo
{
  "id": "8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
  "url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9"
}

Status possíveis: 200401403429

PUT/v2/me/profile

Mudar seu perfil: nome, sobre você, foto de perfil, capa e cor do perfil. O que você não informar continua igual.

  • Direito profile
  • desde v2.19

Precisa da permissão profile. Seu @nome fica no app: ele também é seu nome de login.

Parâmetros

NomeTipoSignificado
nameno corpostringopcionalO nome exibido, no máximo 60 caracteres.
aboutno corpostringopcionalO texto “Sobre você”.
avatarno corpostringopcionalO id de uma imagem enviada como foto de perfil. Vazio remove.
bannerno corpostringopcionalO id de uma imagem enviada como capa. Vazio remove.
colorno corpostringopcionalA cor do perfil, com um plano. null remove.indigovioletrosecoralamberlimegreentealskyslatesandnight

Exemplo de solicitação

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"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403429

GET/v2/me/emojis

Seus próprios emojis.

  • Direito read
  • com ETag
  • desde v2.19

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/me/emojis"

Resposta

Responde com uma página de OwnEmoji, como `items` e `next`.

Exemplo
{
  "items": [
    {
      "name": "sunflower",
      "url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
      "animated": false,
      "resting": false
    }
  ],
  "next": null
}

Status possíveis: 200304401429

POST/v2/me/emojis/pictures

Enviar a imagem de um emoji seu, como seus bytes.

  • Direito profile
  • desde v2.19

Emojis animados precisam de um plano. Grande demais depois da conversão, a imagem é recusada.

Exemplo de solicitação

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"

Resposta

Responde com um EmojiPicture.

Exemplo
{
  "id": "8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
  "url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
  "animated": false
}

Status possíveis: 200401403429

POST/v2/me/emojis

Criar um emoji seu. Responde com todos os seus emojis.

  • Direito profile
  • desde v2.19

Quantos emojis você pode criar depende do plano.

Parâmetros

NomeTipoSignificado
nameno corpostringobrigatórioO nome com que você escreve o emoji, como :nome:.
pictureno corpostringobrigatórioO id de POST /me/emojis/pictures.

Exemplo de solicitação

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"

Resposta

Responde com uma página de OwnEmoji, como `items` e `next`.

Exemplo
{
  "items": [
    {
      "name": "sunflower",
      "url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
      "animated": false,
      "resting": false
    }
  ],
  "next": null
}

Status possíveis: 200400401403429

DELETE/v2/me/emojis/{name}

Remover um emoji seu. Responde com os demais.

  • Direito profile
  • desde v2.19

Parâmetros

NomeTipoSignificado
nameno caminhostringobrigatórioO nome do emoji, sem dois-pontos.

Exemplo de solicitação

curl -X DELETE \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/me/emojis/sunflower"

Resposta

Responde com uma página de OwnEmoji, como `items` e `next`.

Exemplo
{
  "items": [
    {
      "name": "sunflower",
      "url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
      "animated": false,
      "resting": false
    }
  ],
  "next": null
}

Status possíveis: 200400401403404429

PUT/v2/me/emojis/sharing

Definir se seus seguidores podem usar seus emojis nos próprios textos.

  • Direito profile
  • desde v2.19

Parâmetros

NomeTipoSignificado
sharedno corpobooleanobrigatóriotrue compartilha seus emojis com seus seguidores, false não.

Exemplo de solicitação

curl -X PUT \
  -H "Authorization: Bearer tm_key_…" \
  -H "Content-Type: application/json" \
  -d '{"shared":true}' \
  "https://api.tellmelo.com/v2/me/emojis/sharing"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403429

GET/v2/me/webhooks

Seus webhooks com o estado deles.

  • Direito webhooks
  • com ETag
  • desde v2.19

Precisa da permissão webhooks. Webhooks vêm com um plano de organização ou como parceiro.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/me/webhooks"

Resposta

Responde com uma página de Webhook, como `items` e `next`.

Exemplo
{
  "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
}

Status possíveis: 200304401403429

POST/v2/me/webhooks

Criar um webhook. Responde com o id e o segredo das assinaturas, só desta vez.

  • Direito webhooks
  • desde v2.19

Cada entrega é assinada com o segredo (X-Tellmelo-Signature). Guarde-o; ele não será mostrado de novo.

Parâmetros

NomeTipoSignificado
urlno corpostringobrigatórioUm endereço HTTPS fora de redes locais, sem credenciais.
kindsno corpostring[]obrigatórioSobre o que o webhook é avisado. Quais tipos estão disponíveis depende do plano e da parceria.replymentiongroup_mentionfollowlikerepostmessagequota_changedquota_giftdrop_claimeddrop_empty

Exemplo de solicitação

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"

Resposta

Responde com um WebhookCreated.

Exemplo
{
  "id": "1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b",
  "secret": "whsec_3f9a…"
}

Status possíveis: 200400401403429

DELETE/v2/me/webhooks/{id}

Apagar um webhook.

  • Direito webhooks
  • desde v2.19

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id do webhook.

Exemplo de solicitação

curl -X DELETE \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/me/webhooks/1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

POST/v2/me/webhooks/{id}/test

Enviar um teste a um webhook.

  • Direito webhooks
  • desde v2.19

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id do webhook.

Exemplo de solicitação

curl -X POST \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/me/webhooks/1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b/test"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

Notificações

O que aconteceu em torno da sua conta, página por página.

GET/v2/notifications

Suas notificações, as mais recentes primeiro.

  • Direito read
  • paginável
  • com ETag
  • desde v2.0

Ler não marca nada como lido; POST /notifications/read marca. Eventos do mesmo tipo no mesmo post dividem uma linha; more diz quantos.

Parâmetros

NomeTipoSignificado
limitna queryintegeropcionalItens por página: 20 por padrão, no máximo 50.
cursorna querystringopcionalO next da resposta anterior. Sem ele, desde o início.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/notifications?limit=20"

Resposta

Responde com uma página de Notification, como `items` e `next`.

Exemplo
{
  "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"
}

Status possíveis: 200304401429

POST/v2/notifications/read

Marcar suas notificações como lidas.

  • Direito write
  • desde v2.0

Exemplo de solicitação

curl -X POST \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/notifications/read"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200401403429

Mensagens

Sua caixa de entrada e conversas. Uma conversa recebe o nome da outra conta.

GET/v2/conversations

Sua caixa de entrada: uma linha por conversa, a mais recente primeiro.

  • Direito read
  • paginável
  • com ETag
  • desde v2.0

Parâmetros

NomeTipoSignificado
limitna queryintegeropcionalItens por página: 20 por padrão, no máximo 50.
cursorna querystringopcionalO next da resposta anterior. Sem ele, desde o início.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/conversations?limit=20"

Resposta

Responde com uma página de Conversation, como `items` e `next`.

Exemplo
{
  "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"
}

Status possíveis: 200304401429

GET/v2/conversations/{with}/messages

As mensagens de uma conversa, as mais recentes primeiro.

  • Direito read
  • paginável
  • com ETag
  • desde v2.0

Ler não marca nada como lido; POST /conversations/{with}/read marca.

Parâmetros

NomeTipoSignificado
withno caminhostringobrigatórioO id da outra conta. Uma conversa não tem id próprio.
limitna queryintegeropcionalItens por página: 20 por padrão, no máximo 50.
cursorna querystringopcionalO next da resposta anterior. Sem ele, desde o início.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/conversations/a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05/messages?limit=20"

Resposta

Responde com uma página de Message, como `items` e `next`.

Exemplo
{
  "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"
}

Status possíveis: 200304400401404429

POST/v2/conversations/{with}/messages

Enviar uma mensagem numa conversa.

  • Direito write
  • desde v2.0

Valem as regras do app: quem te bloqueou não pode ser alcançado, e as configurações da outra pessoa contam.

Imagens, GIFs e vídeos não podem ser anexados a mensagens pela API, só no app.

Parâmetros

NomeTipoSignificado
withno caminhostringobrigatórioO id da outra conta. Uma conversa não tem id próprio.
textno corpostringobrigatórioO texto do post, da resposta ou da mensagem.
replyTono corpostringopcionalO id de uma mensagem anterior desta conversa à qual esta responde. Desde 2.2.

Exemplo de solicitação

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"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

POST/v2/conversations/{with}/read

Marcar todas as mensagens de uma conversa como lidas.

  • Direito write
  • desde v2.1

Parâmetros

NomeTipoSignificado
withno caminhostringobrigatórioO id da outra conta. Uma conversa não tem id próprio.

Exemplo de solicitação

curl -X POST \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/conversations/a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05/read"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

DELETE/v2/conversations/{with}/messages/{id}

Apagar uma mensagem sua.

  • Direito write
  • desde v2.12

Só suas próprias mensagens, e só nas 24 horas depois do envio.

Parâmetros

NomeTipoSignificado
withno caminhostringobrigatórioO id da outra conta. Uma conversa não tem id próprio.
idno caminhostringobrigatórioO id da mensagem.

Exemplo de solicitação

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"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

POST/v2/conversations/{with}/planned

Agendar uma mensagem para mais tarde. Responde com o id da mensagem agendada.

  • Direito write
  • desde v2.19

Precisa de um plano com mensagens agendadas, senão 403. Com criptografia de ponta a ponta dos dois lados, só funciona no app.

Parâmetros

NomeTipoSignificado
withno caminhostringobrigatórioO id da outra conta. Uma conversa não tem id próprio.
textno corpostringobrigatórioO texto do post, da resposta ou da mensagem.
sendAtno corpointegerobrigatórioQuando a mensagem é enviada, em milissegundos desde 1970.

Exemplo de solicitação

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"

Resposta

Responde com um Made.

Exemplo
{
  "id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}

Status possíveis: 200400401403404429

GET/v2/me/planned-messages

Suas mensagens que ainda serão enviadas, em ordem de horário.

  • Direito read
  • com ETag
  • desde v2.19

Parâmetros

NomeTipoSignificado
withna querystringopcionalSó as mensagens para esta conta (o id dela).

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/me/planned-messages"

Resposta

Responde com uma página de PlannedMessage, como `items` e `next`.

Exemplo
{
  "items": [
    {
      "id": "3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9",
      "to": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
      "text": "Happy birthday! 🎂",
      "sendAt": 1758710400000,
      "state": "waiting"
    }
  ],
  "next": null
}

Status possíveis: 200304401429

POST/v2/me/planned-messages/{id}/send

Enviar agora uma mensagem agendada retida ou que falhou.

  • Direito write
  • desde v2.19

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id da mensagem agendada.

Exemplo de solicitação

curl -X POST \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/me/planned-messages/3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9/send"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

DELETE/v2/me/planned-messages/{id}

Apagar uma mensagem agendada antes do envio.

  • Direito write
  • desde v2.19

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id da mensagem agendada.

Exemplo de solicitação

curl -X DELETE \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/me/planned-messages/3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

Relações

Curtir, salvar, repostar, seguir, entrar, bloquear: um só caminho, definido e removido com active. Desde a 2.19 também as listas: seguidores, seguidos e seus próprios bloqueios e silenciamentos.

POST/v2/relations

Curtir, salvar, repostar, seguir, entrar, bloquear, silenciar, conforme kind.

  • Direito write
  • desde v2.0

target é um post para like, save e repost, um grupo para join e uma conta para follow, block e mute. active: false remove a relação.

Parâmetros

NomeTipoSignificado
kindno corpostringobrigatórioQual relação: like, save, repost, follow, join, block ou mute (desde 2.2).likesaverepostfollowjoinblockmute
targetno corpostringobrigatórioO id do post, perfil ou grupo, conforme kind.
activeno corpobooleanopcionaltrue define a relação, false a remove.

Exemplo de solicitação

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"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403429

GET/v2/profiles/{handle}/followers

Quem segue um perfil, os mais recentes primeiro.

  • Direito read
  • paginável
  • com ETag
  • desde v2.19

Parâmetros

NomeTipoSignificado
handleno caminhostringobrigatórioO nome curto de um perfil, com maiúsculas ou minúsculas, tanto faz.
limitna queryintegeropcionalItens por página: 20 por padrão, no máximo 50.
cursorna querystringopcionalO next da resposta anterior. Sem ele, desde o início.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/profiles/mara/followers?limit=20"

Resposta

Responde com uma página de ProfileBrief, como `items` e `next`.

Exemplo
{
  "items": [
    {
      "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
      "handle": "mara",
      "name": "Mara 🌻",
      "verified": true,
      "accountKind": "person"
    }
  ],
  "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}

Status possíveis: 200304400401404429

GET/v2/profiles/{handle}/following

Quem um perfil segue, os mais recentes primeiro.

  • Direito read
  • paginável
  • com ETag
  • desde v2.19

Parâmetros

NomeTipoSignificado
handleno caminhostringobrigatórioO nome curto de um perfil, com maiúsculas ou minúsculas, tanto faz.
limitna queryintegeropcionalItens por página: 20 por padrão, no máximo 50.
cursorna querystringopcionalO next da resposta anterior. Sem ele, desde o início.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/profiles/mara/following?limit=20"

Resposta

Responde com uma página de ProfileBrief, como `items` e `next`.

Exemplo
{
  "items": [
    {
      "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
      "handle": "mara",
      "name": "Mara 🌻",
      "verified": true,
      "accountKind": "person"
    }
  ],
  "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}

Status possíveis: 200304400401404429

GET/v2/me/relations

Quem você bloqueou, silenciou ou bloqueou só para mensagens, os mais recentes primeiro.

  • Direito read
  • paginável
  • com ETag
  • desde v2.19

Só suas próprias listas. Definir e remover é com POST /relations.

Parâmetros

NomeTipoSignificado
kindna querystringobrigatórioblock bloqueados, mute silenciados, dm_block bloqueados só para mensagens.blockmutedm_block
limitna queryintegeropcionalItens por página: 20 por padrão, no máximo 50.
cursorna querystringopcionalO next da resposta anterior. Sem ele, desde o início.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/me/relations?kind=mute&limit=20"

Resposta

Responde com uma página de ProfileBrief, como `items` e `next`.

Exemplo
{
  "items": [
    {
      "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
      "handle": "mara",
      "name": "Mara 🌻",
      "verified": true,
      "accountKind": "person"
    }
  ],
  "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}

Status possíveis: 200304400401429

Coleções

Organize publicações salvas em coleções suas. Uma publicação pode estar em várias; tirada de uma coleção, continua salva.

GET/v2/me/collections

Suas coleções com o número de publicações.

  • Direito read
  • com ETag
  • desde v2.19

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/me/collections"

Resposta

Responde com uma página de Collection, como `items` e `next`.

Exemplo
{
  "items": [
    {
      "id": "6d5c4b3a-2918-4e7f-a1b2-c3d4e5f60718",
      "name": "Recipes",
      "count": 12
    }
  ],
  "next": null
}

Status possíveis: 200304401429

POST/v2/me/collections

Criar uma coleção. Responde com o id dela.

  • Direito write
  • desde v2.19

Quantas coleções você pode criar depende do plano.

Parâmetros

NomeTipoSignificado
nameno corpostringobrigatórioO nome, no máximo 40 caracteres. Único por conta, sem diferenciar maiúsculas.

Exemplo de solicitação

curl -X POST \
  -H "Authorization: Bearer tm_key_…" \
  -H "Content-Type: application/json" \
  -d '{"name":"Recipes"}' \
  "https://api.tellmelo.com/v2/me/collections"

Resposta

Responde com um Made.

Exemplo
{
  "id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}

Status possíveis: 200400401403429

PUT/v2/me/collections/{id}

Renomear uma coleção.

  • Direito write
  • desde v2.19

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id da coleção.
nameno corpostringobrigatórioO nome, no máximo 40 caracteres. Único por conta, sem diferenciar maiúsculas.

Exemplo de solicitação

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"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

DELETE/v2/me/collections/{id}

Apagar uma coleção.

  • Direito write
  • desde v2.19

As publicações dela continuam salvas.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id da coleção.

Exemplo de solicitação

curl -X DELETE \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/me/collections/6d5c4b3a-2918-4e7f-a1b2-c3d4e5f60718"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

GET/v2/me/collections/{id}/posts

As publicações de uma coleção, como na aba de salvos.

  • Direito read
  • paginável
  • desde v2.19

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id da coleção.
limitna queryintegeropcionalItens por página: 20 por padrão, no máximo 50.
cursorna querystringopcionalO next da resposta anterior. Sem ele, desde o início.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/me/collections/6d5c4b3a-2918-4e7f-a1b2-c3d4e5f60718/posts?limit=20"

Resposta

Responde com uma página de Post, como `items` e `next`.

Exemplo
{
  "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"
}

Status possíveis: 200400401404429

POST/v2/me/collections/{id}/posts

Colocar uma publicação em uma coleção ou tirá-la.

  • Direito write
  • desde v2.19

Colocar uma publicação também a salva. Só publicações visíveis.

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id da coleção.
postno corpostringobrigatórioO id da publicação.
insideno corpobooleanopcionaltrue coloca a publicação (padrão), false a tira.

Exemplo de solicitação

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"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

Presentes

Consultar a cota de um parceiro e presentear a partir dela, colocar presentes em publicações e acompanhá-los. Pegar continua reservado às pessoas, no app.

GET/v2/partner/quota

Quanto ainda há para presentear na sua cota.

  • Direito read
  • com ETag
  • desde v2.12

Só para parceiros com cota; os demais recebem 403.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/partner/quota"

Resposta

Responde com um Quota.

Exemplo
{
  "months": 120,
  "sparks": 500,
  "looks": [
    {
      "id": "frame-gold",
      "name": "Goldring",
      "kind": "frame",
      "quantity": 25
    }
  ]
}

Status possíveis: 200304401429

GET/v2/partner/gifts

O que você deu da sua cota, a quem e quando – o mais recente primeiro.

  • Direito read
  • paginável
  • com ETag
  • desde v2.12

Só para parceiros com cota; os demais recebem 403.

Parâmetros

NomeTipoSignificado
limitna queryintegeropcionalItens por página: 20 por padrão, no máximo 50.
cursorna querystringopcionalO next da resposta anterior. Sem ele, desde o início.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/partner/gifts?limit=20"

Resposta

Responde com uma página de QuotaGift, como `items` e `next`.

Exemplo
{
  "items": [
    {
      "item": "plan",
      "quantity": 3,
      "itemId": null,
      "recipient": {
        "handle": "jon",
        "name": "Jon"
      },
      "createdAt": 1758627600000
    }
  ],
  "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}

Status possíveis: 200304401429

POST/v2/partner/gifts

Dar meses de plano ou faíscas da sua cota a um membro.

  • Direito gifts
  • desde v2.12

Só para parceiros com cota; os demais recebem 403.

Assim como no app, o membro vê de quem é o presente. No máximo 60 presentes por hora.

Parâmetros

NomeTipoSignificado
handleno corpostringobrigatórioO @nome do membro que você presenteia, com ou sem @.
itemno corpostringobrigatórioplan para meses de plano, sparks para faíscas, shop para um visual do seu estoque (desde 2.13).plansparksshop
quantityno corpointegeropcionalQuanto: até 12 meses ou 35 faíscas por presente.
itemIdno corpostringopcionalPara shop: o ID do visual, como looks o indica na cota. Um exemplar por presente; quantity não se aplica nesse caso.

Exemplo de solicitação

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"

Resposta

Responde com um Quota.

Exemplo
{
  "months": 120,
  "sparks": 500,
  "looks": [
    {
      "id": "frame-gold",
      "name": "Goldring",
      "kind": "frame",
      "quantity": 25
    }
  ]
}

Status possíveis: 200400401403429

GET/v2/gift-drops

Seus presentes em publicações: quantas vagas ainda estão livres e como foram pagos.

  • Direito read
  • paginável
  • com ETag
  • desde v2.12

Parâmetros

NomeTipoSignificado
limitna queryintegeropcionalItens por página: 20 por padrão, no máximo 50.
cursorna querystringopcionalO next da resposta anterior. Sem ele, desde o início.

Exemplo de solicitação

curl \
  -H "Authorization: Bearer tm_key_…" \
  "https://api.tellmelo.com/v2/gift-drops?limit=20"

Resposta

Responde com uma página de OwnGiftDrop, como `items` e `next`.

Exemplo
{
  "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"
}

Status possíveis: 200304401429

POST/v2/gift-drops

Publicar uma publicação com presentes para os outros pegarem.

  • Direito gifts
  • desde v2.12

Grátis para o dono e para membros da equipe com essa permissão; senão, sai da sua cota. O que precisaria ser pago é recusado com 422 – pagar só funciona no app.

Pegar só funciona no app, para que nenhum programa leve todas as vagas. Quantas ainda estão livres aparece em giftDrop da publicação.

Parâmetros

NomeTipoSignificado
textno corpostringopcionalO texto do post, da resposta ou da mensagem.
communityno corpostringopcionalO id do grupo para cujo canal do feed vai a publicação; ele precisa estar ligado e você precisa da permissão. Sem ele, a publicação fica fora de qualquer grupo.
itemno corpostringobrigatórioplan para meses de plano, sparks para faíscas.plansparks
quantityno corpointegerobrigatórioO que cada vaga contém: até 12 meses ou 35 faíscas.
placesno corpointegerobrigatórioPara quantas pessoas, até 10.000.
audienceno corpostringopcionalQuem pode pegar: all todos, followers só seus seguidores, group só os membros do grupo (somente junto com community).allfollowersgroup
newAccountsno corpobooleanopcionaltrue deixa contas com menos de 7 dias pegarem também. Sem isso, elas ficam de fora.

Exemplo de solicitação

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"

Resposta

Responde com um DropCreated.

Exemplo
{
  "id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
  "funding": "quota"
}

Status possíveis: 200400401403429

Objetos

Todos os objetos, campo por campo. [] significa lista.

Service

A resposta da raiz: quem está respondendo e o que esta chave pode fazer.

CampoTipoSignificado
namestringSempre tellmelo.
versionstringA versão da API, por exemplo 2.1.
scopestringO que esta chave pode fazer: read ou read write.
rateLimitRateLimitA cota desta chave.
docsstringOnde está esta documentação, como caminho nesta instância.
specstringOnde está a descrição legível por máquina.
Exemplo
{
  "name": "tellmelo",
  "version": "2.20",
  "scope": "read write",
  "rateLimit": {
    "limit": 120,
    "remaining": 117
  },
  "docs": "/developers/docs",
  "spec": "/api/v2/openapi.json"
}

RateLimit

A cota desta chave no minuto atual.

CampoTipoSignificado
limitintegerSolicitações por minuto.
remainingintegerQuantas restam neste minuto.
Exemplo
{
  "limit": 120,
  "remaining": 117
}

Post

Um post, com a mesma forma em todo lugar.

CampoTipoSignificado
idstringO id do post.
textstringou nullO texto como foi escrito (null para um post que é só enquete ou só imagens).
kindstringO que o post é.
  • post — Um post com texto, imagens ou uma citação.
  • poll — Um post com enquete.
authorProfileBriefQuem o escreveu.
communityCommunityBriefou nullO grupo em que foi escrito (null fora de qualquer grupo).
mediaMedia[]Suas imagens, em ordem; vazio se não houver.
pollPollou nullA enquete (null se não houver).
quotesstringou nullO id do post que este cita.
continuesstringou nullO id do post que este continua, como acréscimo.
countsCountsRespostas, curtidas e reposts.
pinnedbooleanSe está fixado no topo do perfil do autor.
giftDropGiftDropou nullOs presentes para pegar na publicação (null se não houver).
createdAtintegerQuando foi escrito.
Exemplo
{
  "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
}

Reply

Uma resposta sob um post: um post com mais dois campos.

Todos os campos de Post, e além disso:

CampoTipoSignificado
postIdstringO post do qual a conversa inteira depende.
parentIdstringou nullA resposta a que esta responde (null se responde direto ao post).
Exemplo
{
  "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
}

ReplyVote

Seu voto em uma resposta e a pontuação dela.

CampoTipoSignificado
votestringSeu voto.
  • up — Para cima.
  • down — Para baixo.
  • none — Sem voto.
scoreintegerVotos para cima menos votos para baixo, também abaixo de zero.
Exemplo
{
  "vote": "up",
  "score": 12
}

PlannedReply

Uma resposta sua agendada para mais tarde.

CampoTipoSignificado
idstringO id da resposta agendada.
parentIdstringou nullA resposta que ela vai responder (null se responde direto à publicação).
textstringO texto.
publishAtintegerQuando ela sai.
statestringO estado dela.
  • waiting — Aguarda o horário.
  • failed — Não pôde ser enviada, por exemplo porque a publicação sumiu.
Exemplo
{
  "id": "3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9",
  "parentId": null,
  "text": "Count me in for Saturday!",
  "publishAt": 1758710400000,
  "state": "waiting"
}

ReplySettings

As configurações de resposta de uma publicação sua.

CampoTipoSignificado
audiencestringQuem pode responder.
  • all — Todos.
  • following — Contas que você segue.
  • mentioned — As mencionadas na publicação.
  • nobody — Ninguém além de você.
approvalbooleanSe as respostas aguardam sua aprovação.
slowstringO modo lento.
  • auto — Liga sozinho quando chegam muitas respostas.
  • on — Sempre ligado.
  • off — Desligado.
Exemplo
{
  "audience": "following",
  "approval": false,
  "slow": "auto"
}

Counts

Quantas respostas, curtidas e reposts um post tem.

CampoTipoSignificado
repliesintegerRespostas, todos os níveis juntos.
likesintegerCurtidas.
repostsintegerReposts.
Exemplo
{
  "replies": 4,
  "likes": 31,
  "reposts": 2
}

Media

Uma imagem de um post ou de uma mensagem.

CampoTipoSignificado
urlstringO endereço da imagem ou do vídeo, relativo a esta instância. Carregue com a chave no cabeçalho.
kindstringimage, video ou gif (desde 2.10). Vídeos e GIFs são arquivos MP4.
  • image — Uma imagem (WebP ou JPEG).
  • video — Um vídeo em MP4, com som.
  • gif — Um GIF, como MP4 mudo em loop.
posterstringou nullPara vídeos e GIFs, o endereço da imagem de prévia; caso contrário, null (desde 2.10).
aistringou nullSe a imagem foi feita com IA, como quem a enviou indicou ou a equipe marcou após uma denúncia; null sem indicação (desde 2.11).
  • with — Feito com IA.
  • without — Feito sem IA.
Exemplo
{
  "url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
  "kind": "image",
  "poster": null,
  "ai": "without"
}

Poll

A enquete de um post.

CampoTipoSignificado
optionsPollOption[]As respostas, em ordem. option num voto conta a partir de 0.
totalintegerTodos os votos juntos, sempre presente.
multiplebooleanSe dá para escolher mais de uma resposta.
endsAtintegerou nullQuando a enquete termina (null se roda sem fim).
runningbooleanSe ainda dá para votar.
resultsVisiblebooleanSe os votos por resposta são mostrados (veja votes).
myVotesinteger[]As respostas que você escolheu, contando a partir de 0.
Exemplo
{
  "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
  ]
}

PollOption

Uma resposta de uma enquete.

CampoTipoSignificado
textstringA resposta.
votesintegerou nullSeus votos (null enquanto os resultados estão retidos).
Exemplo
{
  "text": "Lavender",
  "votes": 12
}

ProfileBrief

Um perfil como aparece dentro de outros objetos: como autor, numa busca.

CampoTipoSignificado
idstringO id da conta: o que /relations e /conversations/{with} esperam.
handlestringO nome curto, sem @, escrito como o membro escolheu.
namestringO nome de exibição. Pode conter emojis, inclusive :name:.
verifiedbooleanSe a conta é verificada.
accountKindstringQue tipo de conta é.
  • person — Uma pessoa.
  • business — Uma empresa.
  • association — Um clube ou associação.
  • automated — Uma conta automatizada, como um bot.
  • bot — Um bot de grupos, controlado por um programa com chave própria (desde 2.18).
Exemplo
{
  "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
  "handle": "mara",
  "name": "Mara 🌻",
  "verified": true,
  "accountKind": "person"
}

Profile

Um perfil sozinho, com descrição e seguidores.

Todos os campos de ProfileBrief, e além disso:

CampoTipoSignificado
aboutstringou nullA descrição (null se não houver).
websitestringou nullO site do perfil (null se não houver). Desde 2.3.
websiteVerifiedbooleanSe o site tem link de volta para este perfil com rel=me, verificado semanalmente. Desde 2.3.
followersintegerQuantas contas a seguem.
createdAtintegerou nullQuando a conta foi criada (null enquanto o membro oculta a data de entrada; desde 2.9).
Exemplo
{
  "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
  "handle": "mara",
  "name": "Mara 🌻",
  "verified": true,
  "accountKind": "person",
  "about": "Beekeeper, allotment, too many seeds. :tellmelo:",
  "website": "https://mara-imkerei.example/",
  "websiteVerified": true,
  "followers": 148,
  "createdAt": 1750848000000
}

CommunityBrief

O grupo em que um post foi escrito.

CampoTipoSignificado
idstringO id do grupo.
namestringou nullSeu nome.
Exemplo
{
  "id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
  "name": "Urban Gardening"
}

Community

Um grupo desta instância.

CampoTipoSignificado
idstringO id do grupo.
namestringSeu nome.
handlestringou nullO nome curto para mencionar o grupo com @#. Desde 2.15.
descriptionstringou nullA descrição (null se não houver).
tagsstring[]Os temas de que trata.
membersintegerQuantos membros tem.
joinPolicystringComo se entra.
  • open — Qualquer pessoa pode entrar.
  • application — Entrar exige uma candidatura que o grupo aceita.
  • invite — Só por convite.
visibilitystringQuem o vê. internal e hidden só seus membros (desde 2.15).
  • open — Visível para todos.
  • internal — Não aparece no diretório, mas pelo endereço sim.
  • hidden — Só para seus membros.
feedChannelbooleanSe o canal do feed está ligado. Desde 2.15.
sparksintegerQuantas faíscas o grupo tem agora (desde a 2.19).
perksstring[]As vantagens pagas pelas faíscas dele (desde a 2.19).
membershipMembershipou nullO que sua conta é e pode no grupo; null se não for membro. Desde 2.15.
Exemplo
{
  "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
  }
}

Membership

O que sua conta é e pode no grupo.

CampoTipoSignificado
leaderstringou nullSe você fundou o grupo ou o colidera; null caso contrário.
  • founder — Fundou.
  • manager — Colidera.
rolesstring[]Os ids das suas funções, a mais alta primeiro.
permissionsstring[]O que você pode no grupo.
mutedUntilintegerou nullAté quando um silêncio te silencia aqui; null se não houver.
Exemplo
{
  "leader": null,
  "roles": [
    "4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8"
  ],
  "permissions": [
    "attach",
    "invite",
    "send",
    "view"
  ],
  "mutedUntil": null
}

Person

Um membro, em resumo.

CampoTipoSignificado
idstringO id da conta.
handlestringO nome de usuário, sem @.
namestringO nome exibido.
botbooleanSe a conta é um bot (desde 2.18).
Exemplo
{
  "id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
  "handle": "jon",
  "name": "Jon",
  "bot": false
}

Channel

Um canal de um grupo.

CampoTipoSignificado
idstringO id.
kindstringQue tipo de canal.
  • feed — O canal do feed, cujas publicações também estão no feed público.
  • chat — Um chat.
  • voice — Um canal de voz; só se fala no app.
  • hub — O hub do grupo: a sua página com o que ele é. Sempre lá, sem mensagens.
namestringou nullO nome sem #; null para o nome que o app dá em cada idioma.
topicstringO tema; vazio se não houver.
categoryChannelCategoryou nullA categoria; null sem ela.
unreadintegerQuantas mensagens de outros você ainda não leu, até 100.
permissionsstring[]O que você pode neste canal.
symbolChannelSymbolO seu símbolo; a forma já é a do grupo se ele definir uma.
Exemplo
{
  "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"
  }
}

ChannelCategory

A categoria em que um canal está.

CampoTipoSignificado
idstringO id.
namestringO nome.
symbolChannelSymbolO seu símbolo.
Exemplo
{
  "id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
  "name": "Garden",
  "symbol": {
    "emoji": null,
    "icon": null,
    "image": null,
    "color": null,
    "shape": null
  }
}

ChannelSymbol

O símbolo de um canal ou categoria: no máximo um de emoji, símbolo e imagem; senão, o sinal do seu tipo.

CampoTipoSignificado
emojistringou nullO emoji; null sem ele.
iconstringou nullO nome do símbolo do conjunto da app; null sem ele.
imagestringou nullO endereço da imagem própria; null sem ela.
colorstringou nullA cor do quadro; null para a do seu tipo.
shapestringou nullA forma do quadro; null para um círculo.
Exemplo
{
  "emoji": "🌻",
  "icon": null,
  "image": null,
  "color": "amber",
  "shape": "circle"
}

ChannelMessage

Uma mensagem num canal de chat.

CampoTipoSignificado
idstringO id.
textstringou nullO texto (null numa mensagem só de imagens ou voz).
authorPersonQuem a escreveu.
mediaMedia[]Suas imagens e mensagens de voz; vazio se não houver.
replyTostringou nullO id da mensagem que ela responde; null se nenhuma.
roleColorstringou nullA cor da função mais alta do autor que tem cor; null se não houver.
threadOfstringou nullA mensagem em cuja conversa esta responde; null no chat.
threadCountintegerQuantas respostas tem a conversa desta mensagem.
cardobjectou nullO cartão de um bot: title, text, color e fields; senão null.
buttonsobject[]Os botões de um bot: cada um id, label e style.
createdAtintegerQuando foi escrita.
Exemplo
{
  "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
}

Role

Uma função de um grupo.

CampoTipoSignificado
idstringO id.
namestringou nullO nome; null para @everyone.
everyonebooleanSe é @everyone, a função de todos os membros.
colorstringou nullA cor: indigo, violet, rose, amber, green ou teal; null sem cor.
permissionsstring[]Suas permissões.
membersintegerQuantos a têm; em @everyone todos os membros.
editablebooleanSe sua conta pode mudá-la.
selfablebooleanSe os membros assumem e deixam a função por conta própria.
Exemplo
{
  "id": "4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8",
  "name": "Gardeners",
  "everyone": false,
  "color": "green",
  "permissions": [
    "attach",
    "invite",
    "send",
    "view"
  ],
  "members": 24,
  "editable": true,
  "selfable": false
}

GroupMember

Um membro de um grupo com suas funções.

Todos os campos de Person, e além disso:

CampoTipoSignificado
leaderstringou nullSe o membro fundou o grupo ou o colidera; null caso contrário.
  • founder — Fundou.
  • manager — Colidera.
rolesstring[]Os ids das funções dele, a mais alta primeiro.
mutedUntilintegerou nullAté quando o membro está silenciado, se a sua conta pode silenciar; senão null.
Exemplo
{
  "id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
  "handle": "jon",
  "name": "Jon",
  "bot": false,
  "leader": null,
  "roles": [
    "4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8"
  ],
  "mutedUntil": null
}

ChannelOverride

O que uma função pode de outro modo num canal do que no grupo.

CampoTipoSignificado
rolestringO id da função.
allowstring[]O que ela pode a mais aqui.
denystring[]O que ela não pode aqui.
Exemplo
{
  "role": "4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8",
  "allow": [
    "send"
  ],
  "deny": []
}

Bell

O sino de um grupo.

CampoTipoSignificado
levelstringQuais notificações chegam.
  • all — Cada publicação nova no canal do feed, e @everyone.
  • important — As publicações da liderança no canal do feed, e @everyone.
  • off — Nada, a não ser que mencionem você com @nome.
Exemplo
{
  "level": "important"
}

InviteLink

Um link de convite de um grupo.

CampoTipoSignificado
codestringO código.
urlstringO endereço para compartilhar.
createdByPersonou nullQuem o criou; null se a conta foi apagada.
createdAtintegerQuando foi criado.
expiresAtintegerou nullAté quando vale; null sem fim.
usesintegerQuantas vezes foi usado.
maxUsesintegerou nullQuantas vezes pode ser usado; null sem limite.
Exemplo
{
  "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
}

InvitePreview

Para onde leva um link de convite.

CampoTipoSignificado
communityInviteGroupO grupo.
memberbooleanSe sua conta já é membro.
Exemplo
{
  "community": {
    "id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
    "name": "Urban Gardening",
    "members": 312,
    "rules": [
      "Be kind.",
      "No advertising."
    ]
  },
  "member": false
}

InviteGroup

O grupo por trás de um link de convite.

CampoTipoSignificado
idstringO id.
namestringO nome.
membersintegerQuantos membros tem.
rulesstring[]Suas regras, aceitas ao entrar; vazio se não houver.
Exemplo
{
  "id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
  "name": "Urban Gardening",
  "members": 312,
  "rules": [
    "Be kind.",
    "No advertising."
  ]
}

Joined

A entrada com um link de convite.

CampoTipoSignificado
communitystringO id do grupo.
Exemplo
{
  "community": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60"
}

LogEntry

Uma entrada do registro da liderança.

CampoTipoSignificado
idstringO id.
actionstringO que aconteceu.
  • post_removed — Uma publicação.
  • member_removed — Um membro removido, antes da 2.16 (fora por 90 dias).
  • message_removed — Uma mensagem num canal de chat.
  • member_kicked — Uma expulsão.
  • member_banned — Um banimento.
  • member_unbanned — Um banimento retirado.
  • member_timed_out — Um silêncio temporário.
  • timeout_lifted — Um silêncio retirado.
  • voice_muted — Silenciado em um canal de voz.
  • voice_removed — Desconectado de um canal de voz.
  • bot_added — Um bot entrou no grupo (desde 2.18).
  • bot_removed — Um bot foi removido do grupo (desde 2.18).
memberPersonQuem foi afetado.
reasonstringO motivo; vazio em mensagens e quando nenhum foi dado.
bystringou nullO nome de quem fez; null se a conta foi apagada.
createdAtintegerQuando.
Exemplo
{
  "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
}

Ban

Um banimento de um grupo.

CampoTipoSignificado
memberPersonQuem está banido.
untilintegerou nullAté quando; null até ser retirado.
createdAtintegerou nullDesde quando; null em banimentos de antes da 2.16.
bystringou nullO nome de quem baniu; null se desconhecido.
Exemplo
{
  "member": {
    "id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
    "handle": "jon",
    "name": "Jon",
    "bot": false
  },
  "until": 1759228800000,
  "createdAt": 1758624000000,
  "by": "Mara 🌻"
}

Until

Quando um silêncio ou banimento termina.

CampoTipoSignificado
untilintegerou nullO momento; null para um banimento sem fim ou um silêncio retirado.
Exemplo
{
  "until": 1758624600000
}

Tag

Uma tag e quantos posts a usam.

CampoTipoSignificado
tagstringA tag, sem #.
postsintegerQuantos posts recentes a usam.
Exemplo
{
  "tag": "garden",
  "posts": 58
}

SearchResult

Três listas, possivelmente vazias.

CampoTipoSignificado
postsPost[]Posts que correspondem, os mais recentes primeiro.
profilesProfileBrief[]Perfis que correspondem, pelo nome curto.
tagsTag[]Tags que correspondem, as mais usadas primeiro.
Exemplo
{
  "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
    }
  ]
}

Emoji

Um emoji desta instância.

CampoTipoSignificado
namestringO nome, como aparece entre os dois-pontos.
urlstringO endereço da imagem, relativo a esta instância.
Exemplo
{
  "name": "tellmelo",
  "url": "/api/media?id=e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b"
}

Notification

Uma notificação. Uma linha pode reunir vários eventos do mesmo tipo.

CampoTipoSignificado
idstringO id da notificação.
kindstringO que aconteceu.
  • reply — Alguém te respondeu.
  • like — Alguém curtiu seu post.
  • reply_like — Alguém vota positivamente na sua resposta.
  • duel — Alguém desafia você para o Duelo de feeds, ou seu desafio foi jogado.
  • reply_pick — O autor de uma publicação destaca sua resposta.
  • repost — Alguém repostou seu post.
  • follow — Alguém segue você.
  • mention — Alguém te mencionou.
  • group_mention — Alguém mencionou um grupo que você lidera; text é o nome dele.
  • channel_mention — Alguém mencionou você num canal de chat de um dos seus grupos, inclusive com @everyone; o membro é o actor, a frase nomeia canal e grupo, nunca a mensagem.
  • message — Alguém te escreveu uma mensagem.
  • scheduled — Um post seu agendado foi publicado.
  • video — Um post seu que aguardava o vídeo foi publicado ou voltou a ser um rascunho.
  • reminder — Um lembrete sobre um post salvo está na hora.
  • report — O que aconteceu com uma denúncia que você enviou.
  • moderation — Uma decisão sobre a sua conta: advertência, restrição, recurso.
  • team — Novo trabalho para a equipe (só proprietários, admins e moderação).
  • reward — Uma recompensa por convite está para acabar ou acabou.
  • gift — Um presente da equipe: um plano, ou faíscas para você ou para um grupo que você lidera.
  • present — Um presente de um membro: faíscas ou tempo de plano; o membro é o actor.
  • spark — Faíscas expiram em breve, ou um grupo que lideras já não tem faíscas suficientes para as suas vantagens.
  • loyalty — Sobre o ritmo de fidelidade: uma semana ativa conta ou falta um dia, uma recompensa é nova ou está para sumir.
  • impact — Como foram seus posts de doze horas depois de um dia, em uma notificação.
  • discovery — Um convite para o programa Descoberto, ou que um lugar nele começa ou termina.
  • group_post — Um novo post em um grupo cujo sino toca para isso.
  • group_moderation — A liderança de um grupo removeu um dos seus posts, ou você, do grupo.
  • group — Algo que um membro fez com você em um grupo: convidou, aceitou ou recusou, colocou na coadministração, transferiu ou dissolveu o grupo, ou se candidatou ao seu grupo; o membro é o actor, e o nome do grupo fecha a frase.
  • coauthor — Alguém convidou você como coautor de um post.
  • partner — Um lembrete do programa de parceiros ou o fim do selo de parceiro.
  • news — Um artigo novo em uma região que você segue.
  • pick — Um post seu está concorrendo a post da semana ou do ano, ou venceu.
  • advent — Uma nova porta do calendário do Advento está aberta, uma foi aberta ou a de hoje ainda espera.
  • team_message — Uma mensagem que a equipe do tellmelo escreveu a membros escolhidos.
  • challenge — Começou um novo desafio da semana.
  • nudge — Uma única vez: uma publicação que ninguém respondeu ainda, ou o desafio em curso.
  • signin — Um computador pergunta se você está entrando nele agora.
textstringou nullSó para denúncias e moderação: o texto relacionado; caso contrário, null.
actorActorQuem fez.
postIdstringou nullO post de que se trata (null se não se trata de nenhum).
readbooleanSe foi marcada como lida.
moreintegerQuantos outros eventos esta linha representa, além do citado.
createdAtintegerQuando aconteceu pela primeira vez.
updatedAtintegerQuando reuniu outro evento pela última vez. A lista é ordenada por isto.
Exemplo
{
  "id": "3f2e1d0c-9b8a-4765-8432-10fedcba9876",
  "kind": "like",
  "text": null,
  "actor": {
    "handle": "jon",
    "name": "Jon"
  },
  "postId": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
  "read": false,
  "more": 2,
  "createdAt": 1758624300000,
  "updatedAt": 1758624900000
}

Actor

Quem disparou uma notificação.

CampoTipoSignificado
handlestringO nome curto.
namestringO nome de exibição.
Exemplo
{
  "handle": "jon",
  "name": "Jon"
}

Conversation

Uma linha da sua caixa de entrada.

CampoTipoSignificado
withstringO id da outra conta: o que /conversations/{with}/messages espera.
handlestringO nome curto da pessoa.
namestringO nome de exibição da pessoa.
excerptstringou nullO início da última mensagem (null se não tiver texto).
truncatedbooleanSe o trecho foi cortado.
fromMebooleanSe a última mensagem é sua.
lastMessageIdstringO id da última mensagem.
unreadintegerQuantas mensagens da pessoa você ainda não leu.
updatedAtintegerQuando a última mensagem foi escrita.
Exemplo
{
  "with": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
  "handle": "jon",
  "name": "Jon",
  "excerpt": "See you on Saturday at the market!",
  "truncated": false,
  "fromMe": true,
  "lastMessageId": "7c6b5a49-3827-4165-9f0e-d1c2b3a49586",
  "unread": 0,
  "updatedAt": 1758624060000
}

Message

Uma mensagem numa conversa.

CampoTipoSignificado
idstringO id da mensagem.
textstringou nullO texto (null para uma mensagem que é só imagens).
fromstringO id da conta que a escreveu.
tostringO id da conta para quem foi escrita.
readbooleanSe o destinatário a leu.
mediaMedia[]Suas imagens; vazio se não houver.
replyTostringou nullO id da mensagem a que esta responde (null se não responde a nenhuma). Desde 2.2.
createdAtintegerQuando foi enviada.
Exemplo
{
  "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
}

PlannedMessage

Uma mensagem sua agendada para mais tarde.

CampoTipoSignificado
idstringO id da mensagem agendada.
tostringO id da conta que a recebe.
textstringou nullO texto, null com criptografia de ponta a ponta.
sendAtintegerQuando ela é enviada.
statestringO estado dela.
  • waiting — Aguarda o horário.
  • held — Retida porque o plano terminou. Você pode enviá-la ou apagá-la.
  • failed — Não pôde ser enviada.
Exemplo
{
  "id": "3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9",
  "to": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
  "text": "Happy birthday! 🎂",
  "sendAt": 1758710400000,
  "state": "waiting"
}

ScheduledPost

Uma publicação sua que ainda não saiu.

CampoTipoSignificado
idstringO id da publicação.
textstringou nullO texto.
communityIdstringou nullO grupo em que sai (null fora de grupos).
publishAtintegerou nullQuando sai (null enquanto espera outra coisa).
deleteAtintegerou nullQuando se apaga sozinha (null: nunca).
waitingForstringO que está esperando.
  • time — A hora dela.
  • review — A aprovação de um texto escrito para revisão.
  • check — A verificação da moderação automática.
  • payment — O pagamento dos presentes.
createdAtintegerQuando foi escrita.
Exemplo
{
  "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
}

Collection

Uma coleção de publicações salvas.

CampoTipoSignificado
idstringO id da coleção.
namestringO nome dela.
countintegerQuantas publicações há nela.
Exemplo
{
  "id": "6d5c4b3a-2918-4e7f-a1b2-c3d4e5f60718",
  "name": "Recipes",
  "count": 12
}

Event

Um próximo evento de um perfil.

CampoTipoSignificado
idstringO id do evento.
titlestringO título.
startsAtintegerInício.
endsAtintegerou nullFim, null sem fim.
placestringou nullO local.
descriptionstringou nullA descrição.
signupsEventSignupsou nullAs inscrições, null sem inscrição.
Exemplo
{
  "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
  }
}

EventSignups

Quantas pessoas se inscreveram.

CampoTipoSignificado
countintegerO número de inscrições.
goingbooleanSe você está inscrito.
Exemplo
{
  "count": 14,
  "going": true
}

EventSignup

Alguém que se inscreveu em um evento seu.

CampoTipoSignificado
idstringO id da conta.
handlestringO nome de usuário.
namestringO nome exibido.
atintegerQuando se inscreveu.
Exemplo
{
  "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
  "handle": "mara",
  "name": "Mara 🌻",
  "at": 1758624000000
}

Picture

Uma imagem enviada.

CampoTipoSignificado
idstringO id da imagem.
urlstringOnde ela pode ser vista.
Exemplo
{
  "id": "8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
  "url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9"
}

EmojiPicture

A imagem enviada de um emoji.

CampoTipoSignificado
idstringO id da imagem.
urlstringOnde ela pode ser vista.
animatedbooleanSe ela se move.
Exemplo
{
  "id": "8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
  "url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
  "animated": false
}

OwnEmoji

Um dos seus próprios emojis.

CampoTipoSignificado
namestringO nome dele.
urlstringA imagem dele.
animatedbooleanSe ele se move.
restingbooleanEm pausa porque o plano agora permite menos emojis: ele fica, mas não pode ser usado.
Exemplo
{
  "name": "sunflower",
  "url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
  "animated": false,
  "resting": false
}

GroupEmoji

Um emoji de um grupo.

CampoTipoSignificado
namestringO nome dele.
urlstringA imagem dele.
animatedbooleanSe ele se move.
Exemplo
{
  "name": "seedling",
  "url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
  "animated": false
}

BotEvent

Um evento num grupo do bot.

CampoTipoSignificado
idstringO seu número, crescente; é com ele que se continua (since, Last-Event-ID).
typestringO que aconteceu.
  • message.created — Uma mensagem foi escrita.
  • message.deleted — Uma mensagem foi apagada.
  • member.joined — Alguém entrou.
  • member.left — Alguém saiu ou foi removido.
  • voice.joined — Alguém entrou num canal de voz.
  • command — Alguém usou um comando do bot.
  • interaction — Alguém premiu um botão numa mensagem do bot.
communitystringO grupo.
channelstringou nullO canal; null para o grupo inteiro.
createdAtintegerQuando aconteceu.
dataobjectO que o acompanha, conforme o tipo: message, member (com reason), command ou interaction.
Exemplo
{
  "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
    }
  }
}

BotCommand

Um comando de um bot.

CampoTipoSignificado
namestringO seu nome, sem «/».
descriptionstringO que faz.
Exemplo
{
  "name": "dice",
  "description": "Rolls a die"
}

VoiceSeat

Um lugar num canal de voz.

CampoTipoSignificado
urlstringO endereço do servidor de média (LiveKit).
tokenstringO token para este canal, válido alguns minutos.
iceServersobject[]Os servidores STUN e TURN para a ligação.
speakbooleanSe o bot pode enviar som ali.
videobooleanSe o bot pode enviar vídeo ali.
Exemplo
{
  "url": "wss://voice.example.org",
  "token": "eyJhbGciOiJIUzI1NiJ9…",
  "iceServers": [
    {
      "urls": [
        "stun:turn.example.org:3478"
      ]
    }
  ],
  "speak": true,
  "video": false
}

Webhook

Um dos seus webhooks.

CampoTipoSignificado
idstringO id do webhook.
urlstringO endereço dele.
kindsstring[]Sobre o que ele é avisado.
activebooleanSe ele recebe entregas. Depois de muitas falhas seguidas, é desligado.
lastStatusintegerou nullO status HTTP da última entrega.
lastAtintegerou nullQuando foi a última entrega.
failuresintegerFalhas seguidas.
Exemplo
{
  "id": "1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b",
  "url": "https://example.org/tellmelo-hook",
  "kinds": [
    "reply",
    "mention"
  ],
  "active": true,
  "lastStatus": 200,
  "lastAt": 1758624000000,
  "failures": 0
}

WebhookCreated

Um webhook novo com seu segredo.

CampoTipoSignificado
idstringO id do webhook.
secretstringO segredo das assinaturas, só desta vez.
Exemplo
{
  "id": "1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b",
  "secret": "whsec_3f9a…"
}

GroupBot

Um bot de um grupo.

CampoTipoSignificado
idstringO id da conta do bot.
handlestringO identificador dele.
namestringO nome dele.
descriptionstringO que ele faz, nas palavras do dono.
permissionsstring[]O que a função dele no grupo permite.
Exemplo
{
  "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
  "handle": "gardenbot",
  "name": "Garden bot",
  "description": "Reminds the group of watering days.",
  "permissions": [
    "send",
    "view"
  ]
}

VoiceRoom

Um canal de voz com as pessoas dentro.

CampoTipoSignificado
channelstringO id do canal.
peopleVoicePerson[]Quem está nele agora.
Exemplo
{
  "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
    }
  ]
}

VoicePerson

Alguém em um canal de voz.

CampoTipoSignificado
idstringO id da conta.
handlestringO identificador.
namestringO nome exibido.
mutedbooleanSe o microfone está desligado.
deafbooleanSe a pessoa não ouve nada (por escolha própria).
camerabooleanSe a câmera está ligada.
screenbooleanSe a tela está sendo compartilhada.
Exemplo
{
  "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
  "handle": "mara",
  "name": "Mara 🌻",
  "muted": true,
  "deaf": false,
  "camera": false,
  "screen": false
}

GiftDrop

Presentes numa publicação – nunca com os nomes de quem os pegou.

CampoTipoSignificado
itemstringO que uma vaga contém.
  • plan — Meses de plano (Apoiador).
  • sparks — Faíscas.
quantityintegerQuanto cada vaga contém: meses ou faíscas.
placesintegerQuantas vagas há no total.
leftintegerQuantas ainda estão livres.
audiencestringQuem pode pegar.
  • all — Todos.
  • followers — Só seguidores de quem presenteia.
  • group — Só membros do grupo da publicação.
newAccountsbooleanSe contas com menos de 7 dias também podem pegar.
statusstringEm que pé está.
  • awaiting_payment — Aguardando pagamento; a publicação ainda não saiu.
  • open — Ainda há vagas para pegar.
  • closed — Acabou: tudo pego, pagamento reembolsado ou publicação apagada.
claimedbooleanSe você mesmo já tem uma vaga (sempre false nas rotas públicas).
Exemplo
{
  "item": "plan",
  "quantity": 3,
  "places": 10,
  "left": 4,
  "audience": "followers",
  "newAccounts": false,
  "status": "open",
  "claimed": true
}

OwnGiftDrop

Seus presentes numa publicação, com a publicação e o pagamento.

Todos os campos de GiftDrop, e além disso:

CampoTipoSignificado
postIdstringA publicação em que estão.
fundingstringComo foram pagos.
  • free — Grátis.
  • quota — Da cota.
  • payment — Pago.
createdAtintegerQuando foram criados.
Exemplo
{
  "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
}

Quota

O que há numa cota.

CampoTipoSignificado
monthsintegerMeses de plano ainda para dar.
sparksintegerFaíscas ainda para dar.
looksQuotaLook[]Visuais do estoque ainda para dar (desde 2.13).
Exemplo
{
  "months": 120,
  "sparks": 500,
  "looks": [
    {
      "id": "frame-gold",
      "name": "Goldring",
      "kind": "frame",
      "quantity": 25
    }
  ]
}

QuotaLook

Um visual no estoque de um parceiro, com os exemplares que restam (desde 2.13).

CampoTipoSignificado
idstringO ID do visual; ao dá-lo, envie-o como itemId.
namestringO nome do visual.
kindstringO tipo de visual.
  • frame — Moldura de perfil.
  • background — Efeito de capa.
  • card — Card de perfil.
quantityintegerQuantos exemplares restam.
Exemplo
{
  "id": "frame-gold",
  "name": "Goldring",
  "kind": "frame",
  "quantity": 25
}

QuotaGift

Um presente da cota.

CampoTipoSignificado
itemstringO que foi dado.
  • plan — Meses de plano (Apoiador).
  • sparks — Faíscas.
  • shop — Um visual do estoque (desde 2.13).
quantityintegerQuanto.
itemIdstringou nullO visual dado quando item é shop; caso contrário, null.
recipientActorPara quem.
createdAtintegerQuando.
Exemplo
{
  "item": "plan",
  "quantity": 3,
  "itemId": null,
  "recipient": {
    "handle": "jon",
    "name": "Jon"
  },
  "createdAt": 1758627600000
}

MediaItem

Um GIF ou vídeo da biblioteca de mídia (desde 2.14).

CampoTipoSignificado
idstringO ID; para media ao postar.
kindstringGIF ou vídeo.
  • gif — Um GIF, como MP4 mudo em loop.
  • video — Um vídeo em MP4, com som.
namestringO nome.
keywordsstringAs palavras-chave, em minúsculas.
widthintegerLargura em pixels.
heightintegerAltura em pixels.
secondsintegerDuração em segundos; 0 para GIFs.
urlstringO arquivo MP4, relativo a esta instância. Carregue-o com a chave no cabeçalho.
posterstringA imagem de prévia, também com a chave.
uploaderActorQuem enviou.
minebooleanSe é seu.
sharedbooleanSe está compartilhado com todos no tellmelo.
anywherebooleanSe também pode aparecer em outros sites.
embedEmbedou nullOs endereços para outros sites; null enquanto não for permitido lá.
Exemplo
{
  "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>"
  }
}

Embed

Os endereços para outros sites. Eles funcionam sem chave.

CampoTipoSignificado
pagestringO player para um <iframe>.
filestringO arquivo MP4 para um player próprio.
posterstringA imagem de prévia.
codestringO código pronto para incorporar.
Exemplo
{
  "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>"
}

UploadStarted

Um envio iniciado.

CampoTipoSignificado
uploadstringO ID deste envio.
pieceintegerO tamanho máximo de um pedaço, em bytes.
Exemplo
{
  "upload": "e7c1a2b3-4d5e-4f60-8a9b-0c1d2e3f4a5b",
  "piece": 4194304
}

UploadPiece

Um pedaço que chegou.

CampoTipoSignificado
receivedintegerQuantos bytes chegaram.
itemMediaItemou nullDepois do último pedaço, o novo GIF ou vídeo; senão, null.
Exemplo
{
  "received": 4194304,
  "item": null
}

Created

A resposta de uma escrita que criou algo.

CampoTipoSignificado
idstringO id do que foi criado.
scheduledForintegerou nullQuando aparece, se a publicação foi agendada (senão null).
deleteAtintegerou nullQuando se exclui sozinho, se isso foi definido (senão null).
Exemplo
{
  "id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
  "scheduledFor": null,
  "deleteAt": null
}

DropCreated

A resposta quando uma publicação com presentes foi criada.

CampoTipoSignificado
idstringO id da nova publicação.
fundingstringComo os presentes são pagos.
  • free — Grátis.
  • quota — Da cota.
Exemplo
{
  "id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
  "funding": "quota"
}

Made

O que acabou de ser criado ou alterado.

CampoTipoSignificado
idstringO id; num link de convite, o código dele.
Exemplo
{
  "id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}

Ok

A resposta de uma escrita que não tem nada a devolver.

CampoTipoSignificado
okbooleanSempre true.
Exemplo
{
  "ok": true
}

A descrição legível por máquina

A tabela por trás desta página está disponível como OpenAPI em https://api.tellmelo.com/v2/openapi.json.

https://api.tellmelo.com/v2/openapi.json

GIFs e vídeos em outros sites

O que um membro compartilha e também permite em outros sites, qualquer site pode mostrar: a busca com anywhere=true encontra, e o embed dele tem os endereços. Se o membro retirar, ele some de lá em poucos minutos.

Envio em pedaços

Primeiro inicie, depois envie o arquivo em pedaços. Divida um arquivo maior em pedaços de piece bytes, com offset na posição de cada um. Depois do último pedaço vem o GIF ou vídeo pronto.

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": { … } } }

Incorporar

O player mostra o GIF em loop ou o vídeo com controles e, abaixo, o nome e quem compartilhou. Coloque o código de embed.code na 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>

Fóruns e programas que conhecem oEmbed buscam o código sozinhos quando recebem o endereço do player:

https://tellmelo.com/api/oembed?url=https%3A%2F%2Ftellmelo.com%2Fmedia-embed%2Fb2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918

A chave fica no seu servidor, nunca no código de uma página web. Busque e envie pelo seu servidor; os endereços em embed não precisam de chave.

Seletor de GIFs para o seu site

Com uma chave de site (Área de desenvolvedores → Seletor de GIFs para o seu site), seu site ganha uma busca pronta: duas linhas na página, e um clique no botão abre a busca. A chave é pública e só funciona nos endereços que você informar para ela. O seletor só mostra o que os membros permitiram em outros sites.

<script src="https://tellmelo.com/picker.js" data-key="tmsk_…" defer></script>
<button type="button" data-tellmelo-picker>GIF</button>

Quando algo é escolhido, o botão dispara tellmelo:pick com o item: code para incorporar, file, poster, name e author. Com data-target="#field", ele coloca o code direto em um campo de texto; com data-kind="video", ele busca vídeos. Se você incorporar o arquivo por conta própria, mostre o nome da pessoa que o compartilhou.

document.addEventListener('tellmelo:pick', (event) => {
  const { code, file, name, author } = event.detail;
});

Entrar com tellmelo

Outros sites deixam membros entrarem com a conta do tellmelo via OpenID Connect (código de autorização com PKCE). O site recebe só o nome de usuário, o e-mail confirmado e um identificador próprio por membro (sub).

Você pede um app em “Área de desenvolvedores → Entrar com tellmelo”. A equipe confere cada app; depois você vê ali o ID do cliente e, em apps com servidor, cria o segredo do cliente, mostrado uma única vez.

Tudo o que uma biblioteca precisa está no documento de descoberta:

https://tellmelo.com/.well-known/openid-configuration
  1. Envie o membro para /oauth/authorize com response_type=code, client_id, redirect_uri (exatamente como registrado), scope=openid profile email, state, nonce e code_challenge com code_challenge_method=S256.
  2. Troque o código em até um minuto em /oauth/token: grant_type=authorization_code, code, redirect_uri e code_verifier; apps com servidor enviam também o segredo, com autenticação Basic ou no formulário.
  3. O token de ID (RS256, chaves em /oauth/jwks) contém sub, com profile também preferred_username, com email também email e email_verified. O token de acesso vale 10 minutos e só lê /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
}

Não há tokens de atualização: o tellmelo faz o login e não dá acesso duradouro. Se um membro remove o site ou a equipe suspende o app, /oauth/userinfo responde 401 na hora. prompt=none verifica sem página, prompt=consent pergunta de novo.

O que esperamos

Valem as mesmas regras de sempre: nada de assédio, nada de spam, nada de conteúdo sobre o qual você não tem direitos. Você é responsável pelo que a sua chave publica.

Mostre GIFs e vídeos de outros no seu site só se tiverem embed, por esses endereços e com o nome de quem compartilhou. Se algo não estiver mais disponível, pare de mostrar. Não copie os arquivos para uma coleção própria.

Informações legaisPrivacidadeTermos de usoStatusApps