Skip to main content
POST
/
api
/
v1
/
campaigns
/
create
curl --request POST \
  --url https://app.voicehire.io/api/v1/campaigns/create \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: <api-key>' \
  --data @- <<EOF
{
  "job_title": "Développeur Full Stack Node.js/React",
  "contract_type": "CDI",
  "job_description": "Nous recherchons un développeur Full Stack passionné par les technologies web modernes.\n\nResponsabilités:\n- Développer des applications web avec Node.js et React\n- Participer à la conception de l'architecture\n- Collaborer avec l'équipe produit\n\nCompétences requises:\n- 3+ ans d'expérience\n- Maîtrise de Node.js, React\n- Bases de données SQL/NoSQL\n",
  "client_name": "TechCorp SAS",
  "enable_salary_question": true
}
EOF
{
  "campaign_id": "abc123",
  "candidate_link": "https://app.voicehire.io/apply/abc123",
  "status": "active",
  "questions_generated": 6
}

Documentation Index

Fetch the complete documentation index at: https://docs.voicehire.io/llms.txt

Use this file to discover all available pages before exploring further.

Corps de la requête

Champs requis

job_title
string
required
Titre du poste à pourvoir
contract_type
string
required
Type de contrat proposéValeurs possibles (alignées sur le dashboard) :
  • CDI - Contrat à durée indéterminée
  • CDD - Contrat à durée déterminée
  • Stage - Convention de stage
  • Intérim - Mission d’intérim
  • Contrat d'apprentissage
  • Contrat de professionnalisation
  • Freelance - Mission freelance
job_description
string
required
Description détaillée du poste, des responsabilités et du profil recherché

Métadonnées (optionnel)

additional_info
string
Informations complémentaires sur le poste ou l’entreprise
client_name
string
Nom de l’entreprise cliente (sera utilisé lors des appels). Par défaut, le nom de l’agence.
language
string
default:"fr"
Langue de la campagne (agent vocal, emails, SMS, interface candidat)Valeurs possibles : fr, en, es

Questions personnalisées (optionnel)

questions
array
Questions personnalisées d’entretien (maximum 10).Si non fourni, 6 questions sont générées automatiquement par IA depuis la description du poste.
question_weights
array
Poids associés à chaque question (requis si questions est fourni). Doit avoir la même longueur que questions.Valeurs possibles pour chaque poids : 0, 0.5, 1, 1.5, 2
question_binary_evaluations
array
Évaluation binaire (oui/non) par question (optionnel, requis avoir la même longueur que questions si fourni). Chaque élément est un booléen.

Voix de l’agent IA (optionnel)

override_agent_id
string
ID de la voix à utiliser. Récupérer la liste via GET /api/v1/voices.Accepte soit un agent_id (voix par défaut VoiceHire) soit un voice_id (clone d’agence).Le drapeau is_voice_clone est déduit automatiquement côté backend.

Toggles d’entretien (optionnel)

enable_salary_question
string
default:"Non"
Format de la question sur les prétentions salarialesValeurs possibles : Non, Annuelles, Mensuelles, Horaires
enable_job_search_question
boolean
default:"false"
Demander si le candidat est en recherche active
enable_availability_question
boolean
default:"true"
Demander la date de disponibilité du candidat
enable_introduction_question
boolean
default:"true"
Demander au candidat de se présenter
enable_engage
boolean
VoiceHire Engage — message d’accroche en début d’entretien.Si non fourni, hérite du défaut de l’agence.
engage_message
string
Texte personnalisé d’accroche (350 caractères max). Utilisé uniquement si enable_engage = true.
enable_recapInterview
boolean
Récap interview au candidat. Si non fourni, hérite du défaut de l’agence.
enable_recapJob
boolean
Récap offre au candidat. Si non fourni, hérite du défaut de l’agence.
recap_job_message
string
Texte personnalisé du récap offre (350 caractères max). Utilisé uniquement si enable_recapJob = true.
enable_close
boolean
VoiceHire Close — message de clôture personnalisé. Si non fourni, hérite du défaut de l’agence.
close_message
string
Texte personnalisé de clôture (350 caractères max). Utilisé uniquement si enable_close = true.

Sélection automatique (optionnel)

automatic_selection_threshold
number
Score minimum pour la sélection automatique des candidats.Valeurs possibles : 8.0, 8.5, 9.0, 9.5, 10.0. null désactive.

Test linguistique (optionnel)

language_test_mode
string
default:"none"
Mode test linguistique pendant l’entretienValeurs possibles : none, english, spanish, italian, german, chinese, portuguese, arabic
custom_language_question
string
Question additionnelle pour le test linguistique. Nécessite language_test_mode != "none".Le backend la traduit automatiquement vers la langue cible via OpenAI.

Réponse

{
  "campaign_id": "abc123",
  "candidate_link": "https://app.voicehire.io/apply/abc123",
  "status": "active",
  "questions_generated": 6
}
campaign_id
string
required
Identifiant unique de la campagne créée
Lien à partager avec les candidats pour postuler
status
string
required
Statut de la campagne (toujours active à la création)
questions_generated
integer
required
Nombre de questions utilisées pour l’entretien (questions fournies ou générées par IA)

Exemple de requête

curl -X POST https://app.voicehire.io/api/v1/campaigns/create \
  -H "X-API-Key: vh_live_XXXXXXXXXXXXX" \
  -H "Content-Type: application/json" \
  -d '{
    "job_title": "Développeur Full Stack",
    "contract_type": "CDI",
    "job_description": "Nous recherchons un développeur Full Stack expérimenté...",
    "client_name": "TechCorp",
    "language": "fr",
    "questions": [
      "Quelle est votre expérience avec React et Node.js ?",
      "Avez-vous déjà travaillé en méthodologie Agile ?"
    ],
    "question_weights": [2, 1.5],
    "question_binary_evaluations": [false, true],
    "enable_salary_question": "Annuelles",
    "enable_close": true,
    "close_message": "Merci pour votre temps, nous reviendrons vers vous sous 48h.",
    "automatic_selection_threshold": 8.5
  }'

Codes d’erreur

CodecodeDescription
400MISSING_REQUIRED_FIELDSChamps requis manquants
400INVALID_CONTRACT_TYPEType de contrat invalide
400INVALID_LANGUAGELangue non supportée (utiliser fr, en ou es)
400TOO_MANY_QUESTIONSPlus de 10 questions fournies
400MISSING_QUESTION_WEIGHTSquestion_weights manquant alors que questions est fourni
400WEIGHTS_MISMATCHLongueur de question_weights différente de questions
400INVALID_WEIGHT_VALUEPoids hors de la plage [0, 0.5, 1, 1.5, 2]
400BINARY_EVALUATIONS_MISMATCHLongueur de question_binary_evaluations différente de questions
400INVALID_AUTOMATIC_SELECTION_THRESHOLDSeuil hors de la plage [8.0, 8.5, 9.0, 9.5, 10.0]
400MESSAGE_TOO_LONGUn message dépasse 350 caractères
400INVALID_OVERRIDE_AGENT_IDVoix introuvable ou non accessible par l’agence
400CUSTOM_LANGUAGE_QUESTION_REQUIRES_TEST_MODEcustom_language_question fourni sans language_test_mode
401INVALID_API_KEY / MISSING_API_KEYClé API manquante ou invalide
402INSUFFICIENT_CREDITSCrédits insuffisants pour créer une campagne

Authorizations

X-API-Key
string
header
required

Clé API au format vh_live_XXXXX

Body

application/json
job_title
string
required

Titre du poste

Example:

"Développeur Full Stack Node.js/React"

contract_type
enum<string>
required

Type de contrat (aligné sur les valeurs du dashboard)

Available options:
CDI,
CDD,
Stage,
Intérim,
Contrat d'apprentissage,
Contrat de professionnalisation,
Freelance
Example:

"CDI"

job_description
string
required

Description détaillée du poste

Example:

"Nous recherchons un développeur Full Stack passionné...\n"

additional_info
string

Informations complémentaires

Example:

"Stack technique Node.js, React, PostgreSQL"

client_name
string

Nom de l'entreprise cliente (optionnel, utilise le nom de l'agence par défaut)

Example:

"TechCorp SAS"

language
enum<string>
default:fr

Langue de la campagne (agent vocal, emails, SMS, interface candidat)

Available options:
fr,
en,
es
Example:

"fr"

questions
string[]

Questions personnalisées d'entretien. Si fourni, question_weights est requis.

Maximum array length: 10
question_weights
enum<number>[]

Poids de chaque question. Doit avoir la même longueur que questions.

Available options:
0,
0.5,
1,
1.5,
2
question_binary_evaluations
boolean[]

Évaluation binaire (oui/non) par question. Doit avoir la même longueur que questions.

enable_salary_question
enum<string>
default:Non

Format de la question sur les prétentions salariales

Available options:
Non,
Annuelles,
Mensuelles,
Horaires
enable_job_search_question
boolean
default:false

Demander si le candidat est en recherche active

enable_availability_question
boolean
default:true

Demander la date de disponibilité du candidat

enable_introduction_question
boolean
default:true

Demander au candidat de se présenter

enable_engage
boolean

VoiceHire Engage — message d'accroche en début d'entretien (défaut hérité de l'agence)

engage_message
string

Message personnalisé d'accroche (utilisé si enable_engage = true)

Maximum string length: 350
enable_recapInterview
boolean

Récap interview au candidat (défaut hérité de l'agence)

enable_recapJob
boolean

Récap offre au candidat (défaut hérité de l'agence)

recap_job_message
string

Message personnalisé du récap offre (utilisé si enable_recapJob = true)

Maximum string length: 350
enable_close
boolean

VoiceHire Close — message de clôture (défaut hérité de l'agence)

close_message
string

Message personnalisé de clôture (utilisé si enable_close = true)

Maximum string length: 350
automatic_selection_threshold
enum<number> | null

Score minimum pour la sélection automatique des candidats. null désactive.

Available options:
8,
8.5,
9,
9.5,
10
override_agent_id
string

Voix de l'agent IA. Récupérer la liste via GET /api/v1/voices. Accepte soit un agent_id (voix par défaut VoiceHire) soit un voice_id (clone d'agence). Le drapeau is_voice_clone est déduit automatiquement côté backend.

language_test_mode
enum<string>
default:none

Mode test linguistique pendant l'entretien

Available options:
none,
english,
spanish,
italian,
german,
chinese,
portuguese,
arabic
custom_language_question
string

Question additionnelle pour le test linguistique. Nécessite language_test_mode != "none". Le backend la traduit automatiquement vers la langue cible.

Response

Campagne créée avec succès

campaign_id
string

Identifiant de la campagne créée

Example:

"CAMP-20250701-ABC123"

Lien à partager avec les candidats

Example:

"https://app.voicehire.io/apply/CAMP-20250701-ABC123"

status
string

Statut initial de la campagne

Example:

"active"

questions_generated
integer

Nombre de questions générées

Example:

6

questions_source
enum<string>

Source des questions (IA ou défaut)

Available options:
ai,
default
Example:

"ai"