tellmelotellmelo.
Informações legaisPrivacidadeTermos de usoDenunciar direitos autoraisContatoAPIApps

API

Esta é uma tradução. A versão em alemão é a que vale. Onde este texto divergir dela, vale o texto em alemão. Você pode trocar o idioma no fim da página.

Primeiros passos

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

Fundamentos

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

Endpoints

  • Endpoints
  • A entrada
    • GET /
  • Posts
    • GET /posts
    • GET /posts/{id}
    • POST /posts
    • DELETE /posts/{id}
  • Respostas
    • GET /posts/{id}/replies
    • POST /posts/{id}/replies
  • Enquetes
    • POST /posts/{id}/vote
  • Perfis
    • GET /profiles/{handle}
    • GET /profiles/{handle}/posts
  • Grupos
    • GET /communities
    • GET /communities/{id}
    • GET /communities/{id}/posts
  • Descobrir
    • GET /tags
    • GET /search
    • GET /emojis
  • Sua conta
    • GET /me
    • GET /feed
  • Notificações
    • GET /notifications
    • POST /notifications/read
  • Mensagens
    • GET /conversations
    • GET /conversations/{with}/messages
    • POST /conversations/{with}/messages
    • POST /conversations/{with}/read
  • Relações
    • POST /relations

Objetos

  • Objetos
  • Service
  • RateLimit
  • Post
  • Reply
  • Counts
  • Media
  • Poll
  • PollOption
  • ProfileBrief
  • Profile
  • CommunityBrief
  • Community
  • Tag
  • SearchResult
  • Emoji
  • Notification
  • Actor
  • Conversation
  • Message
  • Created
  • Ok

Mais

  • A descrição legível por máquina
  • O que esperamos
Conteúdo

Primeiros passos

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

Fundamentos

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

Endpoints

  • Endpoints
  • A entrada
    • GET /
  • Posts
    • GET /posts
    • GET /posts/{id}
    • POST /posts
    • DELETE /posts/{id}
  • Respostas
    • GET /posts/{id}/replies
    • POST /posts/{id}/replies
  • Enquetes
    • POST /posts/{id}/vote
  • Perfis
    • GET /profiles/{handle}
    • GET /profiles/{handle}/posts
  • Grupos
    • GET /communities
    • GET /communities/{id}
    • GET /communities/{id}/posts
  • Descobrir
    • GET /tags
    • GET /search
    • GET /emojis
  • Sua conta
    • GET /me
    • GET /feed
  • Notificações
    • GET /notifications
    • POST /notifications/read
  • Mensagens
    • GET /conversations
    • GET /conversations/{with}/messages
    • POST /conversations/{with}/messages
    • POST /conversations/{with}/read
  • Relações
    • POST /relations

Objetos

  • Objetos
  • Service
  • RateLimit
  • Post
  • Reply
  • Counts
  • Media
  • Poll
  • PollOption
  • ProfileBrief
  • Profile
  • CommunityBrief
  • Community
  • Tag
  • SearchResult
  • Emoji
  • Notification
  • Actor
  • Conversation
  • Message
  • Created
  • Ok

Mais

  • A descrição legível por máquina
  • O que esperamos

Visão geral

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

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

Início rápido

  1. Crie uma chave em “Configurações → App e dados → API” e copie-a. Ela só aparece uma vez.
  2. Chame a raiz com ela. A resposta mostra a versão, os direitos da chave e as solicitações que restam neste minuto.
  3. Todo caminho funciona igual: chave no cabeçalho, JSON de volta, items e next para listas.
curl -H "Authorization: Bearer tm_key_…" https://tellmelo.com/api/v2
{
  "name": "tellmelo",
  "version": "2.10",
  "scope": "read write",
  "rateLimit": {
    "limit": 120,
    "remaining": 117
  },
  "docs": "/legal/api",
  "spec": "/api/v2/openapi.json"
}

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

Experimente

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

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

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

Sua chave

Uma chave por conta. Ela começa com tm_key_ e só aparece uma vez. Perdeu? Crie uma nova; a antiga para de funcionar.

Você a cria em “Configurações → App e dados → API”. Ela vai no cabeçalho da solicitação:

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

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

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

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

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

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

O que uma chave pode fazer

Uma chave tem um de dois direitos, e cada caminho abaixo diz qual precisa:

  • read: ler. Posts públicos, perfis, grupos e tags, além do seu feed, notificações e mensagens.
  • write: agir. Publicar, responder, votar, enviar mensagens, seguir, entrar, bloquear, marcar notificações como lidas.

O que nenhuma chave pode fazer

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

Solicitações e respostas

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

Páginas

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

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

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

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

Só o que é novo

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

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

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

Limites

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

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

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

Cabeçalhos

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

O que você envia

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

O que volta

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

Quando algo não funciona

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

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

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

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

Versões

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

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

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

Endpoints

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

CaminhoDireitoPara quê
A entrada
GET/api/v2readVersão da API e nome desta instância.
Posts
GET/api/v2/postsreadOs posts públicos, os mais recentes primeiro.
GET/api/v2/posts/{id}readUm único post, pelo seu id.
POST/api/v2/postswritePublicar um post.
DELETE/api/v2/posts/{id}writeRemover um dos seus próprios posts.
Respostas
GET/api/v2/posts/{id}/repliesreadAs respostas a um post, sem contas bloqueadas.
POST/api/v2/posts/{id}/replieswriteResponder a um post.
Enquetes
POST/api/v2/posts/{id}/votewriteParticipar de uma enquete.
Perfis
GET/api/v2/profiles/{handle}readUm perfil, pelo seu nome curto.
GET/api/v2/profiles/{handle}/postsreadOs posts públicos de um perfil, os mais recentes primeiro.
Grupos
GET/api/v2/communitiesreadOs grupos abertos desta instância.
GET/api/v2/communities/{id}readUm único grupo, pelo seu id.
GET/api/v2/communities/{id}/postsreadOs posts públicos de um grupo, os mais recentes primeiro.
Descobrir
GET/api/v2/tagsreadAs tags em alta no momento.
GET/api/v2/searchreadUma busca em posts, nomes, nomes curtos e tags.
GET/api/v2/emojisreadOs emojis próprios da instância, com o endereço das imagens.
Sua conta
GET/api/v2/mereadO seu próprio perfil, com o id que os outros caminhos esperam.
GET/api/v2/feedreadO seu próprio feed, do jeito que o aplicativo o monta.
Notificações
GET/api/v2/notificationsreadSuas notificações, as mais recentes primeiro.
POST/api/v2/notifications/readwriteMarcar suas notificações como lidas.
Mensagens
GET/api/v2/conversationsreadSua caixa de entrada: uma linha por conversa, a mais recente primeiro.
GET/api/v2/conversations/{with}/messagesreadAs mensagens de uma conversa, as mais recentes primeiro.
POST/api/v2/conversations/{with}/messageswriteEnviar uma mensagem numa conversa.
POST/api/v2/conversations/{with}/readwriteMarcar todas as mensagens de uma conversa como lidas.
Relações
POST/api/v2/relationswriteCurtir, salvar, repostar, seguir, entrar, bloquear, silenciar, conforme kind.

A entrada

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

GET/api/v2

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

  • Direito read
  • com ETag
  • desde v2.0

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

Exemplo de solicitação

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

Resposta

Responde com um Service.

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

Status possíveis: 200304401429

Posts

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

GET/api/v2/posts

Os posts públicos, os mais recentes primeiro.

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

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

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

Parâmetros

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

Exemplo de solicitação

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

Resposta

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

Exemplo
{
  "items": [
    {
      "id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
      "text": "The bees are back in the garden 🐝 #garden",
      "kind": "poll",
      "author": {
        "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
        "handle": "mara",
        "name": "Mara 🌻",
        "verified": true,
        "accountKind": "person"
      },
      "community": {
        "id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
        "name": "Urban Gardening"
      },
      "media": [
        {
          "url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
          "kind": "image",
          "poster": null
        }
      ],
      "poll": {
        "options": [
          {
            "text": "Lavender",
            "votes": 12
          },
          {
            "text": "Sunflowers",
            "votes": 7
          },
          {
            "text": "Clover",
            "votes": 3
          }
        ],
        "total": 22,
        "multiple": false,
        "endsAt": 1758710400000,
        "running": true,
        "resultsVisible": true,
        "myVotes": [
          0
        ]
      },
      "quotes": null,
      "continues": null,
      "counts": {
        "replies": 4,
        "likes": 31,
        "reposts": 2
      },
      "pinned": false,
      "createdAt": 1758624000000
    }
  ],
  "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}

Status possíveis: 200304401429

GET/api/v2/posts/{id}

Um único post, pelo seu id.

  • Direito read
  • com ETag
  • desde v2.0

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

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

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um post.

Exemplo de solicitação

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

Resposta

Responde com um Post.

Exemplo
{
  "id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
  "text": "The bees are back in the garden 🐝 #garden",
  "kind": "poll",
  "author": {
    "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
    "handle": "mara",
    "name": "Mara 🌻",
    "verified": true,
    "accountKind": "person"
  },
  "community": {
    "id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
    "name": "Urban Gardening"
  },
  "media": [
    {
      "url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
      "kind": "image",
      "poster": null
    }
  ],
  "poll": {
    "options": [
      {
        "text": "Lavender",
        "votes": 12
      },
      {
        "text": "Sunflowers",
        "votes": 7
      },
      {
        "text": "Clover",
        "votes": 3
      }
    ],
    "total": 22,
    "multiple": false,
    "endsAt": 1758710400000,
    "running": true,
    "resultsVisible": true,
    "myVotes": [
      0
    ]
  },
  "quotes": null,
  "continues": null,
  "counts": {
    "replies": 4,
    "likes": 31,
    "reposts": 2
  },
  "pinned": false,
  "createdAt": 1758624000000
}

Status possíveis: 200304400401404429

POST/api/v2/posts

Publicar um post.

  • Direito write
  • desde v2.0

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

Ainda não é possível anexar imagens pela API, só no aplicativo.

Parâmetros

NomeTipoSignificado
textno corpostringopcionalO texto do post, da resposta ou da mensagem.
communityno corpostringopcionalO id do grupo onde o post entra. Sem ele, fora de qualquer grupo.
quotesno corpostringopcionalO id do post que este cita.
pollno corpostring[]opcionalAs opções de resposta como lista de textos.

Exemplo de solicitação

curl -X POST \
  -H "Authorization: Bearer tm_key_…" \
  -H "Content-Type: application/json" \
  -d '{"text":"The bees are back in the garden 🐝 #garden"}' \
  "https://tellmelo.com/api/v2/posts"

Resposta

Responde com um Created.

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

Status possíveis: 200400401403429

DELETE/api/v2/posts/{id}

Remover um dos seus próprios posts.

  • Direito write
  • desde v2.0

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um post.

Exemplo de solicitação

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

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

Respostas

Respostas sob um post, como lista com parentId.

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

As respostas a um post, sem contas bloqueadas.

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

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

Parâmetros

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

Exemplo de solicitação

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

Resposta

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

Exemplo
{
  "items": [
    {
      "id": "9e4b1c7d-2a3f-4d5e-8b6c-0f1e2d3c4b5a",
      "text": "Same here, the lavender is full of them.",
      "kind": "post",
      "author": {
        "id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
        "handle": "jon",
        "name": "Jon",
        "verified": false,
        "accountKind": "person"
      },
      "community": null,
      "media": [],
      "poll": null,
      "quotes": null,
      "continues": null,
      "counts": {
        "replies": 0,
        "likes": 3,
        "reposts": 0
      },
      "pinned": false,
      "createdAt": 1758624600000,
      "postId": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
      "parentId": null
    }
  ],
  "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}

Status possíveis: 200304400401404429

POST/api/v2/posts/{id}/replies

Responder a um post.

  • Direito write
  • desde v2.0

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

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um post.
textno corpostringobrigatórioO texto do post, da resposta ou da mensagem.
parentIdno corpostringopcionalO id da resposta a que esta responde. Sem ele, direto ao post.

Exemplo de solicitação

curl -X POST \
  -H "Authorization: Bearer tm_key_…" \
  -H "Content-Type: application/json" \
  -d '{"text":"Same here, the lavender is full of them."}' \
  "https://tellmelo.com/api/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/replies"

Resposta

Responde com um Created.

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

Status possíveis: 200400401403404429

Enquetes

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

POST/api/v2/posts/{id}/vote

Participar de uma enquete.

  • Direito write
  • desde v2.0

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

Parâmetros

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

Exemplo de solicitação

curl -X POST \
  -H "Authorization: Bearer tm_key_…" \
  -H "Content-Type: application/json" \
  -d '{"option":0}' \
  "https://tellmelo.com/api/v2/posts/5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1/vote"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

Perfis

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

GET/api/v2/profiles/{handle}

Um perfil, pelo seu nome curto.

  • Direito read
  • com ETag
  • desde v2.0

Parâmetros

NomeTipoSignificado
handleno caminhostringobrigatórioO nome curto de um perfil.

Exemplo de solicitação

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

Resposta

Responde com um Profile.

Exemplo
{
  "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
  "handle": "mara",
  "name": "Mara 🌻",
  "verified": true,
  "accountKind": "person",
  "about": "Beekeeper, allotment, too many seeds. :tellmelo:",
  "website": "https://mara-imkerei.example/",
  "websiteVerified": true,
  "followers": 148,
  "createdAt": 1750848000000
}

Status possíveis: 200304400401404429

GET/api/v2/profiles/{handle}/posts

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

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

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

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

Parâmetros

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

Exemplo de solicitação

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

Resposta

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

Exemplo
{
  "items": [
    {
      "id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
      "text": "The bees are back in the garden 🐝 #garden",
      "kind": "poll",
      "author": {
        "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
        "handle": "mara",
        "name": "Mara 🌻",
        "verified": true,
        "accountKind": "person"
      },
      "community": {
        "id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
        "name": "Urban Gardening"
      },
      "media": [
        {
          "url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
          "kind": "image",
          "poster": null
        }
      ],
      "poll": {
        "options": [
          {
            "text": "Lavender",
            "votes": 12
          },
          {
            "text": "Sunflowers",
            "votes": 7
          },
          {
            "text": "Clover",
            "votes": 3
          }
        ],
        "total": 22,
        "multiple": false,
        "endsAt": 1758710400000,
        "running": true,
        "resultsVisible": true,
        "myVotes": [
          0
        ]
      },
      "quotes": null,
      "continues": null,
      "counts": {
        "replies": 4,
        "likes": 31,
        "reposts": 2
      },
      "pinned": false,
      "createdAt": 1758624000000
    }
  ],
  "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}

Status possíveis: 200304400401404429

Grupos

Os grupos abertos e seus posts.

GET/api/v2/communities

Os grupos abertos desta instância.

  • Direito read
  • com ETag
  • desde v2.0

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

Parâmetros

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

Exemplo de solicitação

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

Resposta

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

Exemplo
{
  "items": [
    {
      "id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
      "name": "Urban Gardening",
      "description": "Balconies, allotments, rooftops: whatever grows.",
      "tags": [
        "garden",
        "bees"
      ],
      "members": 312,
      "joinPolicy": "open",
      "visibility": "open"
    }
  ],
  "next": null
}

Status possíveis: 200304401429

GET/api/v2/communities/{id}

Um único grupo, pelo seu id.

  • Direito read
  • com ETag
  • desde v2.0

Parâmetros

NomeTipoSignificado
idno caminhostringobrigatórioO id de um grupo.

Exemplo de solicitação

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

Resposta

Responde com um Community.

Exemplo
{
  "id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
  "name": "Urban Gardening",
  "description": "Balconies, allotments, rooftops: whatever grows.",
  "tags": [
    "garden",
    "bees"
  ],
  "members": 312,
  "joinPolicy": "open",
  "visibility": "open"
}

Status possíveis: 200304400401404429

GET/api/v2/communities/{id}/posts

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

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

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

Parâmetros

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

Exemplo de solicitação

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

Resposta

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

Exemplo
{
  "items": [
    {
      "id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
      "text": "The bees are back in the garden 🐝 #garden",
      "kind": "poll",
      "author": {
        "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
        "handle": "mara",
        "name": "Mara 🌻",
        "verified": true,
        "accountKind": "person"
      },
      "community": {
        "id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
        "name": "Urban Gardening"
      },
      "media": [
        {
          "url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
          "kind": "image",
          "poster": null
        }
      ],
      "poll": {
        "options": [
          {
            "text": "Lavender",
            "votes": 12
          },
          {
            "text": "Sunflowers",
            "votes": 7
          },
          {
            "text": "Clover",
            "votes": 3
          }
        ],
        "total": 22,
        "multiple": false,
        "endsAt": 1758710400000,
        "running": true,
        "resultsVisible": true,
        "myVotes": [
          0
        ]
      },
      "quotes": null,
      "continues": null,
      "counts": {
        "replies": 4,
        "likes": 31,
        "reposts": 2
      },
      "pinned": false,
      "createdAt": 1758624000000
    }
  ],
  "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}

Status possíveis: 200304400401404429

Descobrir

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

GET/api/v2/tags

As tags em alta no momento.

  • Direito read
  • com ETag
  • desde v2.0

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

Parâmetros

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

Exemplo de solicitação

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

Resposta

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

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

Status possíveis: 200304401429

GET/api/v2/search

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

  • Direito read
  • com ETag
  • desde v2.0

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

Parâmetros

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

Exemplo de solicitação

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

Resposta

Responde com um SearchResult.

Exemplo
{
  "posts": [
    {
      "id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
      "text": "The bees are back in the garden 🐝 #garden",
      "kind": "poll",
      "author": {
        "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
        "handle": "mara",
        "name": "Mara 🌻",
        "verified": true,
        "accountKind": "person"
      },
      "community": {
        "id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
        "name": "Urban Gardening"
      },
      "media": [
        {
          "url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
          "kind": "image",
          "poster": null
        }
      ],
      "poll": {
        "options": [
          {
            "text": "Lavender",
            "votes": 12
          },
          {
            "text": "Sunflowers",
            "votes": 7
          },
          {
            "text": "Clover",
            "votes": 3
          }
        ],
        "total": 22,
        "multiple": false,
        "endsAt": 1758710400000,
        "running": true,
        "resultsVisible": true,
        "myVotes": [
          0
        ]
      },
      "quotes": null,
      "continues": null,
      "counts": {
        "replies": 4,
        "likes": 31,
        "reposts": 2
      },
      "pinned": false,
      "createdAt": 1758624000000
    }
  ],
  "profiles": [
    {
      "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
      "handle": "mara",
      "name": "Mara 🌻",
      "verified": true,
      "accountKind": "person"
    }
  ],
  "tags": [
    {
      "tag": "garden",
      "posts": 58
    }
  ]
}

Status possíveis: 200304400401429

GET/api/v2/emojis

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

  • Direito read
  • com ETag
  • desde v2.1

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

Exemplo de solicitação

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

Resposta

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

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

Status possíveis: 200304401429

Sua conta

Seu perfil e seu feed.

GET/api/v2/me

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

  • Direito read
  • com ETag
  • desde v2.0

Exemplo de solicitação

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

Resposta

Responde com um Profile.

Exemplo
{
  "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
  "handle": "mara",
  "name": "Mara 🌻",
  "verified": true,
  "accountKind": "person",
  "about": "Beekeeper, allotment, too many seeds. :tellmelo:",
  "website": "https://mara-imkerei.example/",
  "websiteVerified": true,
  "followers": 148,
  "createdAt": 1750848000000
}

Status possíveis: 200304401429

GET/api/v2/feed

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

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

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

Parâmetros

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

Exemplo de solicitação

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

Resposta

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

Exemplo
{
  "items": [
    {
      "id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
      "text": "The bees are back in the garden 🐝 #garden",
      "kind": "poll",
      "author": {
        "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
        "handle": "mara",
        "name": "Mara 🌻",
        "verified": true,
        "accountKind": "person"
      },
      "community": {
        "id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
        "name": "Urban Gardening"
      },
      "media": [
        {
          "url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
          "kind": "image",
          "poster": null
        }
      ],
      "poll": {
        "options": [
          {
            "text": "Lavender",
            "votes": 12
          },
          {
            "text": "Sunflowers",
            "votes": 7
          },
          {
            "text": "Clover",
            "votes": 3
          }
        ],
        "total": 22,
        "multiple": false,
        "endsAt": 1758710400000,
        "running": true,
        "resultsVisible": true,
        "myVotes": [
          0
        ]
      },
      "quotes": null,
      "continues": null,
      "counts": {
        "replies": 4,
        "likes": 31,
        "reposts": 2
      },
      "pinned": false,
      "createdAt": 1758624000000
    }
  ],
  "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}

Status possíveis: 200400401429

Notificações

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

GET/api/v2/notifications

Suas notificações, as mais recentes primeiro.

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

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

Parâmetros

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

Exemplo de solicitação

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

Resposta

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

Exemplo
{
  "items": [
    {
      "id": "3f2e1d0c-9b8a-4765-8432-10fedcba9876",
      "kind": "like",
      "text": null,
      "actor": {
        "handle": "jon",
        "name": "Jon"
      },
      "postId": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
      "read": false,
      "more": 2,
      "createdAt": 1758624300000,
      "updatedAt": 1758624900000
    }
  ],
  "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}

Status possíveis: 200304401429

POST/api/v2/notifications/read

Marcar suas notificações como lidas.

  • Direito write
  • desde v2.0

Exemplo de solicitação

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

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200401403429

Mensagens

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

GET/api/v2/conversations

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

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

Parâmetros

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

Exemplo de solicitação

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

Resposta

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

Exemplo
{
  "items": [
    {
      "with": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
      "handle": "jon",
      "name": "Jon",
      "excerpt": "See you on Saturday at the market!",
      "truncated": false,
      "fromMe": true,
      "lastMessageId": "7c6b5a49-3827-4165-9f0e-d1c2b3a49586",
      "unread": 0,
      "updatedAt": 1758624060000
    }
  ],
  "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}

Status possíveis: 200304401429

GET/api/v2/conversations/{with}/messages

As mensagens de uma conversa, as mais recentes primeiro.

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

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

Parâmetros

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

Exemplo de solicitação

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

Resposta

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

Exemplo
{
  "items": [
    {
      "id": "7c6b5a49-3827-4165-9f0e-d1c2b3a49586",
      "text": "See you on Saturday at the market!",
      "from": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
      "to": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
      "read": true,
      "media": [],
      "replyTo": null,
      "createdAt": 1758624060000
    }
  ],
  "next": "MTc1ODYyNDAwMDAwMDo1ZjBjMmE5ZS04ZDQx"
}

Status possíveis: 200304400401404429

POST/api/v2/conversations/{with}/messages

Enviar uma mensagem numa conversa.

  • Direito write
  • desde v2.0

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

Ainda não é possível anexar imagens pela API, só no aplicativo.

Parâmetros

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

Exemplo de solicitação

curl -X POST \
  -H "Authorization: Bearer tm_key_…" \
  -H "Content-Type: application/json" \
  -d '{"text":"See you on Saturday at the market!"}' \
  "https://tellmelo.com/api/v2/conversations/a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05/messages"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

POST/api/v2/conversations/{with}/read

Marcar todas as mensagens de uma conversa como lidas.

  • Direito write
  • desde v2.1

Parâmetros

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

Exemplo de solicitação

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

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403404429

Relações

Curtir, salvar, repostar, seguir, entrar, bloquear: um só caminho, definido e removido com active.

POST/api/v2/relations

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

  • Direito write
  • desde v2.0

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

Parâmetros

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

Exemplo de solicitação

curl -X POST \
  -H "Authorization: Bearer tm_key_…" \
  -H "Content-Type: application/json" \
  -d '{"kind":"like","target":"5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1","active":true}' \
  "https://tellmelo.com/api/v2/relations"

Resposta

Responde com um Ok.

Exemplo
{
  "ok": true
}

Status possíveis: 200400401403429

Objetos

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

Service

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

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

RateLimit

A cota desta chave no minuto atual.

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

Post

Um post, com a mesma forma em todo lugar.

CampoTipoSignificado
idstringO id do post.
textstringou nullO texto como foi escrito (null para um post que é só enquete ou só imagens).
kindstringO que o post é.
  • post — Um post com texto, imagens ou uma citação.
  • poll — Um post com enquete.
authorProfileBriefQuem o escreveu.
communityCommunityBriefou nullO grupo em que foi escrito (null fora de qualquer grupo).
mediaMedia[]Suas imagens, em ordem; vazio se não houver.
pollPollou nullA enquete (null se não houver).
quotesstringou nullO id do post que este cita.
continuesstringou nullO id do post que este continua, como acréscimo.
countsCountsRespostas, curtidas e reposts.
pinnedbooleanSe está fixado no topo do perfil do autor.
createdAtintegerQuando foi escrito.
Exemplo
{
  "id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
  "text": "The bees are back in the garden 🐝 #garden",
  "kind": "poll",
  "author": {
    "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
    "handle": "mara",
    "name": "Mara 🌻",
    "verified": true,
    "accountKind": "person"
  },
  "community": {
    "id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
    "name": "Urban Gardening"
  },
  "media": [
    {
      "url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
      "kind": "image",
      "poster": null
    }
  ],
  "poll": {
    "options": [
      {
        "text": "Lavender",
        "votes": 12
      },
      {
        "text": "Sunflowers",
        "votes": 7
      },
      {
        "text": "Clover",
        "votes": 3
      }
    ],
    "total": 22,
    "multiple": false,
    "endsAt": 1758710400000,
    "running": true,
    "resultsVisible": true,
    "myVotes": [
      0
    ]
  },
  "quotes": null,
  "continues": null,
  "counts": {
    "replies": 4,
    "likes": 31,
    "reposts": 2
  },
  "pinned": false,
  "createdAt": 1758624000000
}

Reply

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

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

CampoTipoSignificado
postIdstringO post do qual a conversa inteira depende.
parentIdstringou nullA resposta a que esta responde (null se responde direto ao post).
Exemplo
{
  "id": "9e4b1c7d-2a3f-4d5e-8b6c-0f1e2d3c4b5a",
  "text": "Same here, the lavender is full of them.",
  "kind": "post",
  "author": {
    "id": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
    "handle": "jon",
    "name": "Jon",
    "verified": false,
    "accountKind": "person"
  },
  "community": null,
  "media": [],
  "poll": null,
  "quotes": null,
  "continues": null,
  "counts": {
    "replies": 0,
    "likes": 3,
    "reposts": 0
  },
  "pinned": false,
  "createdAt": 1758624600000,
  "postId": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
  "parentId": null
}

Counts

Quantas respostas, curtidas e reposts um post tem.

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

Media

Uma imagem de um post ou de uma mensagem.

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

Poll

A enquete de um post.

CampoTipoSignificado
optionsPollOption[]As respostas, em ordem. option num voto conta a partir de 0.
totalintegerTodos os votos juntos, sempre presente.
multiplebooleanSe dá para escolher mais de uma resposta.
endsAtintegerou nullQuando a enquete termina (null se roda sem fim).
runningbooleanSe ainda dá para votar.
resultsVisiblebooleanSe os votos por resposta são mostrados (veja votes).
myVotesinteger[]As respostas que você escolheu, contando a partir de 0.
Exemplo
{
  "options": [
    {
      "text": "Lavender",
      "votes": 12
    },
    {
      "text": "Sunflowers",
      "votes": 7
    },
    {
      "text": "Clover",
      "votes": 3
    }
  ],
  "total": 22,
  "multiple": false,
  "endsAt": 1758710400000,
  "running": true,
  "resultsVisible": true,
  "myVotes": [
    0
  ]
}

PollOption

Uma resposta de uma enquete.

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

ProfileBrief

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

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

Profile

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

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

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

CommunityBrief

O grupo em que um post foi escrito.

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

Community

Um grupo desta instância.

CampoTipoSignificado
idstringO id do grupo.
namestringSeu nome.
descriptionstringou nullA descrição (null se não houver).
tagsstring[]Os temas de que trata.
membersintegerQuantos membros tem.
joinPolicystringComo se entra.
  • open — Qualquer pessoa pode entrar.
  • application — Entrar exige uma candidatura que o grupo aceita.
  • invite — Só por convite.
visibilitystringSempre open via chave.
  • open — Visível para todos.
Exemplo
{
  "id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
  "name": "Urban Gardening",
  "description": "Balconies, allotments, rooftops: whatever grows.",
  "tags": [
    "garden",
    "bees"
  ],
  "members": 312,
  "joinPolicy": "open",
  "visibility": "open"
}

Tag

Uma tag e quantos posts a usam.

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

SearchResult

Três listas, possivelmente vazias.

CampoTipoSignificado
postsPost[]Posts que correspondem, os mais recentes primeiro.
profilesProfileBrief[]Perfis que correspondem, pelo nome curto.
tagsTag[]Tags que correspondem, as mais usadas primeiro.
Exemplo
{
  "posts": [
    {
      "id": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
      "text": "The bees are back in the garden 🐝 #garden",
      "kind": "poll",
      "author": {
        "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
        "handle": "mara",
        "name": "Mara 🌻",
        "verified": true,
        "accountKind": "person"
      },
      "community": {
        "id": "c81d4e2a-0f3b-4a6c-9e57-1d2b3c4a5f60",
        "name": "Urban Gardening"
      },
      "media": [
        {
          "url": "/api/media?id=b2d7e9f1-3c4a-4e8b-a1f0-6d5c4b3a2918",
          "kind": "image",
          "poster": null
        }
      ],
      "poll": {
        "options": [
          {
            "text": "Lavender",
            "votes": 12
          },
          {
            "text": "Sunflowers",
            "votes": 7
          },
          {
            "text": "Clover",
            "votes": 3
          }
        ],
        "total": 22,
        "multiple": false,
        "endsAt": 1758710400000,
        "running": true,
        "resultsVisible": true,
        "myVotes": [
          0
        ]
      },
      "quotes": null,
      "continues": null,
      "counts": {
        "replies": 4,
        "likes": 31,
        "reposts": 2
      },
      "pinned": false,
      "createdAt": 1758624000000
    }
  ],
  "profiles": [
    {
      "id": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
      "handle": "mara",
      "name": "Mara 🌻",
      "verified": true,
      "accountKind": "person"
    }
  ],
  "tags": [
    {
      "tag": "garden",
      "posts": 58
    }
  ]
}

Emoji

Um emoji desta instância.

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

Notification

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

CampoTipoSignificado
idstringO id da notificação.
kindstringO que aconteceu.
  • reply — Alguém te respondeu.
  • like — Alguém curtiu seu post.
  • reply_like — Alguém curtiu sua resposta.
  • repost — Alguém repostou seu post.
  • follow — Alguém segue você.
  • mention — Alguém te mencionou.
  • group_mention — Alguém mencionou um grupo que você lidera; text é o nome dele.
  • message — Alguém te escreveu uma mensagem.
  • scheduled — Um post seu agendado foi publicado.
  • reminder — Um lembrete sobre um post salvo está na hora.
  • report — O que aconteceu com uma denúncia que você enviou.
  • moderation — Uma decisão sobre a sua conta: advertência, restrição, recurso.
  • team — Novo trabalho para a equipe (só proprietários, admins e moderação).
  • reward — Uma recompensa por convite está para acabar ou acabou.
  • gift — Um presente da equipe: um plano, ou faíscas para você ou para um grupo que você lidera.
  • present — Um presente de um membro: faíscas ou tempo de plano; o membro é o actor.
  • spark — Faíscas acabam em breve, ou um grupo que você lidera atingiu um nível ou só o mantém por um tempo.
  • loyalty — Sobre o ritmo de fidelidade: uma semana ativa conta ou falta um dia, uma recompensa é nova ou está para sumir.
  • impact — Como foram seus posts de doze horas depois de um dia, em uma notificação.
  • discovery — Um convite para o programa Descoberto, ou que um lugar nele começa ou termina.
  • group_post — Um novo post em um grupo cujo sino toca para isso.
  • group_moderation — A liderança de um grupo removeu um dos seus posts, ou você, do grupo.
textstringou nullSó para denúncias e moderação: o texto relacionado; caso contrário, null.
actorActorQuem fez.
postIdstringou nullO post de que se trata (null se não se trata de nenhum).
readbooleanSe foi marcada como lida.
moreintegerQuantos outros eventos esta linha representa, além do citado.
createdAtintegerQuando aconteceu pela primeira vez.
updatedAtintegerQuando reuniu outro evento pela última vez. A lista é ordenada por isto.
Exemplo
{
  "id": "3f2e1d0c-9b8a-4765-8432-10fedcba9876",
  "kind": "like",
  "text": null,
  "actor": {
    "handle": "jon",
    "name": "Jon"
  },
  "postId": "5f0c2a9e-8d41-4b7a-9c3e-2e61d0f4a7b1",
  "read": false,
  "more": 2,
  "createdAt": 1758624300000,
  "updatedAt": 1758624900000
}

Actor

Quem disparou uma notificação.

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

Conversation

Uma linha da sua caixa de entrada.

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

Message

Uma mensagem numa conversa.

CampoTipoSignificado
idstringO id da mensagem.
textstringou nullO texto (null para uma mensagem que é só imagens).
fromstringO id da conta que a escreveu.
tostringO id da conta para quem foi escrita.
readbooleanSe o destinatário a leu.
mediaMedia[]Suas imagens; vazio se não houver.
replyTostringou nullO id da mensagem a que esta responde (null se não responde a nenhuma). Desde 2.2.
createdAtintegerQuando foi enviada.
Exemplo
{
  "id": "7c6b5a49-3827-4165-9f0e-d1c2b3a49586",
  "text": "See you on Saturday at the market!",
  "from": "a3e1f7c2-54b9-4d0e-8f16-7b2c9d4e1a05",
  "to": "d4c3b2a1-6e5f-4a7b-9c8d-1e2f3a4b5c6d",
  "read": true,
  "media": [],
  "replyTo": null,
  "createdAt": 1758624060000
}

Created

A resposta de uma escrita que criou algo.

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

Ok

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

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

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

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

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

O que esperamos

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

Voltar ao tellmelo