Ir para o conteúdo

INITE para agentes

O portal, o analisador e o Atlas como ferramentas que um agente de IA chama sem conta. Cada um tem também um trilho com login para o que precisa de você - colocar a sua ferramenta no Atlas, as suas auditorias, pagar - que pede para entrar quando você o conecta.

INITE / AGENTES

Endpoint MCP

https://inite.ai/api/mcp

Streamable HTTP, sem sessão. Cada trilho também tem o seu próprio endpoint, para uma lista de ferramentas mais curta.

Os trilhos

  • Portalhttps://inite.ai/api/mcp/portal

    A própria INITE: o que vendemos e por quanto, na sua moeda, horários livres para uma conversa, agendar uma chamada para uma pessoa nomeada, escrever para a equipe, os guias.

    • inite_servicesaberto
    • inite_slotsaberto
    • inite_book_callaberto
    • inite_contactaberto
    • inite_guidesaberto
    • inite_connectaberto
  • INITE, com contahttps://inite.ai/api/mcp/portal-me

    A sua conta: plano, licenças e auditorias restantes (my_account), e o Local Start comprado para você (inite_buy), pago pela carteira INITE, por cartão ou PIX, ou por x402.

    • my_accountconta
    • inite_buyconta
  • Analisadorhttps://inite.ai/api/mcp/analyzer

    Como os motores de IA leem um site. check_identity é grátis e instantâneo: acesso dos crawlers, arquivos de identidade, schema. visibility_fixes dá o plano de correções por importância, com arquivos prontos para colar; compare_sites lê do mesmo jeito o site de um concorrente; visibility_history mostra como a leitura mudou. analyze_site roda a auditoria e get_analysis lê o resultado.

    • check_identityaberto
    • analyze_siteaberto
    • get_analysisaberto
    • visibility_fixesaberto
    • compare_sitesaberto
    • visibility_historyaberto
  • Analisador, com contahttps://inite.ai/api/mcp/analyzer-me

    A auditoria no nível da sua conta (analyze_site, get_analysis), watch_site relendo um site toda semana, as suas auditorias (my_reports) e uma licença de 12 meses (visibility_buy_licence).

    • watch_siteconta
    • my_reportsconta
    • visibility_buy_licenceconta
  • Atlashttps://inite.ai/api/mcp/atlas

    Mais de 25.000 ferramentas de IA, relidas toda semana. Encontre ferramentas para uma tarefa descrita em palavras, leia o registro datado de uma ferramenta (preço e como mudou, API, servidor MCP, status, o que declara sobre os seus dados), filtre por facetas, veja o que mudou no mercado.

    • match_toolsaberto
    • match_mcpaberto
    • atlas_lookupaberto
    • atlas_searchaberto
    • atlas_changesaberto
    • get_project_timelineaberto
    • atlas_couponsaberto
    • atlas_compareaberto
    • atlas_dataset_getaberto
    • atlas_dataset_changesaberto
  • Donos no Atlashttps://inite.ai/api/mcp/atlas-owners

    atlas_submit coloca a sua ferramenta no Atlas pelo endereço e começa a reivindicação; as ferramentas atlas_owner_* provam o domínio, cuidam do card e dos descontos; atlas_owner_premium paga o premium; atlas_dataset_* publicam comparações Live Data.

    • atlas_my_listingsconta
    • atlas_submitconta
    • atlas_owner_claimconta
    • atlas_owner_verifyconta
    • atlas_owner_cardconta
    • atlas_owner_set_read_pagesconta
    • atlas_owner_remeasureconta
    • atlas_owner_statsconta
    • atlas_owner_propose_editconta
    • atlas_owner_couponsconta
    • atlas_owner_coupon_addconta
    • atlas_owner_coupon_setconta
    • atlas_owner_premiumconta
    • atlas_owner_releaseconta
    • atlas_dataset_createconta
    • atlas_dataset_updateconta
    • atlas_dataset_publishconta
    • atlas_dataset_archiveconta
    • atlas_dataset_placementconta
  • Diretóriohttps://inite.ai/api/mcp/directory

    Empresas que confirmaram os próprios fatos na INITE e comprovaram o domínio. find_business busca pelo que a empresa faz e onde fica, em português, inglês, russo ou espanhol; business abre uma pelo slug ou pelo domínio. Cada uma tem o próprio servidor de fatos (MCP e A2A). A ordem vem da correspondência e de quão completos são os fatos; nenhum lugar está à venda. As ferramentas de IA, que nós mesmos medimos, ficam no Atlas, não aqui.

    • find_businessaberto
    • businessaberto

Aberto, e com conta

Uma chamada sem token é um visitante. Visitantes recebem as ferramentas abertas do portal, do analisador e do Atlas, com limites por endereço, e a auditoria roda como pesquisa: tudo menos as duas etapas pagas, como no site para quem não tem conta. Os trilhos com conta não respondem nada sem token. O 401 deles, com WWW-Authenticate, aponta para auth.inite.ai, que aceita registro dinâmico de cliente e PKCE, então o cliente pede para você entrar (passkey, link por e-mail ou senha) quando você o adiciona. Claude e ChatGPT decidem se um conector pede login no momento em que ele é adicionado; por isso cada produto tem o seu trilho com conta.

Conectar

Qualquer cliente que fala MCP remoto: adicione o endpoint. Não é preciso chave para começar.

{
  "mcpServers": {
    "inite": {
      "type": "http",
      "url": "https://inite.ai/api/mcp"
    }
  }
}

Um cliente que inicia servidores locais: o pacote npm acrescenta três verificações que rodam na sua máquina e encaminha o resto para o endpoint.

{
  "mcpServers": {
    "inite": {
      "command": "npx",
      "args": [
        "-y",
        "@inite/visibility"
      ]
    }
  }
}

Para donos de ferramentas

O seu agente pode colocar a sua ferramenta no Atlas e cuidar do card: cadastrá-la pelo endereço, provar o domínio, dizer ao Atlas onde ficam as páginas de preços, vagas e novidades, publicar descontos, pedir uma nova leitura e assinar o premium.

  1. 01Conecte o trilho de donos do Atlas, https://inite.ai/api/mcp/atlas-owners, e entre quando o cliente pedir.
  2. 02atlas_submit com o endereço do seu site lê a página inicial, registra o pedido e começa a reivindicação. Ele devolve três formas de provar o domínio: um link-selo, uma meta tag ou um registro DNS. Coloque uma no site e chame atlas_owner_verify. Uma ferramenta que já está no Atlas é reivindicada com atlas_owner_claim.
  3. 03atlas_owner_card mostra o que o card leu e o que não conseguiu ler: preço, vagas, lançamentos, empresa.
  4. 04atlas_owner_set_read_pages indica as suas páginas de preços, vagas e changelog. Nós as lemos com as mesmas verificações de qualquer página: o preço precisa estar impresso nela, o quadro de vagas precisa ser seu, as entradas precisam ter datas.
  5. 05atlas_owner_coupon_add publica um desconto, marcado como declarado pelo dono verificado. atlas_owner_remeasure lê o site de novo; atlas_owner_stats mostra visualizações e cliques.
  6. 06atlas_owner_premium abre o premium. Se você permitiu cobranças na carteira INITE, ele é pago na hora; se não, você recebe uma página com passkey, uma página de cartão ou PIX e x402 para um agente com carteira própria. Chame de novo depois de pagar e o premium é ativado.

Um prompt para o seu agente

Usando o servidor MCP INITE Atlas Owners, coloque your-tool.com no Atlas como minha ferramenta, coloque a meta tag de prova na nossa página inicial e verifique. Depois me mostre o que o card não conseguiu ler e indique nossas páginas de preços, vagas e changelog.

Nada que o dono declare muda um fato medido. As páginas indicadas são lidas, não aceitas na palavra; correções vão para revisão humana.

A2A

A auditoria também é um agente A2A v1.0: envie um domínio e receba uma tarefa que termina em cerca de um minuto, com a nota como artefato. Mesma regra: aberto sem token, o nível da conta com um.

https://inite.ai/api/a2a

Para máquinas

Tudo o que está acima, nos arquivos que um agente lê primeiro.

.well-known

Para os desenvolvedores do seu site

Uma empresa que confirmou os dados no INITE pode servi-los no próprio domínio e publicar no próprio site os artigos que aprovou. Escolha o conector conforme a plataforma do site. Um site em qualquer outra tecnologia chama os mesmos endpoints e recebe os eventos de webhook abaixo.

A empresa ativa o INITE Agents no seu painel, confirma ali os seus fatos e recebe a chave do site de que os conectores abaixo precisam. Abrir o INITE Agents

Qual conector para cada plataforma

  • WordPress · baixar o plugin · no GitHub

    O plugin INITE Agents. Instale o zip em Plugins, Adicionar novo plugin, Enviar plugin, e cole a chave do site em Configurações, INITE Agents. Ele serve os arquivos, as tags do head e a linha do robots.txt, e transforma os artigos aprovados em posts. Versões novas aparecem na tela de Plugins.

  • Next.js · no GitHubnpm install @inite/site-agents

    O pacote @inite/site-agents: dois arquivos de rota e um componente do head servem os arquivos e as tags; createContentQueue busca os artigos aprovados e informa onde foram publicados.

  • Qualquer site com um campo de código no head: Tilda, Squarespace, Wix, Webflow, Framer, Ghost, Shopify, Bitrix, Joomla · no GitHub

    O snippet: uma tag script no head da página, gerada no painel, com o slug público e sem chave. Ela carrega as ferramentas WebMCP, acrescenta os links para os arquivos em <slug>.inite.ai e o JSON-LD dos dados confirmados. Isso chega aos agentes num navegador e aos rastreadores que executam JavaScript; para os muitos rastreadores de IA que só leem o HTML como ele vem, o painel também dá um bloco estático com as mesmas tags de uma versão, a ser copiado de novo após cada confirmação. Uma vez por dia lemos a página inicial para ver o que está lá.

  • Ghost · no GitHub

    Nada para instalar: cole no painel a URL da Admin API e a chave de uma integração personalizada, e o INITE publica os artigos aprovados no Ghost. O snippet em Settings, Code injection, cuida do head.

  • Qualquer outra tecnologia · no GitHub

    Os endpoints e o webhook abaixo, com uma chave do site criada para a plataforma Webhook no painel.

  • Shopify, Wix, Webflow, HubSpot

    Essas plataformas vão ganhar um app próprio. Enquanto isso, o snippet conecta qualquer um desses sites, e um desenvolvedor pode usar os endpoints e o webhook.

A documentação de cada plataforma, receptores de webhook em Node.js, PHP e Python que verificam a assinatura, e as issues de todos os conectores ficam em um repositório público. O código do plugin e do pacote fica ao lado, em espelhos somente leitura, com um release para cada versão. inite-ai/inite-agents no GitHub

Chave e limites

Toda chamada marcada como "chave do site" leva a chave da aba Para agentes do painel, como Authorization: Bearer isk_…. A chave é mostrada uma única vez, quando é criada. Uma chave pertence a um site e a uma plataforma; envie-a só para https://inite.ai.

Os endpoints com chave aceitam 60 requisições por minuto de um mesmo endereço IP; sites no mesmo servidor compartilhado dividem essa cota. Os dados públicos e o snippet aceitam 30 por minuto de um endereço. Acima do limite a resposta é 429 com Retry-After em segundos; quando o serviço está ocupado, 503 com Retry-After. O corpo diz qual: {"ok": false, "busy": "rate"}. O script WebMCP não tem limite e fica em cache por um dia. Os envios para records aceitam 30 por minuto.

Endpoints

  • GET /api/site/v1/manifestchave do site

    Quais arquivos servir e em quais caminhos, as tags do head, o endereço MCP, a versão dos dados e se os artigos estão ligados. Envie o ETag que você tem como If-None-Match: 304 quer dizer que nada mudou. Consultar a cada cinco minutos é suficiente.

  • GET /api/site/v1/files/{name}chave do site

    Um arquivo da versão confirmada, byte a byte, com o seu tipo de conteúdo: llms.txt, llms-full.txt, agent-card.json, mcp.json, api-catalog, robots-signal ou jsonld. Cada arquivo tem o próprio ETag. Qualquer outro nome dá 404. robots-signal é a linha Content-Signal para o seu robots.txt (search=yes, ai-input=yes, ai-train=no): uma preferência declarada para quem a respeita; não bloqueia nenhum robô.

  • POST /api/site/v1/pingchave do site

    Opcional, mais ou menos uma vez por dia: a sua plataforma, a versão do seu conector, até 20 caminhos que ele serve e quantas vezes os agentes de IA conhecidos os leram por dia nos últimos sete dias (até 60 linhas). Cada contagem é o total do dia até aquele momento, então um ping repetido grava o mesmo número. Endereços e user agents dos visitantes não são enviados. Também pode levar um campo opcional site com o que a sua plataforma diz sobre o site: título, slogan, idioma e endereço, e woocommerce.products com o número de produtos publicados. A INITE sugere o título e o slogan ao dono; nada é publicado a partir dele. Um ping com site e sem paths deixa os caminhos servidos como estavam. Com os plugins de agendamento ou de endereços do site, pode levar também services, locations e hours no formato dos fatos, e from com os nomes dos plugins; o dono os vê como sugestões. Um campo opcional referrals conta as visitas que chegaram de um assistente de IA (chatgpt.com, perplexity.ai, gemini.google.com, copilot.microsoft.com, claude.ai e mais alguns): dia, caminho, origem e número, até 60 linhas, com a mesma regra do total do dia. Só números: nem endereço, nem cookie, nada sobre a pessoa.

  • POST /api/site/v1/recordschave do site

    O conteúdo do próprio site, um grupo por vez, enviado só enquanto o dono o ativou no conector: content (páginas e posts publicados: id, type, title, url, excerpt, modified, language), products (id, name, url, price, regularPrice, salePrice, currency, stock, sku, excerpt, categories, image) ou events (id, title, url, excerpt, starts, ends, venue). Até 100 itens por envio, os que mudaram; removed lista os ids que saíram, present todos os que continuam (o resto é excluído), e clear: true exclui o grupo inteiro. Os endereços precisam estar no domínio do próprio site. A INITE guarda até 2.000 páginas e posts, 2.000 produtos e 200 eventos, e a resposta diz quantos guarda. Com eles, em até cinco minutos, são preparados o llms.txt, o llms-full.txt e os produtos do MCP; os produtos só são publicados enquanto o dono mantém ligado Publicar o meu catálogo.

  • GET /api/site/v1/summarychave do site

    Somente leitura, para o painel do próprio conector: a pontuação de visibilidade em IA e as verificações que falharam na última análise, trinta dias de leituras de agentes, chamadas MCP e visitas que chegaram de assistentes de IA, e quantas sugestões e artigos esperam o dono. A INITE o reescreve a cada três horas; consultar a cada poucas horas é suficiente. Quais agentes, páginas e assistentes faz parte do INITE Agents Premium; sem ele, a resposta traz os totais.

  • GET /api/site/v1/content/queuechave do site

    Os artigos que o dono aprovou e que este site ainda não publicou, do mais antigo para o mais novo, no máximo dez por resposta. Vazia, com enabled: false, enquanto o dono estiver com os artigos desligados.

  • POST /api/site/v1/content/{id}/publishedchave do site

    Informa que um artigo está no ar, com o endereço. Repetir o mesmo endereço é seguro.

  • POST /api/site/v1/content/{id}/failedchave do site

    Informa que um artigo não pôde ser publicado, com o motivo. O artigo sai da fila até o dono enviá-lo de novo.

  • GET /api/site/v1/public/{slug}?d={domain}público, sem chave

    Os dados confirmados em JSON. Abertos a qualquer origem: é o que o script WebMCP lê no navegador. Em cache por cinco minutos, com ETag.

  • GET /api/site/v1/webmcp.js?s={slug}&d={domain}&v={version}público, sem chave

    O script para o head da página; o endereço, com a versão certa, está no manifesto em head.script.src. Ele dá a um agente de IA no navegador ferramentas somente leitura sobre os dados confirmados. Num navegador sem WebMCP não faz nada e não cria cookie.

  • GET /api/site/v1/snippet.js?s={slug}&d={domain}público, sem chave

    O script por trás da tag do snippet. É servido enquanto os dados estão publicados e o snippet está ativo no painel; senão, um comentário que não faz nada. Registra as ferramentas WebMCP e acrescenta os links e o JSON-LD da versão atual; uma página cujo bloco estático é dessa versão mantém o próprio JSON-LD. Em cache por cinco minutos, com ETag. Cada carga marca o snippet como visto no painel, só o horário; nada do visitante é guardado.

  • GET /api/site/v1/public/{slug}/prices.yml?d={domain}público, sem chave

    A lista de preços como feed YML, para o Yandex Business ler pelo link. Só serviços com um preço único em RUB, KZT ou BYN; é gravada quando os dados são confirmados e responde 404 enquanto estão despublicados. Em cache por cinco minutos, com ETag.

  • POST /api/site/v1/public/{slug}/requests?d={domain}público, sem chave

    O que request_contact e request_booking do script WebMCP enviam, aberto a qualquer origem: {"tool", "arguments"} com os mesmos argumentos das ferramentas MCP. Responde com o id do pedido e os critérios que dizem que foi bem feito; 422 indica o campo a corrigir, 409 que o dono está com os pedidos desativados, 429 um limite ou um duplicado. Três de um endereço de uma vez, depois seis por hora.

  • GET /api/site/v1/requests?status={status}&page={page}chave do site

    Os pedidos de agentes do site, os mais recentes primeiro, 25 por página, com a contagem por status. Vazio, com enabled: false, a menos que o dono envie os pedidos para este conector.

  • POST /api/site/v1/requests/{id}chave do site

    Marca um pedido como novo, respondido ou spam: {"status": "answered"}. Nada é enviado a ninguém por causa disso.

Os endpoints com chave recusam com um corpo JSON {"ok": false, "error", "message"}, e a mensagem pode ser mostrada como está. 401: no_key, unknown_key ou revoked. 403: disabled, a chave está pausada. 409: unproved (o domínio ainda não foi comprovado), unconfirmed (não há nada confirmado para publicar), unpublished (o proprietário retirou os fatos no painel) ou company_inactive. Em qualquer um deles, pare de servir os arquivos. Em um timeout ou um 5xx, mantenha a última cópia que você tem.

Consultando o manifesto

curl -i https://inite.ai/api/site/v1/manifest \
  -H "Authorization: Bearer $INITE_SITE_KEY" \
  -H 'If-None-Match: "m4-Qx…"'
{
  "ok": true,
  "site": {
    "slug": "acme",
    "domain": "acme.com",
    "version": 4,
    "confirmedAt": "2026-10-22T10:00:00.000Z"
  },
  "connector": {
    "id": "cm2x8k1qz0001",
    "platform": "next",
    "enabled": true
  },
  "mcp": {
    "url": "https://acme.inite.ai/mcp"
  },
  "files": [
    {
      "name": "llms.txt",
      "path": "/llms.txt",
      "placement": "path",
      "contentType": "text/plain; charset=utf-8",
      "url": "https://inite.ai/api/site/v1/files/llms.txt",
      "available": true,
      "etag": "\"f4-llms.txt\""
    },
    {
      "name": "agent-card.json",
      "path": "/.well-known/agent-card.json",
      "placement": "path",
      "contentType": "application/json; charset=utf-8",
      "url": "https://inite.ai/api/site/v1/files/agent-card.json",
      "available": true,
      "etag": "\"f4-agent-card.json\""
    },
    {
      "name": "mcp.json",
      "path": "/.well-known/mcp.json",
      "placement": "path",
      "contentType": "application/json; charset=utf-8",
      "url": "https://inite.ai/api/site/v1/files/mcp.json",
      "available": true,
      "etag": "\"f4-mcp.json\""
    },
    {
      "name": "api-catalog",
      "path": "/.well-known/api-catalog",
      "placement": "path",
      "contentType": "application/linkset+json; profile=\"https://www.rfc-editor.org/info/rfc9727\"",
      "url": "https://inite.ai/api/site/v1/files/api-catalog",
      "available": true,
      "etag": "\"f4-api-catalog\""
    },
    {
      "name": "robots-signal",
      "path": null,
      "placement": "robots",
      "contentType": "text/plain; charset=utf-8",
      "url": "https://inite.ai/api/site/v1/files/robots-signal",
      "available": true,
      "etag": "\"f4-robots-signal\""
    },
    {
      "name": "jsonld",
      "path": null,
      "placement": "head",
      "contentType": "application/json; charset=utf-8",
      "url": "https://inite.ai/api/site/v1/files/jsonld",
      "available": true,
      "etag": "\"f4-jsonld\""
    }
  ],
  "head": {
    "html": "<script src=\"https://inite.ai/api/site/v1/webmcp.js?s=acme&amp;d=acme.com&amp;v=4&amp;r=cb\" async crossorigin=\"anonymous\"></script>\n<link rel=\"mcp\" href=\"https://acme.inite.ai/mcp\">\n<link rel=\"service-doc\" href=\"https://acme.inite.ai/llms.txt\" type=\"text/plain\">\n<link rel=\"describedby\" href=\"https://acme.inite.ai/.well-known/agent-card.json\" type=\"application/json\">\n<link rel=\"api-catalog\" href=\"https://acme.inite.ai/.well-known/api-catalog\" type=\"application/linkset+json\">\n<script type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"Dentist\",\"name\":\"Acme Dental\",\"url\":\"https://acme.com\"}</script>",
    "script": {
      "src": "https://inite.ai/api/site/v1/webmcp.js?s=acme&d=acme.com&v=4&r=cb",
      "async": true
    },
    "links": [
      {
        "rel": "mcp",
        "href": "https://acme.inite.ai/mcp"
      },
      {
        "rel": "service-doc",
        "href": "https://acme.inite.ai/llms.txt",
        "type": "text/plain"
      },
      {
        "rel": "describedby",
        "href": "https://acme.inite.ai/.well-known/agent-card.json",
        "type": "application/json"
      },
      {
        "rel": "api-catalog",
        "href": "https://acme.inite.ai/.well-known/api-catalog",
        "type": "application/linkset+json"
      }
    ],
    "jsonLd": {
      "@context": "https://schema.org",
      "@type": "Dentist",
      "name": "Acme Dental",
      "url": "https://acme.com"
    }
  },
  "features": {
    "files": true,
    "head": true,
    "webmcp": true,
    "menu": false,
    "content": {
      "enabled": true,
      "queueUrl": "https://inite.ai/api/site/v1/content/queue"
    },
    "requests": {
      "enabled": true,
      "booking": true,
      "url": "https://inite.ai/api/site/v1/public/acme/requests?d=acme.com",
      "listUrl": "https://inite.ai/api/site/v1/requests",
      "toPlugin": true
    }
  },
  "poll": {
    "afterSeconds": 300
  }
}

O ping

curl https://inite.ai/api/site/v1/ping \
  -H "Authorization: Bearer $INITE_SITE_KEY" \
  -H 'Content-Type: application/json' \
  -d '{ "platform": "next", "pluginVersion": "0.2.0", "paths": [ "/llms.txt", "/.well-known/agent-card.json", "/robots.txt" ], "visits": [ { "day": "2026-10-22", "path": "/llms.txt", "agent": "ClaudeBot", "hits": 12 } ], "site": { "title": "Sorriso", "tagline": "Dental clinic in Pinheiros", "language": "pt-BR", "url": "https://sorriso.example/", "woocommerce": { "products": 12 } }, "referrals": [ { "day": "2026-10-22", "path": "/prices/", "source": "chatgpt.com", "hits": 3 } ] }'
{
  "ok": true,
  "visits": 1,
  "referrals": 1,
  "paths": 3,
  "platformMatches": true
}

Enviar o conteúdo do site

curl https://inite.ai/api/site/v1/records \
  -H "Authorization: Bearer $INITE_SITE_KEY" \
  -H 'Content-Type: application/json' \
  -d @products-page.json
{
  "group": "products",
  "items": [
    {
      "id": "412",
      "name": "Whitening kit",
      "url": "https://sorriso.example/loja/whitening-kit/",
      "price": "149.90",
      "regularPrice": "189.90",
      "salePrice": "149.90",
      "currency": "BRL",
      "stock": "instock",
      "sku": "WK-01",
      "excerpt": "Trays and gel for two weeks at home.",
      "categories": [
        "Care at home"
      ],
      "image": "https://sorriso.example/wp-content/uploads/wk.jpg",
      "modified": "2026-10-22T14:05:00+00:00"
    }
  ],
  "removed": [
    "388"
  ]
}
{
  "ok": true,
  "group": "products",
  "accepted": 1,
  "capped": 0,
  "removed": 1,
  "held": 12,
  "cap": 2000,
  "dropped": 0
}

Artigos

O INITE escreve artigos para o site de uma empresa a partir do que as pessoas de fato buscam, e o dono aprova cada um no painel. Um conector pega os aprovados e informa onde cada um foi publicado. O que ele recebe é o texto como foi aprovado: título, slug, meta description, o corpo em Markdown e o mesmo corpo em HTML, e as fontes que ele cita.

A fila

curl https://inite.ai/api/site/v1/content/queue \
  -H "Authorization: Bearer $INITE_SITE_KEY"
{
  "ok": true,
  "enabled": true,
  "items": [
    {
      "id": "cm2y0v7ka0004",
      "lang": "en",
      "title": "How much does a dental cleaning cost in Austin?",
      "slug": "dental-cleaning-cost-austin",
      "metaDescription": "What a cleaning costs at Acme Dental, what it includes, and when insurance covers it.",
      "body": "## What a cleaning includes\n\nA cleaning at Acme Dental takes about 45 minutes…",
      "html": "<h2>What a cleaning includes</h2>\n<p>A cleaning at Acme Dental takes about 45 minutes…</p>\n",
      "sources": [
        {
          "url": "https://www.ada.org/resources/research/health-policy-institute",
          "title": "ADA Health Policy Institute"
        }
      ],
      "approvedAt": "2026-10-22T09:30:00.000Z",
      "report": {
        "published": "https://inite.ai/api/site/v1/content/cm2y0v7ka0004/published",
        "failed": "https://inite.ai/api/site/v1/content/cm2y0v7ka0004/failed"
      }
    }
  ]
}

Consulte no seu próprio ritmo, por exemplo de hora em hora, ou quando chegar o evento content.approved. Os endereços de report de cada item ficam no inite.ai e aceitam a mesma chave do site.

Informando o resultado

curl https://inite.ai/api/site/v1/content/cm2y0v7ka0004/published \
  -H "Authorization: Bearer $INITE_SITE_KEY" \
  -H 'Content-Type: application/json' \
  -d '{ "url": "https://acme.com/blog/dental-cleaning-cost-austin/" }'
{
  "ok": true,
  "status": "published",
  "url": "https://acme.com/blog/dental-cleaning-cost-austin/",
  "already": false
}

O endereço deve ser http ou https no domínio do próprio site ou em um subdomínio dele. O mesmo endereço de novo recebe already: true, então repetir depois de perder uma resposta é seguro. Outro endereço para um artigo já publicado é recusado com 409 published_elsewhere.

curl https://inite.ai/api/site/v1/content/cm2y0v7ka0004/failed \
  -H "Authorization: Bearer $INITE_SITE_KEY" \
  -H 'Content-Type: application/json' \
  -d '{ "reason": "the blog category is missing" }'
{
  "ok": true,
  "status": "failed",
  "already": false
}

O motivo é guardado com até 300 caracteres e mostrado ao dono. Um segundo aviso de falha do mesmo artigo recebe already: true.

Outras respostas: 404 not_found (não é um artigo deste site), 409 not_approved (não está esperando publicação), 422 invalid_url, 400 bad_json, 413 too_large (corpos de até 8 KB).

Webhook

Adicione um endereço https na aba Para agentes, até três por site. Enviamos a ele um POST assinado para três eventos: facts.confirmed, sempre que os dados são confirmados, e content.approved, sempre que o dono aprova um artigo. O cabeçalho INITE-Event e o campo event dizem qual. O segredo de assinatura é mostrado uma única vez, quando o endereço é adicionado. Um terceiro, lead.created, é enviado a cada pedido de um agente quando o dono envia os pedidos para o webhook.

facts.confirmed

POST /your/endpoint
Content-Type: application/json
User-Agent: INITE-Webhooks/1.0 (+https://inite.ai/en/mcp#site-api)
INITE-Event: facts.confirmed
INITE-Webhook-Id: evt_3hGkV0bq9rS1xYw2LmN4pQ7z
INITE-Signature: t=1792663200,v1=5f2b…

{
  "id": "evt_3hGkV0bq9rS1xYw2LmN4pQ7z",
  "event": "facts.confirmed",
  "site": "acme.com",
  "slug": "acme",
  "version": 4,
  "confirmedAt": "2026-10-22T10:00:00.000Z",
  "manifestUrl": "https://inite.ai/api/site/v1/manifest",
  "factsUrl": "https://inite.ai/api/site/v1/public/acme?d=acme.com"
}

content.approved

POST /your/endpoint
Content-Type: application/json
User-Agent: INITE-Webhooks/1.0 (+https://inite.ai/en/mcp#site-api)
INITE-Event: content.approved
INITE-Webhook-Id: evt_Vb1mR8sQx2LkT0wYh7nP4cZd
INITE-Signature: t=1792663200,v1=5f2b…

{
  "id": "evt_Vb1mR8sQx2LkT0wYh7nP4cZd",
  "event": "content.approved",
  "site": "acme.com",
  "slug": "acme",
  "article": {
    "id": "cm2y0v7ka0004",
    "lang": "en",
    "title": "How much does a dental cleaning cost in Austin?",
    "slug": "dental-cleaning-cost-austin",
    "metaDescription": "What a cleaning costs at Acme Dental, what it includes, and when insurance covers it.",
    "body": "## What a cleaning includes\n\nA cleaning at Acme Dental takes about 45 minutes…",
    "html": "<h2>What a cleaning includes</h2>\n<p>A cleaning at Acme Dental takes about 45 minutes…</p>\n",
    "sources": [
      {
        "url": "https://www.ada.org/resources/research/health-policy-institute",
        "title": "ADA Health Policy Institute"
      }
    ],
    "approvedAt": "2026-10-22T09:30:00.000Z"
  },
  "report": {
    "published": "https://inite.ai/api/site/v1/content/cm2y0v7ka0004/published",
    "failed": "https://inite.ai/api/site/v1/content/cm2y0v7ka0004/failed"
  }
}

content.approved traz o mesmo artigo que a fila serve, então um receptor pode publicá-lo sem perguntar. Informe o resultado nos endereços de report com uma chave do site, como faz um conector; até lá o artigo também continua na fila.

lead.created

POST /your/endpoint
Content-Type: application/json
User-Agent: INITE-Webhooks/1.0 (+https://inite.ai/en/mcp#site-api)
INITE-Event: lead.created
INITE-Webhook-Id: evt_Qe5nB2vXk8LmR1tYz0cH7dWs
INITE-Signature: t=1792663200,v1=5f2b…

{
  "id": "evt_Qe5nB2vXk8LmR1tYz0cH7dWs",
  "event": "lead.created",
  "site": "acme.com",
  "slug": "acme",
  "lead": {
    "id": "cm2z4r9tb0007",
    "kind": "booking",
    "name": "Ana Costa",
    "email": "[email protected]",
    "phone": null,
    "message": "A cleaning, and my gums bleed a little.",
    "service": "Dental cleaning",
    "preferredTime": null,
    "windows": [
      {
        "date": "2026-10-30",
        "from": "10:00",
        "to": "12:00"
      }
    ],
    "partySize": null,
    "via": "mcp",
    "client": "claude-code",
    "factsVersion": 4,
    "createdAt": "2026-10-23T14:02:00.000Z"
  },
  "cabinetUrl": "https://inite.ai/en/acme/profile?tab=agents"
}

lead.created só é enviado se o dono escolheu “Para o meu webhook” em Pedidos de agentes. Ele leva o nome, o contato e a mensagem da pessoa para que o negócio responda: trate-os como dados pessoais. Abaixo, o mesmo pedido como o script WebMCP o envia.

{
  "tool": "request_booking",
  "arguments": {
    "service": "Dental cleaning",
    "preferred_windows": [
      {
        "date": "2026-10-30",
        "from": "10:00",
        "to": "12:00"
      }
    ],
    "name": "Ana Costa",
    "contact": {
      "email": "[email protected]"
    },
    "user_confirmed": true
  }
}

A assinatura

Verifique INITE-Signature antes de confiar no corpo. t é o momento da assinatura, em segundos Unix; v1 é o HMAC-SHA256 de t, um ponto e o corpo bruto, com o seu segredo como chave. Recuse um t a mais de cinco minutos do horário atual. INITE-Webhook-Id é o mesmo em toda nova tentativa de um evento, então uma repetição pode ser descartada.

Verificando a assinatura em Node.js

import { createHmac, timingSafeEqual } from 'node:crypto'

// rawBody: the request body as received, before JSON.parse.
export function verify(rawBody, header, secret) {
  const parts = Object.fromEntries(header.split(',').map((p) => p.split('=')))
  const t = Number(parts.t)
  if (!t || Math.abs(Date.now() / 1000 - t) > 300) return false
  const want = createHmac('sha256', secret).update(`${t}.${rawBody}`).digest('hex')
  const got = String(parts.v1 ?? '')
  return got.length === want.length && timingSafeEqual(Buffer.from(got), Buffer.from(want))
}

Responda com qualquer 2xx em até dez segundos. Qualquer outra resposta é repetida depois de 1, 5, 30, 120 e 360 minutos; após a sexta tentativa a entrega é marcada como falha. Redirecionamentos não são seguidos. O painel mostra as últimas dez tentativas de cada endereço.