{"id":1193,"date":"2026-09-04T04:01:23","date_gmt":"2026-09-04T07:01:23","guid":{"rendered":"https:\/\/adrianosantostreina.com.br\/blog\/automacao-agentica-tarefas-repetitivas-dev-ia\/"},"modified":"2026-09-04T04:01:30","modified_gmt":"2026-09-04T07:01:30","slug":"automacao-agentica-tarefas-repetitivas-dev-ia","status":"publish","type":"post","link":"https:\/\/adrianosantostreina.com.br\/blog\/automacao-agentica-tarefas-repetitivas-dev-ia\/","title":{"rendered":"Automa\u00e7\u00e3o Ag\u00eantica no Dia a Dia: Como Transformar Tarefas Repetitivas em Pipelines que Rodam Sozinhas"},"content":{"rendered":"<p>Toda sexta-feira, \u00e0s 17h, algu\u00e9m do seu time abre uma planilha, copia n\u00fameros de um dashboard, cola em outro sistema, gera um relat\u00f3rio em PDF, sobe no Slack e marca tr\u00eas pessoas. Leva quarenta minutos. Ningu\u00e9m questiona porque &#8220;sempre foi assim&#8221;. Multiplique isso pelas dezenas de rotinas equivalentes espalhadas em qualquer time de engenharia: atualizar changelogs, sincronizar tickets entre Jira e GitHub, gerar relat\u00f3rios de cobertura, rodar migra\u00e7\u00f5es em ambientes de homologa\u00e7\u00e3o, revisar PRs triviais, renomear vari\u00e1veis em massa depois de um rename de API. Cada uma isolada parece pequena. Somadas, s\u00e3o horas por semana de trabalho que n\u00e3o exige julgamento humano, apenas execu\u00e7\u00e3o disciplinada de passos conhecidos.<\/p>\n<p>O erro comum \u00e9 tratar isso como problema de &#8220;for\u00e7a de vontade&#8221; \u2014 &#8220;vou automatizar quando sobrar tempo&#8221; \u2014 quando na verdade \u00e9 um problema de arquitetura. Scripts isolados, cron jobs fr\u00e1geis e macros de IDE resolvem parcialmente, mas quebram silenciosamente e ningu\u00e9m percebe at\u00e9 o dia em que o relat\u00f3rio sai errado. A pergunta que interessa a um time s\u00eanior n\u00e3o \u00e9 &#8220;d\u00e1 para automatizar com IA?&#8221; \u2014 d\u00e1, quase sempre. A pergunta \u00e9: <strong>que classe de automa\u00e7\u00e3o vale o investimento em orquestra\u00e7\u00e3o ag\u00eantica, e qual delas \u00e9 s\u00f3 um script com esteroides que virou complexidade desnecess\u00e1ria?<\/strong><\/p>\n<h2>O salto de &#8220;gerar um script&#8221; para &#8220;orquestrar um processo&#8221;<\/h2>\n<p>At\u00e9 pouco tempo, &#8220;automatizar com IA&#8221; significava pedir para um modelo gerar um script Python ou um shell script pontual. Voc\u00ea colava o resultado, ajustava, rodava manualmente. Isso \u00e9 gera\u00e7\u00e3o de c\u00f3digo assistida, n\u00e3o automa\u00e7\u00e3o. A diferen\u00e7a conceitual importante \u2014 e que a <a href=\"https:\/\/www.youtube.com\/watch?v=NmNAlZa8xgo\" target=\"_blank\" rel=\"noopener\">discuss\u00e3o recente sobre automa\u00e7\u00e3o ag\u00eantica<\/a> captura bem \u2014 \u00e9 que hoje a automa\u00e7\u00e3o relevante n\u00e3o \u00e9 mais &#8220;escrever o script certo&#8221;, \u00e9 &#8220;orquestrar um agente que decide quais passos executar, em que ordem, com base no estado real do sistema&#8221;.<\/p>\n<p>Isso muda completamente o desenho da solu\u00e7\u00e3o. Um script tradicional tem um fluxo determin\u00edstico: passo 1, passo 2, passo 3, falha se algo sair do esperado. Um agente orquestrado tem um objetivo e um conjunto de ferramentas, e decide dinamicamente como chegar l\u00e1 \u2014 o que introduz flexibilidade, mas tamb\u00e9m uma classe nova de riscos que precisa ser projetada, n\u00e3o improvisada.<\/p>\n<blockquote><p><strong>\ud83d\udca1 Dica do Mestre:<\/strong> Segundo a <a href=\"https:\/\/www.ibm.com\/br-pt\/think\/topics\/ai-in-software-development\" target=\"_blank\" rel=\"noopener\">IBM, em sua an\u00e1lise sobre IA no desenvolvimento de software<\/a>, ferramentas de IA generativa automatizam tarefas repetitivas de codifica\u00e7\u00e3o \u2014 mas o valor real aparece quando essa automa\u00e7\u00e3o \u00e9 integrada ao pipeline, n\u00e3o quando fica restrita a um prompt isolado no chat.<\/p><\/blockquote>\n<h2>Taxonomia pr\u00e1tica: nem tudo que se repete deve virar agente<\/h2>\n<p>Antes de qualquer linha de c\u00f3digo, classifique a tarefa. Isso evita o erro mais caro em automa\u00e7\u00e3o: construir uma torre de orquestra\u00e7\u00e3o para um problema que um script de dez linhas resolveria, ou o oposto \u2014 tentar resolver com regex e cron algo que exige julgamento contextual.<\/p>\n<h3>Categoria 1 \u2014 Determin\u00edstica e sem ambiguidade<\/h3>\n<p>Renomear um s\u00edmbolo em 200 arquivos, formatar c\u00f3digo, atualizar vers\u00f5es de depend\u00eancia seguindo semver. Aqui, IA generativa \u00e9 overkill e introduz risco. Use ferramentas determin\u00edsticas: AST-based codemods, <code>sed<\/code>\/<code>ripgrep<\/code>, ou tarefas de build. IA entra apenas para <em>gerar<\/em> o script determin\u00edstico uma vez, n\u00e3o para execut\u00e1-lo a cada rodada.<\/p>\n<h3>Categoria 2 \u2014 Repetitiva, mas com decis\u00e3o contextual leve<\/h3>\n<p>Classificar um ticket de bug reportado por texto livre, sugerir labels em um PR, resumir um changelog a partir de commits. Aqui um agente com acesso a ferramentas espec\u00edficas (n\u00e3o acesso irrestrito) \u00e9 o ponto ideal.<\/p>\n<h3>Categoria 3 \u2014 Processo multi-etapas com estado externo<\/h3>\n<p>Sincronizar dados entre dois sistemas, gerar e publicar relat\u00f3rios, disparar pipelines condicionalmente. Aqui entra orquestra\u00e7\u00e3o ag\u00eantica de verdade, com controle de estado, idempot\u00eancia e observabilidade \u2014 o assunto central deste artigo.<\/p>\n<h2>Anatomia de uma automa\u00e7\u00e3o ag\u00eantica confi\u00e1vel<\/h2>\n<p>Uma automa\u00e7\u00e3o ag\u00eantica madura tem cinco componentes que raramente aparecem juntos em tutoriais introdut\u00f3rios, mas que definem se ela sobrevive em produ\u00e7\u00e3o:<\/p>\n<h3>1. Gatilho expl\u00edcito e audit\u00e1vel<\/h3>\n<p>Nada de &#8220;rode manualmente quando lembrar&#8221;. O gatilho precisa ser um evento rastre\u00e1vel: webhook de PR aberto, cron determin\u00edstico, mensagem em fila. Isso garante que voc\u00ea sempre saiba <em>por que<\/em> a automa\u00e7\u00e3o disparou, essencial para debugging seis meses depois.<\/p>\n<pre><code class=\"language-typescript\">\/\/ gatilho.ts \u2014 recebe webhook do GitHub e enfileira o job\nimport { Queue } from \"bullmq\";\n\nconst automationQueue = new Queue(\"pr-triage\");\n\nexport async function handleWebhook(payload: GithubPullRequestEvent) {\n  if (payload.action !== \"opened\") return;\n\n  await automationQueue.add(\"triage-pr\", {\n    prNumber: payload.pull_request.number,\n    repo: payload.repository.full_name,\n    triggeredAt: new Date().toISOString(),\n    \/\/ idempotency key evita reprocessamento em retries do webhook\n    idempotencyKey: `pr-${payload.repository.full_name}-${payload.pull_request.number}`,\n  });\n}\n<\/code><\/pre>\n<h3>2. Ferramentas restritas, nunca acesso irrestrito<\/h3>\n<p>O erro de arquitetura mais comum em automa\u00e7\u00f5es ag\u00eanticas \u00e9 dar ao modelo um shell completo &#8220;para ele resolver sozinho&#8221;. Isso parece produtivo em demonstra\u00e7\u00e3o e \u00e9 uma bomba-rel\u00f3gio em produ\u00e7\u00e3o. O padr\u00e3o correto \u00e9 expor um conjunto fechado de fun\u00e7\u00f5es (tool calling), cada uma com valida\u00e7\u00e3o de entrada e efeito colateral limitado.<\/p>\n<pre><code class=\"language-python\">from pydantic import BaseModel\nfrom typing import Literal\n\nclass AddLabelInput(BaseModel):\n    pr_number: int\n    label: Literal[\"bug\", \"feature\", \"docs\", \"needs-review\", \"breaking-change\"]\n\ndef add_label(input: AddLabelInput) -&gt; dict:\n    \"\"\"Adiciona um label pr\u00e9-aprovado a um PR. N\u00e3o aceita labels arbitr\u00e1rios.\"\"\"\n    allowed = {\"bug\", \"feature\", \"docs\", \"needs-review\", \"breaking-change\"}\n    if input.label not in allowed:\n        raise ValueError(f\"Label n\u00e3o permitido: {input.label}\")\n    return github_client.add_label(input.pr_number, input.label)\n\n# O agente recebe SOMENTE esta fun\u00e7\u00e3o como ferramenta,\n# n\u00e3o um \"execute_shell_command\" gen\u00e9rico.\ntools = [add_label]\n<\/code><\/pre>\n<p>A diferen\u00e7a entre &#8220;o agente pode chamar <code>add_label<\/code> com um enum fechado&#8221; e &#8220;o agente pode rodar comandos shell arbitr\u00e1rios&#8221; \u00e9 a diferen\u00e7a entre uma automa\u00e7\u00e3o audit\u00e1vel e um incidente de seguran\u00e7a esperando para acontecer. Isso conversa diretamente com o padr\u00e3o descrito em artigos anteriores sobre MCP: exponha capacidades, n\u00e3o acesso irrestrito ao sistema.<\/p>\n<h3>3. Idempot\u00eancia como requisito n\u00e3o negoci\u00e1vel<\/h3>\n<p>Automa\u00e7\u00f5es ag\u00eanticas v\u00e3o falhar e ser reexecutadas \u2014 por retry de fila, por timeout, por reprocessamento manual. Se sua automa\u00e7\u00e3o de &#8220;gerar relat\u00f3rio e postar no Slack&#8221; n\u00e3o for idempotente, voc\u00ea vai ter tr\u00eas relat\u00f3rios id\u00eanticos postados porque o webhook disparou duas vezes. Trate cada execu\u00e7\u00e3o como se pudesse rodar mais de uma vez com o mesmo input.<\/p>\n<pre><code class=\"language-typescript\">async function postWeeklyReport(reportDate: string) {\n  const alreadyPosted = await db.reports.findOne({ reportDate });\n  if (alreadyPosted) {\n    console.log(`Relat\u00f3rio de ${reportDate} j\u00e1 foi postado, ignorando.`);\n    return alreadyPosted;\n  }\n\n  const report = await generateReport(reportDate);\n  const posted = await slack.postMessage(report);\n\n  await db.reports.insertOne({ reportDate, messageId: posted.ts, generatedAt: new Date() });\n  return posted;\n}\n<\/code><\/pre>\n<h3>4. Observabilidade: log estruturado de cada decis\u00e3o do agente<\/h3>\n<p>Quando um script determin\u00edstico falha, o stack trace conta a hist\u00f3ria. Quando um agente falha, o problema pode estar na decis\u00e3o que ele tomou, n\u00e3o em uma exce\u00e7\u00e3o t\u00e9cnica. Voc\u00ea precisa logar n\u00e3o apenas erros, mas o racioc\u00ednio intermedi\u00e1rio \u2014 qual ferramenta foi chamada, com que argumentos, e por qu\u00ea.<\/p>\n<pre><code class=\"language-python\">import structlog\n\nlog = structlog.get_logger()\n\ndef execute_agent_step(agent, context):\n    decision = agent.decide_next_action(context)\n    log.info(\n        \"agent_decision\",\n        action=decision.tool_name,\n        arguments=decision.arguments,\n        reasoning=decision.reasoning_summary,\n        confidence=decision.confidence,\n    )\n    result = execute_tool(decision.tool_name, decision.arguments)\n    log.info(\"agent_result\", tool=decision.tool_name, success=result.success)\n    return result\n<\/code><\/pre>\n<p>Sem esse log estruturado, investigar por que o agente marcou um PR cr\u00edtico como &#8220;docs&#8221; em vez de &#8220;breaking-change&#8221; vira arqueologia de conversas de chat perdidas.<\/p>\n<h3>5. Circuit breaker e limite de custo<\/h3>\n<p>Agentes que tomam decis\u00f5es em loop (ferramentas encadeadas, reflex\u00e3o, replanejamento) podem entrar em ciclos caros \u2014 tanto em tempo quanto em tokens consumidos. Todo pipeline ag\u00eantico de produ\u00e7\u00e3o precisa de um teto r\u00edgido de itera\u00e7\u00f5es e um or\u00e7amento de custo por execu\u00e7\u00e3o.<\/p>\n<pre><code class=\"language-typescript\">const MAX_ITERATIONS = 8;\nconst MAX_COST_USD = 0.50;\n\nasync function runAgentLoop(task: Task) {\n  let iterations = 0;\n  let accumulatedCost = 0;\n\n  while (iterations &lt; MAX_ITERATIONS &amp;&amp; accumulatedCost &lt; MAX_COST_USD) {\n    const step = await agent.nextStep(task);\n    accumulatedCost += step.estimatedCost;\n    iterations++;\n\n    if (step.isFinal) return step.result;\n  }\n\n  throw new AutomationLimitExceededError(task.id, { iterations, accumulatedCost });\n}\n<\/code><\/pre>\n<h2>Estudo de caso: sincroniza\u00e7\u00e3o de tickets sem virar bagun\u00e7a<\/h2>\n<p>Um exemplo concreto e comum: manter tickets do Jira sincronizados com issues do GitHub, incluindo status, labels e coment\u00e1rios resumidos. A tenta\u00e7\u00e3o \u00e9 pedir a um agente &#8220;sincronize os dois sistemas&#8221; e deixar ele resolver. Na pr\u00e1tica, isso gera loops de atualiza\u00e7\u00e3o (A atualiza B, B dispara webhook que atualiza A, A dispara de novo) e perda de dados quando os dois sistemas t\u00eam campos incompat\u00edveis.<\/p>\n<p>O desenho correto separa responsabilidades: um agente decide <em>o que<\/em> sincronizar e como resumir texto amb\u00edguo (a parte que exige julgamento), e um motor determin\u00edstico executa a escrita, com verifica\u00e7\u00e3o de origem para evitar loops.<\/p>\n<pre><code class=\"language-python\">def sync_ticket(github_issue, jira_ticket, last_synced_by: str):\n    if last_synced_by == \"sync-bot\":\n        # evita loop: n\u00e3o re-sincroniza algo que o pr\u00f3prio bot escreveu\n        return\n\n    # a parte que exige julgamento: resumir coment\u00e1rios longos\n    summary = agent.summarize_comments(github_issue.comments)\n\n    # a parte determin\u00edstica: escrita no sistema de destino\n    jira_client.update_ticket(\n        jira_ticket.id,\n        status=map_status(github_issue.state),\n        summary_comment=summary,\n        synced_by=\"sync-bot\",\n    )\n<\/code><\/pre>\n<p>Note a linha <code>synced_by=\"sync-bot\"<\/code>. \u00c9 um detalhe pequeno de engenharia que evita horas de investiga\u00e7\u00e3o de por que dois sistemas ficam &#8220;brigando&#8221; para atualizar um ao outro \u2014 um problema cl\u00e1ssico de integra\u00e7\u00e3o que a IA n\u00e3o resolve sozinha, s\u00f3 amplifica se a arquitetura n\u00e3o prevenir.<\/p>\n<h2>Onde a automa\u00e7\u00e3o com IA ainda esbarra<\/h2>\n<p>Vale ser honesto sobre os limites, porque \u00e9 aqui que times perdem tempo tentando for\u00e7ar a ferramenta al\u00e9m do que ela suporta bem:<\/p>\n<ul>\n<li><strong>Contexto que muda de significado com o tempo<\/strong>: um agente que classifica tickets hoje pode classificar diferente amanh\u00e3 se o time mudar conven\u00e7\u00f5es internas sem atualizar o prompt ou as ferramentas dispon\u00edveis. Automa\u00e7\u00e3o ag\u00eantica exige manuten\u00e7\u00e3o cont\u00ednua de contexto, n\u00e3o \u00e9 &#8220;configura uma vez e esquece&#8221;.<\/li>\n<li><strong>A\u00e7\u00f5es irrevers\u00edveis<\/strong>: deploy em produ\u00e7\u00e3o, exclus\u00e3o de dados, envio de e-mail para clientes. Para essas, mantenha um humano no loop de aprova\u00e7\u00e3o, mesmo que o agente j\u00e1 tenha decidido o qu\u00ea fazer. A automa\u00e7\u00e3o prepara a a\u00e7\u00e3o; a execu\u00e7\u00e3o final cr\u00edtica continua sob revis\u00e3o.<\/li>\n<li><strong>Custo composto de erros silenciosos<\/strong>: uma automa\u00e7\u00e3o que erra 2% das vezes, rodando cem vezes por dia, gera dois incidentes di\u00e1rios que ningu\u00e9m est\u00e1 monitorando ativamente porque &#8220;\u00e9 autom\u00e1tico, deve estar certo&#8221;. M\u00e9tricas de taxa de erro e alertas s\u00e3o obrigat\u00f3rios, n\u00e3o opcionais.<\/li>\n<\/ul>\n<p>Segundo a <a href=\"https:\/\/www.appbuilder.dev\/pt-BR\/blog\/impact-of-ai-on-software-development\/\" target=\"_blank\" rel=\"noopener\">an\u00e1lise da AppBuilder sobre o impacto da IA no desenvolvimento de software<\/a>, o objetivo do low-code combinado com IA \u00e9 justamente agilizar o processo automatizando tarefas repetitivas para que desenvolvedores foquem em trabalho de maior valor \u2014 o que s\u00f3 se sustenta se a automa\u00e7\u00e3o for confi\u00e1vel o suficiente para n\u00e3o gerar mais trabalho de corre\u00e7\u00e3o do que economiza.<\/p>\n<blockquote><p><strong>\ud83d\udca1 Dica do Mestre:<\/strong> Antes de expandir uma automa\u00e7\u00e3o ag\u00eantica para mais casos de uso, me\u00e7a a taxa de interven\u00e7\u00e3o manual necess\u00e1ria p\u00f3s-execu\u00e7\u00e3o. Se mais de 10-15% das execu\u00e7\u00f5es exigem corre\u00e7\u00e3o humana, o problema geralmente n\u00e3o \u00e9 o modelo \u2014 \u00e9 a falta de ferramentas espec\u00edficas o suficiente para a tarefa.<\/p><\/blockquote>\n<h2>Um roteiro pr\u00e1tico de implementa\u00e7\u00e3o<\/h2>\n<p>Para quem est\u00e1 decidindo por onde come\u00e7ar, a sequ\u00eancia que funciona na pr\u00e1tica \u00e9:<\/p>\n<ol>\n<li>Liste as tarefas repetitivas do time por frequ\u00eancia e tempo gasto, n\u00e3o por &#8220;qu\u00e3o legal seria automatizar&#8221;.<\/li>\n<li>Classifique cada uma nas tr\u00eas categorias descritas acima (determin\u00edstica, decis\u00e3o leve, processo multi-etapas).<\/li>\n<li>Comece pela categoria 2 \u2014 ela d\u00e1 o retorno mais r\u00e1pido com o menor risco de arquitetura.<\/li>\n<li>S\u00f3 evolua para orquestra\u00e7\u00e3o ag\u00eantica completa (categoria 3) quando a tarefa realmente envolver m\u00faltiplos sistemas com estado.<\/li>\n<li>Instrumente desde o primeiro dia: log estruturado, idempot\u00eancia e limite de custo n\u00e3o s\u00e3o &#8220;melhorias futuras&#8221;, s\u00e3o parte do MVP.<\/li>\n<\/ol>\n<p>Ferramentas de automa\u00e7\u00e3o de fluxo de trabalho de prop\u00f3sito geral tamb\u00e9m t\u00eam seu espa\u00e7o nesse ecossistema, especialmente para conectar sistemas sem exigir orquestra\u00e7\u00e3o customizada do zero \u2014 vale conhecer o panorama descrito pela <a href=\"https:\/\/www.kimi.ai\/pt-br\/resources\/ai-automation-tools\" target=\"_blank\" rel=\"noopener\">Kimi em seu levantamento de ferramentas de automa\u00e7\u00e3o com IA<\/a> para entender onde plataformas prontas resolvem e onde a orquestra\u00e7\u00e3o customizada, como a descrita neste artigo, se torna necess\u00e1ria.<\/p>\n<h2>Junte-se \u00e0 comunidade Dev&#8217;s AI<\/h2>\n<p>Discutir arquitetura de automa\u00e7\u00e3o em teoria s\u00f3 leva at\u00e9 certo ponto \u2014 o ganho real vem de trocar experi\u00eancia com quem j\u00e1 colocou esses pipelines em produ\u00e7\u00e3o e viu onde eles quebraram. Na <a href=\"https:\/\/adrianosantos.link\/ComunidadeDevAI\" target=\"_blank\" rel=\"noopener\">Comunidade Dev&#8217;s AI<\/a> discutimos casos reais de automa\u00e7\u00e3o ag\u00eantica, orquestra\u00e7\u00e3o de agentes, MCP e as decis\u00f5es de arquitetura que separam uma automa\u00e7\u00e3o confi\u00e1vel de um script fr\u00e1gil disfar\u00e7ado de IA. Se voc\u00ea est\u00e1 desenhando esse tipo de pipeline no seu time, vale participar da conversa.<\/p>\n<h2>Conclus\u00e3o<\/h2>\n<p>Automatizar tarefas repetitivas com IA deixou de ser sobre gerar scripts pontuais e passou a ser sobre projetar sistemas \u2014 com gatilhos audit\u00e1veis, ferramentas restritas, idempot\u00eancia, observabilidade e limites de custo. A tenta\u00e7\u00e3o de dar autonomia total a um agente e &#8220;deixar ele resolver&#8221; \u00e9 real, mas o resultado sustent\u00e1vel em produ\u00e7\u00e3o vem do oposto: restringir o espa\u00e7o de decis\u00e3o do agente ao m\u00ednimo necess\u00e1rio e reservar a flexibilidade da IA exatamente para onde ela agrega valor \u2014 julgamento contextual sobre texto amb\u00edguo, n\u00e3o execu\u00e7\u00e3o de efeitos colaterais cr\u00edticos sem supervis\u00e3o. Como em qualquer decis\u00e3o de arquitetura, o crit\u00e9rio n\u00e3o \u00e9 &#8220;a IA consegue fazer isso?&#8221;, \u00e9 &#8220;o custo de manuten\u00e7\u00e3o e o risco residual dessa automa\u00e7\u00e3o valem a hora que ela devolve ao time toda semana?&#8221;. Na maioria das tarefas repetitivas que consomem sua manh\u00e3, a resposta \u00e9 sim \u2014 desde que voc\u00ea trate a automa\u00e7\u00e3o como o sistema de produ\u00e7\u00e3o que ela \u00e9, n\u00e3o como um script esperto que algu\u00e9m colou de um chat.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Toda sexta-feira, \u00e0s 17h, algu\u00e9m do seu time abre uma planilha, copia n\u00fameros de um dashboard, cola em outro sistema, gera um relat\u00f3rio em PDF, sobe no Slack e marca tr\u00eas pessoas. Leva quarenta minutos. Ningu\u00e9m questiona porque &#8220;sempre foi assim&#8221;. Multiplique isso pelas dezenas de rotinas equivalentes espalhadas em qualquer time de engenharia: atualizar [&hellip;]<\/p>\n","protected":false},"author":127,"featured_media":1194,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1193","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts\/1193","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/users\/127"}],"replies":[{"embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/comments?post=1193"}],"version-history":[{"count":1,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts\/1193\/revisions"}],"predecessor-version":[{"id":1195,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts\/1193\/revisions\/1195"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/media\/1194"}],"wp:attachment":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/media?parent=1193"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/categories?post=1193"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/tags?post=1193"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}