Saltar al contenido principal

Informe de inteligencia de empresa

Proporciona un sitio web y un objetivo, y recibe un informe estructurado sobre la empresa con el que tu propio modelo de IA o tu equipo pueden trabajar de inmediato: qué vende la empresa y a quién, el mercado y el lenguaje de los compradores, los competidores reales, qué preguntan y qué objeciones plantean los compradores en debates públicos, y un plan de acción listo para el objetivo elegido. Cada dato factual enlaza con la evidencia de la que procede.

Un informe sirve a un único objetivo:

focusPensado para
reddit_promotionpromocionar la empresa en Reddit: comunidades relevantes, búsquedas que hacen aparecer hilos pertinentes, preguntas y objeciones de los compradores, afirmaciones seguras
seo_webpromocionar la empresa en buscadores: consultas comerciales por intención, quién ocupa hoy los resultados, carencias de contenido
competitor_intelestudiar la empresa como competidor: posicionamiento, precios, funcionalidades, de qué se quejan sus clientes

Un segundo objetivo para la misma empresa es una segunda petición. Durante 7 días reutiliza la lectura del sitio y el perfil de la empresa del primer informe, así que empieza antes y ambos informes describen la empresa de la misma manera; el trabajo muestra "core_reused": true.

La inteligencia de empresa se activa para una clave bajo petición: escribe a support@omev.be. El informe se cobra del saldo habitual de la clave.

Profundidad y precio​

depthPrecio por informe entregadoQué incluye
standard (por defecto)$0.99el informe de la empresa sin la voz de la audiencia: 3–6 competidores y la búsqueda estándar; las secciones con la voz de los compradores se marcan como no incluidas
extended$1.99todo lo de standard, más la voz de la audiencia (hasta 300 comentarios de compradores leídos, con foros y otras fuentes añadidas en nichos estrechos), 7–8 competidores y una búsqueda más amplia

Pagas una sola vez por informe, cuando descargas por primera vez un resultado terminado, según lo completo que esté:

Grado de completitud del informeCobro
75 % o másel precio completo
40–74 %el 70 % del precio
15–39 %el 30 % del precio
menos del 15 %gratis

Un cobro parcial se redondea a la baja a céntimos enteros. El trabajo muestra completeness_percent y charged_usd. No se cobran los informes que fallan, los sitios que no podemos leer, los trabajos cancelados ni las descargas repetidas del mismo informe. Un informe de dominio incluye el informe extendido junto con la investigación de comunidades y de visibilidad en IA.

Iniciar un informe​

curl -sS https://llmapi.omev.be/v1/cig/jobs/create \
-H "Authorization: Bearer $OMEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://vessi.com",
"focus": "reddit_promotion",
"depth": "standard",
"client_ref": "acme-client-17",
"idempotency_key": "acme-17-vessi-reddit-2026-09"
}'
CampoRequeridoSignificado
urlsíel sitio web de la empresa; una dirección pública http/https
focussíuno de reddit_promotion, seo_web, competitor_intel
depthnostandard (por defecto) o extended
marketnoun país o una región, como "US", o una lista de hasta 10, como ["EU", "DE"]
languagenoun código de idioma como "en", o una lista de hasta 6, como ["en", "de"]
voicenoen nombre de quién hablan las respuestas sugeridas: brand (por defecto) o community_member; OmevAI nunca publica nada
max_age_daysnode 1 a 1830; los hilos de debate más antiguos quedan fuera del plan de acción
client_refnotu propia etiqueta para el cliente final (agencias: desglosar el gasto por cliente)
idempotency_keynode 8 a 200 caracteres; repetirla devuelve el mismo trabajo en lugar de iniciar uno nuevo
callback_urlnouna dirección pública https a la que llamamos cuando el informe termina (consulta Notificación)
callback_secretnode 16 a 200 caracteres; con él, cada notificación va firmada

Antes de iniciar un informe, comprobamos que el saldo de tu clave cubre su precio. Si no lo cubre, la respuesta es 402 INSUFFICIENT_BALANCE y no se inicia nada.

La respuesta es 202 con el trabajo:

{
"job": {"id": "cig_…", "status": "queued", "stage": "", "focus": "reddit_promotion",
"depth": "standard", "client_ref": "acme-client-17", "charged_usd": 0},
"idempotent_replay": false,
"poll_after_seconds": 10
}

Varios sitios a la vez​

Envía hasta 50 informes en una sola llamada. Cada elemento admite los mismos campos que un informe individual.

curl -sS https://llmapi.omev.be/v1/cig/jobs/batch \
-H "Authorization: Bearer $OMEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"items": [
{"url": "https://vessi.com", "focus": "reddit_promotion", "client_ref": "acme-17"},
{"url": "https://vessi.com", "focus": "seo_web", "client_ref": "acme-17"},
{"url": "https://allbirds.com", "focus": "competitor_intel", "client_ref": "acme-17",
"callback_url": "https://hooks.example.com/omev", "callback_secret": "a-long-random-secret"}
]
}'

La respuesta es 202 con una entrada por elemento, en el mismo orden. Un elemento con un error recibe su propio error y no detiene a los demás:

{
"items": [
{"index": 0, "job": {"id": "cig_…", "status": "queued", …}, "idempotent_replay": false},
{"index": 1, "job": {"id": "cig_…", "status": "queued", …}, "idempotent_replay": false},
{"index": 2, "error": {"code": "INVALID_URL", "message": "…"}}
],
"poll_after_seconds": 10
}

El saldo debe cubrir todos los elementos válidos juntos; de lo contrario, la llamada devuelve 402 INSUFFICIENT_BALANCE y no se inicia ningún elemento. Dos objetivos para el mismo sitio en una misma llamada comparten una sola lectura del sitio.

Seguimiento del trabajo​

Un informe standard tarda entre 10 y 25 minutos, uno extended hasta aproximadamente una hora: el servicio lee el sitio, realiza búsquedas, analiza a los competidores y lee los debates de los compradores. Consulta el estado cada 15–30 segundos.

curl -sS https://llmapi.omev.be/v1/cig/jobs/get \
-H "Authorization: Bearer $OMEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{"job_id": "cig_…"}'

status pasa por queued, running y después uno de completed, partial, failed, cancelled. Durante la ejecución, stage indica en qué punto está el trabajo, por ejemplo site_read, business_mix, profile_extract, research_plan, market_frame, competitors, search, communities, audience, claim_verify, synthesis, thread_tone, moderation. Un informe que reutiliza una lectura anterior del sitio muestra site_core_reused en lugar de los tres primeros valores. Toma la lista como orientativa: pueden aparecer pasos nuevos.

partial es un informe entregado en el que alguna parte no se completó; el motivo figura en evidence_base.limitations, y evidence_base.coverage.completeness muestra cada sección con lo encontrado, su objetivo y su mínimo. Con failed, error.code indica la causa, por ejemplo site_unreadable cuando el sitio bloquea las visitas automatizadas.

Para detener un trabajo, envía el mismo cuerpo a /v1/cig/jobs/cancel.

Notificación cuando el informe está listo​

Con callback_url no necesitas consultar el estado. Cuando el trabajo llega a completed, partial, failed o cancelled, enviamos un POST a esa dirección:

{"event": "cig.job.finished", "job": {"id": "cig_…", "status": "completed", …}}
CabeceraSignificado
X-Omev-Event-Idel id del trabajo; úsalo para ignorar entregas repetidas
X-Omev-Signaturesha256= seguido del HMAC-SHA256 en hexadecimal del cuerpo sin procesar, calculado con tu callback_secret (solo se envía si indicaste un secreto)

Responde con cualquier estado 2xx. Si la llamada falla, lo intentamos dos veces más, a los 10 segundos y a los 60 segundos. El resultado se muestra en job.callback_status. La notificación solo incluye el trabajo; descarga el informe con /v1/cig/jobs/result como de costumbre.

Comprueba la firma antes de confiar en el cuerpo:

import hashlib, hmac

def is_from_omev(raw_body: bytes, header: str, secret: str) -> bool:
expected = "sha256=" + hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, header or "")

Descargar el informe​

curl -sS https://llmapi.omev.be/v1/cig/jobs/result \
-H "Authorization: Bearer $OMEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{"job_id": "cig_…"}'

La respuesta contiene job, profile (el informe completo) y stage1 (un resumen breve del mismo informe con diez campos). Antes de que termine el trabajo, la llamada devuelve 409 JOB_NOT_READY.

El informe tiene nueve secciones:

SecciónContenido
metaobjetivo, profundidad, URL de destino, mercado, fecha de generación
companyproducto, posicionamiento, composición del negocio, funcionalidades, oferta, señales de confianza
marketperfil del comprador (ICP), marco del mercado, palabras clave, consultas de los compradores
problemsproblemas que resuelve la marca, frustraciones en la categoría
brand_perceptionquejas, elogios y menciones encontrados en fuentes públicas
competitioncompetidores (direct, adjacent, status_quo) con el motivo por el que cada uno compite
audiencepreguntas, objeciones y expectativas de los compradores, citas literales de compradores
playbookel plan para el objetivo: comunidades, búsquedas, mensajes, próximas acciones, límites para las afirmaciones
evidence_basetodas las fuentes y citas en las que se basa el informe, cifras de cobertura, limitaciones

Los elementos incluyen evidence_ids, que apuntan a evidence_base.evidence, donde cada entrada tiene la url de la fuente y la cita exacta en quote. Las afirmaciones se marcan como stated (lo dice la propia empresa), observed (visto en fuentes independientes) o inferred (nuestra conclusión). Cuando pases el informe a un modelo de IA, indícale que presente como hechos solo los elementos stated y observed, y que nunca use nada de lo que figura en playbook.reply_guardrails.do_not_claim.

Errores​

CódigoCuándo
401clave de API ausente o no válida
402 INSUFFICIENT_BALANCEel saldo de la clave no cubre el informe (o todos los elementos válidos de una llamada con varios sitios)
404 JOB_NOT_FOUNDtrabajo desconocido, o un trabajo que pertenece a otra cuenta
409 JOB_NOT_READYse pidió el resultado antes de que terminara el trabajo
422 INVALID_URLla dirección no es un sitio web público
422 INVALID_FOCUS, 422 INVALID_DEPTH, 422 INVALID_VOICEun valor fuera de las listas anteriores
422 INVALID_MARKET, 422 INVALID_LANGUAGE, 422 INVALID_MAX_AGE, 422 INVALID_IDEMPOTENCY_KEYun campo fuera de rango: más de 10 mercados, más de 6 códigos de idioma, una antigüedad fuera de 1–1830 días, una clave fuera de 8–200 caracteres
422 INVALID_CALLBACK_URL, 422 INVALID_CALLBACK_SECRETla dirección de notificación no es una dirección pública https, o el secreto no tiene de 16 a 200 caracteres
422 INVALID_REQUEST, 422 BATCH_TOO_LARGEuna llamada con varios sitios sin elementos, con un elemento que no es un objeto o con más de 50 elementos
429demasiadas peticiones; vuelve a intentarlo tras una breve pausa

Todos los errores tienen la misma forma: {"error": {"code": "INVALID_FOCUS", "message": "…"}}. Un 401 por una clave incorrecta y un 429 funcionan igual en todas las API de OmevAI; consulta Errores para ver su formato.