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.

API en cours de construction

N'hésitez pas à contacter le support si besoin : gillian@omogen.ai.

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 clés API sont générées et gérées par l'équipe Omogen. Chaque clé est liée à une organisation spécifique.

  • Clé partenaire : Chaque partenaire ATS dispose d'une clé partenaire unique qui permet d'identifier l'origine des requêtes. Cette clé est fournie lors de la configuration de l'intégration.
  • Clé API : Pour obtenir la clé API d'une organisation, contactez l'équipe support à support@omogen.ai.

Flows d'intégration

Omogen propose deux modes d'intégration pour synchroniser les offres d'emploi. Le choix du flow se configure dans les settings d'intégration de l'application Omogen.

Comparatif des deux flows

AspectFlow 1 : PushFlow 2 : Pull
Qui synchronise les jobs ?Le partenaire ATS envoie les jobs à OmogenOmogen récupère les jobs depuis l'ATS
Complexité côté partenaireFaible (appels API sortants uniquement)Moyenne (endpoint à implémenter)
Pré-requisAucun endpoint à développerEndpoint de lecture des jobs requis
Configuration OmogenClés API uniquementClés API + URL endpoint + credentials partenaire

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 les settings d'intégration de l'application Omogen :

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

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.
  • Mode triage : si aucun external_job_id n'est fourni et que le mode triage est activé, Omogen
    utilise le CV pour déterminer automatiquement la job cible.

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

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": "string",
  
"external_job_id": "string",
  
"external_candidate_id": "string",
  
"first_name": "string",
  
"last_name": "string",
  
"email": "string",
  
"phone": "string",
  
"use_case": "prequalification",
  
"deployment_template": "string",
  
"cv_url": "string",
  
"job_title": "string",
  
"job_description": "string"
}

Responses

Application déjà existante (idempotence)

application/json
JSON
{
  
"success": true,
  
"message": "string",
  
"data": {
  
  
"process_id": "string",
  
  
"status": "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. Optionnel si mode triage.

Valid values"prequalification""reactivation"
Default"prequalification"

Responses

Application déjà existante (idempotence)

application/json
JSON
{
  
"success": true,
  
"message": "string",
  
"data": {
  
  
"process_id": "string",
  
  
"status": "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_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
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

Pour configurer l'URL du webhook et les headers d'authentification, contactez l'équipe support Omogen à support@omogen.ai.

Paramètres configurables par organisation :

ParamètreDescription
URL de webhookEndpoint HTTP à appeler (utilisé pour report_generated et process_rejected)
Méthode HTTPPOST (défaut) ou PUT
Headers customHeaders d'authentification fournis par le partenaire (ex : x-api-key, Authorization)
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).

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

Pour toute question sur l'API ou pour obtenir une clé API :