Documentation API (POST)

La diffusion d’une offre d’emploi par connecteur API peut être utilisée pour une connexion à un jobboard ou un site carrière. Nous ne proposons pas d'endpoint pour une requête GET

Introduction

Contexte

Diffusion des offres d’emploi sur un jobboard par « API » ou similaire à un webhook : l’API est à créer sur le jobboard et sera appelée par Beetween.

Les offres d’emploi sont rédigées sur Beetween et diffusées sur le jobboard de destination grâce à un système de « connecteur » sur mesure intégré au système de multidiffusion d’offres d’emploi du logiciel Beetween.
Le connecteur décrit ici est un connecteur API, dans lequel Beetween envoie des requêtes REST HTTP vers le jobboard, suivant un format prédéfini, pour chaque opération de publication/mise hors-ligne d’une offre. Le jobboard doit donc développer une API qui respecte les spécifications de cette documentation.

Par rapport au fonctionnement par flux XML, ce système offre l’avantage d’une publication en quasi temps réel, ainsi qu’une meilleure remontée des informations au recruteur. Elle est également beaucoup moins demandeuse de ressources.

Elle demande en contrepartie un développement spécifique du côté du jobboard.

Pré-requis

La mise en place d’un connecteur diffusion API nécessite que le jobboard développe un point d’entrée API permettant d’alimenter les offres. Avant tout développement des spécificités du contenu des offres pour l’envoi par Beetween par API, la personne chargée des développements côté jobboard doit avoir pris connaissance de ce document.

Le jobboard doit intégrer un formulaire de candidature pour chaque offre d’emploi permettant aux candidats de postuler : une adresse mail spécifique sera associée à chaque offre d’emploi pour l’envoi des candidatures via ce formulaire (ou rediriger vers l’URL présente pour chaque offre dans fichier JSON).

Il est possible, si nécessaire, de pouvoir envoyer les candidatures par API également, solliciter votre contact Beetween privilégié si intérêt.

Le connecteur API

Principe général

Chaque offre d’emploi est identifiée par son ID public Beetween, qui est une suite de lettres ascii minuscules et de chiffres, d’une longueur comprise entre 10 et 20 caractères. Cet ID est généré automatiquement par Beetween lors de la mise en ligne d’une offre et ne peut être modifié. On le notera $ID dans la description des requêtes HTTP.

Les requêtes HTTP envoyées depuis Beetween vers le jobboard permettent la publication et la mise hors-ligne de l’offre. Les données seront formatées en JSON.
Lors de la publication d’une offre vers le site de destination, une requête HTTP POST, contenant les informations de l’offre d’emploi, est envoyée sur le ENDPOINT. L’appel pour la création ou la mise à jour est identique : c’est au site de destination de vérifier la présence de l’offre grâce à l’ID fourni en paramètre.

Lorsqu’une offre est retirée de la publication côté Beetween, une requête HTTP DELETE est envoyée, contenant l’ID de l’offre.

Requêtes HTTP

La racine du point d’entrée est définie par le jobboard, on utilisera par la suite l’écriture $ENDPOINT pour la désigner.

Par exemple :
ENDPOINT = https://point-d-entree-choisit-par-le-jobboard.fr/api/jobs

Un point d’entrée en HTTPS (et non pas HTTP simple) est fortement recommandé.
Ce point d’entrée doit être accessible à Beetween via Internet, sans configuration VPN ou autre.
Pour éviter les appels abusifs, voir le chapitre Authentification

Création ou mise à jour d'une offre d'emploi

Voici les champs présents dans le JSON :

Pour la mise à jour d’une offre, la requête est similaire à la mise en ligne d’une offre : il s’agit d’une requête POST avec un ID d’annonce existant.

Requête d’envoi (Beetween -> ENDPOINT jobboard)

Vous trouverez un exemple de requête API à cet endroit.

Concernant application_email, cette valeur est l’adresse mail de réception des candidatures. Par défaut, il s’agit d’une adresse générée par Beetween et propre à cette offre, permettant l’intégration des candidatures directement dans Beetween. Voir la partie Gestion des candidatures par email pour plus de détails, notamment le format des mails à envoyer pour une récupération optimale des informations du candidat.

Pour connaître le détails des valeurs possibles pour chaque champ, rendez-vous en annexe de cet article.

Requête de retour attendue (Jobboard -> ENDPOINT Beetween)

  • Status 200 en cas de succès
  • Tous les autres statuts seront interprétés comme un statut d’erreur
  • Body :
{
url:"",
userMessage:"",
developerMessage:""
}

Explication des attributs du retour attendu :

  • url (obligatoire) : il permet d’afficher dans Beetween l’URL de l’offre d’emploi sur le jobboard, afin que le recruteur puisse la consulter
  • userMessage : message à l’intention de l’utilisateur (le recruteur), par exemple pour indiquer une cause d’échec (« Titre trop long »)
  • developerMessage : similaire à userMessage mais à l’attention du support Beetween en charge de la surveillance des opérations de publication. Permet de donner une information plus technique que userMessage. Note : le support Beetween a également accès au userMessage.

Mise hors-ligne d'une offre

DELETE $ENDPOINT/$ID

ex: DELETE https://point-d-entree-choisit-par-le-jobboard.fr/api/jobs/a1b2v3d4e5f6

Retour attendu :

  • aucun body
  • en cas de succès : status 204 (200 également accepté)
  • si l’offre n’était pas en ligne ou n’existait pas, l’opération est considérée comme un succès
  • tous les autres statuts seront interprétés comme un échec de la dépublication
                     

Authentification

Un header Authorization: Basic xxxxx sera dans chaque requête, contenant un token fourni par le jobboard et lui servant à restreindre l’accès aux API de publication qu’il met en place. Cette contrainte n’est pas obligatoire mais est fortement recommandée pour éviter des abus potentiels.

Le token sera encodé en base64 UTF-8. La taille du token encodé en base64 ne doit pas dépasser 64 caractères.

Par exemple, si le token est login:password, le header d’authentification sera :

Authorization: Basic bG9naW46cGFzc3dvcmQ=

Il faudra bien utiliser le format login:password en s’assurant de ne pas utiliser le caractère « : » dans le login ou le password.

Nous avons également la possibilité de supporter un token Bearer qu’il faudra nous communiquer lors de la mise en place de l’API

Authorization: Bearer bG9naW46cGdsljksmkdFzc3dvcmQ=

Annexe

Description d'une offre

 

Élément Description Type Spécificité Valeurs
id Champ à 10 caractères alpha-numériques imposé par Beetween servant de référence et généré automatiquement Text Autogenerated
clientId Identifiant du client sur le jobboard cible Text Optionnel
title Titre de l’offre d’emploi Text Required
recruiter Raison sociale de l’entreprise qui recrute Text Required
creationDate Date de la première publication Datetime Autogenerated
LastModificationDate Date de la dernière publication (modification, republication…) Datetime Autogenerated
applicationEmail Adresse email à laquelle envoyer les candidatures Text Autogenerated
applicationUrl Url d’une page de candidature Beetween pour l’annonce avec formulaire de candidature intégré Text Autogenerated
jobDescription Inclut les balises de contenu de l’offre
― company Description de la société HTML Required
― mission Description des missions HTML Required
― profile Description du profil recherché HTML Required
location Inclut les balises de localisation géographique du poste à pourvoir, générées à partir de l’adresse sélectionnée par l’utilisateur
― display Valeur affichable pour la localisation Text Required
― city Ville Text Required
― post_code Code postal Text Required
― region2Code Code du département Text Required
― region2 Nom du département Text Required
― region1 Nom de la région Text Required
― countryCode Code du pays Text Required
― countryNameFr Nom du pays en français Text Required
― longitude Coordonnées GPS : longitude Number Required
― latitude Coordonnées GPS : latitude Number Required
logoUrl URL du logo lié à la raison sociale enregistrée et configuré dans Beetween Text Autogenerated
contract Inclut les balises liées au contrat de travail proposé
― type Type de de contrat proposé, valeurs fixes proposées dans une liste déroulante Required Liste des valeurs
― ― code Code associé au type de contrat Text Required
― ― displayValue Valeur affichable pour le type de contrat Text Required
― duration Durée du contrat pour les contrats à durée déterminée Required pour Stage, CDD et Intérim Liste des valeurs
― ― value Valeur de la durée du contrat pour les contrats à durée déterminée Number Required pour Stage, CDD et Intérim
― ― unit Unité de la durée (Mois, semaines…) Text Required pour Stage, CDD et Intérim
― ― displayValue Concatenation des deux éléments précédents, valeur affichable Text Required pour Stage, CDD et Intérim
― rhythm Nombre d’heures par semaine sélectionné
Contient des attributs hours_per_weekdisplay_value (type Text)
Liste des valeurs
― ― hoursPerWeek Nombre d’heures travaillées par semaine Number Required
― ― fullTime Temps plein ou temps partiel (true ou false) Text Required
― ― displayValue Nombre d’heures par semaine Text Required
― starting_date Date de début de mission Liste des valeurs
― ― asap Date de démarrage le plus tôt possible Boolean Required true ou false
― ― value Date de début de mission Date Required si asap = « false »
job_language Langue d’écriture de l’annonce (liste déroulante) Text Liste des valeurs
salary Salaire proposé – 2 types d’affichages : salaire, et fourchette de salaire
Contient des attributs value, currency, unit ; et pour l’affichage en fourchette min et max
Liste des valeurs
― min Fourchette minimum du salaire Number
― max Fourchette maximum du salaire Number
― value Valeur fixe du salaire Number
― currency Monnaie du salaire (EUR, USD …) Text Valeurs multiples
― unit Valeur temporelle du salaire (mensuel, annuel …) Text Valeurs multiples
― displayValue Concatenation des champs précédents Text Autogenerated
skills Compétences nécessaires pour le poste (texte libre) [ Text1, Text2,…]
jobTitle Domaine d’activité correspondant au poste Liste des valeurs
― code Code associé au domaine d’activité Text
― displayValue Valeur affichable du domaine d’activité Text
mainActivityArea Secteur d’activité primaire Required Liste des valeurs
― code Code associé au secteur d’activité primaire Text Required
― displayValue Valeur affichable du secteur d’activité primaire Text Required
secondaryActivityArea Secteur d’activité secondaire Liste des valeurs
― code Code associé au secteur d’activité secondaire Text
― displayValue Valeur affichable du secteur d’activité secondaire Text
qualification Niveau de qualification Liste des valeurs
― code Code associé au niveau de qualification Text
― displayValue Valeur affichable du niveau de qualification Text
experience Expérience requise : nombre d’années d’expérience requises et nombre d’années en management Required Détails
― experienceYear Nombre d’années d’experience requises Text
― includingManagementYears Nombre d’années d’experience en management requises Number
― displayValue Valeur affichable du niveau d’experience Text
studyLevels Niveau de qualification accepté
un élément est ajoutée pour chaque niveau de qualification renseigné
Tableau d’objet Valeurs multiples Liste des valeurs
― code Code correspondant au diplôme Text
― displayValue Valeur affichable du niveau d’étude Text
school_types Type d’école, un élément est ajouté pour chaque type d’école renseigné Tableau d’objet Valeurs multiples Liste des valeurs
― code Code associé au type d’école demandée Text
― displayValue Valeur affichable du type d’école demandée Text
educationDomain Domaine d’études Text

 

                 

Contract Type

Les valeurs possibles pour les balises <contract>/<type> sont indiquées dans le tableau ci-après. Il est préférable d’exploiter les valeurs “code” pour faire un mapping et ainsi éviter tout problème de mise à jour.

Code displayValue
PERMANENT CDI
TEMPORARY CDD
INTERIM Intérim
INTERNSHIP Stage
APPRENTICESHIP Contrat d’apprentissage
CONTRAT_DE_PROFESIONNALISATION Contrat de professionnalisation
FRANCHISE Franchise
FREELANCE Freelance
COLLABORATION_AGREEMENT Contrat de collaboration
SUMMER_JOB Job d’été
FAMILY Emplois familiaux

 

 Retour au tableau

                 

Contract Duration

Les valeurs possibles pour l’element « unit » de l’objet duration du contrat sont indiquées dans le tableau suivant:

De la même manière, il est préférable d’exploiter les valeurs “unit” pour faire un mapping et ainsi éviter tout problème de mise à jour.

Attribut Unit Valeur (en français)
YEAR an(s)
MONTH mois
WEEK semaine(s)
DAY jour(s)
HOUR heure(s)

 

Retour au tableau 

                 

Contract Rythm

L’objet rhythm (rhythm et non rythm) contient 3 éléments : « hoursPerWeek » qui contient le nombre d’heures travaillées par semaine, fullTime qui contient « true » ou « false » et displayValue qui contient le nombre d’heure travaillées sous la forme  xx.xh/semaine.

Exemple:

"rhythm": {
"hoursPerWeek": "35.0",
"fullTime": "true",
"displayValue": "35.0h/semaine"
},

Retour au tableau

Contract Starting Date

L’objet startingDate indique la date de début de contrat. Quand une date est choisie pour le début du contrat, l’element asap="false" et la valeur dans l’element « value » est égale à la date saisie par l’utilisateur.
Si l’utilisateur choisi « dès que possible », l’attribut asap="true" et la date dans « value » correspond à la date de publication de l’annonce.

Retour au tableau

Language

JobLanguage peut prendre deux valeurs : « Anglais » ou « Français ».

Retour au tableau

                 

Salary

L’objet salary peut se présenter de 2 manières différentes (fourchette ou valeur fixe) en fonction des choix de l’utilisateur :

Valeur fixe :

"salary": {
"value": "100000.0",
"currency": "EUR",
"unit": "YEAR",
"displayValue": "100000 € (Euros) par an"
}

Fourchette :

"salary": {
"min": "100000.0",
"max": "150000.0",
"currency": "EUR",
"unit": "YEAR",
"displayValue": "De 100000 à 150000 € (Euros) par an"
}

Les valeurs possibles pour les elements « unit » et « currency » sont indiquées dans les tableau ci-après :

Unit Valeur (en français)
YEAR par an
MONTH par mois
WEEK par semaine
DAY par jour
HOUR par heure

 

Currency Valeur (en français)
EUR € (Euros)
GBP £ (Livre britannique)
MAD DH (Dirham marocain)
USD $ (Dollar américain)
CAD $ (Dollar canadien)
JPY ¥ (Yen japonais)
CHF CHF (Franc suisse)

 

Retour au tableau

Job title

 

code displayValue
Craft / Worker Artisan / Ouvrier
Craft / Shop Artisan / Commerce de proximité
Worker Ouvrier / BTP
Technician Technicien
Hospitality / Travel Hôtellerie / Restauration / Tourisme / Loisirs
Sales Commerce / Vente
MLM Commission VDI
Computer Informatique / Internet / Télécom
Marketing / Communication Marketing / Communication
House help Services à domicile
Cleaning / Help Ménage / Entretien
Nurse / Babysitting / School help Services à la personne
Management Direction / Encadrement
Entity management Direction générale / Responsable d’un centre de profit
Project management Gestion de projet
Engineering Études / Recherches / Ingénieries
HR / Formation / Teaching RH / Formation / Enseignement
HR Ressources Humaines / Formation
Formation / Teaching Éducation / Enseignement
Health Care Santé / Médecine / Social
Multi services Services généraux
Administration Administration
Assistant Assistanat / Secrétariat / Accueil
Accounting / Finance Comptabilité / Gestion / Finance
Legal / Tax Juridique / Fiscal
Security / Help Sécurité / Défense / Gardiennage
Logistic Transport / Logistique / Achat

Retour au tableau

Activity area

 

code displayValue
Bank Banque
Finance Finance
Assurance Assurance
Accounting Comptabilité
Gestion Gestion
Legal Juridique
Tax Fiscal
Agriculture Agriculture / Pêche
Agri Agroalimentaire
Building BTP & second œuvre
Building / infrastucture BTP Usines / Routes / Canalisation
Installation / Maintenance / Repair Installation / Maintenance / Réparation
Architecture Architecture
Design Design
Town planning Urbanisme
Real estate Immobilier
Craft Commerce / Artisanat
Retail Commerce de détail / Vente
Distribution Grande distribution
Export Commerce international / Export
Customer service Service client / après-vente
Call center Centre d’appel
Hostelry Hôtellerie
Food Restauration
Tourism Tourisme
Hobbies Loisirs
Sport Sport
Equipment manufacturer Automobile / Aéronautique / Transport
Metallurgy Métallurgie
Mechanical / Robotics Mécanique / Automatisme / Robotique
Materials processing Transformation des matériaux
Electrical and electronic equipment Equipements électriques et électroniques
Quality Qualité / Inspection
High technologies Hautes technologies
Raw materials Extraction et transformation de matières premières
Chemicals Chimie – Caoutchouc – Plastique
Pharmaceutical Industrie pharmaceutique / Biotechnologie
Manufacturing / Production Industrie / Production, autres (meubles, textiles, imprimerie)
Health Santé
Social Social
Veterinary Vétérinaire
Web Sites Web / SEO / Webdesign
Software Développement logiciel
Telecom Télécommunications
E-business E-business
IT Services Société de Services en Ingénierie Informatique
ConsultingProject management ConsultingProject management
Cleaning Ménage / entretien en entreprise
Other company services Autres services aux entreprises
Individual services Services à la personne
Public service Service public / Administrations
Fashion Mode
Luxury Luxe
Beauty Beauté
Transport Transport
Logistic Logistique
Handling Manutention
HR RH
Recruitment firm Cabinet de recrutement
Interim firm Cabinet d’intérim
Marketing Marketing
Communication Communication / Médias / Presse
Advertising Publicité
Journalism Journalisme
Edition Édition et Écriture
Engineering Ingénierie
RnD R&D / Haute technologie
Consultancy Bureau d’études
Private research Recherche privée
Public research Recherche publique
Security Sécurité / Défense
Art Art / Spectacle / Culture
Teaching Teaching
Public teaching Enseignement public
Private teaching Enseignement privé
Formation Formation professionnelle
Apprenticeship Formation Formation en alternance
Water Eau
Electricity Électricité
Oil and gas Pétrole / Gaz
Nuclear Nucléaire
Environment Environnement / Nature
Waste Gestion des déchets
Humanitarian Humanitaire

Retour au tableau

Qualification

 

Code displayValue
MANOEUVRE Manoeuvre
OUVRIER_SPECIALISE Ouvrier spécialisé
P1_P2 Ouvrier qualifié (P1,P2)
P3_P4_OHQ Ouvrier qualifié (P3,P4,OHQ)
ENQ Employé non qualifié
EQ Employé qualifié
TECHNICIEN Technicien
AGENT_DE_MAITRISE Agent de maîtrise
CADRE_PRIVE Cadre du secteur privé
CADRE_PUBLIC Cadre du secteur public / Armées

Retour au tableau

Experience

 

L’objet experience contient 3 éléments : 

  • experienceYear : contient le nombre d’années d’expérience nécessaires.
  • includingManagementYears : nombre d’années d’expériences requises en tant que manager.
  • displayValue, valeurs affichable.

Exemple :

"experience": {
"experienceYear": "-2",
"includingManagementYears": "10.0",
"displayValue": "Tous niveaux d'expérience"
},
experienceYear displayValue
<0 Tous niveaux d'expérience
0.0 Débutant
<6 Expérimenté
>=6 Chef de projet

Retour au tableau

Study levels

 

Code displayValue
ALL Aucun
BEP_CAP BEP/CAP
BAC Bac
BAC_1_2 Bac+1/Bac+2
BAC_3 Bac+3
BAC_4 Bac+4
BAC_5 Bac+5
BAC_6_PLUS Bac+6 et plus

Exemple :

"studyLevels": [
{
"code": "BEP_CAP",
"displayValue": "BEP/CAP"
},
{
"code": "BAC",
"displayValue": "Bac"
}
]

Retour au tableau

School Types

 

Code displayValue
ALL Peu importe
UNI Université
RESEARCH_LAB Laboratoire de recherche
BUSINESS_SCHOOL Grande école de commerce
ENGINEER_SCHOOL École d’ingénieur
A A
A_PLUS A+

Exemple :

"schoolTypes": [
{
"code": "UNI",
"displayValue": "Université"
},
{
"code": "ENGINEER_SCHOOL",
"displayValue": "École d'ingénieur"
}
]

Retour au tableau