API REST

Conta, pessoas e marca

A pessoa do token, os perfis, as fotos, os logos e a exclusão da conta.

  • GET /me (tracker:read): pessoa (user, com id, name, email, locale e avatar_url), organização, projetos com o perfil em cada um, o token e a versão do tracker (server). Cada empresa de organizations traz slug, public_url (o endereço público da empresa, como https://suaempresa.centraldeajuda.ia.br: a raiz é a central de ajuda, /status a página de status publicada e /suporte/... e /ideias/... o portal e os quadros de ideias; null com o endereço público desligado), app_url (a empresa no tracker, null sem subdomínio por empresa) e brand com square_logo_url e wide_logo_url (públicos, null sem o logo). whoami traz public_url também.
  • Idioma: user.locale (em GET /me e no whoami) é o idioma que a pessoa escolheu em Sua conta: pt-BR, en ou es; null é o automático, pelo idioma do navegador ou do aparelho (sem nenhum dos três, português). PATCH /me (tracker:write) com {"locale": "en"} troca (null volta ao automático) e devolve {"locale": ...}. Vale para as telas, os e-mails e os apps, em todas as empresas da pessoa; não traduz o que já foi escrito em tarefas e conversas. Um app que mostra a interface no idioma do aparelho usa user.locale quando não for null. As frases prontas que a API devolve (o text de GET /notifications e de GET /inbox, também no list_inbox) vêm nesse idioma; no automático, pelo Accept-Language do pedido. No MCP: set_language.
  • GET /me/deletion (tracker:read): o que excluir a conta faria agora: email, can_delete (com blocker, o motivo, quando não pode: o dono da plataforma passa o papel antes) e organizations, cada uma com outcome (deleted: só a pessoa participa e a empresa sai inteira; owner_transferred: ela é a única dona e new_owner vira dono; left: ela só sai). DELETE /me (tracker:write) com {"confirm_email": "<e-mail da conta>"} exclui, sem volta: apaga nome, e-mail, foto, login, tokens, conexões e preferências e a conta aquarela ID (aquarela_id: deleted, ou pending quando o suporte termina lá); o que a pessoa escreveu fica com cada empresa como "Conta excluída". O token para de valer na hora. Não existe no MCP: excluir a conta é só da própria pessoa, no site, no app ou na API.
  • GET /people/{me, id, e-mail ou nome} (tracker:read): o perfil de uma pessoa da empresa, como na tela /people/<id>. person (id, name, email, active, organization_role e organization_role_label, member_since, url, o perfil na tela, e avatar_url), all_projects (true para admin e dono da empresa, que valem em todos os projetos), projects (name, prefix, slug, role, role_label), counts (open_assigned, open_qa, done_last_30_days), open_issues (as mais recentes em aberto com ela como responsável: code, title, status, severity, project, updated_at, url) e activity (até 20 comentários e mudanças, mais recentes primeiro: kind comment ou history, at, issue, text e, quando um valor mudou, from e to). Só entram os projetos e as issues que o token vê; os apontamentos de horas, só para quem vê horas. Quem só acompanha os projetos (parte interessada) vê só quem participa deles, com email null. No MCP: get_person.
  • Foto da pessoa: avatar_url (em GET /me, GET /people/{ref} e author_avatar_url nas mensagens da conversa) é GET /people/{id}/avatar (tracker:read, a imagem, com o token; 404 sem foto), null sem foto. O endereço muda (?v=) a cada troca, então pode ficar em cache pelo endereço: com a foto trocada na tela, o avatar_url novo chega na próxima leitura. PUT /me/avatar (tracker:write) troca a própria foto: multipart/form-data com a imagem no campo avatar, ou JSON {"image_base64": "...", "file_name": "foto.jpg"} (imagem acima de 1,5 MB vai em multipart). PNG, JPG ou WebP até 2 MB; a tela e os apps recortam no quadrado e mandam JPG de até 512 px, e vale fazer o mesmo (a foto aparece em círculo). DELETE /me/avatar tira (ficam as iniciais). A resposta traz id, name e avatar_url. Quem divide uma empresa com a pessoa vê a foto. No MCP: set_avatar.
  • GET /brand (tracker:read): as marcas para os apps: a empresa (organization, com slug, public_url e app_url como em GET /me) e os logos dela (organization.square_logo_url e wide_logo_url), a assinatura "tracker by aquarela" com os arquivos (product; product.by_url é para onde o "by aquarela" leva, o site da Aquarela, numa aba ou no navegador), as regras e placements, onde entra cada uma (place, organization: square, wide ou null; product: icon, signature, signature_large, tab_title, header ou null). O tracker by aquarela nunca some: onde a empresa ocupa o topo, a assinatura vai para o rodapé.
  • PUT /brand/logos/{square|wide} (tracker:write, admin e dono): troca o logo quadrado (ícone, seletor de empresa, menu recolhido) ou o horizontal (topo do menu, login, convites, e-mails, portal). multipart/form-data com a imagem no campo logo, ou JSON {"image_base64": "...", "file_name": "logo.png"} (o corpo JSON vai até 2 MB, então imagem acima de 1,5 MB vai em multipart). PNG, JPG ou WebP até 2 MB; o quadrado com largura e altura parecidas (pelo menos 64 px), o horizontal mais largo que alto. DELETE /brand/logos/{square|wide} tira. A resposta traz a empresa e os dois endereços. No MCP: set_organization_logo.