INITE para agentes
El portal, el analizador y el Atlas como herramientas que un agente de IA llama sin cuenta. Cada uno tiene además un carril con sesión para lo que necesita de usted - añadir su herramienta al Atlas, sus auditorías, pagar - que pide iniciar sesión al conectarlo.
Endpoint MCP
https://inite.ai/api/mcpStreamable HTTP, sin sesión. Cada carril tiene también su propio endpoint, para una lista de herramientas más corta.
Los carriles
- Portal
https://inite.ai/api/mcp/portalLa propia INITE: qué vendemos y por cuánto, en su moneda, horarios libres para una llamada, reservar una llamada para una persona concreta, escribir al equipo, las guías.
- inite_servicesabierto
- inite_slotsabierto
- inite_book_callabierto
- inite_contactabierto
- inite_guidesabierto
- inite_connectabierto
- INITE, con cuenta
https://inite.ai/api/mcp/portal-meSu cuenta: plan, licencias y auditorías restantes (my_account), y Local Start comprado para usted (inite_buy), pagado desde su monedero INITE, con tarjeta o PIX, o por x402.
- my_accountcuenta
- inite_buycuenta
- Analizador
https://inite.ai/api/mcp/analyzerCómo leen un sitio los motores de IA. check_identity es gratis e instantáneo: acceso de los crawlers, archivos de identidad, schema. visibility_fixes da el plan de correcciones por importancia, con archivos listos para pegar; compare_sites lee igual el sitio de un competidor; visibility_history muestra cómo cambió la lectura. analyze_site ejecuta la auditoría y get_analysis lee el resultado.
- check_identityabierto
- analyze_siteabierto
- get_analysisabierto
- visibility_fixesabierto
- compare_sitesabierto
- visibility_historyabierto
- Analizador, con cuenta
https://inite.ai/api/mcp/analyzer-meLa auditoría en el nivel de su cuenta (analyze_site, get_analysis), watch_site releyendo un sitio cada semana, sus auditorías (my_reports) y una licencia de 12 meses (visibility_buy_licence).
- watch_sitecuenta
- my_reportscuenta
- visibility_buy_licencecuenta
- Atlas
https://inite.ai/api/mcp/atlasMás de 25.000 herramientas de IA, releídas cada semana. Encuentre herramientas para una tarea descrita con palabras, lea el registro fechado de una herramienta (precio y cómo cambió, API, servidor MCP, estado, lo que declara sobre sus datos), filtre por facetas, vea qué cambió en el mercado.
- match_toolsabierto
- match_mcpabierto
- atlas_lookupabierto
- atlas_searchabierto
- atlas_changesabierto
- get_project_timelineabierto
- atlas_couponsabierto
- atlas_compareabierto
- atlas_dataset_getabierto
- atlas_dataset_changesabierto
- Dueños en el Atlas
https://inite.ai/api/mcp/atlas-ownersatlas_submit añade su herramienta al Atlas por su dirección y empieza la reclamación; las herramientas atlas_owner_* prueban el dominio, llevan la ficha y sus descuentos; atlas_owner_premium paga premium; atlas_dataset_* publican comparaciones Live Data.
- atlas_my_listingscuenta
- atlas_submitcuenta
- atlas_owner_claimcuenta
- atlas_owner_verifycuenta
- atlas_owner_cardcuenta
- atlas_owner_set_read_pagescuenta
- atlas_owner_remeasurecuenta
- atlas_owner_statscuenta
- atlas_owner_propose_editcuenta
- atlas_owner_couponscuenta
- atlas_owner_coupon_addcuenta
- atlas_owner_coupon_setcuenta
- atlas_owner_premiumcuenta
- atlas_owner_releasecuenta
- atlas_dataset_createcuenta
- atlas_dataset_updatecuenta
- atlas_dataset_publishcuenta
- atlas_dataset_archivecuenta
- atlas_dataset_placementcuenta
- Directorio
https://inite.ai/api/mcp/directoryEmpresas que confirmaron sus propios datos en INITE y demostraron su dominio. find_business busca por lo que hace la empresa y dónde está, en español, inglés, ruso o portugués; business abre una por su slug o su dominio. Cada una tiene su propio servidor de datos (MCP y A2A). El orden lo dan la coincidencia y lo completos que están los datos; ningún puesto está a la venta. Las herramientas de IA, que medimos nosotros mismos, están en el Atlas, no aquí.
- find_businessabierto
- businessabierto
Abierto, y con cuenta
Una llamada sin token es un invitado. Los invitados reciben las herramientas abiertas del portal, el analizador y el Atlas, con límites por dirección, y la auditoría se ejecuta como encuesta: todo menos sus dos pasos de pago, como en el sitio para quien no tiene cuenta. Los carriles con cuenta no responden nada sin token. Su 401 con WWW-Authenticate apunta a auth.inite.ai, que admite registro dinámico de clientes y PKCE, así que el cliente le pide iniciar sesión (passkey, enlace por correo o contraseña) cuando lo añade. Claude y ChatGPT deciden si un conector pide sesión en el momento de añadirlo; por eso cada producto tiene su propio carril con cuenta.
Conectar
Cualquier cliente que hable MCP remoto: añada el endpoint. No hace falta clave para empezar.
{
"mcpServers": {
"inite": {
"type": "http",
"url": "https://inite.ai/api/mcp"
}
}
}Un cliente que lanza servidores locales: el paquete npm añade tres comprobaciones que se ejecutan en su equipo y reenvía el resto al endpoint.
{
"mcpServers": {
"inite": {
"command": "npx",
"args": [
"-y",
"@inite/visibility"
]
}
}
}Para dueños de herramientas
Tu agente puede poner tu herramienta en el Atlas y llevar su ficha: añadirla por su dirección, probar el dominio, decirle al Atlas dónde están tus páginas de precios, empleo y novedades, publicar descuentos, pedir una nueva lectura y contratar premium.
- 01Conecta el carril de dueños del Atlas, https://inite.ai/api/mcp/atlas-owners, e inicia sesión cuando el cliente lo pida.
- 02atlas_submit con la dirección de tu sitio lee la página de inicio, envía la solicitud y empieza la reclamación. Devuelve tres formas de probar el dominio: un enlace-insignia, una meta etiqueta o un registro DNS. Pon una en el sitio y llama a atlas_owner_verify. Una herramienta que ya está en el Atlas se reclama con atlas_owner_claim.
- 03atlas_owner_card muestra lo que la ficha leyó y lo que no pudo leer: precio, empleo, lanzamientos, empresa.
- 04atlas_owner_set_read_pages indica tus páginas de precios, empleo y changelog. Las leemos con las mismas comprobaciones que cualquier página: el precio debe estar impreso en ella, el tablero de empleo debe ser tuyo, las entradas deben llevar fechas.
- 05atlas_owner_coupon_add publica un descuento, marcado como declarado por el dueño verificado. atlas_owner_remeasure vuelve a leer el sitio; atlas_owner_stats muestra vistas y clics.
- 06atlas_owner_premium abre premium. Si permitiste cargos en tu monedero INITE, se paga al momento; si no, recibes una página con passkey, una página de tarjeta o PIX y x402 para un agente con monedero propio. Vuelve a llamarlo después de pagar y premium se activa.
Un prompt para tu agente
Con el servidor MCP INITE Atlas Owners, añade your-tool.com al Atlas como mi herramienta, pon la meta etiqueta de prueba en nuestra página de inicio y verifícala. Luego muéstrame lo que la ficha no pudo leer e indica nuestras páginas de precios, empleo y changelog.
Nada que declare el dueño cambia un dato medido. Las páginas que indiques se leen, no se creen; las correcciones pasan a revisión humana.
A2A
La auditoría también es un agente A2A v1.0: envíele un dominio y reciba una tarea que termina en alrededor de un minuto, con la puntuación como artefacto. La misma regla: abierto sin token, el nivel de la cuenta con uno.
https://inite.ai/api/a2aPara máquinas
Todo lo anterior, en los archivos que un agente lee primero.
.well-known- Tarjeta del servidor MCP/.well-known/mcp.json
- Tarjeta del 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
- Acciones para agentes/.well-known/agent-actions
Para los desarrolladores de su sitio
Una empresa que confirmó sus datos en INITE puede servirlos desde su propio dominio y publicar en su sitio los artículos que aprobó. Elija el conector según la plataforma del sitio. Un sitio con cualquier otra tecnología llama a los mismos endpoints y recibe los eventos de webhook de abajo.
Una empresa activa INITE Agents en su panel, confirma allí sus hechos y recibe la clave del sitio que necesitan los conectores de abajo. Abrir INITE Agents
Qué conector para cada plataforma
- WordPress · descargar el plugin · en GitHub
El plugin INITE Agents. Instale el zip en Plugins, Añadir nuevo plugin, Subir plugin, y pegue la clave del sitio en Ajustes, INITE Agents. Sirve los archivos, las etiquetas del head y la línea de robots.txt, y convierte los artículos aprobados en entradas. Las versiones nuevas aparecen en la pantalla de Plugins.
- Next.js · en GitHub
npm install @inite/site-agentsEl paquete @inite/site-agents: dos archivos de ruta y un componente del head sirven los archivos y las etiquetas; createContentQueue trae los artículos aprobados e informa dónde se publicaron.
- Cualquier sitio con un campo de código en el head: Tilda, Squarespace, Wix, Webflow, Framer, Ghost, Shopify, Bitrix, Joomla · en GitHub
El snippet: una etiqueta script en el head de la página, creada en el panel, con el slug público y sin clave. Carga las herramientas WebMCP, añade los enlaces a los archivos de <slug>.inite.ai y el JSON-LD de los datos confirmados. Eso llega a los agentes en un navegador y a los rastreadores que ejecutan JavaScript; para los muchos rastreadores de IA que solo leen el HTML tal cual, el panel da además un bloque estático con las mismas etiquetas de una versión, que hay que volver a copiar tras cada confirmación. Una vez al día leemos la página de inicio para ver qué hay.
- Ghost · en GitHub
No hay nada que instalar: pegue en el panel la URL de la Admin API y la clave de una integración personalizada, y INITE publica en Ghost los artículos aprobados. El snippet en Settings, Code injection, se encarga del head.
- Cualquier otra tecnología · en GitHub
Los endpoints y el webhook de abajo, con una clave del sitio creada para la plataforma Webhook en el panel.
- Shopify, Wix, Webflow, HubSpot
Estas plataformas tendrán su propia app. Mientras tanto, el snippet conecta cualquiera de estos sitios, y un desarrollador puede usar los endpoints y el webhook.
La documentación de cada plataforma, receptores de webhook en Node.js, PHP y Python que verifican la firma, y las incidencias de todos los conectores están en un repositorio público. El código del plugin y del paquete está al lado, en espejos de solo lectura, con un lanzamiento para cada versión. inite-ai/inite-agents en GitHub
Clave y límites
Cada llamada marcada con "clave del sitio" lleva la clave de la pestaña Para agentes del panel, como Authorization: Bearer isk_…. La clave se muestra una sola vez, al crearla. Una clave corresponde a un sitio y a una plataforma; envíela solo a https://inite.ai.
Los endpoints con clave aceptan 60 solicitudes por minuto desde una misma dirección IP; los sitios alojados en un mismo servidor compartido comparten ese margen. Los datos públicos y el snippet aceptan 30 por minuto desde una dirección. Por encima del límite la respuesta es 429 con Retry-After en segundos; si el servicio está ocupado, 503 con Retry-After. El cuerpo indica cuál: {"ok": false, "busy": "rate"}. El script WebMCP no tiene límite y se guarda en caché un día. Los envíos a records aceptan 30 por minuto.
Endpoints
GET /api/site/v1/manifestclave del sitioQué archivos servir y en qué rutas, las etiquetas del head, la dirección MCP, la versión de los datos y si los artículos están activados. Envíe el ETag que tiene como If-None-Match: 304 significa que nada cambió. Basta con preguntar cada cinco minutos.
GET /api/site/v1/files/{name}clave del sitioUn archivo de la versión confirmada, byte a byte, con su tipo de contenido: llms.txt, llms-full.txt, agent-card.json, mcp.json, api-catalog, robots-signal o jsonld. Cada archivo tiene su propio ETag. Cualquier otro nombre da 404. robots-signal es la línea Content-Signal para tu robots.txt (search=yes, ai-input=yes, ai-train=no): una preferencia declarada para quien la respete; no bloquea a ningún robot.
POST /api/site/v1/pingclave del sitioOpcional, más o menos una vez al día: su plataforma, la versión de su conector, hasta 20 rutas que sirve y cuántas veces las leyeron al día los agentes de IA conocidos en los últimos siete días (hasta 60 filas). Cada cifra es el total del día hasta ese momento, así que un ping repetido escribe el mismo número. No se envían direcciones ni user agents de los visitantes. También puede llevar un campo opcional site con lo que tu plataforma dice del sitio: título, lema, idioma y dirección, y woocommerce.products con el número de productos publicados. INITE sugiere el título y el lema al propietario; no se publica nada a partir de él. Un ping con site y sin paths deja las rutas servidas como estaban. Con los plugins de reservas o de ubicaciones del sitio puede llevar también services, locations y hours con la forma de los datos, y from con los nombres de los plugins; el propietario los ve como sugerencias. Un campo opcional referrals cuenta las visitas que llegaron desde un asistente de IA (chatgpt.com, perplexity.ai, gemini.google.com, copilot.microsoft.com, claude.ai y algunos más): día, ruta, origen y número, hasta 60 filas, con la misma regla del total del día. Solo números: ni dirección, ni cookie, nada sobre la persona.
POST /api/site/v1/recordsclave del sitioEl contenido propio del sitio, un grupo cada vez, enviado solo mientras el propietario lo activó en el conector: content (páginas y entradas publicadas: id, type, title, url, excerpt, modified, language), products (id, name, url, price, regularPrice, salePrice, currency, stock, sku, excerpt, categories, image) o events (id, title, url, excerpt, starts, ends, venue). Hasta 100 elementos por envío, los que cambiaron; removed enumera los id que desaparecieron, present todos los que siguen (el resto se elimina), y clear: true elimina el grupo entero. Las direcciones deben estar en el dominio propio del sitio. INITE guarda hasta 2000 páginas y entradas, 2000 productos y 200 eventos, y la respuesta dice cuántos guarda. Con ellos se preparan en menos de cinco minutos llms.txt, llms-full.txt y los productos del MCP; los productos se publican solo mientras el propietario tiene activado Publicar mi catálogo.
GET /api/site/v1/summaryclave del sitioSolo lectura, para el panel del propio conector: la puntuación de visibilidad en IA y las comprobaciones fallidas del último análisis, treinta días de lecturas de agentes, llamadas MCP y visitas que llegaron desde asistentes de IA, y cuántas sugerencias y artículos esperan al propietario. INITE lo reescribe cada tres horas; basta con preguntar cada pocas horas. Qué agentes, páginas y asistentes forma parte de INITE Agents Premium; sin él, la respuesta trae los totales.
GET /api/site/v1/content/queueclave del sitioLos artículos que el propietario aprobó y que este sitio aún no publicó, del más antiguo al más reciente, diez como máximo por respuesta. Vacía, con enabled: false, mientras el propietario tenga los artículos desactivados.
POST /api/site/v1/content/{id}/publishedclave del sitioInforma que un artículo está publicado, con su dirección. Repetir la misma dirección no causa problemas.
POST /api/site/v1/content/{id}/failedclave del sitioInforma que un artículo no se pudo publicar, con el motivo. El artículo sale de la cola hasta que el propietario lo envíe de nuevo.
GET /api/site/v1/public/{slug}?d={domain}público, sin claveLos datos confirmados en JSON. Abiertos a cualquier origen: es lo que lee el script WebMCP en el navegador. En caché cinco minutos, con ETag.
GET /api/site/v1/webmcp.js?s={slug}&d={domain}&v={version}público, sin claveEl script para el head de la página; su dirección, con la versión correcta, está en el manifiesto en head.script.src. Ofrece a un agente de IA en el navegador herramientas de solo lectura sobre los datos confirmados. En un navegador sin WebMCP no hace nada y no crea ninguna cookie.
GET /api/site/v1/snippet.js?s={slug}&d={domain}público, sin claveEl script detrás de la etiqueta del snippet. Se sirve mientras los datos están publicados y el snippet está activo en el panel; si no, un comentario que no hace nada. Registra las herramientas WebMCP y añade los enlaces y el JSON-LD de la versión actual; una página cuyo bloque estático es de esa versión conserva su propio JSON-LD. En caché cinco minutos, con ETag. Cada carga marca el snippet como visto en el panel, solo la hora; no se guarda nada del visitante.
GET /api/site/v1/public/{slug}/prices.yml?d={domain}público, sin claveLa lista de precios como feed YML, para que Yandex Business la lea por enlace. Solo servicios con un precio único en RUB, KZT o BYN; se escribe al confirmar los datos y responde 404 mientras están despublicados. En caché cinco minutos, con ETag.
POST /api/site/v1/public/{slug}/requests?d={domain}público, sin claveLo que envían request_contact y request_booking del script WebMCP, abierto a cualquier origen: {"tool", "arguments"} con los mismos argumentos que las herramientas MCP. Responde con el id de la solicitud y los criterios que dicen que se hizo bien; 422 indica el campo a corregir, 409 que el propietario tiene las solicitudes desactivadas, 429 un límite o un duplicado. Tres desde una dirección de golpe, luego seis por hora.
GET /api/site/v1/requests?status={status}&page={page}clave del sitioLas solicitudes de agentes del sitio, las más recientes primero, 25 por página, con el recuento por estado. Vacío, con enabled: false, salvo que el propietario envíe las solicitudes a este conector.
POST /api/site/v1/requests/{id}clave del sitioMarca una solicitud como nueva, respondida o spam: {"status": "answered"}. No se envía nada a nadie por ello.
Los endpoints con clave rechazan con un cuerpo JSON {"ok": false, "error", "message"}, y el mensaje se puede mostrar tal cual. 401: no_key, unknown_key o revoked. 403: disabled, la clave está pausada. 409: unproved (el dominio aún no está verificado), unconfirmed (no hay nada confirmado para publicar), unpublished (el propietario retiró los datos en el panel) o company_inactive. En cualquiera de ellos, deje de servir los archivos. Ante un timeout o un 5xx, conserve la última copia que tenga.
Consultar el manifiesto
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
}
}El 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 el contenido del sitio
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
}Artículos
INITE escribe artículos para el sitio de una empresa a partir de lo que la gente realmente busca, y el propietario aprueba cada uno en el panel. Un conector recoge los aprobados e informa dónde se publicó cada uno. Lo que recibe es el texto tal como se aprobó: título, slug, meta descripción, el cuerpo en Markdown y el mismo cuerpo en HTML, y las fuentes que cita.
La cola
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 con su propio ritmo, por ejemplo cada hora, o cuando llegue el evento content.approved. Las direcciones de report de cada elemento están en inite.ai y aceptan la misma clave del sitio.
Informar el 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
}La dirección debe ser http o https en el dominio del propio sitio o en un subdominio. La misma dirección otra vez recibe already: true, así que reintentar tras perder una respuesta es seguro. Otra dirección para un artículo ya publicado se rechaza con 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
}El motivo se guarda hasta 300 caracteres y se muestra al propietario. Un segundo informe de fallo del mismo artículo recibe already: true.
Otras respuestas: 404 not_found (no es un artículo de este sitio), 409 not_approved (no está esperando publicación), 422 invalid_url, 400 bad_json, 413 too_large (cuerpos de hasta 8 KB).
Webhook
Añada una dirección https en la pestaña Para agentes, hasta tres por sitio. Le enviamos un POST firmado para tres eventos: facts.confirmed, cada vez que se confirman los datos, y content.approved, cada vez que el propietario aprueba un artículo. El encabezado INITE-Event y el campo event indican cuál. El secreto de firma se muestra una sola vez, al añadir la dirección. Un tercero, lead.created, se envía por cada solicitud de un agente cuando el propietario envía las solicitudes al 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 lleva el mismo artículo que sirve la cola, así que un receptor puede publicarlo sin preguntar. Informe el resultado a las direcciones de report con una clave del sitio, como hace un conector; hasta entonces el artículo también sigue en la cola.
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 solo se envía si el propietario eligió «A mi webhook» en Solicitudes de agentes. Lleva el nombre, el contacto y el mensaje de la persona para que el negocio responda: trátelos como datos personales. Abajo, la misma solicitud tal como la envía el script WebMCP.
{
"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
}
}La firma
Compruebe INITE-Signature antes de fiarse del cuerpo. t es el momento de la firma, en segundos Unix; v1 es el HMAC-SHA256 de t, un punto y el cuerpo sin procesar, con su secreto como clave. Rechace un t a más de cinco minutos de la hora actual. INITE-Webhook-Id es el mismo en cada reintento de un evento, así que un duplicado se puede descartar.
Comprobar la firma en 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 con cualquier 2xx en menos de diez segundos. Cualquier otra respuesta se reintenta a los 1, 5, 30, 120 y 360 minutos; tras el sexto intento la entrega se marca como fallida. No seguimos redirecciones. El panel muestra los últimos diez intentos de cada dirección.
Cookies
Antes de contar esta visita
La analítica y la medición de anuncios nos dicen qué páginas y cuáles de nuestros anuncios cumplen su función: Google Analytics y Google Ads, el píxel de Meta, Yandex Metrica y un identificador propio. No se guarda nada hasta que respondas, y rechazar no cambia nada del sitio.