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.
Endpoint MCP
https://inite.ai/api/mcpStreamable HTTP, sem sessão. Cada trilho também tem o seu próprio endpoint, para uma lista de ferramentas mais curta.
Os trilhos
- Portal
https://inite.ai/api/mcp/portalA 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 conta
https://inite.ai/api/mcp/portal-meA 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
- Analisador
https://inite.ai/api/mcp/analyzerComo 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 conta
https://inite.ai/api/mcp/analyzer-meA 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
- Atlas
https://inite.ai/api/mcp/atlasMais 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 Atlas
https://inite.ai/api/mcp/atlas-ownersatlas_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ório
https://inite.ai/api/mcp/directoryEmpresas 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.
- 01Conecte o trilho de donos do Atlas, https://inite.ai/api/mcp/atlas-owners, e entre quando o cliente pedir.
- 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.
- 03atlas_owner_card mostra o que o card leu e o que não conseguiu ler: preço, vagas, lançamentos, empresa.
- 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.
- 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.
- 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/a2aPara máquinas
Tudo o que está acima, nos arquivos que um agente lê primeiro.
.well-known- Cartão do servidor MCP/.well-known/mcp.json
- Cartão do agente A2A/.well-known/agent-card.json
- OpenAPI/.well-known/openapi.json
- Recurso protegido por OAuth/.well-known/oauth-protected-resource/api/mcp
- Habilidades para agentes/.well-known/agent-skills/index.json
- Ações para agentes/.well-known/agent-actions
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 GitHub
npm install @inite/site-agentsO 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 siteQuais 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 siteUm 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 siteOpcional, 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 siteO 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 siteSomente 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 siteOs 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 siteInforma que um artigo está no ar, com o endereço. Repetir o mesmo endereço é seguro.
POST /api/site/v1/content/{id}/failedchave do siteInforma 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 chaveOs 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 chaveO 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 chaveO 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 chaveA 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 chaveO 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 siteOs 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 siteMarca 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&d=acme.com&v=4&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.
Cookies
Antes de contar esta visita
A análise e a medição de anúncios nos dizem quais páginas e quais dos nossos anúncios cumprem seu papel: Google Analytics e Google Ads, o pixel da Meta, Yandex Metrica e um identificador próprio. Nada é armazenado até você responder, e recusar não muda nada no site.