Skip to content

API pour partenaires ATS

Cette API permet aux partenaires ATS (Applicant Tracking Systems) d'intégrer Omogen comme service tiers pour gérer les entretiens de préqualification et de réactivation de leurs candidats. Elle fournit des endpoints pour synchroniser les offres d'emploi, créer des processus d'entretien, et des webhooks pour recevoir les rapports d'évaluation.

Télécharger la spec OpenAPI

Cette page est générée depuis une spec OpenAPI 3.0 disponible au téléchargement : 📄 JSON · 📄 YAML

Omogen automatise les entretiens téléphoniques avec les candidats via son agent conversationnel Alex, évalue leur adéquation avec les critères de sélection et génère des rapports détaillés pour aider les recruteurs dans leur prise de décision.

Configuration en self-serve

L'intégration se crée et se configure directement depuis l'application Omogen, sans passer par le support. Voir Créer l'intégration. En cas de question, vous pouvez tout de même nous contacter : gillian@omogen.ai.

Créer l'intégration

L'intégration « API personnalisée » se crée en quelques clics depuis l'application Omogen :

  1. Ouvrez le menu Intégrations.
  2. Cliquez sur Nouvelle intégration (+).
  3. Choisissez Custom (l'intégration API personnalisée) dans la liste des connecteurs disponibles.
  4. Renseignez les paramètres (voir ci-dessous), puis validez.

Dès la création, Omogen génère automatiquement vos deux clés (clé API et clé partenaire) : elles s'affichent dans la fiche de l'intégration, prêtes à copier. Vous n'avez plus à les demander au support.

Vous pouvez à tout moment rouvrir la fiche pour copier vos clés, modifier la configuration, ou désactiver l'intégration (la désactivation remplace la suppression : la configuration et l'historique sont conservés).

Paramètres de configuration

Les paramètres sont regroupés en trois sections.

Connexion

ParamètreÉditableDescription
Clé API❌ (généré)Clé Bearer générée par Omogen — affichage et copie seulement.
Clé partenaire❌ (généré)Clé envoyée dans le header OM-PARTNER — affichage et copie seulement.
Identifiant d'agence (agency_id)Optionnel. Permet de distinguer plusieurs bridges qui partagent les mêmes clés (laisser vide si non utilisé).
URL de base (base_url)URL de votre endpoint qui recevra les webhooks (rapports, callbacks). Requise si les webhooks sont activés.

Webhooks

ParamètreDescription
Envoyer le webhook de rapport (send_report_created_webhook)Active l'envoi d'un webhook vers votre endpoint à la génération d'un rapport (activé par défaut).
Format du rapport (report_format)V2 (format API Partenaires, recommandé) ou default.
Méthode HTTP (webhook_http_method)PUT (défaut) ou POST.
Headers du webhook (webhook_headers)Paires clé/valeur ajoutées à chaque envoi (typiquement votre header d'authentification, ex. x-api-key).
Envoyer le webhook call_booked (send_call_booked_webhook)Optionnel. Envoie aussi un webhook quand un candidat réserve un créneau.
URL call_booked dédiée (call_booked_webhook_url)Optionnel. URL séparée pour les callbacks call_booked (par défaut, l'URL de base est utilisée).

Avancé

ParamètreDescription
URL de récupération des offres (job_fetch_url)Pull flow uniquement. Template d'URL de votre endpoint, doit contenir le placeholder {job_id} (ex. https://api.partner.com/v1/jobs/{job_id}).
Headers de récupération (job_fetch_headers)Pull flow. Paires clé/valeur ajoutées aux requêtes de récupération des offres (ex. Authorization).
Secret de signature (job_fetch_secret)Pull flow. Secret partagé pour signer les requêtes en HMAC-SHA256 (voir Signature des requêtes).
Config de triage par défaut (default_triage_config_id)Optionnel. UUID d'une configuration de triage pour router les candidats vers les offres via analyse du CV.

Quel flow choisir ?

Les paramètres « Avancé » ne concernent que le Flow 2 (Pull). Pour le Flow 1 (Push) et le Flow 3 (Direct), seules les sections Connexion et Webhooks sont nécessaires. Voir le comparatif des trois flows.

Authentification

L'authentification se fait via deux clés distinctes :

  1. Une clé API Omogen transmise dans le header Authorization avec le format Bearer token
  2. Une clé partenaire transmise dans le header OM-PARTNER pour identifier le partenaire ATS

Headers requis

Authorization: Bearer <API_KEY>
OM-PARTNER: <PARTNER_KEY>

Exemple

bash
curl -X GET https://api.omogen.ai/api/v1/integration-partner/interview-params \
  -H "Authorization: Bearer sk_partner_abc123xyz..." \
  -H "OM-PARTNER: partner_xyz" \
  -H "Content-Type: application/json"

Gestion des clés

Les deux clés sont générées automatiquement lors de la création de l'intégration dans l'application Omogen. Chaque paire de clés est liée à une organisation spécifique. Vous les retrouvez à tout moment dans la fiche de l'intégration (menu Intégrations) — affichage et copie seulement, sans intervention du support.

  • Clé partenaire : transmise dans le header OM-PARTNER, elle identifie l'origine des requêtes.
  • Clé API : transmise dans le header Authorization au format Bearer token.

Flows d'intégration

Omogen propose trois modes d'intégration. Le choix dépend de qui détient le référentiel des offres et de la quantité d'informations que le partenaire peut envoyer en amont.

Comparatif des trois flows

AspectFlow 1 : PushFlow 2 : PullFlow 3 : Direct
Qui détient les jobs ?Le partenaire (ATS)Le partenaire (ATS)Omogen — jobs créées dans l'interface Omogen
Que faut-il envoyer dans la candidature ?external_job_id + (optionnel) job_title / job_descriptionexternal_job_id uniquement (Omogen va chercher les détails)job_opportunity_id (UUID Omogen)
Complexité côté partenaireFaible (appels API sortants uniquement)Moyenne (endpoint à implémenter)Faible — pas de gestion de jobs côté partenaire
Pré-requisAucun endpoint à développerEndpoint de lecture des jobs requisLes jobs sont créées par les recruteurs dans l'interface Omogen
Configuration OmogenClés API uniquementClés API + URL endpoint + credentials partenaireClés API uniquement

Choix mutuellement exclusifs

Un appel à POST /applications (ou /applications/cv-only) ne peut utiliser qu'un seul mode de résolution de la job : soit external_job_id (Flows 1 & 2), soit job_opportunity_id (Flow 3), soit aucun des deux pour le mode triage. Envoyer external_job_id ET job_opportunity_id retourne 400 INVALID_PAYLOAD.

Flow 1 : Push (synchronisation par le partenaire)

Le partenaire ATS synchronise les offres d'emploi avant d'envoyer les candidatures.

Flow 2 : Pull (récupération par Omogen)

Le partenaire envoie directement les candidatures. Omogen récupère automatiquement les informations de l'offre d'emploi via un endpoint exposé par le partenaire.

Configuration du Flow 2 dans Omogen

Pour activer le Flow 2 (Pull), configurez les paramètres suivants dans la section Avancé de la fiche d'intégration (menu Intégrations → votre intégration → Modifier) :

ParamètreDescription
job_fetch_urlURL template de l'endpoint partenaire. Doit contenir le placeholder {job_id}, qu'Omogen remplace par l'external_job_id au moment de l'appel (ex : https://api.partner.com/v1/jobs/{job_id})
job_fetch_headersHeaders statiques injectés sur chaque requête (ex : {"Authorization": "Bearer <partner_api_key>"}). Utilisé pour l'authentification standard côté partenaire.
job_fetch_secretSecret partagé utilisé pour signer chaque requête en HMAC-SHA256 (optionnel mais recommandé). Voir la section « Signature des requêtes » ci-dessous.

Endpoint à implémenter (Flow 2)

Endpoint : GET <job_fetch_url> où le placeholder {job_id} est remplacé par l'external_job_id envoyé dans POST /applications.

Headers envoyés par Omogen :

<headers configurés dans job_fetch_headers>
Content-Type: application/json
OM-OMOGEN-TIMESTAMP: <unix_timestamp>
OM-OMOGEN-REQUEST: <hmac_sha256_signature>

Signature des requêtes (recommandé)

Lorsque job_fetch_secret est configuré, Omogen signe chaque requête afin que le partenaire puisse vérifier l'origine de l'appel. Le partenaire doit recomposer la même signature de son côté et la comparer au header OM-OMOGEN-REQUEST.

timestamp = str(int(unix_time_seconds))
payload   = f"{timestamp}.{external_job_id}"
signature = HMAC_SHA256(secret=job_fetch_secret, message=payload).hexdigest()

Anti-rejeu

Le timestamp est en secondes Unix. Il est recommandé de rejeter les requêtes dont le timestamp s'écarte de plus de 5 minutes de l'heure serveur du partenaire afin de limiter les attaques par rejeu.

Réponse attendue (200 OK)

json
{
  "job_title": "Développeur Full Stack Python/React",
  "job_description": "Nous recherchons un développeur full stack expérimenté...",
  "metadata": {
    "department": "Engineering",
    "location": "Paris",
    "contract_type": "CDI"
  }
}
ChampTypeRequisDescription
job_titlestringTitre du poste
job_descriptionstringDescription complète du poste (min. 100 caractères recommandé)
metadataobjectChamps additionnels libres (stockés comme metadata dans Omogen)

Codes d'erreur attendus côté partenaire

Code partenaireDescriptionCode Omogen renvoyé au partenaire
200SuccèsCréation/mise à jour de la job
404Job non trouvée400 JOB_FETCH_NOT_FOUND
4xx/5xxErreur serveur partenaire502 JOB_FETCH_HTTP_ERROR
timeout/réseauErreur réseau502 JOB_FETCH_NETWORK_ERROR
JSON invalideRéponse non parsable502 JOB_FETCH_INVALID_RESPONSE
200 sans job_titleChamp obligatoire manquant502 JOB_FETCH_MISSING_TITLE

Flow 3 : Direct (jobs créées dans Omogen)

Pour les partenaires qui n'ont pas d'ATS et créent leurs offres directement dans l'interface Omogen, l'API accepte un job_opportunity_id (UUID Omogen) au lieu d'un external_job_id. Aucun mapping côté Omogen n'est créé — la candidature pointe directement sur la job existante.

Le job_opportunity_id est scopé à l'organisation : envoyer un UUID qui pointe sur une job appartenant à une autre organisation retourne 400 JOB_OPPORTUNITY_NOT_FOUND.

Lien d'invitation candidat

Pour les modes de déploiement où le candidat se planifie lui-même (pas d'appel sortant immédiat), Omogen génère un lien d'invitation au format https://agent.omogen.ai/invitation/{process_id}. Le candidat clique sur ce lien pour choisir un créneau d'entretien.

Modes de déploiement avec lien d'invitation

ModeComportement
email-invitationOmogen envoie un email au candidat avec le lien
sms-invitationOmogen envoie un SMS au candidat avec le lien
whatsapp-invitationOmogen envoie un WhatsApp au candidat avec le lien
invitation-link-onlyOmogen n'envoie rien — le partenaire affiche le lien dans sa propre interface

Quand utiliser invitation-link-only

Choisissez ce mode si vous voulez contrôler totalement la communication avec le candidat (par ex. l'afficher dans votre propre portail candidat ou votre dashboard de recruteur). Le processus est créé en statut active et expire automatiquement après 10 jours sans réservation, comme les autres modes invitation.

Récupérer le lien dans la réponse

POST /applications (et /applications/cv-only) renvoient le lien dans le champ data.invitation_link dès lors que le mode de déploiement résolu est un mode invitation :

json
{
  "success": true,
  "message": "Application synchronized and process created successfully",
  "data": {
    "process_id": "9b6e81e0-5736-4106-ba8b-86df6a43b663",
    "status": "in_progress",
    "invitation_link": "https://agent.omogen.ai/invitation/9b6e81e0-5736-4106-ba8b-86df6a43b663",
    "..." : "..."
  }
}

Pour les modes orientés appel (single-call, sms-then-call, 3-days, reactivation, whatsapp-then-call, cv-only), invitation_link vaut null : la page d'invitation existe mais le formulaire de réservation n'est pas activé pour ces processus, donc afficher le lien mènerait le candidat vers une page non fonctionnelle.

Référence des endpoints

La section suivante est générée automatiquement à partir de la spécification OpenAPI openapi-partenaires.yaml.

Get Interview Params

Get Interview Params

GET
/interview-params

Récupère les paramètres de configuration disponibles pour les entretiens.
Permet aux utilisateurs de choisir d'activer Omogen et de sélectionner un mode de déploiement.

⚠️ Les paramètres exacts peuvent être personnalisés pour améliorer l'expérience utilisateur dans l'ATS.

Authorizations

BearerToken

Clé API Omogen envoyée dans le header Authorization: Bearer <API_KEY>. Fournie par le support Omogen.

Type
HTTP (bearer)
+
OmPartner

Clé partenaire unique envoyée dans le header OM-PARTNER: <PARTNER_KEY>. Identifie l'ATS source.

Type
API Key (header: OM-PARTNER)

Parameters

Query Parameters

lang

Code langue des libellés retournés

Type
string
Valid values
"fr""en"
Default
"fr"

Responses

Paramètres récupérés avec succès

application/json
JSON
{
  
"success": true,
  
"data": {
  
  
"use_cases": [
  
  
  
{
  
  
  
  
"value": "string",
  
  
  
  
"label": "string"
  
  
  
}
  
  
],
  
  
"deployment_templates": [
  
  
  
{
  
  
  
  
"value": "string",
  
  
  
  
"label": "string",
  
  
  
  
"description": "string"
  
  
  
}
  
  
],
  
  
"report_limit": {
  
  
  
"default": 0,
  
  
  
"min": 0,
  
  
  
"max": 0,
  
  
  
"label": "string",
  
  
  
"description": "string"
  
  
},
  
  
"match_limit": {
  
  
  
"default": 0,
  
  
  
"min": 0,
  
  
  
"max": 0,
  
  
  
"label": "string",
  
  
  
"description": "string"
  
  
}
  
}
}

Sync a Job Offer

Sync a Job Offer

POST
/jobs

Synchronise une offre d'emploi dans Omogen. Le endpoint retourne immédiatement
(201 Created) avec l'id de la job et un edit_url. L'extraction des critères
de sélection et la génération du plan d'entretien se font de manière asynchrone
en arrière-plan.

ℹ️ Cet endpoint est utilisé uniquement dans le Flow 1 (Push). Dans le Flow 2,
les jobs sont créées automatiquement lors de la réception d'une candidature.

Idempotence : si external_job_id est fourni et qu'une job avec cet identifiant
existe déjà pour l'organisation, l'endpoint retourne 200 OK au lieu de 201 et
ne recrée pas la job.

Authorizations

BearerToken

Clé API Omogen envoyée dans le header Authorization: Bearer <API_KEY>. Fournie par le support Omogen.

Type
HTTP (bearer)
+
OmPartner

Clé partenaire unique envoyée dans le header OM-PARTNER: <PARTNER_KEY>. Identifie l'ATS source.

Type
API Key (header: OM-PARTNER)

Request Body

application/json
JSON
{
  
"job_title": "string",
  
"job_description": "string",
  
"external_job_id": "string"
}

Responses

Job déjà existante (idempotence sur external_job_id)

application/json
JSON
{
  
"success": true,
  
"message": "string",
  
"data": {
  
  
"job_opportunity_id": "string",
  
  
"edit_url": "string"
  
}
}

Sync an Application

Sync an Application (Create Interview Process)

POST
/applications

Crée ou met à jour un candidat et crée un processus d'entretien (process) pour celui-ci.
Le candidat sera contacté selon le mode de déploiement spécifié.

Comportement selon le flow

  • Flow 1 (Push) : l'external_job_id doit correspondre à une job déjà synchronisée via POST /jobs.
  • Flow 2 (Pull) : Omogen récupère automatiquement les infos de l'offre via l'endpoint du partenaire.
  • Flow 3 (Direct) : envoyer job_opportunity_id (UUID Omogen) au lieu d'external_job_id quand la job a été créée dans l'interface Omogen.
  • Mode triage : si aucun des deux IDs n'est fourni et que le mode triage est activé, Omogen utilise le CV pour déterminer automatiquement la job cible.

external_job_id et job_opportunity_id sont mutuellement exclusifs.

Pour un appel à cet endpoint qui n'inclut que le CV (sans données candidat),
utiliser plutôt POST /applications/cv-only.

CV du candidat (optionnel)

Le CV est facultatif sur cet endpoint. S'il est fourni, deux moyens sont
acceptés, exclusifs :

  • cv_url : une URL publique vers le fichier ;
  • cv_file : le contenu du fichier encodé en base64 (auquel cas
    cv_filename est requis).

Si les deux sont envoyés, cv_file (base64) est prioritaire.

Authorizations

BearerToken

Clé API Omogen envoyée dans le header Authorization: Bearer <API_KEY>. Fournie par le support Omogen.

Type
HTTP (bearer)
+
OmPartner

Clé partenaire unique envoyée dans le header OM-PARTNER: <PARTNER_KEY>. Identifie l'ATS source.

Type
API Key (header: OM-PARTNER)

Request Body

application/json
JSON
{
  
"external_application_id": "APP-456",
  
"external_job_id": "JOB-12345",
  
"external_candidate_id": "CAND-789",
  
"first_name": "Marie",
  
"last_name": "Dubois",
  
"email": "marie.dubois@example.com",
  
"phone": "+33612345678",
  
"use_case": "prequalification",
  
"deployment_template": "single-call",
  
"cv_url": "https://example.com/cv/marie-dubois.pdf"
}

Responses

Application déjà existante (idempotence)

application/json
JSON
{
  
"success": true,
  
"message": "string",
  
"data": {
  
  
"process_id": "string",
  
  
"status": "string",
  
  
"invitation_link": "string"
  
}
}

Sync a CV-only Application

Sync an Application from CV only

POST
/applications/cv-only

Crée un processus d'entretien à partir d'un CV seul. Omogen extrait automatiquement
les informations candidat (nom, prénom, email, téléphone) depuis le CV via un service
d'extraction. Si l'extraction échoue pour certains champs, les valeurs de secours
fournies dans la requête sont utilisées.

Format de la requête : multipart/form-data ou application/json.
Le CV peut être fourni soit en base64 via cv_file, soit via une URL publique via
cv_url. L'un des deux est obligatoire.

Extensions supportées : .pdf, .doc, .docx, .txt, .rtf.

Authorizations

BearerToken

Clé API Omogen envoyée dans le header Authorization: Bearer <API_KEY>. Fournie par le support Omogen.

Type
HTTP (bearer)
+
OmPartner

Clé partenaire unique envoyée dans le header OM-PARTNER: <PARTNER_KEY>. Identifie l'ATS source.

Type
API Key (header: OM-PARTNER)

Request Body

object

Contenu du CV encodé en base64. Exclusif avec cv_url — au moins l'un des deux est requis.

Format"byte"

URL publique vers le CV. Exclusif avec cv_file — au moins l'un des deux est requis.

Format"uri"

Nom du fichier avec extension (.pdf, .doc, .docx, .txt, .rtf)

Prénom de secours si l'extraction depuis le CV échoue

Nom de secours si l'extraction depuis le CV échoue

Email de secours si l'extraction depuis le CV échoue

Format"email"

Téléphone de secours si l'extraction depuis le CV échoue

ID de l'offre dans le système partenaire. Mutuellement exclusif avec
job_opportunity_id. Optionnel si mode triage ou si
job_opportunity_id est fourni.

UUID Omogen de la job (Flow 3 Direct). Mutuellement exclusif avec
external_job_id. Voir le schéma SyncApplicationRequest pour le détail.

Format"uuid"
Valid values"prequalification""reactivation"
Default"prequalification"

Mode de déploiement (mêmes valeurs que SyncApplicationRequest.deployment_template,
y compris invitation-link-only).

Responses

Application déjà existante (idempotence)

application/json
JSON
{
  
"success": true,
  
"message": "string",
  
"data": {
  
  
"process_id": "string",
  
  
"status": "string",
  
  
"invitation_link": "string"
  
}
}

Codes d'erreur

Tous les endpoints retournent un payload d'erreur au format ErrorResponse :

json
{
  "success": false,
  "error": "Message lisible",
  "code": "MACHINE_READABLE_CODE"
}

Le endpoint POST /applications/cv-only peut aussi retourner un champ details avec des informations de diagnostic (URL, status HTTP, raison technique).

Codes transversaux

CodeStatut HTTPDescription
AUTHENTICATION_FAILED401Clé API invalide ou absente, partenaire non reconnu
INVALID_PAYLOAD400Payload mal formé (champs manquants, format invalide)
VALIDATION_ERROR400Erreur de validation métier générique
INTERNAL_ERROR500Erreur serveur inattendue

Codes spécifiques à POST /applications

CodeStatut HTTPDescription
JOB_OPPORTUNITY_NOT_FOUND400Direct flow — le job_opportunity_id ne correspond à aucune job de l'organisation tied à votre bridge
JOB_FETCH_NOT_FOUND400Pull flow — l'ATS partenaire a retourné 404 pour l'external_job_id
PULL_FLOW_CONFIG_ERROR400Pull flow — job_fetch_url mal configuré (placeholder {job_id} manquant)
CV_DOWNLOAD_FAILED400Échec du téléchargement du CV depuis cv_url
CV_DECODE_FAILED400cv_file n'est pas un base64 valide
CV_TOO_LARGE400Le CV décodé dépasse la taille maximale (10 Mo)
JOB_FETCH_NETWORK_ERROR502Pull flow — erreur réseau en contactant l'ATS partenaire
JOB_FETCH_HTTP_ERROR502Pull flow — l'ATS partenaire a retourné un statut 4xx/5xx
JOB_FETCH_INVALID_RESPONSE502Pull flow — réponse non parsable (JSON invalide)
JOB_FETCH_MISSING_TITLE502Pull flow — la réponse ne contient pas job_title

Codes spécifiques à POST /applications/cv-only

CodeStatut HTTPDescription
CV_DOWNLOAD_FAILED400Échec du téléchargement du CV (cv_url injoignable ou cv_file base64 invalide)
CV_INVALID_INPUT400Le contenu du CV n'est pas un document valide
CV_EXTRACTION_FAILED400Échec du parsing du CV (format non reconnu, contenu illisible)
CV_PROCESSING_ERROR400Erreur interne pendant l'extraction
CV_EXTRACTION_UNEXPECTED_ERROR400Erreur inattendue pendant l'extraction

Webhooks

Les webhooks sont envoyés par Omogen vers un endpoint HTTP configuré côté partenaire. Le partenaire doit répondre avec un statut 2xx pour acquitter la réception.

Configuration

L'URL du webhook et les headers d'authentification se configurent directement dans la fiche d'intégration (menu Intégrations → votre intégration → Modifier, section Webhooks). Voir Paramètres de configuration.

Paramètres configurables par organisation :

ParamètreDescription
URL de webhook (base_url)Endpoint HTTP à appeler (utilisé pour report_generated et process_rejected)
Méthode HTTP (webhook_http_method)PUT (défaut) ou POST
Headers custom (webhook_headers)Headers d'authentification fournis par le partenaire (ex : x-api-key, Authorization)
Mode d'authentificationHeaders statiques (défaut) ou OAuth 2.0 (client credentials) — voir Authentification des webhooks
URL call_booked (optionnel)Endpoint dédié aux événements call_booked (si séparé de l'URL principale)

Timeout : 30 secondes. Aucun retry automatique — si l'endpoint partenaire échoue, le webhook est perdu (mais l'incident est loggé côté Omogen).

Authentification des webhooks

Par défaut, Omogen authentifie ses webhooks sortants à l'aide des headers statiques que vous fournissez (typiquement un x-api-key). Si votre endpoint est protégé par OAuth 2.0, Omogen peut à la place obtenir un bearer token et l'envoyer sur chaque appel.

Headers statiques (défaut)

Aucune configuration particulière : les headers custom configurés pour votre organisation sont envoyés tels quels sur chaque webhook. C'est le comportement de toutes les intégrations existantes.

OAuth 2.0 (Client Credentials)

Option opt-in, à activer par intégration. Vous fournissez à Omogen les paramètres suivants (via les settings d'intégration ou le support Omogen) :

ParamètreRequisDescription
token_urlURL du token endpoint OAuth 2.0 de votre fournisseur d'identité (ex : https://idp.partner.com/oauth/token)
client_idIdentifiant client OAuth 2.0
client_secretSecret client OAuth 2.0 (stocké chiffré côté Omogen, jamais réaffiché)
scopeScope(s) à demander, séparés par des espaces (si votre IdP en exige)
audienceParamètre audience (requis par certains IdP, ex : Auth0)

Fonctionnement :

  1. Avant d'envoyer un webhook, Omogen demande un token au token_url en Client Credentials :

    POST <token_url>
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=client_credentials&client_id=<client_id>&client_secret=<client_secret>

    (avec scope et/ou audience si configurés). La réponse attendue est un JSON { "access_token": "...", "expires_in": 3600 }.

  2. Omogen ajoute le header Authorization: Bearer <access_token> sur chaque webhook. Vos headers statiques (ex : x-api-key) restent envoyés en plus — les deux coexistent.

  3. Le token est mis en cache jusqu'à un peu avant son expiration (expires_in − 60 s) ; Omogen n'appelle donc pas votre token_url à chaque webhook.

  4. Si votre endpoint répond 401 ou 403, Omogen invalide le token en cache et réessaie une fois avec un token frais.

Restriction d'IP

Si votre token_url ou votre endpoint webhook filtre par IP, contactez le support pour obtenir la liste des IP sortantes d'Omogen à autoriser.

report_generated

Envoyé lorsqu'un processus atteint un état terminal. C'est l'événement principal à implémenter côté partenaire.

Webhook - Report Generated

POST
/webhooks/report-generated

Webhook envoyé par Omogen lorsqu'un processus atteint un état terminal
(completed, failed, expired, canceled, incomplete). C'est l'événement
principal à implémenter côté partenaire.

À implémenter côté partenaire : un endpoint HTTP qui accepte ce payload
et répond avec un statut 2xx. L'URL de destination, la méthode (POST ou PUT)
et les headers d'authentification sont configurés dans Omogen.

Request Body

application/json
JSON
{
  
"event_type": "string",
  
"timestamp": "string",
  
"process": {
  
  
"id": "string",
  
  
"status": "string",
  
  
"failure_reason": {
  
  
  
"code": "string",
  
  
  
"message": "string"
  
  
},
  
  
"use_case": "string",
  
  
"created_at": "string"
  
},
  
"external_application_id": "string",
  
"external_job_id": "string",
  
"external_candidate_id": "string",
  
"job_title": "string",
  
"reports": {
  
  
"interview_report": {
  
  
  
"status": "string",
  
  
  
"report_status": "string",
  
  
  
"overall_score": 0,
  
  
  
"is_complete": true,
  
  
  
"summary": "string",
  
  
  
"evaluations": [
  
  
  
  
{
  
  
  
  
  
"criteria_id": "string",
  
  
  
  
  
"criteria_name": "string",
  
  
  
  
  
"value": "string",
  
  
  
  
  
"is_mentioned": true,
  
  
  
  
  
"is_satisfied": true,
  
  
  
  
  
"is_knockout": true
  
  
  
  
}
  
  
  
],
  
  
  
"data_points": [
  
  
  
  
{
  
  
  
  
  
"criteria_id": "string",
  
  
  
  
  
"criteria_name": "string",
  
  
  
  
  
"value": "string",
  
  
  
  
  
"is_mentioned": true
  
  
  
  
}
  
  
  
]
  
  
},
  
  
"cv_report": {
  
  
  
"status": "string",
  
  
  
"match_result": "string",
  
  
  
"overall_score": 0
  
  
}
  
},
  
"appointment": {
  
  
"scheduled_at": "string",
  
  
"duration_minutes": 0
  
},
  
"tags": [
  
  
"string"
  
],
  
"report_url": "string"
}

Responses

Webhook reçu (le partenaire doit répondre 2xx)

Quand le webhook est-il envoyé ?

Statut du processusinterview_report présent ?Quand ?
completedOui (complet)Après génération du rapport, tous critères évalués
incompleteOui (partiel)Après génération du rapport, certains critères manquants
failedNon (null)Échec technique, raccrochage précoce, tentatives épuisées
expiredNon (null)Processus expiré (délai dépassé)
canceledNon (null)Processus annulé manuellement

INFO

Il est possible (rare) qu'un candidat rappelle après qu'un état terminal a été atteint. Dans ce cas, le processus repasse en in_progress, un nouvel entretien se déroule et un nouveau webhook est envoyé. Il est donc recommandé de toujours traiter les webhooks reçus, même si vous avez déjà reçu un état terminal pour ce process_id.

Tags d'appel

Liste de signaux détectés automatiquement lors de l'analyse de la conversation. La liste est vide ([]) si aucun signal n'a été détecté.

TagDescription
early_hang_upLe candidat a raccroché avant que des informations utiles aient pu être collectées
prefers_recruiterLe candidat a demandé à parler à un recruteur humain
not_interestedLe candidat a explicitement indiqué ne pas être intéressé par le poste
not_availableLe candidat a indiqué ne pas être disponible pour l'appel
to_reviewLa conversation est incohérente et nécessite une vérification manuelle

Codes de failure_reason

CodeDescription
cv_requiredCV requis mais non fourni
cv_screening_failedLe screening CV a échoué (erreur technique)
cv_requirements_not_configuredAucun critère CV configuré pour cette offre
technical_errorErreur technique interne
all_attempts_failedToutes les tentatives d'appel ont échoué (non-réponse)
early_hang_upLe candidat a raccroché trop tôt pour collecter des informations

call_booked

Envoyé lorsqu'un candidat a réservé un créneau d'appel via auto-planification (SMS ou email). Activé uniquement si la fonctionnalité est configurée pour l'organisation.

Webhook - Call Booked

POST
/webhooks/call-booked

Webhook envoyé par Omogen lorsqu'un candidat a réservé un rendez-vous
d'appel (auto-planification via SMS ou email). Activé uniquement si la
fonctionnalité est configurée pour l'organisation.

Request Body

application/json
JSON
{
  
"event": "string",
  
"process_id": "string",
  
"call_start_time": "string",
  
"candidate": {
  
  
"id": "string",
  
  
"external_id": "string",
  
  
"first_name": "string",
  
  
"last_name": "string",
  
  
"email": "string",
  
  
"phone": "string"
  
},
  
"job_opportunity_id": "string"
}

Responses

Webhook reçu (le partenaire doit répondre 2xx)

process_rejected

Envoyé lorsqu'un candidat est rejeté avant la création d'un processus (échec de l'eligibility check, triage rejeté). Aucun appel n'est passé, aucun rapport n'est généré.

Webhook - Process Rejected

POST
/webhooks/process-rejected

Webhook envoyé par Omogen lorsqu'un candidat est rejeté avant même la
création d'un processus (échec de l'eligibility check, job inéligible, etc.).
Utile pour informer l'ATS que la candidature ne sera pas traitée.

Contrairement à report-generated, aucun processus n'est créé — le champ
process_id peut être null.

Request Body

application/json
JSON
{
  
"event": "string",
  
"process_id": "string",
  
"external_application_id": "string",
  
"external_candidate_id": "string",
  
"rejection_reason": "string",
  
"timestamp": "string"
}

Responses

Webhook reçu (le partenaire doit répondre 2xx)

Statuts et fonctionnement

Statuts de processus

  • in_progress : Le processus est en cours d'exécution (appels, SMS, etc.)
  • active : Le processus est actif et attend une action (ex : invitation SMS en attente de réservation)
  • completed : Le processus est terminé avec succès
  • incomplete : Le processus n'a pas pu être complété (par ex. aucun appel n'a abouti)
  • failed : Le processus a échoué (erreur technique, problème de connexion)
  • expired : Le processus a expiré (délai dépassé)
  • canceled : Le processus a été annulé manuellement

Statuts de rapport d'entretien

  • match : Le candidat correspond aux critères de sélection
  • no_match : Le candidat ne correspond pas aux critères de sélection
  • na : L'entretien n'a pas permis de déterminer le statut du candidat

Le rapport d'entretien inclut également :

  • report_status : in_progress, completed, ou failed
  • overall_score : Score global entre 0 et 1 (1 = parfait match)
  • is_complete : Indique si le rapport est complet (tous les critères évalués)

Statuts de rapport CV

  • match : Le CV correspond aux critères (score >= seuil de matching)
  • no_match : Le CV ne correspond pas aux critères (score < seuil de matching)

Comportement important

Si le rapport CV indique no_match, le processus s'arrête automatiquement avec le statut completed et aucun rapport d'entretien n'est généré. Cela permet d'économiser des crédits en évitant d'appeler des candidats qui ne correspondent pas aux critères de base.

Fonctionnement d'Omogen

Notes importantes

Validation des données

  • phone : accepte les formats internationaux (+33…) et nationaux (06…) — normalisé en E.164
  • email : validation stricte du format email
  • cv_filename (CV-only) : extensions acceptées .pdf, .doc, .docx, .txt, .rtf

Modes de déploiement

ModeDescription
single-callUn appel immédiat
sms-then-callEnvoi d'un SMS puis appel 5 minutes plus tard
sms-invitationEnvoi d'un SMS avec lien d'invitation pour auto-planification
email-invitationEnvoi d'un email avec lien d'invitation pour auto-planification
3-daysTentatives réparties sur 3 jours
reactivationAppel → SMS (2 min) → Appel (1 heure) → Appel (le lendemain, 13h)

Support et contact

Vos clés API se génèrent en self-serve à la création de l'intégration. Pour toute autre question sur l'API :