tellmelo.SviluppatoriVai su tellmelo
Centro assistenzaSupportoNote legaliSviluppatori

API

Per iniziare

  • Voglio …
  • Panoramica
  • Avvio rapido
  • Prova
  • La tua chiave
  • Che cosa può una chiave
  • Bot

Fondamenti

  • Richieste e risposte
  • Pagine
  • Solo ciò che è nuovo
  • Limiti
  • Intestazioni
  • Quando qualcosa non va
  • Versioni

Percorsi

  • Percorsi
  • L’ingresso
    • GET /
  • Post
    • 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
  • Risposte
    • 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}
  • Sondaggi
    • POST /posts/{id}/vote
  • Profili
    • 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
  • Gruppi
    • 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
  • Canali
    • GET /communities/{id}/channels
    • GET /channels/{id}/messages
    • POST /channels/{id}/messages
    • POST /channels/{id}/read
    • DELETE /channel-messages/{id}
    • GET /communities/{id}/voice
  • Gestire gruppi
    • 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}
  • Bot
    • GET /events
    • GET /events/stream
    • GET /me/commands
    • PUT /me/commands
    • POST /interactions/{id}/reply
    • POST /channels/{id}/voice
  • Scopri
    • GET /tags
    • GET /search
    • GET /emojis
  • GIF e video
    • GET /media
    • GET /media/mine
    • GET /media/{id}
    • POST /media/uploads
    • PUT /media/uploads/{upload}
    • POST /media/{id}
    • DELETE /media/{id}
  • Il tuo account
    • 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
  • Notifiche
    • GET /notifications
    • POST /notifications/read
  • Messaggi
    • 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}
  • Relazioni
    • POST /relations
    • GET /profiles/{handle}/followers
    • GET /profiles/{handle}/following
    • GET /me/relations
  • Raccolte
    • GET /me/collections
    • POST /me/collections
    • PUT /me/collections/{id}
    • DELETE /me/collections/{id}
    • GET /me/collections/{id}/posts
    • POST /me/collections/{id}/posts
  • Regali
    • GET /partner/quota
    • GET /partner/gifts
    • POST /partner/gifts
    • GET /gift-drops
    • POST /gift-drops

Oggetti

  • Oggetti
  • 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

Altro

  • La descrizione leggibile da una macchina
  • GIF e video su altri siti web
  • Accedi con tellmelo
  • Che cosa ci aspettiamo
Indice

Per iniziare

  • Voglio …
  • Panoramica
  • Avvio rapido
  • Prova
  • La tua chiave
  • Che cosa può una chiave
  • Bot

Fondamenti

  • Richieste e risposte
  • Pagine
  • Solo ciò che è nuovo
  • Limiti
  • Intestazioni
  • Quando qualcosa non va
  • Versioni

Percorsi

  • Percorsi
  • L’ingresso
    • GET /
  • Post
    • 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
  • Risposte
    • 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}
  • Sondaggi
    • POST /posts/{id}/vote
  • Profili
    • 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
  • Gruppi
    • 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
  • Canali
    • GET /communities/{id}/channels
    • GET /channels/{id}/messages
    • POST /channels/{id}/messages
    • POST /channels/{id}/read
    • DELETE /channel-messages/{id}
    • GET /communities/{id}/voice
  • Gestire gruppi
    • 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}
  • Bot
    • GET /events
    • GET /events/stream
    • GET /me/commands
    • PUT /me/commands
    • POST /interactions/{id}/reply
    • POST /channels/{id}/voice
  • Scopri
    • GET /tags
    • GET /search
    • GET /emojis
  • GIF e video
    • GET /media
    • GET /media/mine
    • GET /media/{id}
    • POST /media/uploads
    • PUT /media/uploads/{upload}
    • POST /media/{id}
    • DELETE /media/{id}
  • Il tuo account
    • 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
  • Notifiche
    • GET /notifications
    • POST /notifications/read
  • Messaggi
    • 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}
  • Relazioni
    • POST /relations
    • GET /profiles/{handle}/followers
    • GET /profiles/{handle}/following
    • GET /me/relations
  • Raccolte
    • GET /me/collections
    • POST /me/collections
    • PUT /me/collections/{id}
    • DELETE /me/collections/{id}
    • GET /me/collections/{id}/posts
    • POST /me/collections/{id}/posts
  • Regali
    • GET /partner/quota
    • GET /partner/gifts
    • POST /partner/gifts
    • GET /gift-drops
    • POST /gift-drops

Oggetti

  • Oggetti
  • 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

Altro

  • La descrizione leggibile da una macchina
  • GIF e video su altri siti web
  • Accedi con tellmelo
  • Che cosa ci aspettiamo

Voglio …

Scegli cosa hai in mente; sotto ci sono solo i passi per farlo. Il riferimento completo segue più in basso.

  1. Crea il bot in uno dei tuoi gruppi, nel menu del gruppo in «Bot → I miei bot», con immagine, nome e @nome. Il suo token lo vedi una sola volta.
  2. Condividi il suo link «Aggiungi bot» o invialo alla directory dei bot, dove compare dopo il controllo del team; chi può gestire i ruoli in un gruppo lo accoglie con i permessi che approva.
  3. Ricevi ciò che accade nei suoi gruppi come flusso (GET /v2/events/stream) o al tuo indirizzo, e scrivi con POST /v2/channels/{id}/messages. Di più in Bot.
  4. Registra comandi (PUT /v2/me/commands) e rispondi con schede e pulsanti; un bot suona musica con un posto in un canale vocale (POST /v2/channels/{id}/voice).

Panoramica

Con v2 i tuoi programmi parlano con tellmelo: una chiave per richiesta, JSON in risposta, ogni elenco si sfoglia allo stesso modo. Valgono le stesse regole dell’app.

  • Ogni percorso inizia con https://api.tellmelo.com/v2.
  • Richieste e risposte sono JSON in UTF-8. Nomi dei campi, codici e valori sono in inglese e restano in inglese.
  • Una chiave agisce come il tuo account: ciò che non vedi nell’app, non può leggerlo nemmeno lei.
https://api.tellmelo.com/v2

Avvio rapido

  1. Crea una chiave in «Area sviluppatori → API» e copiala. Viene mostrata una sola volta.
  2. Interroga la radice con la chiave. La risposta indica la versione, i permessi della chiave e le richieste rimaste in questo minuto.
  3. Ogni percorso funziona allo stesso modo: chiave nell’intestazione, JSON in risposta, items e next per gli elenchi.
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"
}

Poi: /me per il tuo profilo, /posts per i post pubblici, /feed per il tuo feed.

Prova

Scegli un compito, compila i campi e copia la richiesta o inviala da qui. La scrittura chiede prima conferma. Il codice legge la chiave da TELLMELO_KEY.

read Versione dell’API e nome di questa istanza.

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

La tua chiave

Fino a 10 chiavi per account, ognuna con un nome, permessi propri e, se vuoi, una data di scadenza. Una chiave inizia con tm_key_ e viene mostrata una sola volta. Persa? Rinnovala; il vecchio valore smette di funzionare.

La crei in «Area sviluppatori → API». Viaggia nell’intestazione della richiesta:

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

Oppure, se è più comodo, in un’intestazione propria:

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

Non nell’URL: finirebbe nei log e nella cronologia del browser.

La stessa chiave carica le immagini: ogni url punta a /api/media; invia la chiave anche lì nell’intestazione.

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

Che cosa può una chiave

Una chiave può sempre leggere e, se lo permetti, anche scrivere, regalare, caricare media e gestire gruppi. Ogni percorso indica cosa gli serve:

  • read: leggere. Post pubblici, profili, gruppi e tag, oltre al tuo feed, alle notifiche, ai messaggi e ai canali dei tuoi gruppi.
  • write: agire. Pubblicare, rispondere, votare, inviare messaggi, scrivere nella chat di un gruppo, seguire, unirsi, bloccare, segnare le notifiche come lette.
  • gifts: regalare. Dal contingente di un partner a un membro, e regali sotto un nuovo post. Un permesso a parte, così una chiave pensata per pubblicare non può mai regalare nulla.
  • media: la tua libreria media. Caricare, modificare, condividere e rimuovere GIF e video. Un permesso a parte, perché i caricamenti costano punti video dell’account. Per trovare GIF e video condivisi basta read.
  • groups: gestire gruppi. Ruoli, canali, categorie, link di invito, il canale feed, le rimozioni, i silenziamenti, le espulsioni e i ban, per quanto il tuo account possa nel gruppo. Un permesso a sé, così una chiave per pubblicare non cambia mai chi può fare cosa in un gruppo.

Che cosa nessuna chiave può

Nessuna chiave arriva a password, indirizzo e-mail, tipo di account, luogo, ruolo, eliminazione, accessi, dispositivi di notifica o altre chiavi, né all’amministrazione o alla guida dei gruppi. Ciò che protegge la password, nessuna chiave lo può.

Bot

Un bot è un account a sé, del tipo bot, per i gruppi: senza password né e-mail, gestito dal tuo programma con una propria chiave. Usa la stessa API di ogni account e nei gruppi può fare ciò che il suo ruolo consente.

  1. In uno dei tuoi gruppi apri il menu del gruppo e in «Bot → I miei bot» crea un bot con immagine, copertina, nome, nome utente e descrizione. Il token viene mostrato una sola volta; ha i permessi read, write, media e groups.
  2. Condividi il link del bot o invialo alla directory dei bot; vi compare non appena il team lo ha controllato. Chi può gestire i ruoli in un gruppo sceglie i permessi; il bot entra e riceve un ruolo proprio.
  3. Il tuo programma invia il token come Authorization: Bearer …, legge gli eventi dei suoi gruppi come flusso e lavora con le rotte in Bot, Canali e Gruppi.

Un piccolo bot che legge gli eventi come flusso e risponde al comando /ping con pong, solo per chi ha chiesto:

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

Lo stesso bot in Python, che prende gli eventi pagina per pagina:

# 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)
  • Cosa può fare un bot in un gruppo lo decide il suo ruolo lì, non il token. Il ruolo porta il suo nome; il gruppo cambia i permessi nei ruoli delle impostazioni del gruppo e rimuove il bot nel menu del gruppo, in «Bot → In questo gruppo».
  • Fino a 5 bot per account; per gruppo quanti ne consentono i suoi vantaggi. Un bot scrive al massimo 30 messaggi al minuto per gruppo, non si trova con la ricerca e scrive solo a chi gli ha scritto per primo. Valgono i limiti.
  • Gli eventi arrivano anche a un tuo indirizzo HTTPS (firmati come i webhook, con nuovi tentativi). Inoltre: comandi (PUT /v2/me/commands) con risposte per tutti o solo per chi ha chiesto, schede e pulsanti nei messaggi e musica nei canali vocali (POST /v2/channels/{id}/voice): tutto in Bot.

Richieste e risposte

  • JSON ovunque. Ogni risposta è application/json in UTF-8, errori compresi. Solo le immagini arrivano come immagini.
  • Cosa invii. Un POST porta i suoi campi come JSON nel corpo. Se un campo è anche nell’URL, vale il corpo.
  • I tempi sono millisecondi dal 1° gennaio 1970, UTC.
  • Gli ID sono stringhe. Confrontali solo per intero.
  • Ogni campo è sempre presente. Ciò che manca è null; gli elenchi possono essere vuoti.
  • I testi sono testo semplice, così come sono stati scritti. #tag, @nomi e link restano come sono, e così gli emoji propri dell’istanza, come :name:; le loro immagini sono elencate in /emojis.
  • Le immagini sono indirizzi relativi, /api/media?id=…. Senza la chiave nell’intestazione ricevi 401.

Pagine

Ogni elenco prende limit e cursor e risponde con items e next. Rimanda next come cursor per la pagina successiva; se next è vuoto, hai finito. Il cursore è opaco: non scomporlo e non costruirlo.

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

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

Senza limit, 20 voci, al massimo 50. Alcuni elenchi non si sfogliano; il loro next è sempre null.

Solo ciò che è nuovo

Ogni risposta porta un ETag. Rimandalo come If-None-Match la volta dopo: se non è cambiato nulla, ricevi 304 senza corpo.

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

Eccezioni: /feed non ha ETag perché il suo ordine cambia di continuo, e le scritture non rispondono mai 304.

Limiti

Una chiave può fare 120 richieste al minuto, 600 con l’abbonamento «Organizzazione», salvo diversa decisione dell’amministrazione. Oltre arriva 429 e non è stato eseguito nulla. Aspetta un minuto e rimanda la richiesta.

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

Le scritture contano anche contro i limiti dell’app, ad esempio quanti post in pochi minuti. Anche allora arriva 429 con rate_limited.

Intestazioni

A parte la chiave, nessuna intestazione è obbligatoria.

Ciò che invii

IntestazioneSignificato
AuthorizationPorta la chiave: Bearer tm_key_…. La via consueta.
X-Tellmelo-KeyLa chiave, in alternativa a Authorization.
Content-Typeapplication/json, per una richiesta con corpo.
If-None-MatchL’ETag dell’ultima risposta. Se da allora non è cambiato nulla, la risposta è 304 senza corpo.

Ciò che torna

IntestazioneSignificato
ETagL’impronta di questa risposta (W/). Rimandala come If-None-Match.
X-RateLimit-LimitQuante richieste può fare questa chiave al minuto.
X-RateLimit-RemainingQuante ne restano nel minuto in corso.
X-RateLimit-ResetQuando comincia il minuto successivo, in secondi dal 1970, UTC.
X-Tellmelo-ScopeChe cosa può fare questa chiave: read o read write.
Retry-AfterCon un 429: quanti secondi aspettare prima di chiedere di nuovo.
WWW-AuthenticateCon 401 senza chiave: Bearer.
Cache-Controlno-store: nessun proxy può memorizzare una risposta. Puoi comunque verificarla con l’ETag.

Quando qualcosa non va

Gli errori arrivano come JSON: un codice inglese fisso in error per il tuo programma e una frase in message per le persone, con il codice di stato corrispondente. Confronta solo il codice; la frase può cambiare.

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

Alcuni errori portano un campo in più: docs con un 401 per chiave mancante, limit con un 429.

StatoCodiceSignificato
400bad_requestLa richiesta non è leggibile, manca un campo obbligatorio o un valore non è ammesso.
401key_missingNessuna chiave nell’intestazione.
401key_invalidLa chiave non vale: sbagliata, sostituita o l’account è bloccato.
401unauthorizedRespinta come non autenticata, per un motivo diverso dalla chiave.
403scope_missingAlla chiave manca il permesso necessario, di solito write.
403account_data_lockedI dati dell’account come password, indirizzo e-mail o eliminazione sono preclusi alle chiavi.
403forbiddenIl tuo account non può farlo, ad esempio per un permesso revocato o un blocco.
403timed_outUn silenziamento zittisce ora il tuo account in questo gruppo.
404unknown_pathQuesto percorso non esiste, o non con questo metodo.
404not_foundNon trovato, oppure non puoi vederlo.
409conflictSi scontra con qualcosa che c’è già, per esempio un nome già preso.
409feed_offIl canale feed di questo gruppo è disattivato.
413too_largeTroppo grande per questa istanza.
422unprocessableLeggibile, ma non possibile in questa forma.
429rate_limitedTroppe richieste. Non è successo nulla; aspetta e riprova.
500internal_errorQualcosa è andato storto sul server.

Versioni

La versione è nel percorso. Finché c’è v2, percorsi e campi restano uguali; le novità si aggiungono soltanto.

Le aggiunte alzano il secondo numero. Ogni percorso indica da quando esiste.

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/ non c’è più: i vecchi percorsi rispondono 410 e indicano nel corpo la nuova strada.

Percorsi

Tutti i percorsi a colpo d’occhio, poi ognuno con un esempio.

PercorsoDirittoA che serve
L’ingresso
GET/v2readVersione dell’API e nome di questa istanza.
Post
GET/v2/postsreadI post pubblici, i più recenti per primi.
GET/v2/posts/{id}readUn singolo post, tramite il suo id.
POST/v2/postswritePubblicare un post.
DELETE/v2/posts/{id}writeTogliere un tuo post.
GET/v2/me/scheduledreadI tuoi post non ancora usciti, e cosa stanno aspettando.
POST/v2/posts/{id}/schedulewriteCambiare quando esce un post programmato, o quando un post si cancella da solo.
POST/v2/posts/{id}/editwriteModificare il testo di un tuo post.
GET/v2/posts/{id}/reply-settingsreadChi può rispondere al tuo post, se le risposte attendono approvazione e la modalità lenta.
PUT/v2/posts/{id}/reply-settingswriteCambiare le impostazioni di risposta del tuo post. Ciò che non indichi resta com’è.
POST/v2/posts/{id}/coauthorwriteAccettare o rifiutare un invito come coautore.
DELETE/v2/posts/{id}/coauthorwriteRitirarti come coautore o, come autore, togliere il coautore dal post.
POST/v2/posts/{id}/pinwriteFissare il tuo post in cima al profilo, o toglierlo.
Risposte
GET/v2/posts/{id}/repliesreadLe risposte a un post, senza account bloccati.
POST/v2/posts/{id}/replieswriteRispondere a un post.
POST/v2/replies/{id}/editwriteModificare il testo di una tua risposta.
DELETE/v2/replies/{id}writeRimuovere una tua risposta.
POST/v2/replies/{id}/likewriteVotare positivamente una risposta (un mi piace è un voto positivo da quando le risposte si votano) o ritirare il voto; un voto negativo resta.
POST/v2/replies/{id}/votewriteVotare una risposta in su o in giù, o ritirare il tuo voto. Risponde con il tuo voto e il punteggio risultante.
POST/v2/replies/{id}/pickwriteMettere in evidenza come migliore una risposta sotto il tuo post, o togliere l’evidenza.
GET/v2/posts/{id}/replies/waitingreadLe risposte in attesa di approvazione sotto un post: tutte sotto il tuo, altrimenti solo le tue.
POST/v2/replies/{id}/decidewriteApprovare o rifiutare una risposta in attesa sotto il tuo post. Se rifiutata, viene eliminata.
GET/v2/posts/{id}/replies/plannedreadLe tue risposte programmate per più tardi sotto un post.
PUT/v2/me/planned-replies/{id}writeCambiare il testo o l’ora di una risposta programmata. Una non riuscita torna in attesa.
POST/v2/me/planned-replies/{id}/sendwriteInviare subito una risposta programmata.
DELETE/v2/me/planned-replies/{id}writeEliminare una risposta programmata.
Sondaggi
POST/v2/posts/{id}/votewritePartecipare a un sondaggio.
Profili
GET/v2/profiles/{handle}readUn profilo, tramite il suo nome breve.
GET/v2/profiles/{handle}/postsreadI post pubblici di un profilo, i più recenti per primi.
GET/v2/profiles/{handle}/eventsreadI prossimi eventi di un profilo, i più vicini prima.
POST/v2/me/eventswriteCreare un evento. Risponde con il suo id.
PUT/v2/me/events/{id}writeModificare un tuo evento. Tutti i campi vengono reimpostati.
DELETE/v2/me/events/{id}writeEliminare un tuo evento.
GET/v2/me/events/{id}/signupsreadChi si è iscritto a un tuo evento.
POST/v2/events/{id}/signupwriteIscriverti a un evento o annullare l’iscrizione.
Gruppi
GET/v2/communitiesreadI gruppi aperti di questa istanza; con mine=true i gruppi del tuo account.
GET/v2/communities/{id}readUn singolo gruppo, tramite il suo id.
GET/v2/communities/{id}/postsreadI post del canale feed di un gruppo, i più recenti prima.
GET/v2/communities/{id}/membersreadI membri di un gruppo con i loro ruoli.
GET/v2/communities/{id}/rolesreadI ruoli di un gruppo, il più alto prima, @everyone per ultimo.
GET/v2/communities/{id}/bellreadQuali notifiche ti manda un gruppo.
GET/v2/invites/{code}readIl gruppo dietro un link di invito, prima di unirsi.
PUT/v2/roles/{id}/selfwritePrendere o lasciare un ruolo sceglibile.
GET/v2/communities/{id}/emojisreadLe emoji proprie di un gruppo.
PUT/v2/communities/{id}/bellwriteImpostare quali notifiche ti manda un gruppo.
POST/v2/invites/{code}/joinwriteUnirsi a un gruppo con un link di invito.
GET/v2/communities/{id}/botsreadI bot di un gruppo con ciò che il loro ruolo consente.
Canali
GET/v2/communities/{id}/channelsreadI canali di un gruppo che vedi, nel loro ordine.
GET/v2/channels/{id}/messagesreadI messaggi di un canale chat, i più recenti prima.
POST/v2/channels/{id}/messageswriteScrivere un messaggio in un canale chat.
POST/v2/channels/{id}/readwriteSegnare un canale chat come letto fino a un momento.
DELETE/v2/channel-messages/{id}writeEliminare un tuo messaggio in un canale chat.
GET/v2/communities/{id}/voicereadChi è adesso nei canali vocali di un gruppo, per canale.
Gestire gruppi
POST/v2/communities/{id}/emojisgroupsDare un’emoji al gruppo.
DELETE/v2/communities/{id}/emojis/{name}groupsTogliere un’emoji dal gruppo.
POST/v2/communities/{id}/rolesgroupsCreare un ruolo.
PUT/v2/roles/{id}groupsCambiare nome, colore e permessi di un ruolo.
DELETE/v2/roles/{id}groupsEliminare un ruolo.
PUT/v2/communities/{id}/roles/ordergroupsStabilire l’ordine dei ruoli.
PUT/v2/roles/{id}/members/{member}groupsDare o togliere un ruolo a un membro.
POST/v2/communities/{id}/channelsgroupsCreare un canale chat.
PUT/v2/channels/{id}groupsCambiare nome, argomento e categoria di un canale.
DELETE/v2/channels/{id}groupsEliminare un canale chat con i suoi messaggi.
PUT/v2/communities/{id}/channels/ordergroupsStabilire l’ordine di categorie e canali chat.
PUT/v2/communities/{id}/channels/shapegroupsImpostare la forma di tutti i simboli dei canali del gruppo.
GET/v2/channels/{id}/overridesgroupsCiò che i ruoli possono fare diversamente in un canale rispetto al gruppo.
PUT/v2/channels/{id}/overrides/{role}groupsStabilire ciò che un ruolo può fare diversamente in un canale.
POST/v2/communities/{id}/categoriesgroupsCreare una categoria per i canali.
PUT/v2/categories/{id}groupsRinominare una categoria.
DELETE/v2/categories/{id}groupsEliminare una categoria.
PUT/v2/communities/{id}/feedgroupsAttivare o disattivare il canale feed di un gruppo.
GET/v2/communities/{id}/invitesgroupsI link di invito di un gruppo ancora validi.
POST/v2/communities/{id}/invitesgroupsCreare un link di invito.
DELETE/v2/invites/{code}groupsRitirare un link di invito.
POST/v2/channel-messages/{id}/removegroupsRimuovere da un canale il messaggio di un altro membro.
POST/v2/communities/{id}/posts/{post}/removegroupsRimuovere un post da un gruppo.
DELETE/v2/communities/{id}/members/{member}groupsEspellere un membro da un gruppo.
PUT/v2/communities/{id}/members/{member}/timeoutgroupsSilenziare un membro.
DELETE/v2/communities/{id}/members/{member}/timeoutgroupsRevocare un silenziamento.
GET/v2/communities/{id}/bansgroupsI ban in corso di un gruppo.
PUT/v2/communities/{id}/bans/{member}groupsBannare un membro.
DELETE/v2/communities/{id}/bans/{member}groupsRevocare un ban.
GET/v2/communities/{id}/loggroupsIl registro della guida: chi ha rimosso cosa e perché.
POST/v2/communitiesgroupsFondare un gruppo. Risponde con il suo id; sei tu il fondatore.
PUT/v2/communities/{id}groupsModificare un gruppo che guidi. Ciò che non indichi resta com’è.
Bot
GET/v2/eventsreadGli eventi dei gruppi del bot da un evento in poi, pagina per pagina.
GET/v2/events/streamreadGli eventi dei gruppi del bot appena accadono (server-sent events).
GET/v2/me/commandsreadI comandi del bot.
PUT/v2/me/commandswriteImpostare i comandi del bot, tutti insieme.
POST/v2/interactions/{id}/replywriteRispondere a un comando o a un pulsante.
POST/v2/channels/{id}/voicewritePrendere un posto in un canale vocale per riprodurre musica o suoni.
Scopri
GET/v2/tagsreadI tag che girano in questo momento.
GET/v2/searchreadUna ricerca su post, nomi, nomi brevi e tag.
GET/v2/emojisreadGli emoji propri dell’istanza, con l’indirizzo delle loro immagini.
GIF e video
GET/v2/mediareadGIF o video condivisi, prima i più usati.
GET/v2/media/minemediaLa tua libreria media, prima i più recenti.
GET/v2/media/{id}readUna GIF o un video, tuo o condiviso.
POST/v2/media/uploadsmediaAvvia un caricamento.
PUT/v2/media/uploads/{upload}mediaInvia un pezzo del file.
POST/v2/media/{id}mediaModifica una delle tue GIF o uno dei tuoi video.
DELETE/v2/media/{id}mediaRimuovi una delle tue GIF o uno dei tuoi video.
Il tuo account
GET/v2/mereadIl tuo profilo, con l’id che gli altri percorsi si aspettano.
GET/v2/feedreadIl tuo feed, come lo compone l’applicazione.
POST/v2/me/pictureswriteCaricare un’immagine, come i suoi byte. Risponde con id e url; poi usi l’id come immagine del profilo, copertina o in un post.
PUT/v2/me/profileprofileModificare il profilo: nome, su di te, immagine del profilo, copertina e colore del profilo. Ciò che non indichi resta com’è.
GET/v2/me/emojisreadLe tue emoji.
POST/v2/me/emojis/picturesprofileCaricare l’immagine di una tua emoji, come i suoi byte.
POST/v2/me/emojisprofileCreare una tua emoji. Risponde con tutte le tue emoji.
DELETE/v2/me/emojis/{name}profileRimuovere una tua emoji. Risponde con le altre.
PUT/v2/me/emojis/sharingprofileDecidere se i tuoi follower possono usare le tue emoji nei loro testi.
GET/v2/me/webhookswebhooksI tuoi webhook con il loro stato.
POST/v2/me/webhookswebhooksCreare un webhook. Risponde con l’id e il segreto per le firme, solo questa volta.
DELETE/v2/me/webhooks/{id}webhooksEliminare un webhook.
POST/v2/me/webhooks/{id}/testwebhooksInviare una prova a un webhook.
Notifiche
GET/v2/notificationsreadLe tue notifiche, le più recenti per prime.
POST/v2/notifications/readwriteSegnare le tue notifiche come lette.
Messaggi
GET/v2/conversationsreadLa tua posta: una riga per conversazione, la più recente per prima.
GET/v2/conversations/{with}/messagesreadI messaggi di una conversazione, i più recenti per primi.
POST/v2/conversations/{with}/messageswriteInviare un messaggio in una conversazione.
POST/v2/conversations/{with}/readwriteSegnare come letti tutti i messaggi di una conversazione.
DELETE/v2/conversations/{with}/messages/{id}writeEliminare un tuo messaggio.
POST/v2/conversations/{with}/plannedwriteProgrammare un messaggio per più tardi. Risponde con l’id del messaggio programmato.
GET/v2/me/planned-messagesreadI tuoi messaggi ancora da inviare, in ordine di ora.
POST/v2/me/planned-messages/{id}/sendwriteInviare ora un messaggio programmato trattenuto o non riuscito.
DELETE/v2/me/planned-messages/{id}writeEliminare un messaggio programmato prima che venga inviato.
Relazioni
POST/v2/relationswriteMettere mi piace, salvare, condividere, seguire, entrare, bloccare, silenziare, a seconda di kind.
GET/v2/profiles/{handle}/followersreadChi segue un profilo, i più recenti prima.
GET/v2/profiles/{handle}/followingreadChi è seguito da un profilo, i più recenti prima.
GET/v2/me/relationsreadChi hai bloccato, silenziato o bloccato solo per i messaggi, i più recenti prima.
Raccolte
GET/v2/me/collectionsreadLe tue raccolte con il numero dei loro post.
POST/v2/me/collectionswriteCreare una raccolta. Risponde con il suo id.
PUT/v2/me/collections/{id}writeRinominare una raccolta.
DELETE/v2/me/collections/{id}writeEliminare una raccolta.
GET/v2/me/collections/{id}/postsreadI post di una raccolta, come nella scheda dei salvati.
POST/v2/me/collections/{id}/postswriteMettere un post in una raccolta o toglierlo.
Regali
GET/v2/partner/quotareadQuanto resta da regalare nel tuo contingente.
GET/v2/partner/giftsreadCosa hai regalato dal contingente, a chi e quando, dal più recente.
POST/v2/partner/giftsgiftsRegalare mesi di abbonamento o scintille dal tuo contingente a un membro.
GET/v2/gift-dropsreadI tuoi regali sotto i post: quanti posti sono ancora liberi e come sono stati pagati.
POST/v2/gift-dropsgiftsPubblicare un post con regali da ritirare.

L’ingresso

La prima richiesta di ogni programma: la chiave funziona, e che cosa può fare?

GET/v2

Versione dell’API e nome di questa istanza.

  • Diritto read
  • con ETag
  • dalla v2.0

Senza barra finale: https://api.tellmelo.com/v2/ reindirizza a https://api.tellmelo.com/v2 con 308, e non tutti i programmi lo seguono.

Richiesta d’esempio

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

Risposta

Risponde con un Service.

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

Stati possibili: 200304401429

Post

Leggere i post pubblici, pubblicare i tuoi e toglierli di nuovo.

GET/v2/posts

I post pubblici, i più recenti per primi.

  • Diritto read
  • sfogliabile
  • con ETag
  • dalla v2.0

Nei percorsi pubblici counts.likes e counts.reposts sono sempre 0 e pinned è false.

I post dei gruppi non sono qui ma in /communities/{id}/posts.

Parametri

NomeTipoSignificato
limitnell’indirizzointegerfacoltativoVoci per pagina: 20 di default, al massimo 50.
cursornell’indirizzostringfacoltativoIl next della risposta precedente. Senza, dall’inizio.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di Post, come `items` e `next`.

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

Stati possibili: 200304401429

GET/v2/posts/{id}

Un singolo post, tramite il suo id.

  • Diritto read
  • con ETag
  • dalla v2.0

Nei percorsi pubblici counts.likes e counts.reposts sono sempre 0 e pinned è false.

I post dei gruppi non sono qui ma in /communities/{id}/posts.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un post.

Richiesta d’esempio

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

Risposta

Risponde con un Post.

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

Stati possibili: 200304400401404429

POST/v2/posts

Pubblicare un post.

  • Diritto write
  • dalla v2.0

Un post ha bisogno di testo o di un sondaggio. Lunghezza, opzioni e ritmo li stabilisce l’istanza; oltre arriva 400 o 429.

Allega immagini, una GIF o un video con media. Una GIF o un video va da solo. Su tellmelo puoi usare le GIF e i video condivisi da altri.

Un post per amici stretti o con coautore esce subito, non in un gruppo e non programmato. Le due cose insieme non sono possibili.

Parametri

NomeTipoSignificato
textnel corpostringfacoltativoIl testo del post, della risposta o del messaggio.
communitynel corpostringfacoltativoL’id del gruppo nel cui canale feed va il post; deve essere attivo e ti serve il permesso. Senza, il post sta fuori da ogni gruppo.
quotesnel corpostringfacoltativoL’id del post che questo cita.
pollnel corpostring[]facoltativoLe opzioni come elenco di testi.
medianel corpostring[]facoltativoID di immagini caricate nell’app, o di una GIF o un video dalla libreria media (dalla 2.14).
audiencenel corpostringfacoltativoChi vede il post: everyone tutti quelli che possono vederlo, close solo i tuoi amici stretti.everyoneclose
coauthornel corpostringfacoltativoL’id di un account che inviti come coautore. Dovete seguirvi a vicenda.

Richiesta d’esempio

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"

Risposta

Risponde con un Created.

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

Stati possibili: 200400401403429

DELETE/v2/posts/{id}

Togliere un tuo post.

  • Diritto write
  • dalla v2.0

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un post.

Richiesta d’esempio

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

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

GET/v2/me/scheduled

I tuoi post non ancora usciti, e cosa stanno aspettando.

  • Diritto read
  • con ETag
  • dalla v2.12

Richiesta d’esempio

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

Risposta

Risponde con una pagina di ScheduledPost, come `items` e `next`.

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

Stati possibili: 200304401429

POST/v2/posts/{id}/schedule

Cambiare quando esce un post programmato, o quando un post si cancella da solo.

  • Diritto write
  • dalla v2.12

Solo i tuoi post. Finché i regali di un post non sono pagati, non si può programmare.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un post.
publishAtnel corpointegerfacoltativoQuando esce il post programmato, in millisecondi dal 1970.
deleteAtnel corpointegerfacoltativoQuando il post si cancella da solo, in millisecondi dal 1970.

Richiesta d’esempio

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

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

POST/v2/posts/{id}/edit

Modificare il testo di un tuo post.

  • Diritto write
  • dalla v2.12

Solo entro il tempo di modifica che ti dà il tuo abbonamento. I post programmati non si possono modificare.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un post.
textnel corpostringobbligatorioIl testo del post, della risposta o del messaggio.

Richiesta d’esempio

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"

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

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

Chi può rispondere al tuo post, se le risposte attendono approvazione e la modalità lenta.

  • Diritto read
  • con ETag
  • dalla v2.19

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un post.

Richiesta d’esempio

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

Risposta

Risponde con un ReplySettings.

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

Stati possibili: 200304400401404429

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

Cambiare le impostazioni di risposta del tuo post. Ciò che non indichi resta com’è.

  • Diritto write
  • dalla v2.19

Solo i tuoi post.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un post.
audiencenel corpostringfacoltativoChi può rispondere: tutti, account che segui, chi è menzionato o nessuno.allfollowingmentionednobody
approvalnel corpobooleanfacoltativoSe le risposte compaiono solo dopo la tua approvazione.
slownel corpostringfacoltativoModalità lenta: auto si attiva da sola quando arrivano molte risposte, on sempre, off mai.autoonoff

Richiesta d’esempio

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"

Risposta

Risponde con un ReplySettings.

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

Stati possibili: 200400401403404429

POST/v2/posts/{id}/coauthor

Accettare o rifiutare un invito come coautore.

  • Diritto write
  • dalla v2.19

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un post.
acceptnel corpobooleanobbligatoriotrue accetta l’invito, false lo rifiuta.

Richiesta d’esempio

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"

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

DELETE/v2/posts/{id}/coauthor

Ritirarti come coautore o, come autore, togliere il coautore dal post.

  • Diritto write
  • dalla v2.19

Per il coautore e l’autore del post.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un post.

Richiesta d’esempio

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

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

POST/v2/posts/{id}/pin

Fissare il tuo post in cima al profilo, o toglierlo.

  • Diritto write
  • dalla v2.19

Solo i tuoi post visibili. Quanti puoi fissarne dipende dall’abbonamento.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un post.
activenel corpobooleanobbligatoriotrue fissa il post, false lo toglie.

Richiesta d’esempio

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"

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

Risposte

Le risposte sotto un post, come elenco con parentId.

GET/v2/posts/{id}/replies

Le risposte a un post, senza account bloccati.

  • Diritto read
  • sfogliabile
  • con ETag
  • dalla v2.0

L’elenco è piatto e in ordine di scrittura; parentId lo trasforma in albero. Una pagina contiene sempre thread interi. Le risposte degli account bloccati sono escluse.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un post.
limitnell’indirizzointegerfacoltativoVoci per pagina: 20 di default, al massimo 50.
cursornell’indirizzostringfacoltativoIl next della risposta precedente. Senza, dall’inizio.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di Reply, come `items` e `next`.

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

Stati possibili: 200304400401404429

POST/v2/posts/{id}/replies

Rispondere a un post.

  • Diritto write
  • dalla v2.0

In modalità lenta, una risposta a persona ogni 10 minuti, altrimenti 429. Sono esclusi l’autore e gli account che segue.

Con media al massimo un’immagine, una GIF o un video.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un post.
textnel corpostringobbligatorioIl testo del post, della risposta o del messaggio.
parentIdnel corpostringfacoltativoL’id della risposta a cui questa risponde. Senza, direttamente al post.
medianel corpostring[]facoltativoID di immagini caricate nell’app, o di una GIF o un video dalla libreria media (dalla 2.14).
publishAtnel corpointegerfacoltativoQuando deve uscire la risposta, in millisecondi dal 1970. Senza, esce subito.

Richiesta d’esempio

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"

Risposta

Risponde con un Created.

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

Stati possibili: 200400401403404429

POST/v2/replies/{id}/edit

Modificare il testo di una tua risposta.

  • Diritto write
  • dalla v2.12

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’identificativo della risposta.
textnel corpostringobbligatorioIl testo del post, della risposta o del messaggio.

Richiesta d’esempio

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"

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

DELETE/v2/replies/{id}

Rimuovere una tua risposta.

  • Diritto write
  • dalla v2.12

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’identificativo della risposta.

Richiesta d’esempio

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

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

POST/v2/replies/{id}/like

Votare positivamente una risposta (un mi piace è un voto positivo da quando le risposte si votano) o ritirare il voto; un voto negativo resta.

  • Diritto write
  • dalla v2.12
  • obsoleta

Obsoleta dalla 2.19: usa POST /replies/{id}/vote. Questa route resta per ora.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’identificativo della risposta.
activenel corpobooleanobbligatoriotrue la imposta, false la toglie.

Richiesta d’esempio

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"

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

POST/v2/replies/{id}/vote

Votare una risposta in su o in giù, o ritirare il tuo voto. Risponde con il tuo voto e il punteggio risultante.

  • Diritto write
  • dalla v2.19

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’identificativo della risposta.
votenel corpostringobbligatorioup vota in su, down in giù, none ritira il tuo voto.updownnone

Richiesta d’esempio

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"

Risposta

Risponde con un ReplyVote.

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

Stati possibili: 200400401403404429

POST/v2/replies/{id}/pick

Mettere in evidenza come migliore una risposta sotto il tuo post, o togliere l’evidenza.

  • Diritto write
  • dalla v2.19

Solo sotto i tuoi post e solo risposte dirette al post. Una nuova evidenza sostituisce la precedente.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’identificativo della risposta.
activenel corpobooleanobbligatoriotrue mette in evidenza la risposta, false toglie l’evidenza.

Richiesta d’esempio

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"

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

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

Le risposte in attesa di approvazione sotto un post: tutte sotto il tuo, altrimenti solo le tue.

  • Diritto read
  • con ETag
  • dalla v2.19

Se le risposte attendono lo decide l’autore nelle impostazioni di risposta.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un post.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di Reply, come `items` e `next`.

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

Stati possibili: 200304400401404429

POST/v2/replies/{id}/decide

Approvare o rifiutare una risposta in attesa sotto il tuo post. Se rifiutata, viene eliminata.

  • Diritto write
  • dalla v2.19

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’identificativo della risposta.
approvenel corpobooleanobbligatoriotrue approva la risposta, false la rifiuta.

Richiesta d’esempio

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"

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

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

Le tue risposte programmate per più tardi sotto un post.

  • Diritto read
  • con ETag
  • dalla v2.19

Si programma con publishAt quando rispondi. Al massimo 20 risposte programmate alla volta.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un post.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di PlannedReply, come `items` e `next`.

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

Stati possibili: 200304400401404429

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

Cambiare il testo o l’ora di una risposta programmata. Una non riuscita torna in attesa.

  • Diritto write
  • dalla v2.19

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id della risposta programmata.
textnel corpostringfacoltativoIl testo del post, della risposta o del messaggio.
publishAtnel corpointegerfacoltativoQuando deve uscire la risposta, in millisecondi dal 1970. Senza, esce subito.

Richiesta d’esempio

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"

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

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

Inviare subito una risposta programmata.

  • Diritto write
  • dalla v2.19

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id della risposta programmata.

Richiesta d’esempio

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

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

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

Eliminare una risposta programmata.

  • Diritto write
  • dalla v2.19

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id della risposta programmata.

Richiesta d’esempio

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

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

Sondaggi

Un sondaggio è un post con poll impostato. Votare ha un percorso tutto suo.

POST/v2/posts/{id}/vote

Partecipare a un sondaggio.

  • Diritto write
  • dalla v2.0

I voti per opzione sono null finché non voti o il sondaggio finisce. total c’è sempre.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un post.
optionnel corpointegerobbligatorioQuale opzione, contando da 0. Con più scelte, una chiamata per opzione.
retractnel corpobooleanfacoltativotrue ritira il voto.

Richiesta d’esempio

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"

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

Profili

Profili pubblici tramite il loro nome breve, e ciò che hanno pubblicato.

GET/v2/profiles/{handle}

Un profilo, tramite il suo nome breve.

  • Diritto read
  • con ETag
  • dalla v2.0

Parametri

NomeTipoSignificato
handlenel percorsostringobbligatorioIl nome breve di un profilo, con maiuscole o minuscole indifferentemente.

Richiesta d’esempio

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

Risposta

Risponde con un Profile.

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

Stati possibili: 200304400401404429

GET/v2/profiles/{handle}/posts

I post pubblici di un profilo, i più recenti per primi.

  • Diritto read
  • sfogliabile
  • con ETag
  • dalla v2.0

Nei percorsi pubblici counts.likes e counts.reposts sono sempre 0 e pinned è false.

I post dei gruppi non sono qui ma in /communities/{id}/posts.

Parametri

NomeTipoSignificato
handlenel percorsostringobbligatorioIl nome breve di un profilo, con maiuscole o minuscole indifferentemente.
limitnell’indirizzointegerfacoltativoVoci per pagina: 20 di default, al massimo 50.
cursornell’indirizzostringfacoltativoIl next della risposta precedente. Senza, dall’inizio.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di Post, come `items` e `next`.

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

Stati possibili: 200304400401404429

GET/v2/profiles/{handle}/events

I prossimi eventi di un profilo, i più vicini prima.

  • Diritto read
  • con ETag
  • dalla v2.19

Solo finché l’abbonamento del profilo include gli eventi. Nulla tra account che si sono bloccati.

Parametri

NomeTipoSignificato
handlenel percorsostringobbligatorioIl nome breve di un profilo, con maiuscole o minuscole indifferentemente.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di Event, come `items` e `next`.

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

Stati possibili: 200304400401404429

POST/v2/me/events

Creare un evento. Risponde con il suo id.

  • Diritto write
  • dalla v2.19

Serve un abbonamento con gli eventi, altrimenti 403. Quanti possono essere in programma dipende dall’abbonamento.

Parametri

NomeTipoSignificato
titlenel corpostringobbligatorioIl titolo.
startsAtnel corpointegerobbligatorioInizio, in millisecondi dal 1970.
endsAtnel corpointegerfacoltativoFine, in millisecondi dal 1970. Facoltativa.
placenel corpostringfacoltativoDove si svolge.
descriptionnel corpostringfacoltativoUna descrizione.
signupsnel corpobooleanfacoltativoSe ci si può iscrivere. Serve un abbonamento con le iscrizioni.
capacitynel corpointegerfacoltativoQuante persone possono iscriversi al massimo. Senza indicazione, nessun limite.

Richiesta d’esempio

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"

Risposta

Risponde con un Made.

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

Stati possibili: 200400401403429

PUT/v2/me/events/{id}

Modificare un tuo evento. Tutti i campi vengono reimpostati.

  • Diritto write
  • dalla v2.19

Un evento già iniziato mantiene il suo inizio.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id dell’evento.
titlenel corpostringobbligatorioIl titolo.
startsAtnel corpointegerobbligatorioInizio, in millisecondi dal 1970.
endsAtnel corpointegerfacoltativoFine, in millisecondi dal 1970. Facoltativa.
placenel corpostringfacoltativoDove si svolge.
descriptionnel corpostringfacoltativoUna descrizione.
signupsnel corpobooleanfacoltativoSe ci si può iscrivere. Serve un abbonamento con le iscrizioni.
capacitynel corpointegerfacoltativoQuante persone possono iscriversi al massimo. Senza indicazione, nessun limite.

Richiesta d’esempio

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"

Risposta

Risponde con un Made.

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

Stati possibili: 200400401403404429

DELETE/v2/me/events/{id}

Eliminare un tuo evento.

  • Diritto write
  • dalla v2.19

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id dell’evento.

Richiesta d’esempio

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

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

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

Chi si è iscritto a un tuo evento.

  • Diritto read
  • con ETag
  • dalla v2.19

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id dell’evento.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di EventSignup, come `items` e `next`.

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

Stati possibili: 200304400401404429

POST/v2/events/{id}/signup

Iscriverti a un evento o annullare l’iscrizione.

  • Diritto write
  • dalla v2.19

Solo per eventi con iscrizione, non i tuoi. Se è pieno, 409.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id dell’evento.
goingnel corpobooleanobbligatoriotrue ti iscrive, false annulla l’iscrizione.

Richiesta d’esempio

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"

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

Gruppi

I gruppi aperti e i tuoi, i loro post, membri, ruoli e link di invito.

GET/v2/communities

I gruppi aperti di questa istanza; con mine=true i gruppi del tuo account.

  • Diritto read
  • con ETag
  • dalla v2.0

Ordinato per numero di membri e senza pagine; next è sempre null.

Parametri

NomeTipoSignificato
limitnell’indirizzointegerfacoltativoVoci per pagina: 20 di default, al massimo 50.
minenell’indirizzobooleanfacoltativotrue per i gruppi del tuo account, anche interni e nascosti, per nome.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di Community, come `items` e `next`.

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

Stati possibili: 200304401429

GET/v2/communities/{id}

Un singolo gruppo, tramite il suo id.

  • Diritto read
  • con ETag
  • dalla v2.0

I gruppi interni e nascosti solo se il tuo account ne è membro.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.

Richiesta d’esempio

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

Risposta

Risponde con un Community.

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

Stati possibili: 200304400401404429

GET/v2/communities/{id}/posts

I post del canale feed di un gruppo, i più recenti prima.

  • Diritto read
  • sfogliabile
  • con ETag
  • dalla v2.0

Nei percorsi pubblici counts.likes e counts.reposts sono sempre 0 e pinned è false.

Se il canale feed è disattivato, il percorso risponde 409 con feed_off.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.
limitnell’indirizzointegerfacoltativoVoci per pagina: 20 di default, al massimo 50.
cursornell’indirizzostringfacoltativoIl next della risposta precedente. Senza, dall’inizio.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di Post, come `items` e `next`.

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

Stati possibili: 200304400401404429

GET/v2/communities/{id}/members

I membri di un gruppo con i loro ruoli.

  • Diritto read
  • con ETag
  • dalla v2.15

Prima la guida, poi per ruolo più alto; al massimo 300.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di GroupMember, come `items` e `next`.

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

Stati possibili: 200304400401404429

GET/v2/communities/{id}/roles

I ruoli di un gruppo, il più alto prima, @everyone per ultimo.

  • Diritto read
  • con ETag
  • dalla v2.15

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di Role, come `items` e `next`.

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

Stati possibili: 200304400401404429

GET/v2/communities/{id}/bell

Quali notifiche ti manda un gruppo.

  • Diritto read
  • con ETag
  • dalla v2.15

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.

Richiesta d’esempio

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

Risposta

Risponde con un Bell.

Esempio
{
  "level": "important"
}

Stati possibili: 200304400401404429

GET/v2/invites/{code}

Il gruppo dietro un link di invito, prima di unirsi.

  • Diritto read
  • con ETag
  • dalla v2.15

Parametri

NomeTipoSignificato
codenel percorsostringobbligatorioIl codice di un link di invito, la fine del suo indirizzo.

Richiesta d’esempio

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

Risposta

Risponde con un InvitePreview.

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

Stati possibili: 200304400401404429

PUT/v2/roles/{id}/self

Prendere o lasciare un ruolo sceglibile.

  • Diritto write
  • dalla v2.20

Solo ruoli che la guida offre come sceglibili (selfable), e solo per il tuo account.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un ruolo.
activenel corpobooleanfacoltativofalse toglie il ruolo; altrimenti viene dato.

Richiesta d’esempio

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"

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

GET/v2/communities/{id}/emojis

Le emoji proprie di un gruppo.

  • Diritto read
  • con ETag
  • dalla v2.20

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di GroupEmoji, come `items` e `next`.

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

Stati possibili: 200304400401404429

PUT/v2/communities/{id}/bell

Impostare quali notifiche ti manda un gruppo.

  • Diritto write
  • dalla v2.15

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.
levelnel corpostringobbligatorioQuali notifiche arrivano.allimportantoff

Richiesta d’esempio

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"

Risposta

Risponde con un Bell.

Esempio
{
  "level": "important"
}

Stati possibili: 200400401403404429

POST/v2/invites/{code}/join

Unirsi a un gruppo con un link di invito.

  • Diritto write
  • dalla v2.15

Parametri

NomeTipoSignificato
codenel percorsostringobbligatorioIl codice di un link di invito, la fine del suo indirizzo.
rulesnel corpobooleanfacoltativotrue se accetti le regole del gruppo; necessario se ne ha.

Richiesta d’esempio

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

Risposta

Risponde con un Joined.

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

Stati possibili: 200400401403404429

GET/v2/communities/{id}/bots

I bot di un gruppo con ciò che il loro ruolo consente.

  • Diritto read
  • con ETag
  • dalla v2.19

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di GroupBot, come `items` e `next`.

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

Stati possibili: 200304400401404429

Canali

I canali dei tuoi gruppi e la loro chat: leggere, scrivere, segnare come letto.

GET/v2/communities/{id}/channels

I canali di un gruppo che vedi, nel loro ordine.

  • Diritto read
  • con ETag
  • dalla v2.15

Il canale feed (kind: feed) compare qui solo finché è attivo; i suoi post arrivano da /communities/{id}/posts.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di Channel, come `items` e `next`.

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

Stati possibili: 200304400401404429

GET/v2/channels/{id}/messages

I messaggi di un canale chat, i più recenti prima.

  • Diritto read
  • sfogliabile
  • con ETag
  • dalla v2.15

Fino a 50 messaggi per pagina. Mancano i messaggi di account che hai bloccato o che ti hanno bloccato.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un canale.
cursornell’indirizzostringfacoltativoIl next della risposta precedente. Senza, dall’inizio.
threadnell’indirizzostringfacoltativoIl messaggio di cui si legge il thread: esso e le sue risposte invece della chat.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di ChannelMessage, come `items` e `next`.

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

Stati possibili: 200304400401404429

POST/v2/channels/{id}/messages

Scrivere un messaggio in un canale chat.

  • Diritto write
  • dalla v2.15

@nome avvisa un membro, @everyone con il permesso tutti, al massimo sei volte all’ora.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un canale.
textnel corpostringfacoltativoIl testo del post, della risposta o del messaggio.
replyTonel corpostringfacoltativoL’id del messaggio dello stesso canale a cui rispondi.
medianel corpostring[]facoltativoID di immagini caricate nell’app, o di una GIF o un video dalla libreria media (dalla 2.14).
threadnel corpostringfacoltativoIl messaggio della chat nel cui thread si risponde; senza, il messaggio va nella chat.
cardnel corpoobjectfacoltativoUna scheda { title, text, color, fields: [{ name, value }] }, al massimo 10 campi.
buttonsnel corpoobject[]facoltativoFino a 5 pulsanti, ciascuno { id, label, style } con style primary, secondary o danger. Una pressione arriva come evento interaction.

Richiesta d’esempio

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"

Risposta

Risponde con un Made.

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

Stati possibili: 200400401403404429

POST/v2/channels/{id}/read

Segnare un canale chat come letto fino a un momento.

  • Diritto write
  • dalla v2.15

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un canale.
atnel corpointegerobbligatorioFino a quando è letto, in millisecondi, di solito il createdAt del messaggio più recente.

Richiesta d’esempio

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

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

DELETE/v2/channel-messages/{id}

Eliminare un tuo messaggio in un canale chat.

  • Diritto write
  • dalla v2.15

Solo i tuoi messaggi; quelli degli altri li rimuove la guida con il permesso groups.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un messaggio in un canale chat.

Richiesta d’esempio

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

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

GET/v2/communities/{id}/voice

Chi è adesso nei canali vocali di un gruppo, per canale.

  • Diritto read
  • con ETag
  • dalla v2.19

Solo canali che puoi vedere. Senza server multimediale l’elenco è vuoto.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di VoiceRoom, come `items` e `next`.

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

Stati possibili: 200304400401404429

Gestire gruppi

Ciò che le impostazioni di un gruppo permettono nell’app, con il permesso groups. Cosa può il tuo account lo decide il gruppo come nell’app: guida, ruoli e il loro ordine.

POST/v2/communities/{id}/emojis

Dare un’emoji al gruppo.

  • Diritto groups
  • dalla v2.20

Solo chi può gestire i canali del gruppo. L’immagine si carica come un’emoji tua (POST /me/emojis/pictures); un nome esiste una sola volta tra tutte le emoji.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.
namenel corpostringobbligatorioIl nome con cui scrivi l’emoji, come :nome:.
picturenel corpostringobbligatorioL’id di POST /me/emojis/pictures.

Richiesta d’esempio

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"

Risposta

Risponde con una pagina di GroupEmoji, come `items` e `next`.

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

Stati possibili: 200400401403404429

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

Togliere un’emoji dal gruppo.

  • Diritto groups
  • dalla v2.20

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.
namenel percorsostringobbligatorioIl nome dell’emoji, senza due punti.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di GroupEmoji, come `items` e `next`.

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

Stati possibili: 200400401403404429

POST/v2/communities/{id}/roles

Creare un ruolo.

  • Diritto groups
  • dalla v2.15

Solo ruoli sotto il tuo più alto e solo permessi che hai tu; la guida sta sopra tutti.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.
namenel corpostringfacoltativoIl nome del ruolo; @everyone mantiene il suo.
colornel corpostringfacoltativoIl colore; vuoto per nessuno.indigovioletroseambergreenteal
permissionsnel corpostring[]facoltativoI permessi: view, send, attach, post_feed, invite, mention_everyone, moderate, timeout_members, kick_members, ban_members, manage_channels, manage_roles.
selfablenel corpobooleanfacoltativotrue: i membri prendono il ruolo da soli. Solo per ruoli che non permettono più che partecipare (view, send, attach, voice_connect, voice_speak, voice_video).

Richiesta d’esempio

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"

Risposta

Risponde con un Made.

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

Stati possibili: 200400401403404429

PUT/v2/roles/{id}

Cambiare nome, colore e permessi di un ruolo.

  • Diritto groups
  • dalla v2.15

Sostituisce nome, colore e permessi; ciò che ometti diventa vuoto.

Solo ruoli sotto il tuo più alto e solo permessi che hai tu; la guida sta sopra tutti.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un ruolo.
namenel corpostringfacoltativoIl nome del ruolo; @everyone mantiene il suo.
colornel corpostringfacoltativoIl colore; vuoto per nessuno.indigovioletroseambergreenteal
permissionsnel corpostring[]facoltativoI permessi: view, send, attach, post_feed, invite, mention_everyone, moderate, timeout_members, kick_members, ban_members, manage_channels, manage_roles.
selfablenel corpobooleanfacoltativotrue: i membri prendono il ruolo da soli. Solo per ruoli che non permettono più che partecipare (view, send, attach, voice_connect, voice_speak, voice_video).

Richiesta d’esempio

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"

Risposta

Risponde con un Made.

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

Stati possibili: 200400401403404429

DELETE/v2/roles/{id}

Eliminare un ruolo.

  • Diritto groups
  • dalla v2.15

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un ruolo.

Richiesta d’esempio

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

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

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

Stabilire l’ordine dei ruoli.

  • Diritto groups
  • dalla v2.15

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.
rolesnel corpostring[]obbligatorioGli id di tutti i ruoli sotto il tuo più alto, il più alto per primo; per la guida tutti tranne @everyone.

Richiesta d’esempio

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

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

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

Dare o togliere un ruolo a un membro.

  • Diritto groups
  • dalla v2.15

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un ruolo.
membernel percorsostringobbligatorioL’id dell’account di un membro.
activenel corpobooleanfacoltativofalse toglie il ruolo; altrimenti viene dato.

Richiesta d’esempio

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"

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

POST/v2/communities/{id}/channels

Creare un canale chat.

  • Diritto groups
  • dalla v2.15

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.
namenel corpostringfacoltativoIl nome, senza #; vuoto per il nome che l’app dà in ogni lingua.
topicnel corpostringfacoltativoL’argomento mostrato sopra il canale.
categorynel corpostringfacoltativoL’id della categoria in cui va il canale; vuoto per nessuna.
emojinel corpostringfacoltativoUn emoji come simbolo.
iconnel corpostringfacoltativoUn simbolo della raccolta dell’app, per nome.homehashmegaphonevolumemessagehelpinfobellcalendarbookbookmarkpinshieldstarheartsparklesflamezaptrophygiftrocketlightbulbcodewrenchbriefcasegraduationpalettecamerafilmmusicgamepaddumbbellleafflowerpawsunmooncloudglobemapcoffeepizzasmile
imagenel corpostringfacoltativoL’id di un’immagine caricata con /media/emoji.
colornel corpostringfacoltativoIl colore del riquadro.brandindigovioletroseambergreentealred
shapenel corpostringfacoltativoLa forma del riquadro; senza, un cerchio.circlesquaretrianglediamondhexagonoctagonshieldstar

Richiesta d’esempio

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"

Risposta

Risponde con un Made.

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

Stati possibili: 200400401403404429

PUT/v2/channels/{id}

Cambiare nome, argomento e categoria di un canale.

  • Diritto groups
  • dalla v2.15

Sostituisce nome, argomento e categoria; ciò che ometti diventa vuoto.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un canale.
namenel corpostringfacoltativoIl nome, senza #; vuoto per il nome che l’app dà in ogni lingua.
topicnel corpostringfacoltativoL’argomento mostrato sopra il canale.
categorynel corpostringfacoltativoL’id della categoria in cui va il canale; vuoto per nessuna.
emojinel corpostringfacoltativoUn emoji come simbolo.
iconnel corpostringfacoltativoUn simbolo della raccolta dell’app, per nome.homehashmegaphonevolumemessagehelpinfobellcalendarbookbookmarkpinshieldstarheartsparklesflamezaptrophygiftrocketlightbulbcodewrenchbriefcasegraduationpalettecamerafilmmusicgamepaddumbbellleafflowerpawsunmooncloudglobemapcoffeepizzasmile
imagenel corpostringfacoltativoL’id di un’immagine caricata con /media/emoji.
colornel corpostringfacoltativoIl colore del riquadro.brandindigovioletroseambergreentealred
shapenel corpostringfacoltativoLa forma del riquadro; senza, un cerchio.circlesquaretrianglediamondhexagonoctagonshieldstar

Richiesta d’esempio

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"

Risposta

Risponde con un Made.

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

Stati possibili: 200400401403404429

DELETE/v2/channels/{id}

Eliminare un canale chat con i suoi messaggi.

  • Diritto groups
  • dalla v2.15

Il canale feed non si può eliminare, solo disattivare.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un canale.

Richiesta d’esempio

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

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

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

Stabilire l’ordine di categorie e canali chat.

  • Diritto groups
  • dalla v2.15

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.
categoriesnel corpostring[]obbligatorioGli id di tutte le categorie del gruppo nel nuovo ordine.
channelsnel corpostring[]obbligatorioGli id di tutti i canali chat del gruppo nel nuovo ordine.

Richiesta d’esempio

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

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

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

Impostare la forma di tutti i simboli dei canali del gruppo.

  • Diritto groups
  • dalla v2.20

Solo la guida del gruppo.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.
shapenel corpostringfacoltativoLa forma di tutti i simboli del gruppo; se omessa, ogni canale ha la sua.circlesquaretrianglediamondhexagonoctagonshieldstar

Richiesta d’esempio

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

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

GET/v2/channels/{id}/overrides

Ciò che i ruoli possono fare diversamente in un canale rispetto al gruppo.

  • Diritto groups
  • con ETag
  • dalla v2.15

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un canale.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di ChannelOverride, come `items` e `next`.

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

Stati possibili: 200304400401403404429

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

Stabilire ciò che un ruolo può fare diversamente in un canale.

  • Diritto groups
  • dalla v2.15

Non per ruoli pari o superiori al tuo più alto.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un canale.
rolenel percorsostringobbligatorioL’id di un ruolo.
allownel corpostring[]facoltativoCosa il ruolo può fare qui in più: in una chat view, send, attach, mention_everyone, moderate, nel canale feed view e post_feed.
denynel corpostring[]facoltativoCiò che il ruolo non può fare qui, tra gli stessi permessi. Entrambe le liste vuote tolgono la differenza.

Richiesta d’esempio

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"

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

POST/v2/communities/{id}/categories

Creare una categoria per i canali.

  • Diritto groups
  • dalla v2.15

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.
namenel corpostringobbligatorioIl nome della categoria.
emojinel corpostringfacoltativoUn emoji come simbolo.
iconnel corpostringfacoltativoUn simbolo della raccolta dell’app, per nome.homehashmegaphonevolumemessagehelpinfobellcalendarbookbookmarkpinshieldstarheartsparklesflamezaptrophygiftrocketlightbulbcodewrenchbriefcasegraduationpalettecamerafilmmusicgamepaddumbbellleafflowerpawsunmooncloudglobemapcoffeepizzasmile
imagenel corpostringfacoltativoL’id di un’immagine caricata con /media/emoji.
colornel corpostringfacoltativoIl colore del riquadro.brandindigovioletroseambergreentealred

Richiesta d’esempio

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"

Risposta

Risponde con un Made.

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

Stati possibili: 200400401403404429

PUT/v2/categories/{id}

Rinominare una categoria.

  • Diritto groups
  • dalla v2.15

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di una categoria.
namenel corpostringobbligatorioIl nome della categoria.
emojinel corpostringfacoltativoUn emoji come simbolo.
iconnel corpostringfacoltativoUn simbolo della raccolta dell’app, per nome.homehashmegaphonevolumemessagehelpinfobellcalendarbookbookmarkpinshieldstarheartsparklesflamezaptrophygiftrocketlightbulbcodewrenchbriefcasegraduationpalettecamerafilmmusicgamepaddumbbellleafflowerpawsunmooncloudglobemapcoffeepizzasmile
imagenel corpostringfacoltativoL’id di un’immagine caricata con /media/emoji.
colornel corpostringfacoltativoIl colore del riquadro.brandindigovioletroseambergreentealred

Richiesta d’esempio

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"

Risposta

Risponde con un Made.

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

Stati possibili: 200400401403404429

DELETE/v2/categories/{id}

Eliminare una categoria.

  • Diritto groups
  • dalla v2.15

I suoi canali restano, senza categoria.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di una categoria.

Richiesta d’esempio

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

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

PUT/v2/communities/{id}/feed

Attivare o disattivare il canale feed di un gruppo.

  • Diritto groups
  • dalla v2.15

Disattivato, i post restano salvati ma li vedono solo i loro autori.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.
onnel corpobooleanobbligatoriotrue attiva il canale feed, false lo disattiva.

Richiesta d’esempio

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

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

GET/v2/communities/{id}/invites

I link di invito di un gruppo ancora validi.

  • Diritto groups
  • con ETag
  • dalla v2.15

La guida li vede tutti, gli altri solo i propri.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di InviteLink, come `items` e `next`.

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

Stati possibili: 200304400401403404429

POST/v2/communities/{id}/invites

Creare un link di invito.

  • Diritto groups
  • dalla v2.15

Un link vale solo finché puoi invitare e sparisce quando esci.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.
daysnel corpointegerfacoltativoPer quanti giorni vale il link; senza, finché non viene ritirato.1730
usesnel corpointegerfacoltativoQuante volte si può usare il link; senza, senza limite.151025100

Richiesta d’esempio

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"

Risposta

Risponde con un Made.

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

Stati possibili: 200400401403404429

DELETE/v2/invites/{code}

Ritirare un link di invito.

  • Diritto groups
  • dalla v2.15

Parametri

NomeTipoSignificato
codenel percorsostringobbligatorioIl codice di un link di invito, la fine del suo indirizzo.

Richiesta d’esempio

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

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

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

Rimuovere da un canale il messaggio di un altro membro.

  • Diritto groups
  • dalla v2.15

Annotato nel registro del gruppo e al massimo 60 all’ora, come nell’app.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un messaggio in un canale chat.

Richiesta d’esempio

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

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

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

Rimuovere un post da un gruppo.

  • Diritto groups
  • dalla v2.15

Annotato nel registro del gruppo e al massimo 60 all’ora, come nell’app.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.
postnel percorsostringobbligatorioL’id di un post.
reasonnel corpostringobbligatorioLa motivazione che legge il membro.

Richiesta d’esempio

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"

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

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

Espellere un membro da un gruppo.

  • Diritto groups
  • dalla v2.15

Dalla 2.16 un’espulsione: il membro può rientrare. Chi deve restare fuori va bannato.

Solo con il permesso relativo e solo con membri sotto il tuo ruolo più alto; la co-guida solo come fondatore.

Annotato nel registro del gruppo e al massimo 60 all’ora, come nell’app.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.
membernel percorsostringobbligatorioL’id dell’account di un membro.
reasonnel corpostringobbligatorioLa motivazione che legge il membro.

Richiesta d’esempio

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"

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

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

Silenziare un membro.

  • Diritto groups
  • dalla v2.16

Un nuovo silenziamento sostituisce quello in corso. Uscire e rientrare non lo fa finire.

Solo con il permesso relativo e solo con membri sotto il tuo ruolo più alto; la co-guida solo come fondatore.

Annotato nel registro del gruppo e al massimo 60 all’ora, come nell’app.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.
membernel percorsostringobbligatorioL’id dell’account di un membro.
secondsnel corpointegerobbligatorioPer quanto, in secondi.60300600360086400604800
reasonnel corpostringfacoltativoUna motivazione che il membro legge; facoltativa.

Richiesta d’esempio

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"

Risposta

Risponde con un Until.

Esempio
{
  "until": 1758624600000
}

Stati possibili: 200400401403404429

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

Revocare un silenziamento.

  • Diritto groups
  • dalla v2.16

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.
membernel percorsostringobbligatorioL’id dell’account di un membro.

Richiesta d’esempio

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"

Risposta

Risponde con un Until.

Esempio
{
  "until": 1758624600000
}

Stati possibili: 200400401403404429

GET/v2/communities/{id}/bans

I ban in corso di un gruppo.

  • Diritto groups
  • con ETag
  • dalla v2.16

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di Ban, come `items` e `next`.

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

Stati possibili: 200304400401403404429

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

Bannare un membro.

  • Diritto groups
  • dalla v2.16

Senza days il ban dura finché non viene revocato.

Solo con il permesso relativo e solo con membri sotto il tuo ruolo più alto; la co-guida solo come fondatore.

Annotato nel registro del gruppo e al massimo 60 all’ora, come nell’app.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.
membernel percorsostringobbligatorioL’id dell’account di un membro.
daysnel corpointegerfacoltativoPer quanto, in giorni; da omettere per un ban senza fine.1730
reasonnel corpostringobbligatorioLa motivazione che legge il membro.

Richiesta d’esempio

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"

Risposta

Risponde con un Until.

Esempio
{
  "until": 1758624600000
}

Stati possibili: 200400401403404429

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

Revocare un ban.

  • Diritto groups
  • dalla v2.16

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.
membernel percorsostringobbligatorioL’id dell’account di un membro.

Richiesta d’esempio

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"

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

GET/v2/communities/{id}/log

Il registro della guida: chi ha rimosso cosa e perché.

  • Diritto groups
  • con ETag
  • dalla v2.15

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di LogEntry, come `items` e `next`.

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

Stati possibili: 200304400401403404429

POST/v2/communities

Fondare un gruppo. Risponde con il suo id; sei tu il fondatore.

  • Diritto groups
  • dalla v2.19

Serve il permesso groups. Se non indicato, il gruppo è internal e ad accesso libero; uno nascosto solo su invito. Se i membri possono fondare gruppi lo decide il gestore.

Parametri

NomeTipoSignificato
namenel corpostringobbligatorioIl nome, al massimo 60 caratteri.
descriptionnel corpostringfacoltativoLa descrizione, al massimo 240 caratteri.
handlenel corpostringfacoltativoL’identificativo per le menzioni @# e il link: da 3 a 30 lettere minuscole, cifre o _.
tagsnel corpostring[]facoltativoFino a 5 #tag sul tema del gruppo.
joinPolicynel corpostringfacoltativoCome si entra: open liberamente, application con richiesta, invite solo su invito.openapplicationinvite
visibilitynel corpostringfacoltativoChi vede il gruppo: open tutti, internal il contenuto solo i membri, hidden solo i membri in assoluto.openinternalhidden

Richiesta d’esempio

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"

Risposta

Risponde con un Made.

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

Stati possibili: 200400401403429

PUT/v2/communities/{id}

Modificare un gruppo che guidi. Ciò che non indichi resta com’è.

  • Diritto groups
  • dalla v2.19

Serve il permesso groups e la guida del gruppo. Guida, scioglimento e vantaggi delle scintille restano nell’app.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un gruppo.
namenel corpostringfacoltativoIl nome, al massimo 60 caratteri.
descriptionnel corpostringfacoltativoLa descrizione, al massimo 240 caratteri.
handlenel corpostringfacoltativoL’identificativo per le menzioni @# e il link: da 3 a 30 lettere minuscole, cifre o _.
tagsnel corpostring[]facoltativoFino a 5 #tag sul tema del gruppo.
joinPolicynel corpostringfacoltativoCome si entra: open liberamente, application con richiesta, invite solo su invito.openapplicationinvite
visibilitynel corpostringfacoltativoChi vede il gruppo: open tutti, internal il contenuto solo i membri, hidden solo i membri in assoluto.openinternalhidden
imagenel corpostringfacoltativoL’id di un’immagine caricata (POST /me/pictures) come immagine del gruppo. Vuoto la toglie.
bannernel corpostringfacoltativoL’id di un’immagine caricata come copertina del gruppo. Vuoto la toglie.

Richiesta d’esempio

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"

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

Bot

Ciò che accade nei gruppi di un bot, in tempo reale: come flusso, pagina per pagina o consegnato a un indirizzo.

GET/v2/events

Gli eventi dei gruppi del bot da un evento in poi, pagina per pagina.

  • Diritto read
  • dalla v2.20

Solo con il token di un bot. Gli eventi di un canale solo se il bot può vederlo.

Gli eventi restano un giorno. next è il numero dell’ultimo, come since per la pagina successiva.

Parametri

NomeTipoSignificato
sincenell’indirizzostringfacoltativoIl numero dell’ultimo evento che il bot ha già. Senza, il flusso inizia ora e l’elenco dal più vecchio.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di BotEvent, come `items` e `next`.

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

Stati possibili: 200401429

GET/v2/events/stream

Gli eventi dei gruppi del bot appena accadono (server-sent events).

  • Diritto read
  • con ETag
  • dalla v2.20

La connessione resta aperta e si chiude dopo dieci minuti; il client si riconnette e invia Last-Event-ID.

Solo con il token di un bot. Gli eventi di un canale solo se il bot può vederlo.

Parametri

NomeTipoSignificato
sincenell’indirizzostringfacoltativoIl numero dell’ultimo evento che il bot ha già. Senza, il flusso inizia ora e l’elenco dal più vecchio.

Richiesta d’esempio

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

Risposta

Risponde con un BotEvent.

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

Stati possibili: 200304401429

GET/v2/me/commands

I comandi del bot.

  • Diritto read
  • con ETag
  • dalla v2.20

Solo con il token di un bot. Gli eventi di un canale solo se il bot può vederlo.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di BotCommand, come `items` e `next`.

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

Stati possibili: 200304401429

PUT/v2/me/commands

Impostare i comandi del bot, tutti insieme.

  • Diritto write
  • dalla v2.20

Sostituisce tutti i comandi; un elenco vuoto li toglie. Nelle chat che il bot può vedere, il campo di testo li propone dopo «/».

Parametri

NomeTipoSignificato
commandsnel corpoobject[]obbligatorioFino a 25 comandi, ciascuno { name, description }.

Richiesta d’esempio

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"

Risposta

Risponde con una pagina di BotCommand, come `items` e `next`.

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

Stati possibili: 200400401403429

POST/v2/interactions/{id}/reply

Rispondere a un comando o a un pulsante.

  • Diritto write
  • dalla v2.20

Entro 15 minuti dall’evento command o interaction; con private vede la risposta solo chi ha usato il comando o il pulsante.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id dall’evento (data.interaction).
textnel corpostringfacoltativoIl testo del post, della risposta o del messaggio.
privatenel corpobooleanfacoltativotrue: vede la risposta solo chi ha usato il comando o il pulsante, per un giorno.
cardnel corpoobjectfacoltativoUna scheda { title, text, color, fields: [{ name, value }] }, al massimo 10 campi.
buttonsnel corpoobject[]facoltativoFino a 5 pulsanti, ciascuno { id, label, style } con style primary, secondary o danger. Una pressione arriva come evento interaction.

Richiesta d’esempio

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"

Risposta

Risponde con un Made.

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

Stati possibili: 200400401403404429

POST/v2/channels/{id}/voice

Prendere un posto in un canale vocale per riprodurre musica o suoni.

  • Diritto write
  • dalla v2.20

Solo con il token di un bot, come consente il suo ruolo nel canale. Il programma si collega con un SDK LiveKit e invia il suo audio come microfono; ognuno ne regola il volume per sé.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id di un canale.

Richiesta d’esempio

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

Risposta

Risponde con un VoiceSeat.

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

Stati possibili: 200400401403404429

Scopri

Tendenze, ricerca e le emoji proprie dell’istanza.

GET/v2/tags

I tag che girano in questo momento.

  • Diritto read
  • con ETag
  • dalla v2.0

Al massimo 10 tag di tendenza per punti: ogni uso conta 1 e si dimezza ogni 3 giorni, un account conta al massimo 3 al giorno. posts è il punteggio arrotondato. limit accorcia solo l’elenco. I tag messi in evidenza dal team possono stare più in alto.

Parametri

NomeTipoSignificato
limitnell’indirizzointegerfacoltativoVoci per pagina: 20 di default, al massimo 50.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di Tag, come `items` e `next`.

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

Stati possibili: 200304401429

GET/v2/search

Una ricerca su post, nomi, nomi brevi e tag.

  • Diritto read
  • con ETag
  • dalla v2.0

Cerca solo i contenuti pubblici: post fuori dai gruppi, profili e tag. limit vale per tipo.

Parametri

NomeTipoSignificato
qnell’indirizzostringobbligatorioLe parole cercate.
typenell’indirizzostringfacoltativoChe genere di risultato. Senza, ogni genere.allpostsprofilestags
limitnell’indirizzointegerfacoltativoVoci per pagina: 20 di default, al massimo 50.

Richiesta d’esempio

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

Risposta

Risponde con un SearchResult.

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

Stati possibili: 200304400401429

GET/v2/emojis

Gli emoji propri dell’istanza, con l’indirizzo delle loro immagini.

  • Diritto read
  • con ETag
  • dalla v2.1

Nei testi un emoji compare come :name:. Sostituiscilo con l’immagine di questa lista; i nomi sconosciuti restano testo.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di Emoji, come `items` e `next`.

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

Stati possibili: 200304401429

GIF e video

La libreria media: trovare GIF e video condivisi, caricare e gestire i propri e incorporarli su altri siti web.

GET/v2/media

GIF o video condivisi, prima i più usati.

  • Diritto read
  • sfogliabile
  • con ETag
  • dalla v2.14

Senza gli account che hai bloccato o che ti hanno bloccato. Carica url e poster con la chiave nell’header, per i post su tellmelo.

Per altri siti web solo ciò che ha embed: i suoi indirizzi funzionano senza chiave, in qualsiasi browser.

Parametri

NomeTipoSignificato
kindnell’indirizzostringfacoltativogif o video; se non indicato, gif.gifvideo
qnell’indirizzostringfacoltativoParole presenti nel nome o nelle parole chiave.
anywherenell’indirizzobooleanfacoltativotrue: solo ciò che può apparire anche su altri siti web.
limitnell’indirizzointegerfacoltativoVoci per pagina: 20 di default, al massimo 50.
cursornell’indirizzostringfacoltativoIl next della risposta precedente. Senza, dall’inizio.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di MediaItem, come `items` e `next`.

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

Stati possibili: 200304400401429

GET/v2/media/mine

La tua libreria media, prima i più recenti.

  • Diritto media
  • sfogliabile
  • con ETag
  • dalla v2.14

Parametri

NomeTipoSignificato
kindnell’indirizzostringfacoltativogif o video; se non indicato, gif.gifvideo
qnell’indirizzostringfacoltativoParole presenti nel nome o nelle parole chiave.
limitnell’indirizzointegerfacoltativoVoci per pagina: 20 di default, al massimo 50.
cursornell’indirizzostringfacoltativoIl next della risposta precedente. Senza, dall’inizio.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di MediaItem, come `items` e `next`.

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

Stati possibili: 200304400401403429

GET/v2/media/{id}

Una GIF o un video, tuo o condiviso.

  • Diritto read
  • con ETag
  • dalla v2.14

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’ID della GIF o del video.

Richiesta d’esempio

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

Risposta

Risponde con un MediaItem.

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

Stati possibili: 200304400401404429

POST/v2/media/uploads

Avvia un caricamento.

  • Diritto media
  • dalla v2.14

Poi invia il file in pezzi di al massimo piece byte a /media/uploads/{upload}. Senza un nuovo pezzo, un caricamento termina dopo 15 minuti.

Valgono i limiti dell’app: GIF fino a 15 MB, video in base all’abbonamento per dimensione e durata, GIF al giorno, GIF private, punti video a settimana. Altrimenti ricevi 409, 413 o 429.

Parametri

NomeTipoSignificato
kindnel corpostringobbligatoriogif o video; se non indicato, gif.gifvideo
sizenel corpointegerobbligatorioLa dimensione dell’intero file in byte.
namenel corpostringobbligatorioIl nome con cui lo si trova: da 2 a 40 caratteri.
keywordsnel corpostringfacoltativoParole chiave per la ricerca, separate da spazi.
sharednel corpobooleanfacoltativotrue: condiviso con tutti su tellmelo.
anywherenel corpobooleanfacoltativotrue: condiviso e consentito anche su altri siti web. Solo insieme a shared.

Richiesta d’esempio

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"

Risposta

Risponde con un UploadStarted.

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

Stati possibili: 200400401403429

PUT/v2/media/uploads/{upload}

Invia un pezzo del file.

  • Diritto media
  • dalla v2.14

Il corpo è il pezzo stesso (application/octet-stream), non JSON. Se non continua, ricevi 409 con received: riprendi da lì. Dopo l’ultimo pezzo il file viene convertito; la risposta contiene allora item.

Parametri

NomeTipoSignificato
uploadnel percorsostringobbligatorioL’upload ricevuto all’avvio.
offsetnell’indirizzointegerobbligatorioDove inizia il pezzo nel file, in byte; 0 per il primo.

Richiesta d’esempio

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"

Risposta

Risponde con un UploadPiece.

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

Stati possibili: 200400401403404429

POST/v2/media/{id}

Modifica una delle tue GIF o uno dei tuoi video.

  • Diritto media
  • dalla v2.14

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’ID della GIF o del video.
namenel corpostringfacoltativoIl nome con cui lo si trova: da 2 a 40 caratteri.
keywordsnel corpostringfacoltativoParole chiave per la ricerca, separate da spazi.
sharednel corpobooleanfacoltativotrue: condiviso con tutti su tellmelo.
anywherenel corpobooleanfacoltativotrue: condiviso e consentito anche su altri siti web. Solo insieme a shared.

Richiesta d’esempio

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"

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

DELETE/v2/media/{id}

Rimuovi una delle tue GIF o uno dei tuoi video.

  • Diritto media
  • dalla v2.14

I post che lo mostrano già lo mantengono. Su altri siti web sparisce entro pochi minuti.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’ID della GIF o del video.

Richiesta d’esempio

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

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

Il tuo account

Il tuo profilo, il tuo feed, le tue emoji e i tuoi webhook.

GET/v2/me

Il tuo profilo, con l’id che gli altri percorsi si aspettano.

  • Diritto read
  • con ETag
  • dalla v2.0

Richiesta d’esempio

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

Risposta

Risponde con un Profile.

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

Stati possibili: 200304401429

GET/v2/feed

Il tuo feed, come lo compone l’applicazione.

  • Diritto read
  • sfogliabile
  • dalla v2.0

Nessun ETag, perché l’ordine cambia di continuo. Un elenco iniziato resta uguale fino alla fine.

Parametri

NomeTipoSignificato
tabnell’indirizzostringfacoltativoQuale feed: for-you, following, latest o bookmarks. latest come valore predefinito.for-youfollowinglatestbookmarks
tagnell’indirizzostringfacoltativoSolo i post su questo tag: scritti con esso o in cui il server lo riconosce. Senza, nessun filtro.
limitnell’indirizzointegerfacoltativoVoci per pagina: 20 di default, al massimo 50.
cursornell’indirizzostringfacoltativoIl next della risposta precedente. Senza, dall’inizio.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di Post, come `items` e `next`.

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

Stati possibili: 200400401429

POST/v2/me/pictures

Caricare un’immagine, come i suoi byte. Risponde con id e url; poi usi l’id come immagine del profilo, copertina o in un post.

  • Diritto write
  • dalla v2.19

PNG, JPEG, WebP o GIF, riconosciuto dai primi byte; salvato di nuovo senza metadati. Un’immagine usata da nessuna parte viene eliminata più tardi.

Richiesta d’esempio

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"

Risposta

Risponde con un Picture.

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

Stati possibili: 200401403429

PUT/v2/me/profile

Modificare il profilo: nome, su di te, immagine del profilo, copertina e colore del profilo. Ciò che non indichi resta com’è.

  • Diritto profile
  • dalla v2.19

Serve il permesso profile. Il tuo @nome resta nell’app: è anche il tuo nome di accesso.

Parametri

NomeTipoSignificato
namenel corpostringfacoltativoIl nome visualizzato, al massimo 60 caratteri.
aboutnel corpostringfacoltativoIl testo «Su di te».
avatarnel corpostringfacoltativoL’id di un’immagine caricata come immagine del profilo. Vuoto la toglie.
bannernel corpostringfacoltativoL’id di un’immagine caricata come copertina. Vuoto la toglie.
colornel corpostringfacoltativoIl colore del profilo, con un abbonamento. null lo toglie.indigovioletrosecoralamberlimegreentealskyslatesandnight

Richiesta d’esempio

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"

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403429

GET/v2/me/emojis

Le tue emoji.

  • Diritto read
  • con ETag
  • dalla v2.19

Richiesta d’esempio

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

Risposta

Risponde con una pagina di OwnEmoji, come `items` e `next`.

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

Stati possibili: 200304401429

POST/v2/me/emojis/pictures

Caricare l’immagine di una tua emoji, come i suoi byte.

  • Diritto profile
  • dalla v2.19

Le emoji animate richiedono un abbonamento. Se dopo la conversione è troppo grande, l’immagine viene rifiutata.

Richiesta d’esempio

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"

Risposta

Risponde con un EmojiPicture.

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

Stati possibili: 200401403429

POST/v2/me/emojis

Creare una tua emoji. Risponde con tutte le tue emoji.

  • Diritto profile
  • dalla v2.19

Quante emoji puoi creare dipende dall’abbonamento.

Parametri

NomeTipoSignificato
namenel corpostringobbligatorioIl nome con cui scrivi l’emoji, come :nome:.
picturenel corpostringobbligatorioL’id di POST /me/emojis/pictures.

Richiesta d’esempio

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"

Risposta

Risponde con una pagina di OwnEmoji, come `items` e `next`.

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

Stati possibili: 200400401403429

DELETE/v2/me/emojis/{name}

Rimuovere una tua emoji. Risponde con le altre.

  • Diritto profile
  • dalla v2.19

Parametri

NomeTipoSignificato
namenel percorsostringobbligatorioIl nome dell’emoji, senza due punti.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di OwnEmoji, come `items` e `next`.

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

Stati possibili: 200400401403404429

PUT/v2/me/emojis/sharing

Decidere se i tuoi follower possono usare le tue emoji nei loro testi.

  • Diritto profile
  • dalla v2.19

Parametri

NomeTipoSignificato
sharednel corpobooleanobbligatoriotrue condivide le tue emoji con i follower, false no.

Richiesta d’esempio

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

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403429

GET/v2/me/webhooks

I tuoi webhook con il loro stato.

  • Diritto webhooks
  • con ETag
  • dalla v2.19

Serve il permesso webhooks. I webhook arrivano con un abbonamento organizzazione o come partner.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di Webhook, come `items` e `next`.

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

Stati possibili: 200304401403429

POST/v2/me/webhooks

Creare un webhook. Risponde con l’id e il segreto per le firme, solo questa volta.

  • Diritto webhooks
  • dalla v2.19

Ogni consegna è firmata con il segreto (X-Tellmelo-Signature). Conservalo; non verrà mostrato di nuovo.

Parametri

NomeTipoSignificato
urlnel corpostringobbligatorioUn indirizzo HTTPS fuori dalle reti locali, senza credenziali.
kindsnel corpostring[]obbligatorioDi cosa viene avvisato il webhook. Quali tipi hai a disposizione dipende da abbonamento e partnership.replymentiongroup_mentionfollowlikerepostmessagequota_changedquota_giftdrop_claimeddrop_empty

Richiesta d’esempio

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"

Risposta

Risponde con un WebhookCreated.

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

Stati possibili: 200400401403429

DELETE/v2/me/webhooks/{id}

Eliminare un webhook.

  • Diritto webhooks
  • dalla v2.19

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id del webhook.

Richiesta d’esempio

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

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

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

Inviare una prova a un webhook.

  • Diritto webhooks
  • dalla v2.19

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id del webhook.

Richiesta d’esempio

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

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

Notifiche

Ciò che è successo attorno al tuo account, pagina per pagina.

GET/v2/notifications

Le tue notifiche, le più recenti per prime.

  • Diritto read
  • sfogliabile
  • con ETag
  • dalla v2.0

Leggere non segna nulla come letto; lo fa POST /notifications/read. Gli eventi dello stesso tipo sullo stesso post stanno in una riga; more dice quanti.

Parametri

NomeTipoSignificato
limitnell’indirizzointegerfacoltativoVoci per pagina: 20 di default, al massimo 50.
cursornell’indirizzostringfacoltativoIl next della risposta precedente. Senza, dall’inizio.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di Notification, come `items` e `next`.

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

Stati possibili: 200304401429

POST/v2/notifications/read

Segnare le tue notifiche come lette.

  • Diritto write
  • dalla v2.0

Richiesta d’esempio

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

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200401403429

Messaggi

La tua casella e le conversazioni. Una conversazione prende il nome dall’altro account.

GET/v2/conversations

La tua posta: una riga per conversazione, la più recente per prima.

  • Diritto read
  • sfogliabile
  • con ETag
  • dalla v2.0

Parametri

NomeTipoSignificato
limitnell’indirizzointegerfacoltativoVoci per pagina: 20 di default, al massimo 50.
cursornell’indirizzostringfacoltativoIl next della risposta precedente. Senza, dall’inizio.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di Conversation, come `items` e `next`.

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

Stati possibili: 200304401429

GET/v2/conversations/{with}/messages

I messaggi di una conversazione, i più recenti per primi.

  • Diritto read
  • sfogliabile
  • con ETag
  • dalla v2.0

Leggere non segna nulla come letto; lo fa POST /conversations/{with}/read.

Parametri

NomeTipoSignificato
withnel percorsostringobbligatorioL’id dell’altro account. Una conversazione non ha un id proprio.
limitnell’indirizzointegerfacoltativoVoci per pagina: 20 di default, al massimo 50.
cursornell’indirizzostringfacoltativoIl next della risposta precedente. Senza, dall’inizio.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di Message, come `items` e `next`.

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

Stati possibili: 200304400401404429

POST/v2/conversations/{with}/messages

Inviare un messaggio in una conversazione.

  • Diritto write
  • dalla v2.0

Valgono le regole dell’app: chi ti ha bloccato non è raggiungibile e contano le impostazioni dell’altra persona.

Immagini, GIF e video non si possono allegare ai messaggi tramite l’API, solo nell’app.

Parametri

NomeTipoSignificato
withnel percorsostringobbligatorioL’id dell’altro account. Una conversazione non ha un id proprio.
textnel corpostringobbligatorioIl testo del post, della risposta o del messaggio.
replyTonel corpostringfacoltativoL’id di un messaggio precedente di questa conversazione a cui questo risponde. Dalla 2.2.

Richiesta d’esempio

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"

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

POST/v2/conversations/{with}/read

Segnare come letti tutti i messaggi di una conversazione.

  • Diritto write
  • dalla v2.1

Parametri

NomeTipoSignificato
withnel percorsostringobbligatorioL’id dell’altro account. Una conversazione non ha un id proprio.

Richiesta d’esempio

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

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

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

Eliminare un tuo messaggio.

  • Diritto write
  • dalla v2.12

Solo i tuoi messaggi, e solo entro 24 ore dall’invio.

Parametri

NomeTipoSignificato
withnel percorsostringobbligatorioL’id dell’altro account. Una conversazione non ha un id proprio.
idnel percorsostringobbligatorioL’identificativo del messaggio.

Richiesta d’esempio

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"

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

POST/v2/conversations/{with}/planned

Programmare un messaggio per più tardi. Risponde con l’id del messaggio programmato.

  • Diritto write
  • dalla v2.19

Serve un abbonamento con i messaggi programmati, altrimenti 403. Con la crittografia end-to-end da entrambe le parti funziona solo nell’app.

Parametri

NomeTipoSignificato
withnel percorsostringobbligatorioL’id dell’altro account. Una conversazione non ha un id proprio.
textnel corpostringobbligatorioIl testo del post, della risposta o del messaggio.
sendAtnel corpointegerobbligatorioQuando viene inviato il messaggio, in millisecondi dal 1970.

Richiesta d’esempio

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"

Risposta

Risponde con un Made.

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

Stati possibili: 200400401403404429

GET/v2/me/planned-messages

I tuoi messaggi ancora da inviare, in ordine di ora.

  • Diritto read
  • con ETag
  • dalla v2.19

Parametri

NomeTipoSignificato
withnell’indirizzostringfacoltativoSolo i messaggi per questo account (il suo id).

Richiesta d’esempio

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

Risposta

Risponde con una pagina di PlannedMessage, come `items` e `next`.

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

Stati possibili: 200304401429

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

Inviare ora un messaggio programmato trattenuto o non riuscito.

  • Diritto write
  • dalla v2.19

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id del messaggio programmato.

Richiesta d’esempio

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

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

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

Eliminare un messaggio programmato prima che venga inviato.

  • Diritto write
  • dalla v2.19

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id del messaggio programmato.

Richiesta d’esempio

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

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

Relazioni

Mi piace, salvare, condividere, seguire, entrare, bloccare: un solo percorso, attivato e tolto con active. Dalla 2.19 anche gli elenchi: follower, seguiti e i tuoi blocchi e silenziamenti.

POST/v2/relations

Mettere mi piace, salvare, condividere, seguire, entrare, bloccare, silenziare, a seconda di kind.

  • Diritto write
  • dalla v2.0

target è un post per like, save e repost, un gruppo per join, un account per follow, block e mute. active: false toglie la relazione.

Parametri

NomeTipoSignificato
kindnel corpostringobbligatorioQuale relazione: like, save, repost, follow, join, block o mute (dalla 2.2).likesaverepostfollowjoinblockmute
targetnel corpostringobbligatorioL’id del post, del profilo o del gruppo, a seconda di kind.
activenel corpobooleanfacoltativotrue la imposta, false la toglie.

Richiesta d’esempio

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"

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403429

GET/v2/profiles/{handle}/followers

Chi segue un profilo, i più recenti prima.

  • Diritto read
  • sfogliabile
  • con ETag
  • dalla v2.19

Parametri

NomeTipoSignificato
handlenel percorsostringobbligatorioIl nome breve di un profilo, con maiuscole o minuscole indifferentemente.
limitnell’indirizzointegerfacoltativoVoci per pagina: 20 di default, al massimo 50.
cursornell’indirizzostringfacoltativoIl next della risposta precedente. Senza, dall’inizio.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di ProfileBrief, come `items` e `next`.

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

Stati possibili: 200304400401404429

GET/v2/profiles/{handle}/following

Chi è seguito da un profilo, i più recenti prima.

  • Diritto read
  • sfogliabile
  • con ETag
  • dalla v2.19

Parametri

NomeTipoSignificato
handlenel percorsostringobbligatorioIl nome breve di un profilo, con maiuscole o minuscole indifferentemente.
limitnell’indirizzointegerfacoltativoVoci per pagina: 20 di default, al massimo 50.
cursornell’indirizzostringfacoltativoIl next della risposta precedente. Senza, dall’inizio.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di ProfileBrief, come `items` e `next`.

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

Stati possibili: 200304400401404429

GET/v2/me/relations

Chi hai bloccato, silenziato o bloccato solo per i messaggi, i più recenti prima.

  • Diritto read
  • sfogliabile
  • con ETag
  • dalla v2.19

Solo i tuoi elenchi. Attivare e togliere passa da POST /relations.

Parametri

NomeTipoSignificato
kindnell’indirizzostringobbligatorioblock bloccati, mute silenziati, dm_block bloccati solo per i messaggi.blockmutedm_block
limitnell’indirizzointegerfacoltativoVoci per pagina: 20 di default, al massimo 50.
cursornell’indirizzostringfacoltativoIl next della risposta precedente. Senza, dall’inizio.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di ProfileBrief, come `items` e `next`.

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

Stati possibili: 200304400401429

Raccolte

Ordina i post salvati in raccolte tue. Un post può stare in più raccolte; tolto da una raccolta resta salvato.

GET/v2/me/collections

Le tue raccolte con il numero dei loro post.

  • Diritto read
  • con ETag
  • dalla v2.19

Richiesta d’esempio

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

Risposta

Risponde con una pagina di Collection, come `items` e `next`.

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

Stati possibili: 200304401429

POST/v2/me/collections

Creare una raccolta. Risponde con il suo id.

  • Diritto write
  • dalla v2.19

Quante raccolte puoi creare dipende dall’abbonamento.

Parametri

NomeTipoSignificato
namenel corpostringobbligatorioIl nome, al massimo 40 caratteri. Unico per account, senza distinguere maiuscole e minuscole.

Richiesta d’esempio

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

Risposta

Risponde con un Made.

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

Stati possibili: 200400401403429

PUT/v2/me/collections/{id}

Rinominare una raccolta.

  • Diritto write
  • dalla v2.19

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id della raccolta.
namenel corpostringobbligatorioIl nome, al massimo 40 caratteri. Unico per account, senza distinguere maiuscole e minuscole.

Richiesta d’esempio

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"

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

DELETE/v2/me/collections/{id}

Eliminare una raccolta.

  • Diritto write
  • dalla v2.19

I post al suo interno restano salvati.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id della raccolta.

Richiesta d’esempio

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

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

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

I post di una raccolta, come nella scheda dei salvati.

  • Diritto read
  • sfogliabile
  • dalla v2.19

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id della raccolta.
limitnell’indirizzointegerfacoltativoVoci per pagina: 20 di default, al massimo 50.
cursornell’indirizzostringfacoltativoIl next della risposta precedente. Senza, dall’inizio.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di Post, come `items` e `next`.

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

Stati possibili: 200400401404429

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

Mettere un post in una raccolta o toglierlo.

  • Diritto write
  • dalla v2.19

Metterci un post lo salva anche. Solo post visibili.

Parametri

NomeTipoSignificato
idnel percorsostringobbligatorioL’id della raccolta.
postnel corpostringobbligatorioL’id del post.
insidenel corpobooleanfacoltativotrue mette dentro il post (predefinito), false lo toglie.

Richiesta d’esempio

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"

Risposta

Risponde con un Ok.

Esempio
{
  "ok": true
}

Stati possibili: 200400401403404429

Regali

Leggere il contingente di un partner e regalare da lì, mettere regali sotto i post e tenerli d’occhio. Ritirarli resta riservato alle persone, nell’app.

GET/v2/partner/quota

Quanto resta da regalare nel tuo contingente.

  • Diritto read
  • con ETag
  • dalla v2.12

Solo per partner con un contingente; gli altri ricevono 403.

Richiesta d’esempio

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

Risposta

Risponde con un Quota.

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

Stati possibili: 200304401429

GET/v2/partner/gifts

Cosa hai regalato dal contingente, a chi e quando, dal più recente.

  • Diritto read
  • sfogliabile
  • con ETag
  • dalla v2.12

Solo per partner con un contingente; gli altri ricevono 403.

Parametri

NomeTipoSignificato
limitnell’indirizzointegerfacoltativoVoci per pagina: 20 di default, al massimo 50.
cursornell’indirizzostringfacoltativoIl next della risposta precedente. Senza, dall’inizio.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di QuotaGift, come `items` e `next`.

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

Stati possibili: 200304401429

POST/v2/partner/gifts

Regalare mesi di abbonamento o scintille dal tuo contingente a un membro.

  • Diritto gifts
  • dalla v2.12

Solo per partner con un contingente; gli altri ricevono 403.

Come nell’app, il membro vede da chi arriva il regalo. Al massimo 60 regali all’ora.

Parametri

NomeTipoSignificato
handlenel corpostringobbligatorioIl @nome del membro a cui regali, con o senza @.
itemnel corpostringobbligatorioplan per mesi di abbonamento, sparks per scintille, shop per un look dalla tua scorta (dalla 2.13).plansparksshop
quantitynel corpointegerfacoltativoQuanto: fino a 12 mesi o 35 scintille per regalo.
itemIdnel corpostringfacoltativoPer shop: l’ID del look, come lo indica looks nel contingente. Un esemplare per regalo; quantity allora non vale.

Richiesta d’esempio

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"

Risposta

Risponde con un Quota.

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

Stati possibili: 200400401403429

GET/v2/gift-drops

I tuoi regali sotto i post: quanti posti sono ancora liberi e come sono stati pagati.

  • Diritto read
  • sfogliabile
  • con ETag
  • dalla v2.12

Parametri

NomeTipoSignificato
limitnell’indirizzointegerfacoltativoVoci per pagina: 20 di default, al massimo 50.
cursornell’indirizzostringfacoltativoIl next della risposta precedente. Senza, dall’inizio.

Richiesta d’esempio

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

Risposta

Risponde con una pagina di OwnGiftDrop, come `items` e `next`.

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

Stati possibili: 200304401429

POST/v2/gift-drops

Pubblicare un post con regali da ritirare.

  • Diritto gifts
  • dalla v2.12

Gratis per il proprietario e per i membri del team con questo permesso, altrimenti dal tuo contingente. Ciò che andrebbe pagato viene rifiutato con 422: pagare si può solo nell’app.

Ritirare si può solo nell’app, così nessun programma si prende tutti i posti. Quanti ne restano liberi è indicato in giftDrop del post.

Parametri

NomeTipoSignificato
textnel corpostringfacoltativoIl testo del post, della risposta o del messaggio.
communitynel corpostringfacoltativoL’id del gruppo nel cui canale feed va il post; deve essere attivo e ti serve il permesso. Senza, il post sta fuori da ogni gruppo.
itemnel corpostringobbligatorioplan per mesi di abbonamento, sparks per scintille.plansparks
quantitynel corpointegerobbligatorioCosa contiene ogni posto: fino a 12 mesi o 35 scintille.
placesnel corpointegerobbligatorioPer quante persone, fino a 10.000.
audiencenel corpostringfacoltativoChi può ritirare: all tutti, followers solo i tuoi follower, group solo i membri del gruppo (solo insieme a community).allfollowersgroup
newAccountsnel corpobooleanfacoltativotrue lascia ritirare anche gli account con meno di 7 giorni. Senza, restano esclusi.

Richiesta d’esempio

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"

Risposta

Risponde con un DropCreated.

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

Stati possibili: 200400401403429

Oggetti

Tutti gli oggetti, campo per campo. [] significa elenco.

Service

La risposta della radice: chi risponde e che cosa può fare questa chiave.

CampoTipoSignificato
namestringSempre tellmelo.
versionstringLa versione dell’API, per esempio 2.1.
scopestringChe cosa può fare questa chiave: read o read write.
rateLimitRateLimitLa quota di questa chiave.
docsstringDove si trova questa documentazione, come percorso su questa istanza.
specstringDove si trova la descrizione leggibile dalle macchine.
Esempio
{
  "name": "tellmelo",
  "version": "2.20",
  "scope": "read write",
  "rateLimit": {
    "limit": 120,
    "remaining": 117
  },
  "docs": "/developers/docs",
  "spec": "/api/v2/openapi.json"
}

RateLimit

La quota di questa chiave nel minuto in corso.

CampoTipoSignificato
limitintegerRichieste al minuto.
remainingintegerQuante ne restano in questo minuto.
Esempio
{
  "limit": 120,
  "remaining": 117
}

Post

Un post, con la stessa forma ovunque.

CampoTipoSignificato
idstringL’identificativo del post.
textstringo nullIl testo come è stato scritto (null per un post che è solo un sondaggio o solo immagini).
kindstringChe cosa è il post.
  • post — Un post con testo, immagini o una citazione.
  • poll — Un post con un sondaggio.
authorProfileBriefChi l’ha scritto.
communityCommunityBriefo nullIl gruppo in cui è stato scritto (null fuori da ogni gruppo).
mediaMedia[]Le sue immagini, in ordine; vuota se non ce ne sono.
pollPollo nullIl sondaggio (null se non c’è).
quotesstringo nullL’identificativo del post che questo cita.
continuesstringo nullL’identificativo del post che questo prosegue, come aggiunta.
countsCountsRisposte, mi piace e ricondivisioni.
pinnedbooleanSe è fissato in cima al profilo di chi l’ha scritto.
giftDropGiftDropo nullI regali da ritirare sotto il post (null se non ce ne sono).
createdAtintegerQuando è stato scritto.
Esempio
{
  "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

Una risposta sotto un post: un post con due campi in più.

Ogni campo di Post e, in più:

CampoTipoSignificato
postIdstringIl post a cui è appesa tutta la conversazione.
parentIdstringo nullLa risposta a cui risponde questa (null se risponde direttamente al post).
Esempio
{
  "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

Il tuo voto su una risposta e il suo punteggio.

CampoTipoSignificato
votestringIl tuo voto.
  • up — In su.
  • down — In giù.
  • none — Nessun voto.
scoreintegerVoti in su meno voti in giù, anche sotto zero.
Esempio
{
  "vote": "up",
  "score": 12
}

PlannedReply

Una tua risposta programmata per più tardi.

CampoTipoSignificato
idstringL’id della risposta programmata.
parentIdstringo nullLa risposta a cui risponderà (null se risponde direttamente al post).
textstringIl testo.
publishAtintegerQuando esce.
statestringIl suo stato.
  • waiting — Aspetta la sua ora.
  • failed — Non è stato possibile inviarla, per esempio perché il post non c’è più.
Esempio
{
  "id": "3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9",
  "parentId": null,
  "text": "Count me in for Saturday!",
  "publishAt": 1758710400000,
  "state": "waiting"
}

ReplySettings

Le impostazioni di risposta di un tuo post.

CampoTipoSignificato
audiencestringChi può rispondere.
  • all — Tutti.
  • following — Account che segui.
  • mentioned — Chi è menzionato nel post.
  • nobody — Nessuno tranne te.
approvalbooleanSe le risposte attendono la tua approvazione.
slowstringLa modalità lenta.
  • auto — Si attiva da sola quando arrivano molte risposte.
  • on — Sempre attiva.
  • off — Disattivata.
Esempio
{
  "audience": "following",
  "approval": false,
  "slow": "auto"
}

Counts

Quante risposte, mi piace e ricondivisioni ha un post.

CampoTipoSignificato
repliesintegerLe risposte, tutti i livelli insieme.
likesintegerI mi piace.
repostsintegerLe ricondivisioni.
Esempio
{
  "replies": 4,
  "likes": 31,
  "reposts": 2
}

Media

Un’immagine di un post o di un messaggio.

CampoTipoSignificato
urlstringL’indirizzo dell’immagine o del video, relativo a questa istanza. Caricalo con la chiave nell’intestazione.
kindstringimage, video o gif (dalla 2.10). Video e GIF sono file MP4.
  • image — Un’immagine (WebP o JPEG).
  • video — Un video in MP4, con audio.
  • gif — Una GIF, come MP4 muto in loop.
posterstringo nullPer video e GIF l’indirizzo dell’immagine di anteprima, altrimenti null (dalla 2.10).
aistringo nullSe l’immagine è stata creata con l’IA, come indicato da chi l’ha caricata o segnato dal team dopo una segnalazione; null senza indicazione (dalla 2.11).
  • with — Creato con l’IA.
  • without — Creato senza IA.
Esempio
{
  "url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
  "kind": "image",
  "poster": null,
  "ai": "without"
}

Poll

Il sondaggio di un post.

CampoTipoSignificato
optionsPollOption[]Le risposte, in ordine. option nel voto conta da 0.
totalintegerTutti i voti insieme, sempre presente.
multiplebooleanSe si può scegliere più di una risposta.
endsAtintegero nullQuando finisce il sondaggio (null se non ha fine).
runningbooleanSe si può ancora votare.
resultsVisiblebooleanSe i voti per risposta vengono mostrati (vedi votes).
myVotesinteger[]Le risposte che hai scelto, contate da 0.
Esempio
{
  "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

Una risposta di un sondaggio.

CampoTipoSignificato
textstringLa risposta.
votesintegero nullI suoi voti (null finché il risultato è trattenuto).
Esempio
{
  "text": "Lavender",
  "votes": 12
}

ProfileBrief

Un profilo come compare dentro altri oggetti: come autore, in una ricerca.

CampoTipoSignificato
idstringL’identificativo dell’account: ciò che si aspettano /relations e /conversations/{with}.
handlestringIl nome breve, senza @, scritto come l’ha scelto il membro.
namestringIl nome visualizzato. Può contenere emoji, anche :name:.
verifiedbooleanSe l’account è verificato.
accountKindstringChe tipo di account è.
  • person — Una persona.
  • business — Un’azienda.
  • association — Un’associazione.
  • automated — Un account automatico, per esempio un bot.
  • bot — Un bot dei gruppi, gestito da un programma con una propria chiave (da 2.18).
Esempio
{
  "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
  "handle": "mara",
  "name": "Mara 🌻",
  "verified": true,
  "accountKind": "person"
}

Profile

Un profilo da solo, con la sua descrizione e i suoi follower.

Ogni campo di ProfileBrief e, in più:

CampoTipoSignificato
aboutstringo nullLa descrizione (null se non c’è).
websitestringo nullIl sito web del profilo (null se non c’è). Dalla 2.3.
websiteVerifiedbooleanSe il sito rimanda a questo profilo con rel=me, controllato ogni settimana. Dalla 2.3.
followersintegerQuanti account lo seguono.
createdAtintegero nullQuando è stato creato l’account (null finché il membro nasconde la data di iscrizione; dalla 2.9).
Esempio
{
  "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

Il gruppo in cui è stato scritto un post.

CampoTipoSignificato
idstringL’identificativo del gruppo.
namestringo nullIl suo nome.
Esempio
{
  "id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
  "name": "Urban Gardening"
}

Community

Un gruppo di questa istanza.

CampoTipoSignificato
idstringL’identificativo del gruppo.
namestringIl suo nome.
handlestringo nullIl nome breve per menzionare il gruppo con @#. Dalla 2.15.
descriptionstringo nullLa descrizione (null se non c’è).
tagsstring[]Gli argomenti di cui si occupa.
membersintegerQuanti membri ha.
joinPolicystringCome si entra.
  • open — Chiunque può unirsi.
  • application — Per unirsi serve una candidatura che il gruppo accetta.
  • invite — Solo su invito.
visibilitystringChi lo vede. internal e hidden solo i membri (dalla 2.15).
  • open — Visibile a tutti.
  • internal — Non si trova nell’elenco, ma tramite il suo indirizzo.
  • hidden — Solo per i suoi membri.
feedChannelbooleanSe il suo canale feed è attivo. Dalla 2.15.
sparksintegerQuante scintille ha il gruppo adesso (dalla 2.19).
perksstring[]I vantaggi pagati dalle sue scintille (dalla 2.19).
membershipMembershipo nullCiò che il tuo account è e può fare nel gruppo; null se non ne è membro. Dalla 2.15.
Esempio
{
  "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

Ciò che il tuo account è e può fare nel gruppo.

CampoTipoSignificato
leaderstringo nullSe hai fondato il gruppo o lo co-guidi; null altrimenti.
  • founder — Fondato.
  • manager — Co-guida.
rolesstring[]Gli id dei tuoi ruoli, il più alto prima.
permissionsstring[]Ciò che puoi fare nel gruppo.
mutedUntilintegero nullFino a quando un silenziamento ti zittisce qui; null se nessuno.
Esempio
{
  "leader": null,
  "roles": [
    "4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8"
  ],
  "permissions": [
    "attach",
    "invite",
    "send",
    "view"
  ],
  "mutedUntil": null
}

Person

Un membro, in breve.

CampoTipoSignificato
idstringL’id dell’account.
handlestringIl nome utente, senza @.
namestringIl nome visualizzato.
botbooleanSe l’account è un bot (da 2.18).
Esempio
{
  "id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
  "handle": "jon",
  "name": "Jon",
  "bot": false
}

Channel

Un canale di un gruppo.

CampoTipoSignificato
idstringL’id.
kindstringChe tipo di canale.
  • feed — Il canale feed, i cui post sono anche nel feed pubblico.
  • chat — Una chat.
  • voice — Un canale vocale; si parla solo nell’app.
  • hub — L’hub del gruppo: la sua pagina con ciò che è. Sempre presente, senza messaggi.
namestringo nullIl nome senza #; null per il nome che l’app dà in ogni lingua.
topicstringL’argomento; vuoto se non c’è.
categoryChannelCategoryo nullLa categoria; null senza.
unreadintegerQuanti messaggi degli altri non hai ancora letto, fino a 100.
permissionsstring[]Ciò che puoi fare in questo canale.
symbolChannelSymbolIl suo simbolo; la forma è già quella del gruppo se ne fissa una.
Esempio
{
  "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

La categoria sotto cui sta un canale.

CampoTipoSignificato
idstringL’id.
namestringIl nome.
symbolChannelSymbolIl suo simbolo.
Esempio
{
  "id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
  "name": "Garden",
  "symbol": {
    "emoji": null,
    "icon": null,
    "image": null,
    "color": null,
    "shape": null
  }
}

ChannelSymbol

Il simbolo di un canale o categoria: al massimo uno tra emoji, simbolo e immagine, altrimenti il segno del suo tipo.

CampoTipoSignificato
emojistringo nullL’emoji; null se assente.
iconstringo nullIl nome del simbolo della raccolta dell’app; null se assente.
imagestringo nullL’indirizzo dell’immagine propria; null se assente.
colorstringo nullIl colore del riquadro; null per quello del suo tipo.
shapestringo nullLa forma del riquadro; null per un cerchio.
Esempio
{
  "emoji": "🌻",
  "icon": null,
  "image": null,
  "color": "amber",
  "shape": "circle"
}

ChannelMessage

Un messaggio in un canale chat.

CampoTipoSignificato
idstringL’id.
textstringo nullIl testo (null per un messaggio solo di immagini o voce).
authorPersonChi l’ha scritto.
mediaMedia[]Le sue immagini e i messaggi vocali; vuoto se non ce ne sono.
replyTostringo nullL’id del messaggio a cui risponde; null se a nessuno.
roleColorstringo nullIl colore del ruolo più alto dell’autore che ne ha uno; null se nessuno.
threadOfstringo nullIl messaggio nel cui thread risponde questo; null nella chat.
threadCountintegerQuante risposte ha il thread di questo messaggio.
cardobjecto nullLa scheda di un bot: title, text, color e fields; altrimenti null.
buttonsobject[]I pulsanti di un bot: ciascuno id, label e style.
createdAtintegerQuando è stato scritto.
Esempio
{
  "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

Un ruolo di un gruppo.

CampoTipoSignificato
idstringL’id.
namestringo nullIl nome; null per @everyone.
everyonebooleanSe è @everyone, il ruolo di tutti i membri.
colorstringo nullIl colore: indigo, violet, rose, amber, green o teal; null senza.
permissionsstring[]I suoi permessi.
membersintegerQuanti lo hanno; per @everyone tutti i membri.
editablebooleanSe il tuo account può cambiarlo.
selfablebooleanSe i membri prendono e lasciano il ruolo da soli.
Esempio
{
  "id": "4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8",
  "name": "Gardeners",
  "everyone": false,
  "color": "green",
  "permissions": [
    "attach",
    "invite",
    "send",
    "view"
  ],
  "members": 24,
  "editable": true,
  "selfable": false
}

GroupMember

Un membro di un gruppo con i suoi ruoli.

Ogni campo di Person e, in più:

CampoTipoSignificato
leaderstringo nullSe il membro ha fondato il gruppo o lo co-guida; null altrimenti.
  • founder — Fondato.
  • manager — Co-guida.
rolesstring[]Gli id dei suoi ruoli, il più alto prima.
mutedUntilintegero nullFino a quando il membro è silenziato, se il tuo account può silenziare; altrimenti null.
Esempio
{
  "id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
  "handle": "jon",
  "name": "Jon",
  "bot": false,
  "leader": null,
  "roles": [
    "4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8"
  ],
  "mutedUntil": null
}

ChannelOverride

Ciò che un ruolo può fare diversamente in un canale rispetto al gruppo.

CampoTipoSignificato
rolestringL’id del ruolo.
allowstring[]Ciò che può fare in più qui.
denystring[]Ciò che non può fare qui.
Esempio
{
  "role": "4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8",
  "allow": [
    "send"
  ],
  "deny": []
}

Bell

La campanella di un gruppo.

CampoTipoSignificato
levelstringQuali notifiche arrivano.
  • all — Ogni nuovo post nel canale feed, più @everyone.
  • important — I post della guida nel canale feed, più @everyone.
  • off — Niente, a meno che non ti menzionino con @nome.
Esempio
{
  "level": "important"
}

InviteLink

Un link di invito di un gruppo.

CampoTipoSignificato
codestringIl codice.
urlstringL’indirizzo da condividere.
createdByPersono nullChi l’ha creato; null se l’account è eliminato.
createdAtintegerQuando è stato creato.
expiresAtintegero nullFino a quando vale; null senza scadenza.
usesintegerQuante volte è stato usato.
maxUsesintegero nullQuante volte si può usare; null senza limite.
Esempio
{
  "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

Dove porta un link di invito.

CampoTipoSignificato
communityInviteGroupIl gruppo.
memberbooleanSe il tuo account è già membro.
Esempio
{
  "community": {
    "id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
    "name": "Urban Gardening",
    "members": 312,
    "rules": [
      "Be kind.",
      "No advertising."
    ]
  },
  "member": false
}

InviteGroup

Il gruppo dietro un link di invito.

CampoTipoSignificato
idstringL’id.
namestringIl nome.
membersintegerQuanti membri ha.
rulesstring[]Le sue regole, accettate entrando; vuoto se non ce ne sono.
Esempio
{
  "id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
  "name": "Urban Gardening",
  "members": 312,
  "rules": [
    "Be kind.",
    "No advertising."
  ]
}

Joined

L’ingresso con un link di invito.

CampoTipoSignificato
communitystringL’id del gruppo.
Esempio
{
  "community": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60"
}

LogEntry

Una voce del registro della guida.

CampoTipoSignificato
idstringL’id.
actionstringCosa è successo.
  • post_removed — Un post.
  • member_removed — Un membro rimosso, prima della 2.16 (fuori per 90 giorni).
  • message_removed — Un messaggio in un canale chat.
  • member_kicked — Un’espulsione.
  • member_banned — Un ban.
  • member_unbanned — Un ban revocato.
  • member_timed_out — Un silenziamento.
  • timeout_lifted — Un silenziamento revocato.
  • voice_muted — Silenziato in un canale vocale.
  • voice_removed — Disconnesso da un canale vocale.
  • bot_added — Un bot è entrato nel gruppo (da 2.18).
  • bot_removed — Un bot è stato rimosso dal gruppo (da 2.18).
memberPersonChi riguardava.
reasonstringLa motivazione; vuota per i messaggi e quando non ne è stata data una.
bystringo nullIl nome di chi l’ha fatto; null se l’account è eliminato.
createdAtintegerQuando.
Esempio
{
  "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

Un ban da un gruppo.

CampoTipoSignificato
memberPersonChi è bannato.
untilintegero nullFino a quando; null finché non viene revocato.
createdAtintegero nullDa quando; null per i ban precedenti alla 2.16.
bystringo nullIl nome di chi ha bannato; null se sconosciuto.
Esempio
{
  "member": {
    "id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
    "handle": "jon",
    "name": "Jon",
    "bot": false
  },
  "until": 1759228800000,
  "createdAt": 1758624000000,
  "by": "Mara 🌻"
}

Until

Quando finisce un silenziamento o un ban.

CampoTipoSignificato
untilintegero nullIl momento; null per un ban senza fine o un silenziamento revocato.
Esempio
{
  "until": 1758624600000
}

Tag

Un tag e quanti post lo portano.

CampoTipoSignificato
tagstringIl tag, senza #.
postsintegerQuanti post recenti lo portano.
Esempio
{
  "tag": "garden",
  "posts": 58
}

SearchResult

Tre elenchi, eventualmente vuoti.

CampoTipoSignificato
postsPost[]Post trovati, i più recenti per primi.
profilesProfileBrief[]Profili trovati, per nome breve.
tagsTag[]Tag trovati, i più usati per primi.
Esempio
{
  "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

Un emoji di questa istanza.

CampoTipoSignificato
namestringIl nome, come compare tra i due punti.
urlstringL’indirizzo dell’immagine, relativo a questa istanza.
Esempio
{
  "name": "tellmelo",
  "url": "/api/media?id=e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b"
}

Notification

Una notifica. Una riga può raccogliere più eventi dello stesso tipo.

CampoTipoSignificato
idstringL’identificativo della notifica.
kindstringChe cosa è successo.
  • reply — Qualcuno ti ha risposto.
  • like — A qualcuno piace il tuo post.
  • reply_like — Qualcuno vota positivamente la tua risposta.
  • duel — Qualcuno ti sfida a Duello di feed, oppure la tua sfida è stata giocata.
  • reply_pick — L’autore di un post mette in evidenza la tua risposta.
  • repost — Qualcuno ha ricondiviso il tuo post.
  • follow — Qualcuno ti segue.
  • mention — Qualcuno ti ha menzionato.
  • group_mention — Qualcuno ha menzionato un gruppo che guidi; text è il suo nome.
  • channel_mention — Qualcuno ti ha menzionato in un canale chat di uno dei tuoi gruppi, anche con @everyone; il membro è l’actor, la frase nomina canale e gruppo, mai il messaggio.
  • message — Qualcuno ti ha scritto un messaggio.
  • scheduled — Un tuo post programmato è stato pubblicato.
  • video — Un tuo post che aspettava il suo video è uscito o è tornato una bozza.
  • reminder — È arrivato un promemoria su un post salvato.
  • report — Che cosa è successo a una segnalazione che hai inviato.
  • moderation — Una decisione sul tuo account: un avvertimento, una limitazione, un ricorso.
  • team — Nuovo lavoro per il team (solo proprietari, admin e moderatori).
  • reward — Un premio per gli inviti sta per scadere o è scaduto.
  • gift — Un regalo dal team: un abbonamento, oppure scintille per te o per un gruppo che guidi.
  • present — Un regalo di un membro: scintille o tempo di abbonamento; il membro è l’actor.
  • spark — Alcune scintille scadono presto, o a un gruppo che guidi non bastano più le scintille per i suoi vantaggi.
  • loyalty — Sul ritmo di fedeltà: una settimana attiva conta o le manca un giorno, una ricompensa è nuova o sta per sparire.
  • impact — Come sono andati dopo un giorno i tuoi post di dodici ore, in una sola notifica.
  • discovery — Un invito al programma Scoperto, o che un posto lì inizia o finisce.
  • group_post — Un nuovo post in un gruppo la cui campanella suona per questo.
  • group_moderation — La guida di un gruppo ha rimosso un tuo post, o te, dal gruppo.
  • group — Qualcosa che un membro ha fatto con te in un gruppo: invitarti, accoglierti o rifiutarti, renderti co-amministratore, cederti il gruppo o scioglierlo, oppure candidarsi nel tuo gruppo; il membro è l’actor, il nome del gruppo chiude la frase.
  • coauthor — Qualcuno ti ha invitato come coautore di un post.
  • partner — Un promemoria dal programma partner, o la fine del badge partner.
  • news — Un nuovo articolo in una regione che segui.
  • pick — Un tuo contributo è in gara come contributo della settimana o dell’anno, oppure ha vinto.
  • advent — Una nuova casella del calendario dell’Avvento è aperta, una è stata aperta o quella di oggi aspetta ancora.
  • team_message — Un messaggio che il team di tellmelo ha scritto a membri scelti.
  • challenge — È iniziata una nuova sfida della settimana.
  • nudge — Una volta sola: un post a cui nessuno ha ancora risposto, o la sfida in corso.
  • signin — Un computer chiede se stai accedendo lì proprio ora.
textstringo nullSolo per segnalazioni e moderazione: il testo relativo, altrimenti null.
actorActorChi l’ha fatto.
postIdstringo nullIl post di cui si tratta (null se non riguarda alcun post).
readbooleanSe è stata segnata come letta.
moreintegerPer quanti altri eventi vale questa riga, oltre a quello nominato.
createdAtintegerQuando è successo la prima volta.
updatedAtintegerQuando ha raccolto l’ultimo evento. La lista è ordinata così.
Esempio
{
  "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

Chi ha fatto scattare una notifica.

CampoTipoSignificato
handlestringIl nome breve.
namestringIl nome visualizzato.
Esempio
{
  "handle": "jon",
  "name": "Jon"
}

Conversation

Una riga della tua casella.

CampoTipoSignificato
withstringL’identificativo dell’altro account: ciò che si aspetta /conversations/{with}/messages.
handlestringIl suo nome breve.
namestringIl suo nome visualizzato.
excerptstringo nullL’inizio dell’ultimo messaggio (null se non ha testo).
truncatedbooleanSe l’estratto è stato accorciato.
fromMebooleanSe l’ultimo messaggio è tuo.
lastMessageIdstringL’identificativo dell’ultimo messaggio.
unreadintegerQuanti dei suoi messaggi non hai ancora letto.
updatedAtintegerQuando è stato scritto l’ultimo messaggio.
Esempio
{
  "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

Un messaggio in una conversazione.

CampoTipoSignificato
idstringL’identificativo del messaggio.
textstringo nullIl testo (null per un messaggio fatto solo di immagini).
fromstringL’identificativo dell’account che l’ha scritto.
tostringL’identificativo dell’account a cui è stato scritto.
readbooleanSe chi l’ha ricevuto l’ha letto.
mediaMedia[]Le sue immagini; vuota se non ce ne sono.
replyTostringo nullL’id del messaggio a cui questo risponde (null se non risponde a nessuno). Dalla 2.2.
createdAtintegerQuando è stato inviato.
Esempio
{
  "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

Un tuo messaggio programmato per più tardi.

CampoTipoSignificato
idstringL’id del messaggio programmato.
tostringL’id dell’account che lo riceve.
textstringo nullIl testo, null con la crittografia end-to-end.
sendAtintegerQuando viene inviato.
statestringIl suo stato.
  • waiting — Aspetta la sua ora.
  • held — Trattenuto perché l’abbonamento è finito. Puoi inviarlo tu o eliminarlo.
  • failed — Non è stato possibile inviarlo.
Esempio
{
  "id": "3b2a1c0d-9e8f-4a7b-b6c5-d4e3f2a1b0c9",
  "to": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
  "text": "Happy birthday! 🎂",
  "sendAt": 1758710400000,
  "state": "waiting"
}

ScheduledPost

Un tuo post non ancora uscito.

CampoTipoSignificato
idstringL’identificativo del post.
textstringo nullIl testo.
communityIdstringo nullIl gruppo in cui esce (null fuori dai gruppi).
publishAtintegero nullQuando esce (null finché aspetta altro).
deleteAtintegero nullQuando si cancella da solo (null: mai).
waitingForstringCosa sta aspettando.
  • time — La sua ora.
  • review — L’approvazione di un testo scritto per revisione.
  • check — Il controllo della moderazione automatica.
  • payment — Il pagamento dei suoi regali.
createdAtintegerQuando è stato scritto.
Esempio
{
  "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

Una raccolta di post salvati.

CampoTipoSignificato
idstringL’id della raccolta.
namestringIl suo nome.
countintegerQuanti post contiene.
Esempio
{
  "id": "6d5c4b3a-2918-4e7f-a1b2-c3d4e5f60718",
  "name": "Recipes",
  "count": 12
}

Event

Un prossimo evento di un profilo.

CampoTipoSignificato
idstringL’id dell’evento.
titlestringIl titolo.
startsAtintegerInizio.
endsAtintegero nullFine, null senza fine.
placestringo nullIl luogo.
descriptionstringo nullLa descrizione.
signupsEventSignupso nullLe iscrizioni, null senza iscrizione.
Esempio
{
  "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

Quante persone si sono iscritte.

CampoTipoSignificato
countintegerIl numero di iscrizioni.
goingbooleanSe sei iscritto.
Esempio
{
  "count": 14,
  "going": true
}

EventSignup

Qualcuno che si è iscritto a un tuo evento.

CampoTipoSignificato
idstringL’id dell’account.
handlestringIl nome utente.
namestringIl nome visualizzato.
atintegerQuando si è iscritto.
Esempio
{
  "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
  "handle": "mara",
  "name": "Mara 🌻",
  "at": 1758624000000
}

Picture

Un’immagine caricata.

CampoTipoSignificato
idstringL’id dell’immagine.
urlstringDove si può vedere.
Esempio
{
  "id": "8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
  "url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9"
}

EmojiPicture

L’immagine caricata di un’emoji.

CampoTipoSignificato
idstringL’id dell’immagine.
urlstringDove si può vedere.
animatedbooleanSe si muove.
Esempio
{
  "id": "8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
  "url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
  "animated": false
}

OwnEmoji

Una delle tue emoji.

CampoTipoSignificato
namestringIl suo nome.
urlstringLa sua immagine.
animatedbooleanSe si muove.
restingbooleanA riposo perché l’abbonamento ora consente meno emoji: resta, ma non si può usare.
Esempio
{
  "name": "sunflower",
  "url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
  "animated": false,
  "resting": false
}

GroupEmoji

Un’emoji di un gruppo.

CampoTipoSignificato
namestringIl suo nome.
urlstringLa sua immagine.
animatedbooleanSe si muove.
Esempio
{
  "name": "seedling",
  "url": "/api/media?id=8c7b6a59-4837-4261-9f5e-d4c3b2a1f0e9",
  "animated": false
}

BotEvent

Un evento in un gruppo del bot.

CampoTipoSignificato
idstringIl suo numero, crescente; con esso si prosegue (since, Last-Event-ID).
typestringCosa è successo.
  • message.created — È stato scritto un messaggio.
  • message.deleted — È stato eliminato un messaggio.
  • member.joined — Qualcuno è entrato.
  • member.left — Qualcuno è uscito o è stato rimosso.
  • voice.joined — Qualcuno è entrato in un canale vocale.
  • command — Qualcuno ha usato un comando del bot.
  • interaction — Qualcuno ha premuto un pulsante in un messaggio del bot.
communitystringIl gruppo.
channelstringo nullIl canale; null per tutto il gruppo.
createdAtintegerQuando è successo.
dataobjectCiò che lo accompagna, secondo il tipo: message, member (con reason), command o interaction.
Esempio
{
  "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

Un comando di un bot.

CampoTipoSignificato
namestringIl suo nome, senza «/».
descriptionstringCosa fa.
Esempio
{
  "name": "dice",
  "description": "Rolls a die"
}

VoiceSeat

Un posto in un canale vocale.

CampoTipoSignificato
urlstringL’indirizzo del server multimediale (LiveKit).
tokenstringIl token per questo canale, valido alcuni minuti.
iceServersobject[]I server STUN e TURN per la connessione.
speakbooleanSe il bot può inviare audio lì.
videobooleanSe il bot può inviare video lì.
Esempio
{
  "url": "wss://voice.example.org",
  "token": "eyJhbGciOiJIUzI1NiJ9…",
  "iceServers": [
    {
      "urls": [
        "stun:turn.example.org:3478"
      ]
    }
  ],
  "speak": true,
  "video": false
}

Webhook

Uno dei tuoi webhook.

CampoTipoSignificato
idstringL’id del webhook.
urlstringIl suo indirizzo.
kindsstring[]Di cosa viene avvisato.
activebooleanSe riceve le consegne. Dopo molti errori di fila viene disattivato.
lastStatusintegero nullLo stato HTTP dell’ultima consegna.
lastAtintegero nullQuando è avvenuta l’ultima consegna.
failuresintegerErrori di fila.
Esempio
{
  "id": "1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b",
  "url": "https://example.org/tellmelo-hook",
  "kinds": [
    "reply",
    "mention"
  ],
  "active": true,
  "lastStatus": 200,
  "lastAt": 1758624000000,
  "failures": 0
}

WebhookCreated

Un nuovo webhook con il suo segreto.

CampoTipoSignificato
idstringL’id del webhook.
secretstringIl segreto per le firme, solo questa volta.
Esempio
{
  "id": "1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b",
  "secret": "whsec_3f9a…"
}

GroupBot

Un bot di un gruppo.

CampoTipoSignificato
idstringL’id dell’account del bot.
handlestringIl suo identificativo.
namestringIl suo nome.
descriptionstringCosa fa, nelle parole del proprietario.
permissionsstring[]Cosa consente il suo ruolo nel gruppo.
Esempio
{
  "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
  "handle": "gardenbot",
  "name": "Garden bot",
  "description": "Reminds the group of watering days.",
  "permissions": [
    "send",
    "view"
  ]
}

VoiceRoom

Un canale vocale con le persone presenti.

CampoTipoSignificato
channelstringL’id del canale.
peopleVoicePerson[]Chi c’è adesso.
Esempio
{
  "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

Qualcuno in un canale vocale.

CampoTipoSignificato
idstringL’id dell’account.
handlestringL’identificativo.
namestringIl nome visualizzato.
mutedbooleanSe il microfono è spento.
deafbooleanSe non sente niente (per scelta propria).
camerabooleanSe la videocamera è accesa.
screenbooleanSe condivide lo schermo.
Esempio
{
  "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
  "handle": "mara",
  "name": "Mara 🌻",
  "muted": true,
  "deaf": false,
  "camera": false,
  "screen": false
}

GiftDrop

Regali sotto un post, mai con i nomi di chi li ha ritirati.

CampoTipoSignificato
itemstringCosa contiene un posto.
  • plan — Mesi di abbonamento (Sostenitore).
  • sparks — Scintille.
quantityintegerQuanto contiene ogni posto: mesi o scintille.
placesintegerQuanti posti ci sono in tutto.
leftintegerQuanti sono ancora liberi.
audiencestringChi può ritirare.
  • all — Tutti.
  • followers — Solo i follower di chi regala.
  • group — Solo i membri del gruppo del post.
newAccountsbooleanSe possono ritirare anche gli account con meno di 7 giorni.
statusstringA che punto è.
  • awaiting_payment — In attesa di pagamento; il post non è ancora uscito.
  • open — Ci sono ancora posti da ritirare.
  • closed — Finito: tutto ritirato, pagamento rimborsato o post eliminato.
claimedbooleanSe hai già un posto tu (sempre false sui percorsi pubblici).
Esempio
{
  "item": "plan",
  "quantity": 3,
  "places": 10,
  "left": 4,
  "audience": "followers",
  "newAccounts": false,
  "status": "open",
  "claimed": true
}

OwnGiftDrop

I tuoi regali sotto un post, con il post e il pagamento.

Ogni campo di GiftDrop e, in più:

CampoTipoSignificato
postIdstringIl post sotto cui si trovano.
fundingstringCome sono pagati.
  • free — Gratis.
  • quota — Dal contingente.
  • payment — Pagato.
createdAtintegerQuando sono stati creati.
Esempio
{
  "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

Cosa c’è in un contingente.

CampoTipoSignificato
monthsintegerMesi di abbonamento ancora da regalare.
sparksintegerScintille ancora da regalare.
looksQuotaLook[]Look della scorta ancora da regalare (dalla 2.13).
Esempio
{
  "months": 120,
  "sparks": 500,
  "looks": [
    {
      "id": "frame-gold",
      "name": "Goldring",
      "kind": "frame",
      "quantity": 25
    }
  ]
}

QuotaLook

Un look nella scorta di un partner, con gli esemplari rimasti (dalla 2.13).

CampoTipoSignificato
idstringL’ID del look; quando lo regali, passalo come itemId.
namestringIl nome del look.
kindstringIl tipo di look.
  • frame — Cornice del profilo.
  • background — Effetto copertina.
  • card — Card del profilo.
quantityintegerQuanti esemplari restano.
Esempio
{
  "id": "frame-gold",
  "name": "Goldring",
  "kind": "frame",
  "quantity": 25
}

QuotaGift

Un regalo dal contingente.

CampoTipoSignificato
itemstringCosa è stato regalato.
  • plan — Mesi di abbonamento (Sostenitore).
  • sparks — Scintille.
  • shop — Un look dalla scorta (dalla 2.13).
quantityintegerQuanto.
itemIdstringo nullIl look regalato quando item è shop; altrimenti null.
recipientActorA chi.
createdAtintegerQuando.
Esempio
{
  "item": "plan",
  "quantity": 3,
  "itemId": null,
  "recipient": {
    "handle": "jon",
    "name": "Jon"
  },
  "createdAt": 1758627600000
}

MediaItem

Una GIF o un video dalla libreria media (dalla 2.14).

CampoTipoSignificato
idstringL’ID; per media quando pubblichi.
kindstringGIF o video.
  • gif — Una GIF, come MP4 muto in loop.
  • video — Un video in MP4, con audio.
namestringIl nome.
keywordsstringLe parole chiave, in minuscolo.
widthintegerLarghezza in pixel.
heightintegerAltezza in pixel.
secondsintegerDurata in secondi; per le GIF 0.
urlstringIl file MP4, relativo a questa istanza. Caricalo con la chiave nell’header.
posterstringL’immagine di anteprima, anche questa con la chiave.
uploaderActorChi l’ha caricato.
minebooleanSe è tuo.
sharedbooleanSe è condiviso con tutti su tellmelo.
anywherebooleanSe può apparire anche su altri siti web.
embedEmbedo nullGli indirizzi per altri siti web; null finché lì non è consentito.
Esempio
{
  "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

Gli indirizzi per altri siti web. Funzionano senza chiave.

CampoTipoSignificato
pagestringIl player per un <iframe>.
filestringIl file MP4 per un tuo player.
posterstringL’immagine di anteprima.
codestringIl codice pronto da incorporare.
Esempio
{
  "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

Un caricamento avviato.

CampoTipoSignificato
uploadstringL’ID di questo caricamento.
pieceintegerLa dimensione massima di un pezzo, in byte.
Esempio
{
  "upload": "e7c1a2b3-4d5e-4f60-8a9b-0c1d2e3f4a5b",
  "piece": 4194304
}

UploadPiece

Un pezzo arrivato.

CampoTipoSignificato
receivedintegerQuanti byte sono arrivati.
itemMediaItemo nullDopo l’ultimo pezzo la nuova GIF o il nuovo video, altrimenti null.
Esempio
{
  "received": 4194304,
  "item": null
}

Created

La risposta di una scrittura che ha creato qualcosa.

CampoTipoSignificato
idstringL’identificativo di ciò che è stato creato.
scheduledForintegero nullQuando compare, se la pubblicazione è stata programmata (altrimenti null).
deleteAtintegero nullQuando si elimina da solo, se è stato impostato (altrimenti null).
Esempio
{
  "id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
  "scheduledFor": null,
  "deleteAt": null
}

DropCreated

La risposta quando è stato creato un post con regali.

CampoTipoSignificato
idstringL’identificativo del nuovo post.
fundingstringCome sono pagati i regali.
  • free — Gratis.
  • quota — Dal contingente.
Esempio
{
  "id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
  "funding": "quota"
}

Made

Ciò che è stato appena creato o cambiato.

CampoTipoSignificato
idstringL’id; per un link di invito il suo codice.
Esempio
{
  "id": "0d9c8b7a-6f5e-4d3c-2b1a-0f9e8d7c6b5a"
}

Ok

La risposta di una scrittura che non ha niente da restituire.

CampoTipoSignificato
okbooleanSempre true.
Esempio
{
  "ok": true
}

La descrizione leggibile da una macchina

La tabella dietro questa pagina è disponibile come OpenAPI in https://api.tellmelo.com/v2/openapi.json.

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

GIF e video su altri siti web

Ciò che un membro condivide e consente anche su altri siti web può essere mostrato da qualsiasi sito: la ricerca con anywhere=true lo trova e il suo embed contiene gli indirizzi. Se il membro lo ritira, lì sparisce entro pochi minuti.

Caricamento a pezzi

Prima avvia, poi invia il file a pezzi. Dividi un file più grande in pezzi di piece byte, con offset nella posizione di ciascuno. Dopo l’ultimo pezzo arriva la GIF o il video 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": { … } } }

Incorporare

Il player mostra la GIF in loop o il video con i controlli, sotto il nome e chi l’ha condiviso. Inserisci nella pagina il codice di embed.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>

Forum e programmi che conoscono oEmbed recuperano il codice da soli, se gli dai l’indirizzo del player:

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

La chiave va sul tuo server, mai nel codice di una pagina web. Cerca e carica tramite il tuo server; gli indirizzi in embed non hanno bisogno di chiave.

Selettore GIF per il tuo sito

Con una chiave del sito (Area sviluppatori → Selettore GIF per il tuo sito) il tuo sito ottiene una ricerca pronta: due righe nella pagina, e un clic sul pulsante la apre. La chiave è pubblica e funziona solo sugli indirizzi che inserisci per essa. Il selettore mostra solo ciò che i membri hanno consentito su altri siti web.

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

Quando si sceglie qualcosa, il pulsante emette tellmelo:pick con l’elemento: code per incorporarlo, file, poster, name e author. Con data-target="#field" inserisce code direttamente in un campo di testo, con data-kind="video" cerca video. Se incorpori il file da te, mostra il nome della persona che l’ha condiviso.

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

Accedi con tellmelo

Altri siti fanno accedere i membri con il loro account tellmelo tramite OpenID Connect (codice di autorizzazione con PKCE). Il sito riceve solo il nome utente, l’indirizzo email confermato e un identificativo proprio per membro (sub).

Richiedi un’app in «Area sviluppatori → Accedi con tellmelo». Il team controlla ogni app; dopo vedi lì l’ID client e, per le app con server, crei il segreto client, mostrato una sola volta.

Tutto ciò che serve a una libreria è nel documento di discovery:

https://tellmelo.com/.well-known/openid-configuration
  1. Manda il membro a /oauth/authorize con response_type=code, client_id, redirect_uri (esattamente come registrato), scope=openid profile email, state, nonce e code_challenge con code_challenge_method=S256.
  2. Scambia il codice entro un minuto su /oauth/token: grant_type=authorization_code, code, redirect_uri e code_verifier; le app con server inviano anche il segreto, con autenticazione Basic o nel modulo.
  3. Il token ID (RS256, chiavi su /oauth/jwks) contiene sub, con profile anche preferred_username, con email anche email ed email_verified. Il token di accesso vale 10 minuti e legge solo /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
}

Non ci sono token di aggiornamento: tellmelo fa accedere e non dà accesso duraturo. Se un membro rimuove il sito o il team sospende l’app, /oauth/userinfo risponde subito 401. prompt=none controlla senza pagina, prompt=consent chiede di nuovo.

Che cosa ci aspettiamo

Valgono le stesse regole di sempre: niente molestie, niente spam, niente contenuti altrui senza diritti. Rispondi tu di ciò che pubblica la tua chiave.

Mostra sul tuo sito web GIF e video di altri solo se hanno embed, tramite questi indirizzi e con il nome di chi li ha condivisi. Se qualcosa non è più disponibile, smetti di mostrarlo. Non copiare i file in una tua raccolta.

Note legaliPrivacyCondizioni d’usoStatoApp