Dossier de veille sur une entreprise
Indiquez un site web et un objectif, et obtenez en retour un dossier structuré sur l'entreprise, directement exploitable par votre propre modèle d'IA ou votre équipe : ce que l'entreprise vend et à qui, le marché et le vocabulaire des acheteurs, les vrais concurrents, les questions et objections des acheteurs dans les discussions publiques, et un plan d'action prêt à l'emploi pour l'objectif choisi. Chaque élément factuel renvoie à la preuve dont il est tiré.
Un dossier sert un seul objectif :
focus | Conçu pour |
|---|---|
reddit_promotion | promouvoir l'entreprise sur Reddit : communautés qui comptent, requêtes qui font remonter les fils pertinents, questions et objections des acheteurs, affirmations sûres |
seo_web | promouvoir l'entreprise dans les moteurs de recherche : requêtes commerciales par intention, qui occupe les résultats aujourd'hui, lacunes de contenu |
competitor_intel | étudier l'entreprise en tant que concurrent : positionnement, tarifs, fonctionnalités, ce dont ses clients se plaignent |
Un second objectif pour la même entreprise constitue une seconde requête. Dans un délai de 7 jours,
elle réutilise la lecture du site et le profil de l'entreprise issus du premier dossier, si bien
qu'elle démarre plus vite et que les deux dossiers décrivent l'entreprise de la même façon ; la tâche
affiche "core_reused": true.
La veille entreprise est activée pour une clé sur demande : écrivez à support@omev.be. Le dossier est facturé sur le solde habituel de la clé.
Profondeur et prix
depth | Prix par dossier livré | Ce qu'il contient |
|---|---|---|
standard (par défaut) | $0.99 | le dossier sur l'entreprise sans la voix de l'audience : 3 à 6 concurrents et la recherche standard ; les sections consacrées à la voix des acheteurs sont marquées comme non incluses |
extended | $1.99 | tout le contenu de standard, plus la voix de l'audience (jusqu'à 300 commentaires d'acheteurs lus, avec des forums et d'autres sources ajoutés pour les niches étroites), 7 à 8 concurrents et une recherche plus large |
Vous payez une seule fois par dossier, lors du premier téléchargement d'un résultat terminé, selon son degré de complétude :
| Complétude du dossier | Facturation |
|---|---|
| 75 % ou plus | le prix complet |
| 40–74 % | 70 % du prix |
| 15–39 % | 30 % du prix |
| moins de 15 % | gratuit |
Un montant partiel est arrondi au centime inférieur.
La tâche affiche completeness_percent et charged_usd. Un dossier en échec, un site que nous ne
pouvons pas lire, une tâche annulée et les téléchargements répétés du même dossier ne sont pas
facturés. Un rapport de domaine inclut le dossier étendu ainsi qu'une recherche
sur les communautés et sur la visibilité dans l'IA.
Lancer un dossier
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"
}'
| Champ | Requis | Signification |
|---|---|---|
url | oui | le site web de l'entreprise ; une adresse publique http/https |
focus | oui | l'une des valeurs reddit_promotion, seo_web, competitor_intel |
depth | non | standard (par défaut) ou extended |
market | non | un pays ou une région, par exemple "US", ou une liste de 10 au maximum, par exemple ["EU", "DE"] |
language | non | un code de langue tel que "en", ou une liste de 6 au maximum, par exemple ["en", "de"] |
voice | non | au nom de qui parlent les réponses suggérées : brand (par défaut) ou community_member ; OmevAI ne publie jamais rien |
max_age_days | non | 1 à 1830 ; les fils de discussion plus anciens sont exclus du plan d'action |
client_ref | non | votre propre libellé pour le client final (agences : répartir les dépenses par client) |
idempotency_key | non | 8 à 200 caractères ; la réutiliser renvoie la même tâche au lieu d'en lancer une nouvelle |
callback_url | non | une adresse publique https que nous appelons lorsque le dossier est terminé (voir Notification) |
callback_secret | non | 16 à 200 caractères ; avec lui, chaque notification est signée |
Avant le lancement d'un dossier, nous vérifions que le solde de votre clé couvre son prix. Si ce
n'est pas le cas, la réponse est 402 INSUFFICIENT_BALANCE et rien n'est lancé.
La réponse est 202 avec la tâche :
{
"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
}
Plusieurs sites à la fois
Envoyez jusqu'à 50 dossiers en un seul appel. Chaque élément accepte les mêmes champs qu'un dossier individuel.
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 réponse est 202 avec une entrée par élément, dans le même ordre. Un élément comportant une
erreur reçoit son propre error et n'arrête pas les autres :
{
"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
}
Le solde doit couvrir l'ensemble des éléments valides ; sinon, l'appel renvoie
402 INSUFFICIENT_BALANCE et aucun élément n'est lancé. Deux objectifs pour le même site dans un
même appel partagent une seule lecture du site.
Suivre la tâche
Un dossier standard prend 10 à 25 minutes, un dossier extended jusqu'à une heure environ : le
service lit le site, effectue des recherches, examine les concurrents et lit les discussions des
acheteurs. Interrogez le statut toutes les 15 à 30 secondes.
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 vaut queued, running, puis l'une des valeurs completed, partial, failed, cancelled.
Pendant l'exécution, stage indique où en est le travail, par exemple site_read, business_mix,
profile_extract, research_plan, market_frame, competitors, search,
communities, audience, claim_verify, synthesis, thread_tone, moderation. Un dossier
qui réutilise une lecture antérieure du site affiche site_core_reused à la place des trois
premières valeurs. Considérez cette liste comme indicative : de nouvelles étapes peuvent apparaître.
partial désigne un dossier livré dont une partie n'a pas été menée à terme ; la raison figure dans
evidence_base.limitations, et evidence_base.coverage.completeness présente chaque section avec
ce qui a été trouvé, son objectif et son minimum. En cas de failed, error.code en indique la cause, par exemple
site_unreadable lorsque le site bloque les visites automatisées.
Pour arrêter une tâche, envoyez le même corps à /v1/cig/jobs/cancel.
Notification quand un dossier est prêt
Avec callback_url, inutile d'interroger le statut. Lorsque la tâche atteint completed,
partial, failed ou cancelled, nous envoyons un POST à cette adresse :
{"event": "cig.job.finished", "job": {"id": "cig_…", "status": "completed", …}}
| En-tête | Signification |
|---|---|
X-Omev-Event-Id | l'identifiant de la tâche ; utilisez-le pour ignorer les livraisons répétées |
X-Omev-Signature | sha256= suivi du HMAC-SHA256 en hexadécimal du corps brut, calculé avec votre callback_secret (envoyé uniquement si vous avez fourni un secret) |
Répondez avec n'importe quel statut 2xx. Si l'appel échoue, nous réessayons deux fois, après
10 secondes puis après 60 secondes. Le résultat figure dans job.callback_status. La notification
ne contient que la tâche ; téléchargez le dossier avec /v1/cig/jobs/result comme d'habitude.
Vérifiez la signature avant de faire confiance au corps :
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 "")
Télécharger le dossier
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 réponse contient job, profile (le dossier complet) et stage1 (un court résumé du même
dossier en dix champs). Tant que la tâche n'est pas terminée, l'appel renvoie 409 JOB_NOT_READY.
Le dossier comporte neuf sections :
| Section | Contenu |
|---|---|
meta | objectif, profondeur, URL cible, marché, date de génération |
company | produit, positionnement, répartition des activités, fonctionnalités, offre, signaux de confiance |
market | profil d'acheteur (ICP), cadre du marché, mots-clés, requêtes des acheteurs |
problems | problèmes que la marque résout, frustrations dans la catégorie |
brand_perception | plaintes, éloges et mentions relevés dans des sources publiques |
competition | concurrents (direct, adjacent, status_quo) avec la raison pour laquelle chacun est en concurrence |
audience | questions, objections et attentes des acheteurs, citations textuelles d'acheteurs |
playbook | le plan pour l'objectif : communautés, requêtes de recherche, messages, prochaines actions, garde-fous pour les affirmations |
evidence_base | toutes les sources et citations sur lesquelles repose le dossier, chiffres de couverture, limites |
Les éléments portent des evidence_ids qui pointent vers evidence_base.evidence, où chaque entrée
contient l'url de la source et la citation exacte dans quote. Les affirmations sont marquées
stated (l'entreprise le dit elle-même), observed (constaté dans des sources indépendantes) ou
inferred (notre conclusion). Lorsque vous transmettez le dossier à un modèle d'IA, demandez-lui de
ne présenter comme des faits que les éléments stated et observed, et de ne jamais utiliser ce qui
figure dans playbook.reply_guardrails.do_not_claim.
Erreurs
| Code | Quand |
|---|---|
401 | clé API manquante ou invalide |
402 INSUFFICIENT_BALANCE | le solde de la clé ne couvre pas le dossier (ou l'ensemble des éléments valides d'un appel pour plusieurs sites) |
404 JOB_NOT_FOUND | tâche inconnue, ou tâche appartenant à un autre compte |
409 JOB_NOT_READY | le résultat a été demandé avant la fin de la tâche |
422 INVALID_URL | l'adresse n'est pas un site web public |
422 INVALID_FOCUS, 422 INVALID_DEPTH, 422 INVALID_VOICE | une valeur en dehors des listes ci-dessus |
422 INVALID_MARKET, 422 INVALID_LANGUAGE, 422 INVALID_MAX_AGE, 422 INVALID_IDEMPOTENCY_KEY | un champ hors limites : plus de 10 marchés, plus de 6 codes de langue, un âge en dehors de 1 à 1830 jours, une clé en dehors de 8 à 200 caractères |
422 INVALID_CALLBACK_URL, 422 INVALID_CALLBACK_SECRET | l'adresse de notification n'est pas une adresse publique https, ou le secret ne fait pas 16 à 200 caractères |
422 INVALID_REQUEST, 422 BATCH_TOO_LARGE | un appel pour plusieurs sites sans éléments, avec un élément qui n'est pas un objet, ou avec plus de 50 éléments |
429 | trop de requêtes ; réessayez après une courte pause |
Toutes les erreurs ont la même forme : {"error": {"code": "INVALID_FOCUS", "message": "…"}}.
Un 401 pour une clé erronée et un 429 fonctionnent de la même façon pour toutes les API OmevAI ; consultez
Erreurs pour leur format.